Hướng dẫn phát hiện ngôn ngữ cho Android

Nhiệm vụ Trình phát hiện ngôn ngữ MediaPipe cho phép bạn xác định ngôn ngữ của một đoạn văn bản. Các hướng dẫn này chỉ cho bạn cách sử dụng Trình phát hiện ngôn ngữ trên các ứng dụng Android. Mã mẫu được mô tả trong những hướng dẫn này hiện có trên GitHub.

Bạn có thể xem cách hoạt động của tác vụ này 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 nhiệm vụ này, hãy xem phần Tổng quan.

Ví dụ về mã

Mã mẫu cho Trình phát hiện ngôn ngữ cung cấp cách triển khai đơn giản của tác vụ này để 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 tính năng phát hiện ngôn ngữ của riêng bạn. Bạn có thể duyệt xem mã ví dụ về Trình phát hiện ngôn ngữ trên GitHub.

Tải mã xuống

Hướng dẫn sau đây chỉ cho bạn cách tạo bản sao cục bộ của mã ví dụ bằng công cụ dòng lệnh git quản lý phiên bản.

Cách tải mã ví dụ xuống:

  1. Sao chép kho lưu trữ git bằng lệnh sau:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. Bạn có thể tuỳ ý định cấu hình thực thể git để sử dụng quy trình thanh toán thưa thớt, nhờ đó bạn chỉ thấy các tệp cho ứng dụng ví dụ về Trình phát hiện ngôn ngữ:
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/languagedetector/android
    

Để được hướng dẫn về cách thiết lập và chạy một ví dụ bằng Android Studio, hãy xem hướng dẫn thiết lập mã mẫu trong Hướng dẫn thiết lập dành cho Android.

Thành phần chính

Các tệp sau đây chứa mã quan trọng cho ứng dụng ví dụ về phân loại văn bản:

  • LanguageDetectorHelper.kt – Khởi chạy trình phát hiện ngôn ngữ và xử lý việc lựa chọn mô hình.
  • ResultsAdapter.kt – Xử lý và định dạng kết quả phát hiện.
  • MainActivity.kt – Triển khai ứng dụng, bao gồm cả việc gọi LanguageDetectorHelperResultsAdapter.

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à các dự án mã dành riêng cho việc sử dụng Trình phát hiện ngôn ngữ. Để biết thông tin chung về cách thiết lập môi trường phát triển nhằm sử dụng các tác vụ của MediaPipe, bao gồm 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 dành cho Android.

Phần phụ thuộc

Trình phát hiện ngôn ngữ dùng thư viện com.google.mediapipe:tasks-text. Thêm phần phụ thuộc này vào tệp build.gradle của dự án phát triển ứng dụng Android. Bạn có thể nhập các phần phụ thuộc bắt buộc bằng đoạn mã sau:

dependencies {
    implementation 'com.google.mediapipe:tasks-text:latest.release'
}

Mẫu

Tác vụ Trình phát hiện ngôn ngữ MediaPipe cần có một mô hình đã qua 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 hiện có cho Trình phát hiện ngôn ngữ, hãy xem phần Mô hình tổng quan về tác vụ.

Chọn và tải mô hình xuống rồi lưu trữ trong thư mục dự án của bạn:

<dev-project-root>/src/main/assets

Chỉ định đường dẫn của mô hình trong tham số ModelName.

Tạo việc cần làm

Bạn có thể dùng một trong các hàm createFrom...() để tạo công việc. Hàm createFromOptions() chấp nhận các tuỳ chọn cấu hình cho trình phát hiện ngôn ngữ. Bạn cũng có thể khởi tạo tác vụ bằng cách sử dụng hàm nhà máy createFromFile(). Hàm createFromFile() chấp nhận đường dẫn tương đối hoặc tuyệt đối đến tệp mô hình được huấn luyện. Để biết thêm thông tin về cách định cấu hình tác vụ, hãy xem phần Các lựa chọn về cấu hình.

Mã sau đây minh hoạ cách tạo và định cấu hình tác vụ này.

