Hướng dẫn phân loại văn bản cho web

Tác vụ Phân loại văn bản của MediaPipe cho phép bạn phân loại văn bản thành một tập hợp các danh mục đã xác định, chẳng hạn như cảm xúc tích cực hoặc tiêu cực. Các danh mục được xác định bởi mô hình bạn sử dụng và cách huấn luyện mô hình đó. Các hướng dẫn này cho biết cách sử dụng thuật toán phân loại văn bản cho các ứng dụng web và JavaScript.

Bạn có thể xem tác vụ này hoạt động bằng cách xem bản minh hoạ. Để biết thêm thông tin về các tính năng, mô hình và lựa chọn cấu hình của tác vụ này, hãy xem phần Tổng quan.

Ví dụ về mã

Mã ví dụ cho công cụ Phân loại văn bản cung cấp một cách triển khai hoàn chỉnh tác vụ này bằng JavaScript để bạn tham khảo. Mã này giúp bạn kiểm thử tác vụ này và bắt đầu xây dựng ứng dụng phân loại văn bản của riêng mình. Bạn có thể xem, chạy và chỉnh sửa ví dụ về công cụ Phân loại văn bản chỉ bằng trình duyệt web.

Thiết lập

Phần này mô tả các bước chính để thiết lập môi trường phát triển và dự án mã dành riêng cho việc sử dụng công cụ Phân loại văn bản. Để biết thông tin chung về cách thiết lập môi trường phát triển để sử dụng Tác vụ MediaPipe, bao gồm các yêu cầu về phiên bản nền tảng, hãy xem hướng dẫn Thiết lập cho web.

Gói JavaScript

Mã Phân loại văn bản có sẵn thông qua gói @mediapipe/tasks-text. Bạn có thể tìm và tải các thư viện này xuống từ các đường liên kết được cung cấp trong hướng dẫn Thiết lập nền tảng.

Bạn có thể cài đặt các gói bắt buộc bằng mã sau đây để dàn dựng cục bộ bằng lệnh sau:

npm install @mediapipe/tasks-text

Nếu muốn triển khai lên một máy chủ, bạn có thể sử dụng dịch vụ mạng phân phối nội dung (CDN), chẳng hạn như jsDelivr để thêm mã trực tiếp vào trang HTML như sau:

<head>
  <script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-text@0.1/text-bundle.js"
    crossorigin="anonymous"></script>
</head>

Mô hình

Tác vụ Phân loại văn bản của MediaPipe yêu cầu một mô hình đã huấn luyện tương thích với tác vụ này. Để biết thêm thông tin về các mô hình đã huấn luyện có sẵn cho công cụ Phân loại văn bản, hãy xem phần tổng quan về tác vụ phần Mô hình.

Chọn và tải một mô hình xuống, sau đó lưu trữ mô hình đó trong thư mục dự án:

<dev-project-root>/assets/bert_text_classifier.tflite

Chỉ định đường dẫn của mô hình bằng tham số modelAssetPath của đối tượng baseOptions, như minh hoạ bên dưới:

baseOptions: {
        modelAssetPath: `/assets/bert_text_classifier.tflite`
      }

Tạo tác vụ

Sử dụng một trong các hàm TextClassifier.createFrom...() của công cụ Phân loại văn bản để chuẩn bị tác vụ chạy suy luận. Bạn có thể sử dụng hàm createFromModelPath() với đường dẫn tương đối hoặc tuyệt đối đến tệp mô hình đã huấn luyện. Ví dụ về mã bên dưới minh hoạ cách sử dụng hàm TextClassifier.createFromOptions(). Để biết thêm thông tin về các lựa chọn cấu hình có sẵn, hãy xem phần Các lựa chọn về cấu hình.

Đoạn mã sau đây minh hoạ cách xây dựng và định cấu hình tác vụ này:

async function createClassifier() {
  const textFiles = await FilesetResolver.forTextTasks("https://cdn.jsdelivr.net/npm/@mediapipe/tasks-text@latest/wasm/");
  textClassifier = await TextClassifier.createFromOptions(
    textFiles,
    {
      baseOptions: {
        modelAssetPath: `https://storage.googleapis.com/mediapipe-tasks/text_classifier/bert_text_classifier.tflite`
      },
      maxResults: 5
    }
  );
}
createClassifier();

