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
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.
Hàm tiện ích tích hợp để tính toán độ tương tự cosin giữa các vectơ đặc trưng.
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
.
Các mô hình tùy chỉnh đáp ứng các yêu cầu về khả năng tương thích của mô hình .
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ớiN
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]
.
- với
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ớiN
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ớiN
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]
.
- với