Xây dựng mô hình Học máy về bình luận rác

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

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

Mã bạn sẽ xem xét đã được cung cấp tại đây, nhưng bạn nên làm theo mã này trong Google Colab.

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

  • Lớp học lập trình này dành cho các nhà phát triển có kinh nghiệm và mới làm quen với công nghệ học máy.
  • Lớp học lập trình này trong lộ trình Bắt đầu sử dụng tính năng phân loại văn bản cho thiết bị di động. Nếu bạn chưa hoàn thành các hoạt động trước đó, hãy dừng lại và hoàn thành 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 Google Colab
  • Cách tải dữ liệu từ Máy chủ đám mây xuống thiết bị của bạn
  • 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ó

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 quá trình này hoàn tất, hãy chuyển sang ô tiếp theo.

3. Nhập mã

Ô tiếp theo có một số lệnh 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')

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

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

Tiếp theo, bạn sẽ tải dữ liệu từ Máy chủ đám mây xuống thiết bị của mình và đặt data_file để trỏ vào 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)

Model Maker có thể đào tạo các mô hình từ các 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 chứa nhãn. Bạn sẽ tìm thấy cách thực hiện việc này ở phần sau trong lớp học lập trình này.

5. Các video nhúng đã tìm hiểu trước

Nhìn chung, khi sử dụng Model Maker, bạn không xây dựng mô hình từ đầu. Bạn sử dụng các mô hình hiện có mà bạn tuỳ chỉnh theo nhu cầu của mình.

Đối với các mô hình ngôn ngữ, chẳng hạn như mô hình này, bạn cần sử dụng các mô hình nhúng học trước. Ý tưởng đằng sau việc nhúng là các từ được chuyển đổi thành số, với mỗi từ trong toàn bộ tập sao lục được cho một số. Hình nhúng là một vectơ dùng để xác định ý kiến của từ đó bằng cách thiết lập một "hướng" cho từ này. Ví dụ: những từ được sử dụng thường xuyên trong các tin nhắn rác bình luận sẽ trở thành vectơ của chúng chỉ theo một hướng tương tự và những từ không có ý định đó sẽ trỏ theo hướng ngược lại.

Bằng cách sử dụng các mục nhúng có sẵn, bạn sẽ bắt đầu với một tập sao lục hay một tập hợp các từ đã học được biểu cảm từ một lượng lớn văn bản. Điều này sẽ giúp bạn tìm ra giải pháp nhanh hơn nhiều so với việc bắt đầu từ 0.

Model Maker cung cấp một số tính năng nhúng đã học sẵn mà bạn có thể sử dụng, nhưng cách đơn giản và nhanh nhất để bắt đầu là 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

Thông số num_words

Bạn cũng sẽ chỉ định số lượng từ mà bạn muốn mô hình sử dụng.

Bạn có thể nghĩ "càng nhiều càng tốt", nhưng thường số liệu sẽ phù hợp dựa trên tần suất sử dụng của mỗi từ. Nếu sử dụng mọi từ trong toàn bộ tập sao lục, bạn có thể khiến mô hình đó cố gắng học và thiết lập hướng của những từ chỉ được dùng một lần. Bạn sẽ thấy trong bất kỳ tập sao lục văn bản nào có nhiều từ chỉ được sử dụng một hoặc hai lần và thường không đáng để sử dụng những từ này trong mô hình của bạn vì chúng có ảnh hưởng không đáng kể đến cảm nhận tổng thể. Bạn có thể điều chỉnh mô hình dựa trên số lượng từ mong muốn bằng cách sử dụng tham số num_words.

Số nhỏ hơn ở đây có thể cung cấp mô hình nhỏ hơn và nhanh hơn, nhưng có thể kém chính xác hơn vì nhận dạng ít từ hơn. Số lớn hơn ở đây sẽ có mô hình lớn hơn và chậm hơn. Tìm ra điểm cân bằng là yếu tố then chốt!

Thông số wordvec_dim

Tham số wordved_dim là số chiều bạn muốn sử dụng cho vectơ đối với mỗi từ. Quy tắc chung xác định từ nghiên cứu là đó là căn bậc 4 của số từ. Ví dụ: nếu bạn đang sử dụng 2000 từ, thì điểm khởi đầu phù hợp là 7. Nếu thay đổi số từ sử dụng, bạn cũng có thể thay đổi số lượng từ.

Tham số seq_len

Các mô hình thường rất cứng nhắc khi chọn giá trị đầu vào. Đối với một 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 cụ thể, tĩnh. Độ dài này được xác định bằng tham số seq_len hoặc độ dài trình tự.

Khi bạn chuyển đổi các 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. Vì vậy, mô hình của bạn sẽ được huấn luyện (trong trường hợp này) để phân loại và nhận ra các câu có 20 mã thông báo. Nếu dài hơn 3 khoảng này, câu đó sẽ bị cắt bớt. Nếu đoạn mã ngắn hơn, lớp đệm sẽ được đệm. Bạn sẽ thấy một mã thông báo <PAD> riêng trong tập sao lục sẽ được 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. 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 huấn luyện 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 trong trình chỉnh sửa, bạn sẽ thấy mỗi dòng chỉ có hai giá trị và các giá trị 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 sau đó được coi là một cột.

