TensorFlow.js: Đào tạo lại mô hình phát hiện bình luận không liên quan để xử lý các yêu cầu đặc biệt

1. Trước khi bắt đầu

Lớp học lập trình này được thiết kế để xây dựng dựa trên kết quả cuối cùng của lớp học lập trình trước đây trong chuỗi chủ đề này về khả năng phát hiện bình luận không liên quan bằng TensorFlow.js.

Trong lớp học lập trình cuối cùng, bạn đã tạo một trang web đầy đủ chức năng cho một blog video hư cấu. Bạn có thể lọc bình luận không liên quan trước khi gửi bình luận đó đến máy chủ để lưu trữ hoặc xử lý bình luận đã kết nối với khách hàng bằng cách sử dụng mô hình phát hiện bình luận không liên quan do Google tạo trước được hỗ trợ bởi TensorFlow.js trong trình duyệt.

Kết quả cuối cùng của lớp học lập trình đó được hiển thị bên dưới:

ee0f13398ea4e91e.gif

Mặc dù tính năng này hoạt động rất hiệu quả, nhưng vẫn có những trường hợp mà người dùng không thể phát hiện ra. Bạn có thể đào tạo lại mô hình để tính đến các tình huống mà nó không thể xử lý.

Lớp học lập trình này tập trung vào việc sử dụng tính năng xử lý ngôn ngữ tự nhiên (nghệ thuật hiểu ngôn ngữ của con người bằng máy tính) và chỉ cho bạn cách sửa đổi ứng dụng web hiện có mà bạn đã tạo (bạn nên tham gia các lớp học lập trình theo thứ tự), để giải quyết vấn đề thực sự về bình luận không liên quan. Hiện nay, nhiều nhà phát triển web chắc chắn sẽ gặp phải vấn đề khi một số ứng dụng web phổ biến ngày càng có nhiều.

Trong lớp học lập trình này, bạn sẽ tiến thêm một bước nữa bằng cách đào tạo lại mô hình máy học để thích ứng với các thay đổi trong nội dung thư rác có thể phát triển theo thời gian, dựa trên các xu hướng hiện tại hoặc các chủ đề thảo luận phổ biến cho phép bạn duy trì cập nhật mô hình này và tính đến các thay đổi đó.

Điều kiện tiên quyết

  • Đã hoàn thành lớp học lập trình đầu tiên trong chuỗi chương trình này.
  • Kiến thức cơ bản về công nghệ web bao gồm HTML, CSS và JavaScript.

Sản phẩm bạn sẽ tạo ra

Bạn sẽ sử dụng lại trang web được tạo trước đây cho một blog video hư cấu có phần nhận xét theo thời gian thực và nâng cấp phần này để tải phiên bản được huấn luyện tùy chỉnh của mô hình phát hiện nội dung vi phạm bằng TensorFlow.js, vì vậy, trang web này sẽ hoạt động hiệu quả hơn trên những trường hợp biên mà trước đây không hoạt động được. Dĩ nhiên, với tư cách là các nhà phát triển và kỹ sư web, bạn có thể thay đổi trải nghiệm người dùng giả định này để sử dụng lại trên bất kỳ trang web nào mà bạn có thể làm việc hằng ngày và điều chỉnh giải pháp cho phù hợp với mọi trường hợp sử dụng – chẳng hạn như blog, diễn đàn hoặc một số hình thức CMS, chẳng hạn như Drupal.

Hãy cùng nhau bị tấn công...

Kiến thức bạn sẽ học được

Bạn sẽ:

  • Xác định các trường hợp biên mà mô hình được đào tạo trước không thành công
  • Đào tạo lại mô hình phân loại thư rác được tạo bằng Trình tạo mô hình.
  • Xuất mô hình dựa trên Python này sang định dạng TensorFlow.js để sử dụng trong các trình duyệt.
  • Cập nhật mô hình lưu trữ và từ điển của mô hình đó lên mô hình mới và kiểm tra kết quả

Quen thuộc với HTML5, CSS và JavaScript được giả định cho phòng thí nghiệm này. Bạn cũng sẽ chạy một số mã Python thông qua phòng thí nghiệm "co" sổ tay để đào tạo lại mô hình đã được tạo bằng cách sử dụng Trình tạo mô hình, nhưng bạn không cần phải làm quen với Python để làm điều này.

2. Thiết lập bằng mã

Một lần nữa, bạn sẽ sử dụng Glsố.com để lưu trữ và sửa đổi ứng dụng web. Nếu chưa hoàn thành lớp học lập trình tiên tiến, thì bạn có thể sao chép kết quả cuối cùng tại đây làm điểm xuất phát. Nếu bạn có câu hỏi về cách hoạt động của mã, thì bạn nên hoàn thành lớp học lập trình trước đây về cách tạo ứng dụng web đang hoạt động này trước khi tiếp tục.

Trên Glail, chỉ cần nhấp vào nút remix this để âm thanh và tạo một tập hợp các tệp mới mà bạn có thể chỉnh sửa.