Các lựa chọn về cấu hình

Tác vụ này có các lựa chọn cấu hình sau đây cho các ứng dụng web và JavaScript:

Tên lựa chọn Mô tả Phạm vi giá trị Giá trị mặc định
displayNamesLocale Đặt ngôn ngữ của nhãn để sử dụng cho tên hiển thị được cung cấp trong siêu dữ liệu của mô hình tác vụ (nếu có). Mặc định là en cho tiếng Anh. Bạn có thể thêm nhãn đã bản địa hoá vào siêu dữ liệu của mô hình tuỳ chỉnh bằng API Trình ghi siêu dữ liệu TensorFlow Lite Mã ngôn ngữ vi
maxResults Đặt số lượng tối đa không bắt buộc của kết quả phân loại được tính điểm cao nhất để trả về. Nếu < 0, tất cả kết quả có sẵn sẽ được trả về. Bất kỳ số dương nào -1
scoreThreshold Đặt ngưỡng điểm dự đoán ghi đè ngưỡng được cung cấp trong siêu dữ liệu mô hình (nếu có). Kết quả dưới giá trị này sẽ bị từ chối. Bất kỳ số thực nào Chưa đặt
categoryAllowlist Đặt danh sách không bắt buộc gồm các tên danh mục được phép. Nếu không trống, kết quả phân loại có tên danh mục không nằm trong tập hợp này sẽ bị lọc. Tên danh mục trùng lặp hoặc không xác định sẽ bị bỏ qua. Lựa chọn này loại trừ lẫn nhau với categoryDenylist và việc sử dụng cả hai sẽ dẫn đến lỗi. Bất kỳ chuỗi nào Chưa đặt
categoryDenylist Đặt danh sách không bắt buộc gồm các tên danh mục không được phép. Nếu không trống, kết quả phân loại có tên danh mục nằm trong tập hợp này sẽ bị lọc. Tên danh mục trùng lặp hoặc không xác định sẽ bị bỏ qua. Lựa chọn này loại trừ lẫn nhau với categoryAllowlist và việc sử dụng cả hai sẽ dẫn đến lỗi. Bất kỳ chuỗi nào Chưa đặt

Chuẩn bị dữ liệu

Công cụ Phân loại văn bản hoạt động với dữ liệu văn bản (String). Tác vụ này xử lý quá trình tiền xử lý dữ liệu đầu vào, bao gồm cả quá trình tách từ và tiền xử lý Tensor.

Tất cả quá trình tiền xử lý đều được xử lý trong hàm classify(). Bạn không cần phải tiền xử lý thêm văn bản đầu vào trước đó.

const inputText = "The input text to be classified.";

Chạy tác vụ

Công cụ Phân loại văn bản sử dụng hàm classify() để kích hoạt suy luận. Đối với việc phân loại văn bản, điều này có nghĩa là trả về các danh mục có thể có cho văn bản đầu vào.

Đoạn mã sau đây minh hoạ cách thực thi quá trình xử lý bằng mô hình tác vụ.

// Wait to run the function until inner text is set
const result: TextClassifierResult = await textClassifier.classify(
  inputText
);

Xử lý và hiển thị kết quả

Công cụ Phân loại văn bản xuất ra một TextClassifierResult chứa danh sách các danh mục có thể có cho văn bản đầu vào. Các danh mục được xác định bởi mô hình bạn sử dụng, vì vậy, nếu muốn có các danh mục khác, hãy chọn một mô hình khác hoặc huấn luyện lại một mô hình hiện có.

Sau đây là ví dụ về dữ liệu đầu ra từ tác vụ này:

TextClassificationResult:
  Classification #0 (single classification head):
    ClassificationEntry #0:
      Category #0:
        category name: "positive"
        score: 0.8904
        index: 0
      Category #1:
        category name: "negative"
        score: 0.1096
        index: 1

Kết quả này được thu được bằng cách chạy thuật toán phân loại BERT trên thông tin đầu vào: "an imperfect but overall entertaining mystery".