Bạn sẽ thấy nội dung mô tả cho cột đầu tiên là commenttext và mục đầu tiên trên mỗi dòng là văn bản của nhận xét. Tương tự, mã mô tả cho cột thứ hai là spam và bạn sẽ thấy mục 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 rác hay không. Các thuộc tính khác đặt model_spec mà bạn đã tạo trước đó, cùng với một ký tự dấu phân cá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 để huấn luyện mô hình, vì vậy, is_Training được thiết lập thành True.

Bạn sẽ muốn giữ lại một phần dữ liệu để thử nghiệm mô hình. Chia nhỏ dữ liệu, với 90% dữ liệu dành cho việc huấn luyện và 10% còn lại để kiểm tra/đánh giá. Vì chúng tôi thực hiện tác vụ này, 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 ở dưới cùng 10% 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ỉ dùng để xây dựng mô hình và đó là một dòng mã:

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

Thao tác này sẽ 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 huấn luyện bạn muốn sử dụng (như thiết lập ở bước 4), thông số kỹ thuật của mô hình (như thiết lập trong bước 4) và một số thời gian bắt đầu của hệ thống, trong trường hợp này là 50.

Nguyên tắc cơ bản của công nghệ học máy là đây là cách khớp mẫu. Ban đầu, Google Play sẽ tải các trọng số đã huấn luyện trước cho các từ và cố gắng nhóm chúng lại với nhau kèm theo thông tin dự đoán về các trọng số khi được nhóm lại với nhau sẽ cho biết từ nào là spam và các từ nào thì không. Ở lần đầu tiên, có khả năng là gần 50:50, vì mô hình chỉ mới bắt đầu.

b94b00f0b155db3d.png

Sau đó, giải pháp này sẽ đo lường kết quả của việc này và chạy mã tối ưu hoá để tinh chỉnh dự đoán rồi thử lại. Đây là một thời gian bắt đầu của hệ thống. Vì vậy, bằng cách chỉ định epochs=50, mã sẽ trải qua "vòng lặp" đó 50 lần.

85f1d21c0b64d654.pngS

Vào thời điểm bạn đạt đến thời gian bắt đầu của hệ thống 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 là hiển thị 99%!

Ở bên phải, bạn sẽ thấy số liệu về độ chính xác xác thực. Các chỉ số này thường sẽ thấp hơn một chút so với độ chính xác của quá trình huấn luyện, vì chúng cho biết cách mô hình phân loại dữ liệu mà trước đây chưa "nhìn thấy". Công cụ này sử dụng 10% dữ liệu thử nghiệm mà chúng ta đã dành ra trước đó.

5be7967ec70e4302.pngS

8. Xuất mô hình

Sau khi huấn luyện xong, bạn có thể xuất mô hình.

TensorFlow huấn luyện một mô hình theo định dạng riêng và bạn cần chuyển đổi mô hình này sang định dạng TFLITE để sử dụng trong ứng dụng di động. Model Maker xử lý sự phức tạp này cho bạn.

Chỉ cần xuất mô hình, chỉ định thư mục:

model.export(export_dir='/mm_spam')

Trong thư mục đó, bạn sẽ thấy một tệp model.tflite. Tải xuống. Bạn sẽ cần mã này trong lớp học lập trình tiếp theo để thêm vào Ứng dụng Android!

Những điểm cần lưu ý trên iOS

Mô hình .tflite mà bạn vừa xuất hoạt động tốt cho Android vì siêu dữ liệu về mô hình được nhúng trong đó và Android Studio có thể đọc siêu dữ liệu đó.

Siêu dữ liệu này rất quan trọng vì chứa từ điển mã thông báo đại diện cho các từ khi mô hình nhận dạng chúng. Bạn còn nhớ trước đây khi bạn biết rằng từ ngữ trở thành mã thông báo và những mã thông báo này sau đó được cho các vectơ biểu thị tình cảm của chúng không? Ứng dụng di động của bạn sẽ cần biết những mã thông báo này. Ví dụ: nếu "chó" đã được mã hoá thành 42 và người dùng của bạn nhập "chó" thành một câu, thì ứng dụng của bạn sẽ cần chuyển đổi từ "chó" thành 42 để mô hình hiểu được. Là một nhà phát triển Android, bạn sẽ có một "Thư viện tác vụ TensorFlow Lite" giúp việc sử dụng tính năng này dễ dàng hơn, nhưng trên iOS, bạn sẽ cần xử lý từ vựng, vì vậy bạn cần có sẵn tính năng này. Model Maker có thể xuất tệp này cho bạn bằng cách chỉ định tham số export_format. Vì vậy, để lấy nhãn và từ vựng cho mô hình của mình, bạn có thể sử dụng:

model.export(export_dir='/mm_spam/', 
             export_format=[ExportFormat.LABEL, ExportFormat.VOCAB])

9. Xin chúc mừng

Lớp học lập trình này sẽ hướng dẫn bạn kiến thức về Python để xây dựng và xuất mô hình. Bạn sẽ có một tệp .tflite ở cuối tệp.

Trong lớp học lập trình tiếp theo, bạn sẽ tìm hiểu cách chỉnh sửa ứng dụng Android để sử dụng mô hình này, từ đó bắt đầu phân loại bình luận rác.