3. Khám phá các trường hợp đặc biệt trong giải pháp trước

Nếu mở trang web đã hoàn thành mà bạn vừa sao chép và thử nhập một số nhận xét, bạn sẽ nhận thấy rằng thời gian hoạt động như dự kiến, chặn các bình luận có vẻ giống như bình luận và cho phép phản hồi hợp lệ.

Tuy nhiên, nếu bạn có kỹ năng thủ công và cố gắng diễn đạt một số thứ để phá vỡ mô hình, thì có lẽ bạn sẽ thành công vào một thời điểm nào đó. Khi có một chút thử nghiệm và lỗi, bạn có thể tự tạo các ví dụ như những ví dụ dưới đây. Hãy thử dán các mục này vào ứng dụng web hiện có, kiểm tra bảng điều khiển và xem các xác suất quay lại nếu nhận xét là spam:

Bình luận hợp pháp được đăng mà không có vấn đề (tiêu cực thực sự):

  1. "Tuyệt vời, tôi thích video đó, tác phẩm tuyệt vời." Xác suất spam: 47,91854%
  2. "Cực kỳ thích các bản minh họa này! Có thêm thông tin chi tiết{/8} Xác suất spam: 47,15898%
  3. " Tôi có thể truy cập vào trang web nào để tìm hiểu thêm{/8}quot; Xác suất spam: 15,32495%

Thật tuyệt vời, xác suất để thực hiện tất cả những điều trên là khá thấp và xác suất thành công thông qua SPAM_THRESHOLD mặc định của xác suất tối thiểu 75% trước khi thực hiện hành động (được xác định trong mã script.js từ lớp học lập trình trước đó).

Bây giờ, hãy thử viết thêm một số nhận xét gay gắt bị đánh dấu là vi phạm mặc dù những bình luận này không phải...

Bình luận hợp pháp bị đánh dấu là vi phạm (tiêu cực dương):

  1. "Một người nào đó có thể liên kết trang web cho loại khẩu trang mà người đó đang mặc Xác suất spam: 98,46466%
  2. "Tôi có thể mua bài hát này trên Spotify không? Có người hãy cho tôi biết nhé! Xác suất spam: 94,40953%
  3. "Có thể liên hệ với tôi kèm theo thông tin chi tiết về cách tải TensorFlow.jsquot không? Xác suất vi phạm: 83.20084%

Rất tiếc! Có vẻ như những bình luận hợp lệ này đang bị đánh dấu là vi phạm khi cần được cho phép. Bạn có thể làm gì để khắc phục vấn đề đó?

Một lựa chọn đơn giản là tăng SPAM_THRESHOLD lên độ tin cậy trên 98,5%. Trong trường hợp đó, những bình luận được phân loại sai này sẽ được đăng. Do đó, hãy tiếp tục với các kết quả có thể có khác bên dưới...

Bình luận vi phạm bị đánh dấu là vi phạm (tính năng dương tính thực sự):

  1. "Thật thú vị nhưng hãy xem các đường liên kết tải xuống trên trang web của tôi tốt hơn!&quot! Xác suất spam: 99,77873%
  2. "Tôi biết một số người có thể tiêm cho bạn một số loại thuốc chỉ cần xem pr0file của tôi để biết thông tin chi tiết" Xác suất spam
  3. "Xem hồ sơ của tôi để tải xuống video tuyệt vời hơn nữa thậm chí còn tốt hơn nữa! http://example.com" Xác suất vi phạm: 96,26383%

Được rồi, vì vậy, cách này đang hoạt động như mong đợi với ngưỡng 75% ban đầu của chúng tôi. Tuy nhiên, do trong bước trước đó, bạn đã thay đổi SPAM_THRESHOLD thành chắc chắn hơn 98,5%. Điều này có nghĩa là bạn sẽ cho phép 2 ví dụ ở đây, vì vậy, ngưỡng có thể quá cao. Có lẽ 96% là tốt hơn? Nhưng nếu bạn làm như vậy, thì một trong các bình luận trong phần trước (khẳng định sai) sẽ bị đánh dấu là vi phạm khi các bình luận đó hợp lệ vì được xếp hạng ở mức 98,46466%.

Trong trường hợp này, tốt nhất bạn nên nắm bắt tất cả các nhận xét vi phạm thực tế này và chỉ cần đào tạo lại cho các lỗi bên trên. Bằng cách đặt ngưỡng thành 96%, tất cả các giá trị dương tính thực vẫn được thu thập và bạn loại bỏ 2 giá trị dương tính giả ở trên. Không quá tệ khi chỉ thay đổi một số điện thoại.

Hãy tiếp tục...

Những bình luận vi phạm được phép đăng (tiêu cực phủ định):

  1. "Xem hồ sơ của tôi để tải xuống những video tuyệt vời hơn nữa, thậm chí còn tốt hơn nữa! Xác suất spam: 7,54926%
  2. "Nhận ưu đãi giảm giá khi tham gia các lớp đào tạo thể hình tại pr0file!&quot! Xác suất spam: 17,49849%
  3. "omg GOOG cổ phiếu vừa mới thành công! Nhận trước khi quá muộn!&quot! Xác suất spam: 20,42894%

