Tạo mô hình phân loại văn bản tùy chỉnh và cập nhật ứng dụng của bạn theo mô hình đó

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

Trong lớp học lập trình này, bạn sẽ tìm hiểu cách cập nhật mô hình phân loại văn bản, được tạo từ tập dữ liệu bình luận rác trên blog ban đầu, nhưng được cải tiến bằng các bình luận của riêng bạn, nhờ đó bạn có thể có một mô hình hoạt động với dữ liệu của mình.

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

Lớp học lập trình này nằm trong lộ trình Bắt đầu phân loại văn bản trên thiết bị di động. Các lớp học lập trình trong lộ trình này được sắp xếp theo trình tự. Ứng dụng và mô hình mà bạn sẽ làm việc phải được tạo trước đó, trong khi bạn làm theo lộ trình đầu tiên. Nếu bạn chưa hoàn thành các hoạt động trước đó, vui lòng dừng lại và hoàn thành ngay bây giờ:

  • Tạo một ứng dụng cơ bản theo kiểu nhắn tin
  • Xây dựng mô hình học máy để phát hiện bình luận không liên quan
  • Cập nhật ứng dụng để sử dụng mô hình học máy lọc nội dung rác

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

  • Cách cập nhật mô hình phân loại văn bản mà bạn đã tạo trong lộ trình Bắt đầu phân loại văn bản trên thiết bị di động
  • Cách tuỳ chỉnh mô hình để chặn nội dung rác phổ biến nhất trong ứng dụng của bạn

Bạn cần có

  • Ứng dụng nhắn tin và mô hình lọc tin nhắn rác mà bạn đã quan sát và xây dựng trong các hoạt động trước đó.

2. Nâng cao tính năng phân loại văn bản

Bạn có thể lấy mã cho việc này bằng cách sao chép kho lưu trữ này và tải ứng dụng từ TextClassificationStep2. Bạn có thể tìm thấy tệp này trong đường dẫn TextClassificationOnMobile->Android.

Bạn cũng có thể xem mã hoàn tất dưới dạng TextClassificationStep3.

Nếu bạn mở ứng dụng nhắn tin mà mình đã tạo và thử gửi thông báo này, thì ứng dụng sẽ trả về điểm số spam rất thấp:

f111e21903d6fd1f.png

Lỗi chính tả như thế này là một cách phổ biến để tránh bộ lọc thư rác. Mặc dù thông báo này không có hại, nhưng người gửi thư rác thường thêm một đường liên kết vào mã nhận dạng người dùng (thay vì vào chính thông báo, vì việc có đường liên kết có thể kích hoạt bộ lọc).

Trong phòng thí nghiệm này, bạn sẽ thấy cách cập nhật mô hình bằng dữ liệu mới. Khi bạn hoàn tất, việc chạy với cùng một câu sẽ cho ra kết quả bên dưới, trong đó thông báo này được xác định là thư rác!

c96613a0a4d1fef0.png

3. Chỉnh sửa tệp CSV

Để huấn luyện mô hình ban đầu, một tập dữ liệu đã được tạo dưới dạng tệp CSV (lmblog_comments.csv) chứa gần một nghìn bình luận được gắn nhãn là nội dung rác hoặc không phải nội dung rác. (Mở tệp CSV trong trình chỉnh sửa văn bản bất kỳ nếu bạn muốn kiểm tra tệp đó.)

Cấu trúc của tệp CSV là dòng đầu tiên mô tả các cột – ở đây, các cột được gắn nhãn commenttextspam.

Mọi hàng tiếp theo đều tuân theo định dạng này:

64c0128548e1d082.png

Nhãn ở bên phải là true đối với thư rác và false đối với thư không phải là thư rác. Trong trường hợp này, dòng 3 được coi là nội dung rác.

Để thêm bình luận của riêng bạn, ví dụ: nếu có nhiều người gửi nội dung rác cho trang web của bạn bằng các thông điệp về giao dịch trực tuyến, thì bạn chỉ cần thêm ví dụ về bình luận rác ở cuối trang web. Ví dụ:

online trading can be highly highly effective,true
online trading can be highly effective,true
online trading now,true
online trading here,true
online trading for the win,true

Khi hoàn tất, hãy lưu tệp bằng tên mới (ví dụ: lmblog_comments.csv) và bạn sẽ có thể dùng tệp này để huấn luyện một mô hình mới.

Trong phần còn lại của lớp học lập trình này, bạn sẽ sử dụng ví dụ được cung cấp, chỉnh sửa và lưu trữ trên Google Cloud Storage cùng với các bản cập nhật giao dịch trực tuyến. Bạn có thể thay đổi URL trong mã nếu muốn sử dụng tập dữ liệu của riêng mình!

4. Huấn luyện lại mô hình bằng dữ liệu mới

Để huấn luyện lại mô hình, bạn chỉ cần dùng lại mã từ trước (SpamCommentsModelMaker.ipynb), nhưng hãy trỏ mã đó đến tập dữ liệu CSV mới có tên là lmblog_comments_extras.csv. Nếu muốn xem toàn bộ sổ tay có nội dung mới cập nhật, bạn có thể tìm thấy sổ tay đó dưới dạng SpamCommentsUpdateModelMaker.ipynb.

