1. Trước khi bắt đầu
Trong lớp học lập trình này, bạn sẽ xem xét mã được tạo bằng TensorFlow và Trình tạo mô hình TensorFlow Lite để 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. Dữ liệu này đã được thu thập vào một tệp CSV duy nhất và được làm sạch bằng cách xoá văn bản bị hỏng, đánh dấu, các từ lặp lại và nhiều 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 thay vì văn bản.
Mã mà bạn sẽ xem xét đã được cung cấp ở đây, nhưng bạn nên làm theo mã trong Google Colab.
Điều kiện tiên quyết
- Lớp học lập trình này được viết cho các nhà phát triển có kinh nghiệm và mới làm quen với công nghệ máy học.
- Lớp học lập trình này nằm 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 tất các hoạt động trước đó, vui lòng dừng lại và hoàn tất ngay.
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á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 Google 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 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')
Thao tác này cũng sẽ kiểm tra xem bạn có đang chạy TensorFlow 2.x hay không. Đây là 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ị và đặt data_file để 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ể huấn luyện 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 hiểu cách thực hiện việc đó sau trong lớp học lập trình này.
5. Vectơ nhúng đã học trước
Thông thường, khi sử dụng Trình tạo mô hình, 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.
Đố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 vectơ nhúng đã học trước. Ý tưởng đằng sau vectơ nhúng là các từ được chuyển đổi thành số, trong đó mỗi từ trong toàn bộ kho ngữ liệu của bạn được gán một số. Vectơ nhúng là một vectơ dùng để xác định cảm xúc của từ đó bằng cách thiết lập "hướng" cho từ. Ví dụ: các từ thường được dùng trong tin nhắn bình luận không liên quan sẽ có vectơ trỏ theo hướng tương tự và các từ không được dùng sẽ trỏ theo hướng ngược lại.
Bằng cách sử dụng vectơ nhúng đã học trước, bạn có thể bắt đầu với một kho ngữ liệu hoặc tập hợp các từ đã học được cảm xúc 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ừ đầu.
Trình tạo mô hình cung cấp một số vectơ nhúng đã học trước mà bạn có thể sử dụng, nhưng vectơ đơn giản nhất 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
Tham 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ĩ rằng "càng nhiều càng tốt", nhưng thường thì có một số lượng phù hợp dựa trên tần suất sử dụng mỗi từ. Nếu sử dụng mọi từ trong toàn bộ kho ngữ liệu, bạn có thể kết thúc bằng việc mô hình cố gắng học và thiết lập hướng của những từ chỉ được sử dụng một lần. Bạn sẽ thấy trong bất kỳ kho ngữ liệu văn bản nào rằng nhiều từ chỉ được sử dụng một hoặc hai lần và thường không đáng để sử dụng trong mô hình vì chúng có tác động không đáng kể đến cảm xúc tổng thể. Bạn có thể điều chỉnh mô hình theo số lượng từ mà bạn muốn bằng cách sử dụng tham số num_words.
Số lượng nhỏ hơn ở đây có thể tạo ra một mô hình nhỏ hơn và nhanh hơn, nhưng có thể kém chính xác hơn vì mô hình nhận dạng ít từ hơn. Số lượng lớn hơn ở đây sẽ tạo ra một mô hình lớn hơn và chậm hơn. Tìm ra điểm phù hợp là điều quan trọng!
Tham số wordvec_dim
Tham số wordved_dim là số lượng phương diện mà bạn muốn sử dụng cho vectơ của mỗi từ. Quy tắc chung được xác định từ nghiên cứu là căn bậc tư của số lượng từ. Ví dụ: nếu bạn đang sử dụng 2000 từ, thì điểm xuất phát tốt là 7. Nếu thay đổi số lượng từ bạn sử dụng, bạn cũng có thể thay đổi số này.
Tham số seq_len
Các mô hình thường rất cứng nhắc khi nói đến giá trị đầu vào. Đố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 cụ thể, tĩnh. Điều đó được xác định bởi tham số seq_len hoặc độ dài chuỗi.
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 dạng các câu có 20 mã thông báo. Nếu câu dài hơn, câu đó sẽ bị cắt bớt. Nếu ngắn hơn, câu đó sẽ được thêm vào. Bạn sẽ thấy một mã thông báo <PAD> dành riêng trong kho ngữ liệu 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. Bây giờ, bạn cần sử dụng trình tải dữ liệu để chuyển đổi tệp 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 bạn mở tệp CSV trong một trình chỉnh sửa, bạn sẽ thấy rằng 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 rằng bộ mô tả cho 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 bình luận. Tương tự, bộ 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, để biểu thị xem văn bản đó có được coi là bình luận không liên quan 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 dấu 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ẽ sử dụng dữ liệu này để huấn luyện mô hình, vì vậy, is_Training được đặt thành True.
Bạn sẽ muốn giữ lại một phần dữ liệu để kiểm thử mô hình. Chia dữ liệu, với 90% dữ liệu dùng để huấn luyện và 10% còn lại dùng để kiểm thử/đánh giá. Vì chúng ta đang thực hiện việc này, nên chúng ta muốn đảm bảo rằng dữ liệu kiểm thử được chọn ngẫu nhiên và không phải là 10% "dướ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 để ngẫu nhiên hoá dữ liệu.
7. Xây dựng mô hình
Ô tiếp theo chỉ đơn giản là để 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 tạo một mô hình phân loại văn bản bằng Trình tạo mô hình và bạn chỉ định dữ liệu huấn luyện mà 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 ở bước 4) và số lượng kỷ nguyên, trong trường hợp này là 50.
Nguyên tắc cơ bản của học máy là một dạng so khớp mẫu. Ban đầu, công nghệ 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 các từ đó lại với dự đoán về những từ nào, khi được nhóm lại, cho biết thư rác và những từ nào không cho biết thư rác. Lần đầu tiên, tỷ lệ này có thể gần bằng 50:50 vì mô hình chỉ mới bắt đầu.

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