Đối với những bình luận này, bạn không thể làm gì bằng cách thay đổi thêm giá trị SPAM_THRESHOLD. Việc giảm ngưỡng thư rác từ 96% xuống ~ 9% sẽ dẫn đến những bình luận xác thực bị đánh dấu là vi phạm – một trong số những bình luận đó có tỷ lệ đánh giá 58% mặc dù nội dung đó là hợp pháp. Cách duy nhất để xử lý những bình luận như vậy là đào tạo lại mô hình này với những trường hợp biên như vậy trong dữ liệu đào tạo để nó học cách điều chỉnh quan điểm của thế giới về nội dung vi phạm hay không.

Mặc dù tùy chọn duy nhất hiện tại là đào tạo lại mô hình, nhưng bạn cũng có thể xem cách mình có thể tinh chỉnh ngưỡng thời điểm quyết định gọi nội dung vi phạm để cải thiện hiệu suất. Là người, 75% có vẻ khá tự tin, nhưng đối với mô hình này, bạn cần tăng lên gần 81,5% để hiệu quả hơn với các ví dụ đầu vào.

Không có một giá trị kỳ diệu nào hoạt động tốt trên các mô hình khác nhau và giá trị ngưỡng này cần được đặt trên cơ sở mỗi mô hình sau khi thử nghiệm dữ liệu thực tế cho mô hình nào hiệu quả.

Có thể có một số trường hợp mà việc dương tính giả (hoặc phủ định) có thể dẫn đến hậu quả nghiêm trọng (ví dụ: trong ngành y tế), vì vậy, bạn có thể điều chỉnh ngưỡng của mình ở mức rất cao và yêu cầu xem xét thủ công thêm đối với những người không đáp ứng ngưỡng. Đây là lựa chọn của bạn với tư cách là nhà phát triển và cần thử nghiệm.

4. Đào tạo lại mô hình phát hiện bình luận không liên quan

Trong phần trước, bạn đã xác định một số trường hợp biên không thành công cho mô hình mà trong đó tùy chọn duy nhất là đào tạo lại mô hình để tính đến các tình huống này. Trong hệ thống sản xuất, bạn có thể phát hiện những bình luận này theo thời gian khi người dùng gắn cờ một bình luận là vi phạm theo cách thủ công. Việc này khiến người khác kiểm duyệt hoặc nhận thấy bình luận bị gắn cờ nhận ra một số bình luận không phải là vi phạm và có thể đánh dấu những bình luận đó để đào tạo lại. Giả sử bạn đã thu thập một loạt dữ liệu mới cho những trường hợp biên này (kết quả tốt nhất là bạn nên có một số biến thể của những câu mới này nếu có thể), bây giờ chúng tôi sẽ tiếp tục chỉ cho bạn cách đào tạo lại mô hình với các trường hợp biên đó.

Tóm tắt trước về mô hình

Mô hình được tạo trước mà bạn đã sử dụng là mô hình được một bên thứ ba tạo thông qua Model Maker sử dụng mô hình "xuất hiện trung bình từ nhúng; mô hình để hoạt động.

Vì mô hình được xây dựng bằng Trình tạo mô hình, bạn sẽ cần chuyển nhanh sang Python để đào tạo lại mô hình đó, sau đó xuất mô hình đã tạo sang định dạng TensorFlow.js để bạn có thể sử dụng mô hình đó trong trình duyệt. Cảm ơn Nhà sản xuất mô hình giúp việc sử dụng mô hình của họ trở nên cực kỳ đơn giản, vì vậy việc này khá dễ dàng để làm theo và chúng tôi sẽ hướng dẫn bạn cách thực hiện, vì vậy, đừng lo lắng nếu bạn chưa từng sử dụng Python trước đây!

Lớp học cộng tác

Vì bạn không quá quan tâm đến lớp học lập trình này với việc muốn thiết lập một máy chủ Linux đã cài đặt nhiều tiện ích Python, bạn có thể chỉ cần thực thi mã qua trình duyệt web bằng cách sử dụng "Colab Notebook" Các sổ tay này có thể kết nối với "backend" - đơn giản là một máy chủ được cài đặt sẵn một số nội dung. Từ đó bạn có thể thực thi mã tùy ý trong trình duyệt web và xem kết quả. Việc này rất hữu ích đối với việc tạo nguyên mẫu nhanh hoặc dùng trong các hướng dẫn như thế này.

Chỉ cần truy cập vào colab.research.google.com và bạn sẽ thấy màn hình chào mừng như sau:

b2df89c1f7b38cc9.png

Bây giờ, hãy nhấp vào nút Sổ tay mới ở dưới cùng bên phải của cửa sổ bật lên và bạn sẽ thấy một phòng trống trống như sau:

94a875f67d6e34f6.png