Nếu có quyền truy cập vào Google Colab, bạn có thể khởi chạy Colab ngay tại đây. Nếu không, hãy lấy mã từ kho lưu trữ và chạy mã đó trong môi trường sổ tay mà bạn chọn.

Sau đây là mã đã cập nhật:

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

Khi huấn luyện, bạn sẽ thấy rằng mô hình vẫn huấn luyện đến độ chính xác cao:

8886033d1f8161c.png

Xem qua sổ tay để tải các tệp model, vocablabels xuống. Trong bước tiếp theo, bạn sẽ tích hợp các thành phần này vào Android.

5. Cập nhật ứng dụng Android

  1. Mở ứng dụng trong Android Studio và đảm bảo bạn đã chọn Android ở đầu trình khám phá dự án.
  2. Tìm tệp assets chứa nhãn, mô hình và từ vựng trong phiên bản cũ của tệp mô hình.

91116524e9016ed4.png

  1. Nhấp chuột phải vào thư mục tài sản.
  2. Trong trình đơn, hãy chọn mục mở thư mục bằng trình quản lý tệp của hệ điều hành. (Reveal in Finder (Hiển thị trong Finder) trên máy Mac, như minh hoạ. Tuỳ chọn này sẽ là Show in Explorer (Hiện trong Explorer) trên Windows và Open in Files (Mở trong Files) hoặc tương tự trên Linux.

25f63f9629657e85.png

  1. Thao tác này sẽ mở thư mục chứa mô hình, từ vựng và nhãn trong trình quản lý tệp của hệ điều hành. Sao chép những mục tiêu mới mà bạn đã tạo ở bước trước vào những mục tiêu này.

Bạn không cần thực hiện bất kỳ thay đổi nào đối với mã trong ứng dụng. Kích hoạt và kiểm thử ứng dụng, bạn sẽ thấy kết quả như trên, trong đó mô hình đã được cải thiện để phát hiện tình huống văn bản "giao dịch trực tuyến".

Bạn có thể xem phiên bản hoàn chỉnh của mã này trong kho lưu trữ dưới dạng TextClassificationStep3.

6. Cập nhật ứng dụng iOS

Bạn có thể lấy mã cho việc này bằng cách sao chép kho lưu trữ này và tải ứng dụng từ TextClassificationStep2. Bạn có thể tìm thấy tệp này trong đường dẫn TextClassificationOnMobile->Android.

Bạn cũng có thể xem mã hoàn tất dưới dạng TextClassificationStep3.

Nếu đã hoàn thành lớp học lập trình trước đó, bạn sẽ có một phiên bản iOS của TextClassificationStep2 hoạt động với mô hình cơ sở. Nếu bạn muốn bắt đầu từ phiên bản hiện có của chúng tôi, chỉ cần lấy phiên bản đó từ kho lưu trữ. Nó sẽ hoạt động với mô hình đầu tiên được huấn luyện dựa trên dữ liệu bình luận không liên quan và bạn có thể thấy kết quả như sau:

553b845565b5b822.png

Việc cập nhật ứng dụng để sử dụng mô hình mới rất đơn giản. Cách dễ nhất là chỉ cần chuyển đến trình khám phá tệp, lấy các phiên bản mới của model.tflite, vocablabels.txt rồi sao chép chúng vào thư mục dự án của bạn.

Sau khi bạn thực hiện việc này, ứng dụng của bạn sẽ hoạt động với mô hình mới và bạn có thể dùng thử. Sau đây là ví dụ về câu tương tự, nhưng sử dụng mô hình mới:

9031ec260b1857a3.png

7. Xin chúc mừng

Vậy là xong! Bằng cách huấn luyện lại mô hình bằng dữ liệu mới và thêm mô hình đó vào cả ứng dụng Android và iOS, bạn có thể cập nhật chức năng của các ứng dụng này mà không cần viết mã mới!

Các bước tiếp theo

Đây chỉ là một mô hình đồ chơi, được huấn luyện chỉ trên 1000 mục dữ liệu.

Khi khám phá tính năng xử lý ngôn ngữ tự nhiên, bạn có thể muốn làm việc với các tập dữ liệu lớn hơn. Bạn cũng có thể thiết lập một quy trình đào tạo liên tục, để khi dữ liệu mới xuất hiện và được gắn cờ là nội dung rác, quy trình này có thể tự động đào tạo lại một mô hình trên một phần phụ trợ, rồi triển khai mô hình đó bằng cách sử dụng Dịch vụ lưu trữ mô hình của Firebase.

Người dùng của bạn sẽ nhận được một mô hình mới mà bạn không cần sao chép và dán mô hình đó dưới dạng một tài sản, biên dịch lại và phân phối lại. Ví dụ: bạn cũng có thể sử dụng Cấu hình từ xa Firebase để quản lý giá trị ngưỡng gửi thư rác thay vì giá trị 0,8 mà bạn đang dùng.

Có rất nhiều khả năng và chúng ta sẽ khám phá những khả năng này trong các lớp học lập trình sau của khoá học này!