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

Công cụ nhúng văn bản cho phép nhúng văn bản vào một vectơ đặc trưng có nhiều chiều, biểu thị ý nghĩa ngữ nghĩa của văn bản đó. Sau đó, bạn có thể so sánh vectơ đặc trưng này với vectơ đặc trưng của các văn bản khác để đánh giá mức độ tương đồng về ngữ nghĩa.

Khác với tìm kiếm bằng văn bản, trình nhúng văn bản cho phép tính toán mức độ tương đồng giữa các văn bản ngay lập tức thay vì tìm kiếm thông qua một chỉ mục được xác định trước được tạo từ một kho ngữ liệu.

Sử dụng API Thư viện tác vụ TextEmbedder để triển khai trình nhúng văn bản tuỳ chỉnh vào các ứng dụng di động của bạn.

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

  • Xử lý văn bản đầu vào, bao gồm cả việc mã hoá Wordpiece hoặc Sentencepiece trong hoặc ngoài biểu đồ trên văn bản đầu vào.

  • Hàm tiện ích tích hợp để tính toán độ tương đồng cosine giữa các vectơ đối tượng.

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

Các mô hình sau đây chắc chắn sẽ tương thích với API TextEmbedder.

Chạy suy luận bằng 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());

Hãy xem mã nguồn để biết thêm các lựa chọn định 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 TensorFlow Lite Support Pypi 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)

Hãy xem mã nguồn để biết thêm các lựa chọn định cấu hình TextEmbedder.

Kết quả mẫu

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

Cosine similarity: 0.954312

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

Yêu cầu về khả năng tương thích của mô hình

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

Chúng tôi hỗ trợ 3 loại mô hình chính:

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

    • Đúng 3 tensor đầu vào (kTfLiteString)

    • Tensor mã nhận dạng, có tên siêu dữ liệu là "ids",

    • Tensor mặt nạ, có tên siêu dữ liệu là "mask".

    • Tensor mã phân đoạn, có tên siêu dữ liệu là "segment_ids"

    • Chỉ một tensor đầu ra (kTfLiteUInt8/kTfLiteFloat32)

    • với các thành phần N tương ứng với các phương diện N của vectơ đối tượng được trả về cho lớp đầu ra này.

    • 2 hoặc 4 phương diện, tức là [1 x N] hoặc [1 x 1 x 1 x N].

    • Một input_process_units cho Wordpiece/Sentencepiece Tokenizer

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

    • Đúng 3 tensor đầu vào (kTfLiteString)

    • Tensor văn bản truy vấn, có tên siêu dữ liệu là "inp_text".

    • Tensor ngữ cảnh phản hồi, có tên siêu dữ liệu là "res_context".

    • Tensor văn bản phản hồi, có tên siêu dữ liệu là "res_text".

    • Chính xác 2 tensor đầu ra (kTfLiteUInt8/kTfLiteFloat32)

    • Tensor mã hoá truy vấn, có tên siêu dữ liệu là "query_encoding".

    • Tensor mã hoá phản hồi, có tên siêu dữ liệu là "response_encoding".

    • Cả hai đều có các thành phần N tương ứng với các phương diện N của vectơ đối tượng được trả về cho lớp đầu ra này.

    • Cả hai đều có 2 hoặc 4 phương diện, tức là [1 x N] hoặc [1 x 1 x 1 x N].

  • Mọi mô hình nhúng văn bản có:

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

    • với các thành phần N tương ứng với các phương diện N của vectơ đối tượng được trả về cho lớp đầu ra này.

    • 2 hoặc 4 phương diện, tức là [1 x N] hoặc [1 x 1 x 1 x N].