Tích hợp trình tìm kiếm văn bản

Tìm kiếm văn bản cho phép tìm kiếm văn bản tương tự về mặt ngữ nghĩa trong một kho văn bản. Nó hoạt động bằng cách nhúng truy vấn tìm kiếm vào một vectơ chiều cao biểu thị ý nghĩa ngữ nghĩa của truy vấn, sau đó là tìm kiếm tương tự trong chỉ mục tùy chỉnh được xác định trước bằng cách sử dụng ScaNN (Hàng xóm gần nhất có thể mở rộng).

Trái ngược với phân loại văn bản (ví dụ: Trình phân loại ngôn ngữ tự nhiên Bert ), việc mở rộng số lượng mục có thể được nhận dạng không yêu cầu đào tạo lại toàn bộ mô hình. Các mục mới có thể được thêm vào chỉ bằng cách xây dựng lại chỉ mục. Điều này cũng cho phép làm việc với các tập hợp lớn hơn (hơn 100 nghìn mục).

Sử dụng API TextSearcher của Thư viện tác vụ để triển khai trình tìm kiếm văn bản tùy chỉnh vào ứng dụng di động của bạn.

Các tính năng chính của API TextSearcher

  • Lấy một chuỗi làm đầu vào, thực hiện trích xuất nhúng và tìm kiếm lân cận gần nhất trong chỉ mục.

  • Xử lý văn bản đầu vào, bao gồm mã thông báo Từ ngữ hoặc Câu văn trong biểu đồ hoặc ngoài biểu đồ trên văn bản đầu vào.

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

Trước khi sử dụng API TextSearcher , chỉ mục cần được xây dựng dựa trên kho văn bản tùy chỉnh để tìm kiếm. Bạn có thể đạt được điều này bằng cách sử dụng API Model Maker Searcher bằng cách làm theo và điều chỉnh hướng dẫn .

Đối với điều này, bạn sẽ cần:

  • mô hình nhúng văn bản TFLite, chẳng hạn như Bộ mã hóa câu phổ quát. Ví dụ,
    • cái được đào tạo lại trong Colab này, được tối ưu hóa cho khả năng suy luận trên thiết bị. Chỉ mất 6 mili giây để truy vấn chuỗi văn bản trên Pixel 6.
    • cái được lượng tử hóa , nhỏ hơn cái trên nhưng mất 38 mili giây cho mỗi lần nhúng.
  • kho văn bản của bạn.

Sau bước này, bạn sẽ có một mô hình tìm kiếm TFLite độc ​​lập (ví dụ mobilenet_v3_searcher.tflite ), đây là mô hình nhúng văn bản gốc có chỉ mục được đính kèm vào Siêu dữ liệu mô hình TFLite .

Chạy suy luận trong Java

Bước 1: Nhập phần phụ thuộc Gradle và các cài đặt khác

Sao chép tệp mô hình trình tìm kiếm .tflite vào thư mục nội dung của mô-đun Android nơi mô hình sẽ được chạy. Chỉ định rằng tệp sẽ không được nén và thêm thư viện TensorFlow Lite vào tệp build.gradle của mô-đun:

android {
    // Other settings

    // Specify tflite index file should not be compressed for the app apk
    aaptOptions {
        noCompress "tflite"
    }

}

dependencies {
    // Other dependencies

    // Import the Task Vision Library dependency (NNAPI is included)
    implementation 'org.tensorflow:tensorflow-lite-task-vision:0.4.4'
    // Import the GPU delegate plugin Library for GPU inference
    implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.4.4'
}

Bước 2: Sử dụng mô hình

// Initialization
TextSearcherOptions options =
    TextSearcherOptions.builder()
        .setBaseOptions(BaseOptions.builder().useGpu().build())
        .setSearcherOptions(
            SearcherOptions.builder().setL2Normalize(true).build())
        .build();
TextSearcher textSearcher =
    textSearcher.createFromFileAndOptions(context, modelFile, options);

// Run inference
List<NearestNeighbor> results = textSearcher.search(text);

Xem mã nguồn và javadoc để có thêm tùy chọn cấu hình TextSearcher .

Chạy suy luận trong C++

// Initialization
TextSearcherOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_path);
options.mutable_embedding_options()->set_l2_normalize(true);
std::unique_ptr<TextSearcher> text_searcher = TextSearcher::CreateFromOptions(options).value();

// Run inference with your input, `input_text`.
const SearchResult result = text_searcher->Search(input_text).value();

Xem mã nguồn để biết thêm tùy chọn cấu hình TextSearcher .

Chạy suy luận trong Python

Bước 1: Cài đặt gói Pypi hỗ trợ TensorFlow Lite.

Bạn có thể cài đặt gói Pypi hỗ trợ TensorFlow Lite bằng lệnh sau:

pip install tflite-support

Bước 2: Sử dụng mô hình

from tflite_support.task import text

# Initialization
text_searcher = text.TextSearcher.create_from_file(model_path)

# Run inference
result = text_searcher.search(text)

Xem mã nguồn để biết thêm tùy chọn cấu hình TextSearcher .

Kết quả ví dụ

Results:
 Rank#0:
  metadata: The sun was shining on that day.
  distance: 0.04618
 Rank#1:
  metadata: It was a sunny day.
  distance: 0.10856
 Rank#2:
  metadata: The weather was excellent.
  distance: 0.15223
 Rank#3:
  metadata: The cat is chasing after the mouse.
  distance: 0.34271
 Rank#4:
  metadata: He was very happy with his newly bought car.
  distance: 0.37703

Hãy dùng thử công cụ demo CLI đơn giản dành cho TextSearcher với mô hình và dữ liệu thử nghiệm của riêng bạn.