Đào tạo mô hình phát hiện bình luận làm phiền bằng Trình tạo mô hình TensorFlow Lite

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

Trong lớp học lập trình này, bạn xem xét mã được tạo bằng TensorFlow và TensorFlow Lite Maker để tạo mô hình bằng một tập dữ liệu dựa trên bình luận không liên quan. Dữ liệu gốc có trên Kaggle. Tệp này được thu thập vào một tệp CSV duy nhất và được dọn dẹp bằng cách xóa văn bản bị hỏng, đánh dấu, từ lặp lại và các nội dung khác. Điều này sẽ giúp bạn dễ dàng tập trung vào mô hình hơn so với văn bản.

Mã mà bạn xem xét được cung cấp tại đây, nhưng bạn nên tuân thủ mã đó trong Colaboratory.

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

  • Lớp học lập trình này dành cho những nhà phát triển có kinh nghiệm và chưa quen với công nghệ máy học.
  • Lớp học lập trình này là một phần của Bắt đầu phân loại văn bản trong lộ trình ứng dụng Flutter. 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à thực hiện ngay bây giờ.

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

  • Cách cài đặt Trình tạo mô hình TensorFlow Lite bằng Colab.
  • Cách tải dữ liệu từ máy chủ Colab xuống thiết bị.
  • Cách sử dụng trình tải dữ liệu.
  • Cách xây dựng mô hình.

Bạn cần có

  • Quyền truy cập vào Colab

2. Cài đặt Trình tạo mô hình TensorFlow Lite

  • Mở Colab. Ô đầu tiên trong sổ tay sẽ cài đặt Trình tạo mô hình TensorFlow Lite cho bạn:
!pip install -q tflite-model-maker

Sau khi hoàn tất, hãy chuyển đến ô tiếp theo.

3. Nhập mã

Ô tiếp theo có một số lần nhập mà mã trong sổ tay sẽ cần sử dụng:

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')

Thao tác này cũng sẽ kiểm tra xem bạn có chạy TensorFlow 2.x (một yêu cầu để sử dụng Trình tạo mô hình) hay không.

4. Tải dữ liệu xuống

Tiếp theo, bạn sẽ tải dữ liệu từ máy chủ Colab xuống thiết bị và đặt biến data_file thành điểm trỏ đến tệp cục bộ:

data_file = tf.keras.utils.get_file(fname='comment-spam.csv', 
  origin='https://storage.googleapis.com/laurencemoroney-blog.appspot.com/lmblog_comments.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 này. 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ẽ biết cách thực hiện sau này trong lớp học lập trình này.

5. Các nội dung nhúng đã tìm hiểu trước

Nói chung, khi bạn sử dụng Trình tạo mô hình, bạn không tạo mô hình từ đầu. Bạn sử dụng các mô hình hiện có mà bạn có thể tùy chỉnh theo nhu cầu của mình.

Những mô hình ngôn ngữ như mô hình này bao gồm việc sử dụng tính năng nhúng được tìm hiểu trước. Ý tưởng đằng sau việc nhúng là từ được chuyển đổi thành số với mỗi từ trong tập sao lục tổng thể của bạn được cung cấp một số. Nhúng là một vectơ được dùng để xác định cảm xúc của từ đó bằng cách thiết lập "direction" cho từ đó. Ví dụ: các từ được sử dụng thường xuyên trong thư rác là bình luận có vectơ theo hướng tương tự và các từ không phải là điểm vectơ sẽ hướng theo hướng ngược lại.

Khi sử dụng các nội dung nhúng đã học trước, bạn có thể bắt đầu bằng kho nội dung hoặc bộ sưu tập. Trong đó, bạn có thể tìm được từ ngữ đã học được trong một phần văn bản lớn, vì vậy, bạn sẽ có giải pháp nhanh hơn nhiều so với khi bắt đầu từ 0.

Trình tạo mô hình cung cấp một số bản nhúng được tìm hiểu trước mà bạn có thể sử dụng, nhưng phương thức đơn giản và nhanh nhất để bắt đầu là tùy chọn average_word_vec.

Đây là mã của sự kiện đó:

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

Thông số num_words

Bạn cũng có thể chỉ định số từ mà bạn muốn mô hình sử dụng.

Bạn có thể nghĩ là & quot; càng tốt và tốt hơn; nhưng thường có một con số phù hợp 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, mô hình có thể cố gắng học và thiết lập hướng của các từ chỉ được dùng một lần. Trong bất kỳ kho nội dung văn bản nào, nhiều từ chỉ được sử dụng một lần hoặc hai lần, vì vậy, việc được đưa vào mô hình sẽ không đáng giá vì chúng có tác động không đáng kể đến ý kiến tổng thể.

Bạn có thể sử dụng thông số num_words để điều chỉnh mô hình của mình dựa trên số từ mà bạn muốn. Số nhỏ hơn có thể cung cấp mô hình nhỏ hơn và nhanh hơn, nhưng có thể ít chính xác hơn vì nhận dạng được ít từ hơn. Mặt khác, một số lớn hơn có thể cung cấp mô hình lớn hơn và chậm hơn. Điều quan trọng là tìm ra điểm ngọt!

Thông số wordvec_dim

Thông số wordved_dim là số lượng phương diện mà bạn muốn sử dụng cho vectơ cho mỗi từ. Quy tắc chung được xác định từ nghiên cứu là nguyên nhân thứ tư của số từ. Ví dụ: nếu bạn sử dụng 2.000 từ thì 7 là điểm khởi đầu tốt. Nếu thay đổi số lượng từ mà bạn sử dụng, bạn cũng có thể thay đổi điều này.

Thông số seq_len

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 có độ dài tĩnh cụ thể. Giá trị này được xác định bằng thông số seq_len hoặc thời lượng trình tự.

Khi bạn chuyển đổi từ thành số hoặc mã thông báo, một câu sẽ trở thành một chuỗi các mã thông báo này. Trong trường hợp này, mô hình của bạn sẽ được đào tạo để phân loại và nhận dạng câu bằng 20 mã thông báo. Nếu câu này dài hơn thời lượng này, câu đó sẽ bị cắt bớt. Nếu video ngắn hơn thì sẽ được đệm. Bạn có thể thấy mã thông báo <PAD> chuyên dụng trong kho nội dung đã được sử dụng cho việc này.

6. Sử dụng trình tải dữ liệu

Trước đó, bạn đã tải tệp CSV xuống. Đã đến 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.

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 rằng 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à spam nhận xét hay không. Các thuộc tính khác đặt biến model_spec mà bạn đã tạo trước đó, 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 sẽ dùng dữ liệu này để đào tạo mô hình này, vì vậy, is_Training sẽ được đặt thành True.

Bạn sẽ muốn giữ lại một phần dữ liệu để kiểm tra mô hình. Phân chia dữ liệu, trong đó, 90% là dữ liệu để đào tạo và 10% còn lại để thử nghiệm/đánh giá. Bởi vì chúng tôi đang thực hiện điều này nên chúng tôi muốn đảm bảo rằng dữ liệu thử nghiệm được chọn ngẫu nhiên và không phải là"vị trí cuối cùng"của tập dữ liệu, vì vậy bạn sử dụng shuffle=True khi tải dữ liệu để sắp xếp ngẫu nhiên dữ liệu.

7. Xây dựng mô hình

Ô tiếp theo chỉ đơn giản là tạo mô hình và đó là một dòng mã duy nhất:

# Build the model
model = text_classifier.create(train_data, model_spec=spec, epochs=50, 
                               validation_data=test_data)

Mã này tạo một mô hình phân loại văn bản bằng Model Maker và bạn chỉ định dữ liệu đào tạo mà bạn muốn sử dụng như đã thiết lập ở bước thứ tư), thông số kỹ thuật mô hình như được thiết lập trong bước thứ tư và một số giai đoạn là 50 trong trường hợp này.

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, mô hình này sẽ tải các trọng số được huấn luyện trước cho các từ và cố gắng nhóm những từ đó với nhau để dự đoán những từ nào, khi được nhóm lại với nhau, cho biết nội dung nào không và những từ nào không được nhóm lại. Lần đầu tiên, hệ thống này có khả năng được chia đều do mô hình này chỉ mới bắt đầu.

c42755151d511ce.png

Sau đó, Analytics sẽ đo lường kết quả của giai đoạn đào tạo này và chạy mã tối ưu hóa để điều chỉnh dự đoán, sau đó thử lại. Đây là một giai đoạn. Vì vậy, bằng cách chỉ định epochs=50, nó sẽ trải qua "loop" 50 lần.

7d0ee06a5246b58d.png

Khi đến thời điểm 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, nội dung hiển thị là 99%!

Số liệu chính xác về xác thực thường thấp hơn một chút so với độ chính xác của quá trình đào tạo vì các con số này là chỉ báo về cách mô hình phân loại dữ liệu mà trước đây họ chưa từng thấy. Chế độ này sử dụng dữ liệu thử nghiệm 10% mà bạn đặt trước đó.

f063ff6e1d2add67.png

8. Xuất mô hình

  1. Chạy ô này để chỉ định thư mục và xuất mô hình:
model.export(export_dire='/mm_spam_savedmodel', export_format=[ExportFormat.LABEL, ExportFormat.VOCAB, ExportFormat.SAVED_MODEL])
  1. Nén toàn bộ thư mục /mm_spam_savedmodel và tải xuống mm_spam_savedmodel.zip tệp đã tạo mà bạn cần trong lớp học lập trình tiếp theo.
# Rename the SavedModel subfolder to a version number
!mv /mm_spam_savedmodel/saved_model /mm_spam_savedmodel/123
!zip -r mm_spam_savedmodel.zip /mm_spam_savedmodel/

9. Xin chúc mừng

Lớp học lập trình này đã hướng dẫn bạn cách lập trình Python để tạo và xuất mô hình của bạn. Bây giờ, bạn sẽ thấy có Mô hình đã lưu cùng với nhãn và từ vựng ở cuối mô hình đó. Trong lớp học lập trình tiếp theo, bạn sẽ tìm hiểu cách sử dụng mô hình này để có thể bắt đầu phân loại bình luận vi phạm.

Tìm hiểu thêm