Tuyệt vời! Bước tiếp theo là kết nối colab giao diện người dùng với một số máy chủ phụ trợ để bạn có thể thực thi mã Python mà bạn sẽ viết. Hãy làm việc đó bằng cách nhấp vào Kết nối ở trên cùng bên phải rồi chọn Kết nối với môi trường thời gian chạy được lưu trữ.

f4fcd56ae53527bd.png

Sau khi kết nối, bạn sẽ thấy biểu tượng Đĩa và RAM xuất hiện ở vị trí của màn hình, như trong ví dụ sau:

d979e93ba595d1de.png

Bạn thật xuất sắc! Giờ đây, bạn có thể bắt đầu lập trình bằng Python để đào tạo lại mô hình Maker Maker. Đơn giản chỉ cần làm theo các bước như sau.

Bước 1

Trong ô đầu tiên hiện đang trống, hãy sao chép mã ở bên dưới. Ứng dụng sẽ cài đặt Trình tạo mô hình TensorFlow Lite dành cho bạn bằng trình quản lý gói của Python\39; có tên "pip" (tương tự như npm mà hầu hết người đọc của phòng thí nghiệm mã này đều quen thuộc từ hệ sinh thái JS):

!pip install -q tflite-model-maker

Tuy nhiên, việc dán mã vào ô sẽ không thực thi mã này. Tiếp theo, di chuột qua ô màu xám mà bạn đã dán mã ở trên và biểu tượng nhỏ "play" sẽ xuất hiện ở bên trái của ô như được đánh dấu bên dưới:

be966130d68b5aac.png Nhấp vào nút phát để thực thi mã vừa nhập vào ô.

Bây giờ, bạn sẽ thấy nhà sản xuất mô hình được cài đặt:

376bc0fbde89a60d.png

Sau khi thực thi ô này như đã hiển thị, hãy chuyển sang bước tiếp theo ở bên dưới.

Bước 2

Tiếp theo, hãy thêm một ô mã mới như sau để bạn có thể dán thêm một mã nào đó sau ô đầu tiên và thực thi riêng ô đó:

7ec405d0d82b2143.png

Ô được thực thi tiếp theo sẽ có một số lần nhập mà mã trong phần còn lại của sổ tay sẽ cần phải sử dụng. Sao chép và dán ô bên dưới vào ô mới được tạo:

import numpy as np
import os

from tflite_model_maker import configs
from tflite_model_maker import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import text_classifier
from tflite_model_maker.text_classifier import DataLoader

import tensorflow as tf
assert tf.__version__.startswith('2')
tf.get_logger().setLevel('ERROR')

Nội dung khá chuẩn, ngay cả khi bạn không quen với Python. Bạn vừa nhập một số tiện ích và các chức năng của Trình tạo mô hình mà bạn cần để phân loại thư rác. Thao tác này cũng sẽ kiểm tra xem bạn có đang chạy TensorFlow 2.x (một yêu cầu để sử dụng Trình tạo mô hình) hay không.

Cuối cùng, giống như trước đây, thực thi ô bằng cách nhấn vào biểu tượng "play" khi bạn di chuột qua ô, rồi thêm một ô mã mới cho bước tiếp theo.

Bước 3

Tiếp theo, bạn sẽ tải dữ liệu từ một máy chủ từ xa xuống thiết bị và đặt biến training_data thành đường dẫn của tệp kết quả cục bộ được tải xuống:

data_file = tf.keras.utils.get_file(fname='comment-spam-extras.csv', origin='https://storage.googleapis.com/laurencemoroney-blog.appspot.com/jm_blog_comments_extras.csv', extract=False)

Trình tạo mô hình có thể đào tạo các mô hình từ những tệp CSV đơn giản như tệp đã tải xuống. Bạn chỉ cần chỉ định cột nào chứa văn bản và cột nào giữ nhãn. Bạn sẽ thấy cách thực hiện ở Bước 5. Vui lòng tự tải tệp CSV xuống để xem tệp này có chứa nội dung gì nếu bạn muốn.

Ngoài các câu mới mà bạn muốn học, bạn cần phải dùng dữ liệu đào tạo ban đầu để đào tạo mô hình.

Không bắt buộc: Nếu tải tệp CSV này xuống và kiểm tra một vài dòng cuối cùng, thì bạn sẽ thấy các ví dụ về những trường hợp không hoạt động đúng cách trước đó. Chúng vừa được thêm vào cuối dữ liệu đào tạo hiện có mà mô hình được tạo trước dùng để tự huấn luyện.

Thực thi ô này, sau đó sau khi thực thi xong, hãy thêm ô mới và chuyển sang bước 4.

Bước 4

Khi sử dụng Trình tạo mô hình, bạn sẽ không tạo mô hình từ đầu. Thông thường, bạn sẽ sử dụng các mô hình hiện có mà sau đó, bạn sẽ tùy chỉnh theo nhu cầu của mình.

average_word_vec Đây là mã:

spec = model_spec.get('average_word_vec')
spec.num_words = 2000
spec.seq_len = 20
spec.wordvec_dim = 7

Hãy tiếp tục và chạy mã đó sau khi bạn dán vào ô mới.

Tìm hiểu

num_words

thông số

Đây là số từ mà bạn muốn mô hình sử dụng. Bạn có thể nghĩ rằng càng tốt, nhưng thường có một điểm ngọt dựa trên tần suất mà mỗi từ được sử dụng. Nếu bạn sử dụng mọi từ trong toàn bộ kho nội dung, bạn có thể kết thúc với mô hình đang cố gắng học và cân bằng trọng số của những từ chỉ được sử dụng một lần. Điều này không hữu ích. Bạn sẽ thấy trong bất kỳ kho nội dung văn bản nào có nhiều từ chỉ được sử dụng một lần hoặc hai lần, và thường không đáng để sử dụng chúng trong mô hình của bạn vì chúng có tác động không đáng kể đến tâm lý tổng thể. Để bạn có thể điều chỉnh mô hình của mình theo số lượng từ mà bạn muốn bằng cách sử dụng tham số num_words. Số nhỏ hơn ở đây sẽ có mô hình nhỏ hơn và nhanh hơn, nhưng có thể sẽ ít chính xác hơn vì nhận dạng được ít từ hơn. Một số lớn hơn ở đây sẽ có mô hình lớn hơn và có thể chậm hơn. Việc tìm ra điểm tương tác chính là yếu tố then chốt và phụ thuộc vào kỹ thuật máy học để tìm ra cách phù hợp nhất với trường hợp sử dụng của bạn.

Tìm hiểu

wordvec_dim

thông số

Thông số wordvec_dim là số lượng phương diện bạn muốn sử dụng cho vectơ cho mỗi từ. Các thứ nguyên này về cơ bản là các đặc điểm khác nhau (do thuật toán máy học tạo ra khi huấn luyện) mà một từ cụ thể nào đó có thể được đo lường mà chương trình sẽ sử dụng để thử và liên kết tốt nhất các từ tương tự theo một cách có ý nghĩa nào đó.

Ví dụ: nếu bạn có thứ nguyên về cách "Healthcare" một từ là, một từ như "pills" có thể đạt điểm cao ở đây trong thứ nguyên này và được liên kết với những từ có điểm cao khác như "xray", nhưng "cat" sẽ cho điểm thấp trong thứ nguyên này. Có thể chỉ ra rằng &phương diện y tế" hữu ích trong việc xác định spam khi kết hợp với các phương diện tiềm năng khác mà trình duyệt có thể quyết định sử dụng có ý nghĩa đáng kể.

Trong trường hợp từ có điểm cao trong thứ nguyên &y tế" nó có thể cho rằng thứ nguyên thứ 2 liên quan đến các từ với cơ thể con người có thể hữu ích. Các từ như "leg", "arm", "neck" có thể đạt điểm cao ở đây và cũng khá cao trong phương diện y tế.

Mô hình này có thể sử dụng các phương diện này để cho phép phát hiện những từ có nhiều khả năng liên quan đến spam. Có thể email rác có nhiều khả năng chứa các từ cả về mặt y tế và cơ thể người.

Quy tắc chung được xác định từ nghiên cứu là căn bậc bốn của số từ hoạt động tốt cho thông số này. Vì vậy, nếu tôi sử dụng 2000 từ, thì điểm bắt đầu tốt cho việc này là 7 tham số. Nếu thay đổi số lượng từ được sử dụng, bạn cũng có thể thay đổi điều này.

Tìm hiểu

seq_len

thông số

Mô hình thường rất cứng khi nói đến giá trị nhập. Đối với mô hình ngôn ngữ, điều này có nghĩa là mô hình ngôn ngữ có thể phân loại các câu trong một độ dài, tĩnh cụ thể. Giá trị này được xác định bằng thông số seq_len, trong đó có nghĩa là "độ dài trình tự#39"; Khi bạn chuyển đổi từ thành số (hoặc mã thông báo), một câu sau đó sẽ trở thành một chuỗi các mã thông báo này. Vì vậy, mô hình của bạn sẽ được đào tạo (trong trường hợp này) để phân loại và nhận diện các câu có 20 mã thông báo. Nếu câu dài hơn câu này, câu sẽ bị cắt ngắn. Nếu được rút ngắn thì sự kiện đó sẽ được đệm lại – giống như trong lớp học lập trình đầu tiên trong loạt video này.

Bước 5 – tải dữ liệu đào tạo

Trước đó, bạn đã tải tệp CSV xuống. Giờ là lúc sử dụng trình tải dữ liệu để biến dữ liệu này thành dữ liệu đào tạo mà mô hình có thể nhận dạng.

data = DataLoader.from_csv(
      filename=data_file,
      text_column='commenttext', 
      label_column='spam', 
      model_spec=spec,
      delimiter=',',
      shuffle=True,
      is_training=True)

train_data, test_data = data.split(0.9)