// For creating a language detector instance:
LanguageDetectorOptions options =
       LanguageDetectorOptions.builder()
       .setBaseOptions(
          BaseOptions.builder()
            .setModelAssetPath(modelPath)
            .build()
          )
       .build();
LanguageDetector languageDetector = LanguageDetector.createFromOptions(context, options);

Bạn có thể xem ví dụ về cách tạo tác vụ trong mã ví dụ LanguageDetectorHelper của lớp initDetector() hàm.

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 ứng dụng Android:

Tên lựa chọn Nội dung mô tả Khoảng giá trị Giá trị mặc định
maxResults Đặt số lượng tối đa các cụm từ dự đoán ngôn ngữ được điểm số cao nhất (không bắt buộc) để trả về. Nếu giá trị này nhỏ hơn 0, thì mọi kết quả có sẵn đều được trả về. Số dương bất kỳ -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ó). Những kết quả bên dưới giá trị này sẽ bị từ chối. Số thực bất kỳ Không đặt
categoryAllowlist Đặt danh sách mã ngôn ngữ được phép (không bắt buộc). Nếu không để trống, các cụm từ dự đoán ngôn ngữ có mã ngôn ngữ không thuộc tập hợp này sẽ bị lọc ra. Tuỳ chọn này loại trừ lẫn nhau với categoryDenylist và việc sử dụng cả hai sẽ gây ra lỗi. Chuỗi bất kỳ Không đặt
categoryDenylist Đặt danh sách mã ngôn ngữ không được phép (không bắt buộc). Nếu không trống, các dự đoán ngôn ngữ có mã ngôn ngữ trong tập hợp này sẽ bị lọc ra. Tuỳ 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. Chuỗi bất kỳ Không đặt

Chuẩn bị dữ liệu

Trình phát hiện ngôn ngữ hoạt động với dữ liệu văn bản (String). Tác vụ này sẽ xử lý tiền xử lý đầu vào dữ liệu, bao gồm cả việc mã hoá và tiền xử lý tensor. Mọi quá trình xử lý trước đều được xử lý trong hàm detect(). Bạn không cần phải xử lý thêm văn bản nhập trước.

String inputText = "Some input text for the language detector";

Chạy tác vụ

Trình phát hiện ngôn ngữ sử dụng phương thức LanguageDetector.detect() để xử lý văn bản nhập và dự đoán ngôn ngữ của văn bản. Bạn nên sử dụng một luồng thực thi riêng để thực thi quá trình phát hiện nhằm tránh chặn luồng giao diện người dùng Android với ứng dụng của bạn.

Mã sau đây minh hoạ cách thực thi quá trình xử lý với mô hình tác vụ bằng cách sử dụng một luồng thực thi riêng biệt.

// Predict the language of the input text.
fun classify(text: String) {
    executor = ScheduledThreadPoolExecutor(1)

    executor.execute {
        val results = languageDetector.detect(text)
        listener.onResult(results)
    }
}

Bạn có thể xem ví dụ về cách chạy một tác vụ trong mã ví dụ LanguageDetectorHelper của lớp detect() hàm.

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

Trình phát hiện ngôn ngữ đưa ra một LanguageDetectorResult bao gồm danh sách các dự đoán ngôn ngữ cùng với xác suất cho các dự đoán đó. Các danh mục ngôn ngữ được xác định trong mô hình, hãy xem phần Mô hình tổng quan về tác vụ để biết thông tin chi tiết về mô hình mà bạn đang sử dụng.

Sau đây là ví dụ về dữ liệu đầu ra của nhiệm vụ này:

LanguageDetectorResult:
  LanguagePrediction #0:
    language_code: "fr"
    probability: 0.999781

Kết quả này đã đạt được bằng cách chạy mô hình trên văn bản nhập vào: "Il y a beaucoup de bouches qui parlent et fort peu de têtes qui pensent.".

Bạn có thể xem ví dụ về cách hiển thị kết quả trong lớp ví dụ về mã ResultsAdapter và lớp bên trong ViewHolder.