Tích hợp trình nhúng văn bản.

Trình nhúng văn bản cho phép nhúng văn bản vào vectơ đặc trưng nhiều chiều biểu thị ý nghĩa ngữ nghĩa của nó, sau đó có thể so sánh với vectơ đặc trưng của các văn bản khác để đánh giá độ tương tự về ngữ nghĩa của chúng.

Ngược lại với tìm kiếm văn bản , trình nhúng văn bản cho phép tính toán sự giống nhau giữa các văn bản một cách nhanh chóng thay vì tìm kiếm thông qua một chỉ mục được xác định trước được xây dựng từ một kho văn bản.

Sử dụng API TextEmbedder của Thư viện tác vụ để triển khai trình nhúng 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 TextEmbedder

Các mô hình nhúng văn bản được hỗ trợ

Các mô hình sau được đảm bảo tương thích với API TextEmbedder .

Chạy suy luận trong C++

// Initialization.
TextEmbedderOptions options:
options.mutable_base_options()->mutable_model_file()->set_file_name(model_path);
std::unique_ptr<TextEmbedder> text_embedder = TextEmbedder::CreateFromOptions(options).value();

// Run inference with your two inputs, `input_text1` and `input_text2`.
const EmbeddingResult result_1 = text_embedder->Embed(input_text1);
const EmbeddingResult result_2 = text_embedder->Embed(input_text2);

// Compute cosine similarity.
double similarity = TextEmbedder::CosineSimilarity(
    result_1.embeddings[0].feature_vector()
    result_2.embeddings[0].feature_vector());

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

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_embedder = text.TextEmbedder.create_from_file(model_path)

# Run inference on two texts.
result_1 = text_embedder.embed(text_1)
result_2 = text_embedder.embed(text_2)

# Compute cosine similarity.
feature_vector_1 = result_1.embeddings[0].feature_vector
feature_vector_2 = result_2.embeddings[0].feature_vector
similarity = text_embedder.cosine_similarity(
    result_1.embeddings[0].feature_vector, result_2.embeddings[0].feature_vector)

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

Kết quả ví dụ

Độ tương tự cosine giữa các vectơ đặc trưng được chuẩn hóa trả về điểm từ -1 đến 1. Càng cao thì càng tốt, tức là độ tương tự cosine bằng 1 có nghĩa là hai vectơ giống hệt nhau.

Cosine similarity: 0.954312

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

Yêu cầu tương thích mô hình

API TextEmbedder yêu cầu mô hình TFLite với Siêu dữ liệu mô hình TFLite bắt buộc.

Ba loại mô hình chính được hỗ trợ:

  • Các mô hình dựa trên BERT (xem mã nguồn để biết thêm chi tiết):

    • Chính xác là 3 tensor đầu vào (kTfLiteString)

      • Tenor ID, với tên siêu dữ liệu "ids",
      • Tenxor mặt nạ, có tên siêu dữ liệu là "mặt nạ".
      • Tenor ID phân đoạn, với tên siêu dữ liệu "segment_ids"
    • Chính xác là một tensor đầu ra (kTfLiteUInt8/kTfLiteFloat32)

      • với N thành phần tương ứng với N kích thước của vectơ đặc tính được trả về cho lớp đầu ra này.
      • 2 hoặc 4 chiều, tức là [1 x N] hoặc [1 x 1 x 1 x N] .
    • Một input_process_units cho Trình mã hóa từ/câu

  • Các mô hình dựa trên Bộ mã hóa câu phổ quát (xem mã nguồn để biết thêm chi tiết):

    • Chính xác là 3 tensor đầu vào (kTfLiteString)

      • Tensor văn bản truy vấn, với tên siêu dữ liệu "inp_text".
      • Tenor ngữ cảnh phản hồi, có tên siêu dữ liệu "res_context".
      • Tenor văn bản phản hồi, có tên siêu dữ liệu "res_text".
    • Chính xác là 2 tensor đầu ra (kTfLiteUInt8/kTfLiteFloat32)

      • Tenor mã hóa truy vấn, có tên siêu dữ liệu "query_encoding".
      • Tenor mã hóa phản hồi, có tên siêu dữ liệu là "response_encoding".
      • Cả hai đều có N thành phần tương ứng với N kích thước của vectơ đặc tính được trả về cho lớp đầu ra này.
      • Cả hai đều có 2 hoặc 4 chiều, tức là [1 x N] hoặc [1 x 1 x 1 x N] .
  • Bất kỳ mô hình nhúng văn bản nào có:

    • Tenxơ văn bản đầu vào (kTfLiteString)
    • Ít nhất một tensor nhúng đầu ra (kTfLiteUInt8/kTfLiteFloat32)

      • với N thành phần tương ứng với N kích thước của vectơ đặc tính được trả về cho lớp đầu ra này.
      • 2 hoặc 4 chiều, tức là [1 x N] hoặc [1 x 1 x 1 x N] .