Nếu mở tệp CSV bằng trình chỉnh sửa, bạn sẽ thấy mỗi dòng chỉ có hai giá trị và các dòng này được mô tả bằng văn bản trong dòng đầu tiên của tệp. Thông thường, mỗi mục nhập được coi là một "cột#39"; Bạn sẽ thấy mô tả về cột đầu tiên là commenttext và mục nhập đầu tiên trên mỗi dòng là văn bản của nhận xét.

Tương tự, mô tả cho cột thứ hai là spam và bạn sẽ thấy mục nhập thứ hai trên mỗi dòng là TRUE hoặc FALSE để cho biết liệu văn bản đó có bị coi là bình luận vi phạm hay không. Các thuộc tính khác thiết lập thông số mô hình mà bạn đã tạo ở bước 4, cùng với ký tự phân tách. Trong trường hợp này là dấu phẩy vì tệp được phân tách bằng dấu phẩy. Bạn cũng đặt một thông số trộn bài để sắp xếp lại dữ liệu đào tạo một cách ngẫu nhiên để những nội dung có thể tương tự hoặc được thu thập cùng nhau sẽ được mở rộng ngẫu nhiên trong toàn bộ tập dữ liệu.

Sau đó, bạn sẽ dùng data.split() để phân chia dữ liệu thành dữ liệu đào tạo và thử nghiệm. .9 cho biết rằng 90% tập dữ liệu sẽ được sử dụng cho mục đích đào tạo, phần còn lại để thử nghiệm.

Bước 6 – Xây dựng mô hình

Thêm một ô khác mà chúng tôi sẽ thêm mã để tạo mô hình:

model = text_classifier.create(train_data, model_spec=spec, epochs=50)

Điều này tạo ra một mô hình phân loại văn bản với Model Maker và bạn chỉ định dữ liệu đào tạo mà bạn muốn sử dụng (được xác định trong bước 4), đặc tả mô hình (cũng được thiết lập ở bước 4) và một số kỷ nguyên, trong trường hợp này là 50.

Nguyên tắc cơ bản của công nghệ Máy học là đó là một dạng khớp mẫu. Ban đầu, hệ thống này sẽ tải các trọng số được đào tạo trước cho các từ và cố gắng nhóm các từ đó với một "dự đoán" Lần đầu tiên, nó có thể ở gần 50:50, vì mô hình chỉ mới bắt đầu như được hiển thị bên dưới:

d6c8116f8e7e781b.png

Sau đó, mô hình này sẽ đo lường kết quả của thay đổi đó và thay đổi trọng số của mô hình để điều chỉnh thông tin dự đoán, rồi thử lại. Đây là một giai đoạn. Vì vậy, bằng cách chỉ định epochs=50, nó sẽ đi qua "loop×39"; 50 lần như được minh họa:

fc7bf6a948b7aa26.png

Vì vậy, vào thời điểm bạn đạt đến giai đoạn thứ 50, mô hình sẽ báo cáo mức độ chính xác cao hơn nhiều. Trong trường hợp này, 99,1% hiển thị!

Bước 7 – Xuất mô hình

Sau khi huấn luyện xong, bạn có thể xuất mô hình này. TensorFlow huấn luyện một mô hình ở định dạng của riêng mô hình đó, và mô hình này cần được chuyển đổi sang định dạng TensorFlow.js để sử dụng trên một trang web. Chỉ cần dán nội dung sau vào một ô mới và thực thi ô đó:

model.export(export_dir="/js_export/", export_format=[ExportFormat.TFJS, ExportFormat.LABEL, ExportFormat.VOCAB])
!zip -r /js_export/ModelFiles.zip /js_export/

Sau khi thực thi mã này, nếu nhấp vào biểu tượng thư mục nhỏ ở bên trái Colab, bạn có thể chuyển đến thư mục bạn đã xuất sang phía trên (trong thư mục gốc – bạn có thể cần phải tăng cấp độ) và tìm gói zip của các tệp xuất trong ModelFiles.zip.

Tải tệp zip này xuống máy tính của bạn ngay bây giờ vì bạn sẽ sử dụng các tệp đó giống như trong lớp học lập trình đầu tiên:

a9d8595a3e2564dc.png

Tuyệt vời! Phần Python đã hết, giờ bạn có thể trở về vùng JavaScript mà bạn biết và yêu thích. Chà!

5. Phân phát mô hình máy học mới

Bây giờ, bạn đã sẵn sàng tải mô hình. Trước khi làm điều đó, bạn phải tải các tệp mẫu mới xuống trước đó trong lớp học lập trình để tệp này được lưu trữ và sử dụng được trong mã của bạn.

Trước tiên, nếu bạn chưa thực hiện điều này, hãy giải nén các tệp cho mô hình vừa được tải xuống từ sổ tay Colab Maker mẫu mà bạn vừa chạy. Bạn sẽ thấy các tệp sau có trong nhiều thư mục:

5634d536ef8be9ca.png