Khi bạn đạt đến kỷ nguyê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, mức độ chính xác là 99%!
Ở phía bên phải, bạn sẽ thấy các số liệu về độ chính xác của quá trình xác thực. Các số liệu này thường 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à mô hình chưa "nhìn thấy" trước đó. Mô hình này sử dụng 10% dữ liệu kiểm thử mà chúng ta đã dành riêng trước đó.

8. Xuất mô hình
Sau khi hoàn tất quá trình huấn luyện, 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à mô hình này cần được chuyển đổi sang định dạng TFLITE để sử dụng trong ứng dụng di động. Trình tạo mô hình xử lý sự phức tạp này cho bạn.
Chỉ cần xuất mô hình, chỉ định một 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 tệp đó xuống. Bạn sẽ cần tệp đó trong lớp học lập trình tiếp theo, nơi bạn thêm tệp đó vào Ứng dụng Android!
Những điều cần cân nhắc về 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ì nó bao gồm một từ điển mã thông báo đại diện cho các từ mà mô hình nhận dạng. Bạn có nhớ trước đó khi bạn học được rằng các từ trở thành token và các token này sau đó được gán vectơ cho cảm xúc của chúng không? Ứng dụng di động của bạn sẽ cần phải biết các mã thông báo này. Ví dụ: nếu "dog" được mã hoá thành 42 và người dùng nhập "dog" vào một câu, thì ứng dụng của bạn sẽ cần chuyển đổi "dog" thành 42 để mô hình hiểu được. Là nhà phát triển Android, bạn sẽ có một "Thư viện tác vụ TensorFlow Lite" giúp bạn dễ dàng sử dụng thư viện này, nhưng trên iOS, bạn cần xử lý từ vựng, vì vậy, bạn cần có thư viện này. Trình tạo mô hình có thể xuất thư viện 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, bạn có thể sử dụng mã này:
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 đã hướng dẫn bạn về Mã Python để xây dựng và xuất mô hình. Bạn sẽ có một tệp .tflite ở cuối lớp học lập trình này.
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, nhờ đó bạn có thể bắt đầu phân loại bình luận rác.