Bạn có gì ở đây?

  • model.json – Đây là một trong các tệp tạo nên mô hình TensorFlow.js đã qua đào tạo. Bạn sẽ tham chiếu tệp cụ thể này trong mã JS.
  • group1-shard1of1.bin – Đây là tệp nhị phân chứa nhiều dữ liệu đã lưu cho mô hình TensorFlow.js đã xuất và sẽ cần được lưu trữ ở đâu đó trên máy chủ của bạn để tải xuống trong cùng thư mục như model.json ở trên.
  • vocab – Tệp lạ này không có phần mở rộng là nội dung của Model Maker cho chúng ta biết cách mã hóa các từ trong câu để mô hình hiểu cách sử dụng chúng. Bạn sẽ tìm hiểu kỹ hơn về vấn đề này trong phần tiếp theo.
  • labels.txt – Tên này chỉ chứa tên lớp thu được mà mô hình sẽ dự đoán. Đối với mô hình này, nếu bạn mở tệp này trong trình chỉnh sửa văn bản, tệp sẽ chỉ có "false" và "true" được liệt kê chỉ ra "not spam" hoặc "spam" dưới dạng kết quả dự đoán.

Lưu trữ tệp mô hình TensorFlow.js

Trước tiên, hãy đặt các tệp model.json*.bin được tạo trên máy chủ web để bạn có thể truy cập các tệp đó qua trang web của mình.

Xóa các tệp mẫu hiện có

Khi đang xây dựng kết quả cuối cùng của lớp học lập trình đầu tiên trong chuỗi này, trước tiên bạn phải xóa các tệp mô hình hiện có đã tải lên. Nếu đang sử dụng Glching.com, bạn chỉ cần kiểm tra bảng điều khiển tệp ở bên trái để tìm model.jsongroup1-shard1of1.bin, rồi nhấp vào trình đơn thả xuống có biểu tượng 3 dấu chấm cho mỗi tệp và chọn xoá như minh họa:

7412b0b795d3b84f.png

Tải tệp mới lên Glail

Tuyệt vời! Bây giờ, hãy tải danh sách mới lên:

  1. Mở thư mục tài sản trong bảng điều khiển bên trái của dự án Glgrave và xóa mọi tài sản cũ đã tải lên nếu chúng có cùng tên.
  2. Nhấp vào tải tài sản lên và chọn group1-shard1of1.bin để tải lên thư mục này. Thì giờ URL đó sẽ có dạng như sau khi được tải lên:

25a2251c7f165184.png

  1. Tuyệt vời! Bây giờ, hãy làm tương tự đối với tệp Model.json, vì vậy, 2 tệp phải nằm trong thư mục nội dung của bạn như sau:

51a6dbd5d3097ffc.png

  1. Nếu nhấp vào tệp group1-shard1of1.bin vừa tải lên, bạn sẽ có thể sao chép URL đó đến vị trí tương ứng. Hãy sao chép đường dẫn này ngay bây giờ như sau:

92ded8d46442c404.png

  1. Bây giờ ở dưới cùng bên trái màn hình, hãy nhấp vào Công cụ > Thiết bị đầu cuối. Chờ cửa sổ dòng lệnh tải.
  2. Sau khi tải, hãy nhập nội dung sau rồi nhấn Enter để thay đổi thư mục thành thư mục www:

từ khóa:

cd www
  1. Tiếp theo, hãy sử dụng wget để tải 2 tệp vừa tải lên bằng cách thay thế các URL bên dưới bằng những URL bạn đã tạo cho các tệp trong thư mục tài sản trên Glail (kiểm tra thư mục tài sản cho từng tệp tùy chỉnh của URL).

Lưu ý rằng khoảng cách giữa hai URL và các URL mà bạn cần sử dụng sẽ khác với những URL được hiển thị, nhưng sẽ trông giống nhau:

termal

wget https://cdn.glitch.com/1cb82939-a5dd-42a2-9db9-0c42cab7e407%2Fmodel.json?v=1616111344958 https://cdn.glitch.com/1cb82939-a5dd-42a2-9db9-0c42cab7e407%2Fgroup1-shard1of1.bin?v=1616017964562

Tuyệt vời! Giờ đây, bạn đã tạo bản sao của các tệp được tải lên thư mục www.

Tuy nhiên, ngay bây giờ, chúng sẽ được tải xuống bằng những cái tên lạ. Nếu bạn nhập ls vào thiết bị đầu cuối và nhấn Enter, bạn sẽ thấy thông báo như sau:

9cc90f1d053f517f.png

  1. Việc dùng lệnh mv sẽ đổi tên các tệp. Nhập nội dung sau vào bảng điều khiển và nhấn Enter sau mỗi dòng:

từ khóa:

mv *group1-shard1of1.bin* group1-shard1of1.bin
mv *model.json* model.json
  1. Cuối cùng, hãy làm mới dự án Glrick bằng cách nhập refresh vào thiết bị đầu cuối rồi nhấn Enter:

từ khóa:

refresh

Sau khi làm mới, bạn sẽ thấy model.jsongroup1-shard1of1.bin trong thư mục www của giao diện người dùng:

50dd98c0a8f3e629.png

Tuyệt vời! Bước cuối cùng là cập nhật tệp dictionary.js.

  1. Chuyển tệp vocab mới được tải xuống sang định dạng JS chính xác theo cách thủ công thông qua trình chỉnh sửa văn bản hoặc sử dụng công cụ này và lưu kết quả đầu ra là dictionary.js trong thư mục www của bạn. Nếu đã có một tệp dictionary.js, bạn chỉ cần sao chép và dán nội dung mới vào tệp đó rồi lưu tệp.

Thật tuyệt vời! Bạn đã cập nhật thành công tất cả các tệp đã thay đổi và nếu bây giờ bạn thử và sử dụng trang web, bạn sẽ nhận thấy cách mô hình đào tạo lại có thể tính đến các trường hợp biên được phát hiện và học hỏi như được minh họa:

3ece5dbd0a673987.gif

Như bạn có thể thấy, 6 đầu tiên hiện được phân loại chính xác là không phải spam và lô 2 của 6 đều được xác định là spam. Tuyệt lắm!

Hãy cho phép chúng tôi thử một số biến thể chung để xem nó có tổng quát hóa hay không. Ban đầu, có một câu thất bại như:

"omg GOOG cổ phiếu vừa mới xử lý xong! Hãy chuẩn bị trước muộn nhất!&quot!

Hiện tại, email này được phân loại chính xác là thư rác, nhưng điều gì sẽ xảy ra nếu bạn thay đổi email đó thành:

"Như vậy, cổ phiếu XYZ vừa tăng giá trị! Hãy mua một số đồ chơi ngay trước khi quá muộn!&quot!

Tại đây, bạn sẽ nhận được thông tin dự đoán là 98% có thể là nội dung vi phạm chính xác mặc dù bạn đã thay đổi biểu tượng cổ phiếu và từ ngữ hơi hơi.

Tất nhiên, nếu bạn thực sự cố gắng phá vỡ mô hình mới này, bạn sẽ có thể, và sẽ phải thu thập nhiều dữ liệu đào tạo hơn nữa để có cơ hội tốt nhất nắm bắt được các biến thể độc đáo hơn cho những tình huống phổ biến mà bạn có thể gặp phải trên mạng. Trong các lớp học lập trình trong tương lai, chúng tôi sẽ hướng dẫn bạn cách liên tục cải thiện mô hình của mình bằng dữ liệu trực tiếp khi mô hình này được gắn cờ.

6. Xin chúc mừng!

Xin chúc mừng, bạn đã cố gắng đào tạo lại một mô hình máy học hiện có để tự cập nhật hoạt động cho các trường hợp biên mà bạn đã tìm thấy và triển khai những thay đổi đó cho trình duyệt bằng TensorFlow.js cho một ứng dụng thực tế.

Tóm tắt

Trong lớp học lập trình này, bạn đã:

  1. Phát hiện các trường hợp không hoạt động khi sử dụng mô hình spam nhận xét được tạo trước
  2. Đã đào tạo lại mô hình Trình tạo mô hình để tính đến các trường hợp biên mà bạn khám phá được
  3. Đã xuất mô hình đã đào tạo mới sang định dạng TensorFlow.js
  4. Đã cập nhật ứng dụng web để dùng các tệp mới

Tiếp theo là gì?

Vì vậy, bản cập nhật này hoạt động rất tốt, nhưng cũng như với mọi ứng dụng web khác, các thay đổi sẽ có hiệu lực theo thời gian. Sẽ tốt hơn nhiều nếu ứng dụng liên tục tự cải thiện theo thời gian thay vì phải tự làm việc này mỗi lần. Bạn có thể làm thế nào để tự động đào tạo lại một mô hình sau khi có, ví dụ như 100 nhận xét mới được đánh dấu là phân loại không chính xác không? Hãy đội mũ kỹ thuật trên web thông thường và bạn có thể tìm ra cách tạo quy trình để tự động thực hiện việc này. Nếu không, đừng lo lắng, hãy chú ý đến lớp học lập trình tiếp theo trong chuỗi chương trình sẽ hướng dẫn bạn cách thực hiện.

Chia sẻ những gì bạn làm với chúng tôi

Bạn cũng có thể dễ dàng gia hạn những gì bạn đã tạo hôm nay cho các trường hợp sử dụng tệp sáng tạo khác và chúng tôi khuyến khích bạn nên suy nghĩ thật sáng tạo và tiếp tục tấn công.

Hãy nhớ gắn thẻ chúng tôi trên mạng xã hội bằng cách sử dụng hashtag #MadeWithTFJS để có cơ hội giới thiệu dự án của bạn trên blog TeensorFlow hay thậm chí là các sự kiện trong tương lai. Chúng tôi muốn xem những gì bạn tạo ra.

Các lớp học lập trình khác về TensorFlow.js để tìm hiểu sâu hơn

Các trang web đáng chú ý