Chào mừng EmbeddingGemma, mô hình nhúng hiệu quả mới của Google

  • 19 min read
Chào mừng EmbeddingGemma, mô hình nhúng hiệu quả mới của Google

Chào mừng EmbeddingGemma, mô hình embedding hiệu quả mới của Google

TL;DR

Hôm nay, Google phát hành EmbeddingGemma, một mô hình embedding đa ngôn ngữ hiện đại, hoàn hảo cho các trường hợp sử dụng trên thiết bị. Được thiết kế để đạt tốc độ và hiệu quả, mô hình có kích thước nhỏ gọn 308 triệu tham sốcửa sổ ngữ cảnh 2K, mở ra những khả năng mới cho các quy trình RAG trên thiết bị di động, các tác nhân và hơn thế nữa. EmbeddingGemma được đào tạo để hỗ trợ hơn 100 ngôn ngữ và là mô hình embedding chỉ văn bản đa ngôn ngữ xếp hạng cao nhất dưới 500M trên Điểm chuẩn Embedding Văn bản Lớn (MTEB) tại thời điểm viết bài.

Mục lục

Giới thiệu

Văn bản nhúng đã trở thành xương sống của các ứng dụng ngôn ngữ tự nhiên hiện đại, biến các từ, câu và tài liệu thành các vectơ dày đặc nắm bắt ý nghĩa, tình cảm và ý định. Các vectơ này cho phép tìm kiếm tương tự nhanh chóng, phân cụm, phân loại và truy xuất trên các văn bản lớn, hỗ trợ mọi thứ từ các công cụ đề xuất và tìm kiếm ngữ nghĩa đến tạo văn bản tăng cường khả năng truy xuất và các công cụ tìm kiếm mã. Mô hình Embedding được sử dụng rộng rãi để tính toán các embedding này, với hơn 200 triệu lượt tải xuống hàng tháng trên Hugging Face.

Dựa trên nền tảng này, EmbeddingGemma của Google DeepMind xuất hiện như là mô hình embedding đa ngôn ngữ nhỏ, có khả năng nhất từ trước đến nay. Với chỉ 308M tham số, cửa sổ ngữ cảnh 2k và hỗ trợ hơn 100 ngôn ngữ, EmbeddingGemma mang lại hiệu suất hiện đại trên Điểm chuẩn Embedding Văn bản Đa ngôn ngữ Lớn (MMTEB) trong khi vẫn dưới 200 MB RAM khi được lượng tử hóa.

Các lựa chọn thiết kế khác nhau dẫn đến một công cụ mã nguồn mở rất thiết thực để tính toán các embedding đa ngôn ngữ chất lượng cao trên các thiết bị hàng ngày.

Trong bài đăng trên blog này, chúng tôi mô tả kiến trúc và đào tạo EmbeddingGemma, đồng thời chỉ cho bạn cách sử dụng mô hình với nhiều framework khác nhau như Sentence Transformers, LangChain, LlamaIndex, Haystack, txtai, Transformers.js, Text Embedding Inference và ONNX.

Sau đó, chúng tôi sẽ trình bày cách tinh chỉnh EmbeddingGemma trên miền của bạn để có hiệu suất thậm chí còn mạnh mẽ hơn. Trong ví dụ của chúng tôi, chúng tôi tinh chỉnh EmbeddingGemma trên Tập dữ liệu Truy xuất và Hướng dẫn Y tế (MIRIAD). Mô hình kết quả, sentence-transformers/embeddinggemma-300m-medical, đạt được hiệu suất hiện đại trên nhiệm vụ của chúng tôi: truy xuất các đoạn văn bản của các bài báo y học khoa học để trả lời các câu hỏi y tế chi tiết. Nó thậm chí còn vượt trội hơn các mô hình lớn gấp đôi trong nhiệm vụ này.

Kiến trúc

EmbeddingGemma được xây dựng dựa trên nền tảng bộ chuyển đổi Gemma3, nhưng được sửa đổi để sử dụng attention hai chiều thay vì attention nhân quả (một chiều). Điều này có nghĩa là các token trước đó trong chuỗi có thể tham gia vào các token sau, biến kiến trúc từ một bộ giải mã thành một bộ mã hóa. Các mô hình mã hóa có thể vượt trội hơn LLM, là bộ giải mã, trong các nhiệm vụ embedding như truy xuất (Weller et al., 2025). Với nền tảng này, mô hình có thể xử lý đồng thời 2048 token đáng kể, đủ cho các đầu vào truy xuất điển hình, đặc biệt là khi đầu vào lớn hơn thường dẫn đến mất thông tin trong các embedding văn bản.

Ngoài nền tảng bộ mã hóa dựa trên Gemma3 mới, tạo ra các embedding token, một lớp gộp trung bình sẽ chuyển đổi các embedding token này thành embedding văn bản. Cuối cùng, hai lớp dày đặc chuyển đổi các embedding văn bản thành dạng cuối cùng của chúng, một vectơ 768 chiều.

Mô hình EmbeddingGemma đã được đào tạo bằng Học biểu diễn Matryoshka (MRL), cho phép bạn cắt ngắn đầu ra 768 chiều thành 512, 256 hoặc 128 chiều theo yêu cầu. Điều này dẫn đến xử lý hạ nguồn nhanh hơn và sử dụng ít bộ nhớ và dung lượng đĩa hơn. Xem Cách sử dụng Sentence Transformers để biết đoạn mã hiển thị cách thực hiện việc cắt ngắn này.

Mô hình đã được đào tạo bằng cách sử dụng một kho văn bản đa ngôn ngữ được tuyển chọn cẩn thận với tổng số khoảng 320 tỷ token. Tập dữ liệu độc quyền là sự kết hợp của văn bản web có sẵn công khai, mã và tài liệu kỹ thuật, và các ví dụ tổng hợp dành riêng cho nhiệm vụ. Nó đã được lọc để tránh Tài liệu Lạm dụng Tình dục Trẻ em (CSAM), dữ liệu nhạy cảm và nội dung chất lượng thấp hoặc không an toàn.

Đánh giá

EmbeddingGemma đã được đánh giá trên bộ MMTEB (Đa ngôn ngữ, v2) và MTEB (Tiếng Anh, v2), bao gồm một loạt các nhiệm vụ, miền và ngôn ngữ. Mặc dù có kích thước tham số 308M khiêm tốn, mô hình này liên tục đánh bại các đường cơ sở so sánh được trong khi vẫn giữ một dấu chân bộ nhớ rất nhỏ.

Hiệu suất MTEB (Đa ngôn ngữ, v2) Hiệu suất MTEB (Tiếng Anh, v2)

Kết quả sẽ được liệt kê trên Bảng xếp hạng MTEB chính thức. Chúng tôi loại trừ bất kỳ mô hình nào đã được đào tạo trên hơn 20% dữ liệu MTEB, để giảm thiểu khả năng trang bị quá mức.

Bản trình diễn

Cách sử dụng

EmbeddingGemma được tích hợp với nhiều công cụ phổ biến, giúp bạn dễ dàng kết hợp vào các quy trình làm việc và ứng dụng hiện có của mình. Mô hình đã được tích hợp trong Sentence Transformers, và do đó cũng trong các dự án sử dụng Sentence Transformers ở chế độ nền, chẳng hạn như LangChain, LlamaIndex, Haystack và txtai. Xem các ví dụ bên dưới để bắt đầu với framework ưa thích của bạn.

Đối với việc triển khai sản xuất, bạn có thể sử dụng Suy luận Embedding Văn bản (TEI) để phục vụ mô hình một cách hiệu quả trên các cấu hình phần cứng khác nhau và bạn có thể sử dụng Transformers.js để sử dụng trong các ứng dụng web.

Bất kể bạn chọn framework nào, bạn nên lưu ý đến các lời nhắc. Đối với các mô hình embedding, các lời nhắc được thêm vào văn bản đầu vào để cho phép mô hình phân biệt giữa các nhiệm vụ khác nhau. EmbeddingGemma đã được đào tạo với các tên và lời nhắc này, vì vậy chúng cũng nên được bao gồm khi sử dụng mô hình:

  • query: "task: search result | query: "
  • document: "title: none | text: "
  • BitextMining: "task: search result | query: "
  • Clustering: "task: clustering | query: "
  • Classification: "task: classification | query: "
  • InstructionRetrieval: "task: code retrieval | query: "
  • MultilabelClassification: "task: classification | query: "
  • PairClassification: "task: sentence similarity | query: "
  • Reranking: "task: search result | query: "
  • Retrieval-query: "task: search result | query: "
  • Retrieval-document: "title: none | text: "
  • STS: "task: sentence similarity | query: "
  • Summarization: "task: summarization | query: "

Trong Sentence Transformers, các lời nhắc querydocument được sử dụng tự động khi gọi model.encode_querymodel.encode_document, nhưng đối với các framework khác, bạn có thể phải: $

  1. chỉ định tên lời nhắc (ví dụ: “Reranking”),
  2. chỉ định chuỗi lời nhắc (ví dụ: “task: search result | query: “), hoặc
  3. thêm thủ công các lời nhắc vào văn bản đầu vào của bạn.

Các tập lệnh ví dụ sau sẽ trình bày điều này với nhiều framework khác nhau.

Sentence Transformers

Bạn sẽ cần cài đặt các gói sau:

shell pip install git+https://github.com/huggingface/transformers@v4.56.0-Embedding-Gemma-preview pip install sentence-transformers>=5.0.0

Truy xuất

Suy luận bằng Sentence Transformers khá đơn giản, hãy xem ví dụ này để tìm kiếm ngữ nghĩa:

py from sentence_transformers import SentenceTransformer

Tải xuống từ 🤗 Hub

model = SentenceTransformer(“google/embeddinggemma-300m”)

Chạy suy luận với các truy vấn và tài liệu

query = “Hành tinh nào được gọi là Hành tinh Đỏ?” documents = [ “Sao Kim thường được gọi là song sinh của Trái Đất vì kích thước và khoảng cách tương tự.”, “Sao Hỏa, được biết đến với vẻ ngoài hơi đỏ, thường được gọi là Hành tinh Đỏ.”, “Sao Mộc, hành tinh lớn nhất trong hệ mặt trời của chúng ta, có một vết đỏ nổi bật.”, “Sao Thổ, nổi tiếng với các vành đai, đôi khi bị nhầm với Hành tinh Đỏ.” ] query_embeddings = model.encode_query(query) document_embeddings = model.encode_document(documents) print(query_embeddings.shape, document_embeddings.shape)

(768,) (4, 768)

Tính toán sự tương đồng để xác định thứ hạng

similarities = model.similarity(query_embeddings, document_embeddings) print(similarities)

tensor([[0.3011, 0.6359, 0.4930, 0.4889]])

Chuyển đổi sự tương đồng thành thứ hạng

ranking = similarities.argsort(descending=True)[0] print(ranking)

tensor([1, 2, 3, 0])

Nếu bạn không tìm cách sử dụng mô hình này để Truy xuất Thông tin, thì có lẽ bạn nên sử dụng phương thức encode chung nhất cùng với lời nhắc mô hình mô tả tốt nhất nhiệm vụ hạ nguồn của bạn trong số các tùy chọn sau:

  • BitextMining: Tìm các cặp câu đã dịch bằng hai ngôn ngữ.
  • Clustering: Tìm các văn bản tương tự để nhóm chúng lại với nhau.
  • Classification: Gán nhãn được xác định trước cho văn bản.
  • InstructionRetrieval: Truy xuất các đoạn mã liên quan dựa trên hướng dẫn bằng ngôn ngữ tự nhiên.
  • MultilabelClassification: Gán nhiều nhãn cho văn bản.
  • PairClassification: Gán nhãn được xác định trước cho văn bản.
  • Reranking: Sắp xếp lại kết quả tìm kiếm dựa trên mức độ liên quan.
  • Retrieval-query: Truy xuất tài liệu dựa trên truy vấn.
  • Retrieval-document: Truy xuất tài liệu dựa trên nội dung của chúng.
  • STS: Tính toán sự tương đồng văn bản ngữ nghĩa giữa các văn bản.
  • Summarization: Tạo tóm tắt ngắn gọn về văn bản.

python from sentence_transformers import SentenceTransformer

Tải xuống từ 🤗 Hub

model = SentenceTransformer(“google/embeddinggemma-300m”)

Hãy kiểm tra các lời nhắc đã được cấu hình

print(model.prompts)

{

“query”: “task: search result | query: “,

“document”: “title: none | text: “,

“BitextMining”: “task: search result | query: “,

“Clustering”: “task: clustering | query: “,

“Classification”: “task: classification | query: “,

“InstructionRetrieval”: “task: code retrieval | query: “,

“MultilabelClassification”: “task: classification | query: “,

“PairClassification”: “task: sentence similarity | query: “,

“Reranking”: “task: search result | query: “,

“Retrieval-query”: “task: search result | query: “,

“Retrieval-document”: “title: none | text: “,

“STS”: “task: sentence similarity | query: “,

“Summarization”: “task: summarization | query: “,

}

Tính toán sự tương đồng văn bản ngữ nghĩa bằng cách sử dụng văn bản, vì vậy hãy sử dụng lời nhắc STS

texts = [ “Thời tiết hôm nay rất đẹp.”, “Ngoài trời là một ngày tuyệt vời.”, “Thị trường chứng khoán đã sụp đổ ngày hôm qua.”, “Tôi thích lập trình với Python.” ] embeddings = model.encode(texts, prompt_name=“STS”) print(embeddings.shape)

(4, 768)

Tính toán sự tương đồng

similarities = model.similarity(embeddings, embeddings) print(similarities) "”” tensor([[1.0000, 0.9305, 0.4660, 0.4326], [0.9305, 1.0000, 0.4227, 0.4434], [0.4660, 0.4227, 1.0000, 0.2638], [0.4326, 0.4434, 0.2638, 1.0000]]) "””

google/embeddinggemma-300m được đào tạo bằng MRL, nên các embedding được tạo bởi mô hình này có thể bị cắt ngắn thành các chiều thấp hơn mà không ảnh hưởng đáng kể đến hiệu suất đánh giá. Các embedding có chiều thấp hơn vừa rẻ hơn để lưu trữ trên đĩa và trong bộ nhớ, vừa nhanh hơn cho các nhiệm vụ hạ nguồn như truy xuất, phân cụm hoặc phân loại.

Trong Sentence Transformers, bạn có thể đặt chiều thấp hơn bằng cách sử dụng tham số truncate_dim khi khởi tạo SentenceTransformer hoặc khi gọi model.encode/model.encode_query/model.encode_document:

python from sentence_transformers import SentenceTransformer

Tải xuống từ 🤗 Hub

model = SentenceTransformer(“google/embeddinggemma-300m”, truncate_dim=256)

Chạy suy luận với các truy vấn và tài liệu

query = “Hành tinh nào được gọi là Hành tinh Đỏ?” documents = [ “Sao Kim thường được gọi là song sinh của Trái Đất vì kích thước và khoảng cách tương tự.”, “Sao Hỏa, được biết đến với vẻ ngoài hơi đỏ, thường được gọi là Hành tinh Đỏ.”, “Sao Mộc, hành tinh lớn nhất trong hệ mặt trời của chúng ta, có một vết đỏ nổi bật.”, “Sao Thổ, nổi tiếng với các vành đai, đôi khi bị nhầm với Hành tinh Đỏ.” ] query_embeddings = model.encode_query(query) document_embeddings = model.encode_document(documents) print(query_embeddings.shape, document_embeddings.shape)

(256,) (4, 256)

Tính toán sự tương đồng để xác định thứ hạng

similarities = model.similarity(query_embeddings, document_embeddings) print(similarities)

tensor([[0.4016, 0.6715, 0.5283, 0.5261]])

Chuyển đổi sự tương đồng thành thứ hạng

ranking = similarities.argsort(descending=True)[0] print(ranking)

tensor([1, 2, 3, 0])

Lưu ý rằng thứ hạng được giữ nguyên mặc dù sử dụng embedding nhỏ hơn 3 lần so với embedding có kích thước đầy đủ.

LangChain

Nếu bạn thích, bạn cũng có thể sử dụng HuggingFaceEmbeddings của LangChain, sử dụng Sentence Transformers ở chế độ nền. Lưu ý rằng bạn sẽ phải yêu cầu LangChain sử dụng các lời nhắc có tên “query” và “document” cho các truy vấn và tài liệu, tương ứng. Ví dụ này liên quan đến một thiết lập truy xuất thông tin đơn giản, nhưng mô hình embedding tương tự có thể được sử dụng trong các kịch bản phức tạp hơn.

Bạn sẽ cần cài đặt các gói sau:

pip install git+https://github.com/huggingface/transformers@v4.56.0-Embedding-Gemma-preview pip install sentence-transformers pip install langchain pip install langchain-community pip install langchain-huggingface pip install faiss-cpu

python from langchain.docstore.document import Document from langchain_community.vectorstores import FAISS from langchain_huggingface.embeddings import HuggingFaceEmbeddings

Tải xuống mô hình từ 🤗 Hub. Ngoài ra, hãy chỉ định sử dụng các lời nhắc “query” và “document”

như được xác định trong cấu hình mô hình, vì LangChain không tự động sử dụng chúng.

Xem https://huggingface.co/google/embeddinggemma-300m/blob/main/config_sentence_transformers.json

embedder = HuggingFaceEmbeddings( model_name=“google/embeddinggemma-300m”, query_encode_kwargs={“prompt_name”: “query”}, encode_kwargs={“prompt_name”: “document”} )

data = [ “Sao Kim thường được gọi là song sinh của Trái Đất vì kích thước và khoảng cách tương tự.”, “Sao Hỏa, được biết đến với vẻ ngoài hơi đỏ, thường được gọi là Hành tinh Đỏ.”, “Sao Mộc, hành tinh lớn nhất trong hệ mặt trời của chúng ta, có một vết đỏ nổi bật.”, “Sao Thổ, nổi tiếng với các vành đai, đôi khi bị nhầm với Hành tinh Đỏ.” ]

Tạo tài liệu cho kho vectơ

documents = [Document(page_content=text, metadata={“id”: i}) for i, text in enumerate(data)]

Tạo kho vectơ bằng FAISS. Đặt distance_strategy thành “MAX_INNER_PRODUCT” sử dụng

FlatIndexIP của FAISS ở chế độ nền, được tối ưu hóa cho tìm kiếm tích bên trong. Điều này

là những gì mô hình được đào tạo cho

vector_store = FAISS.from_documents(documents, embedder, distance_strategy=“MAX_INNER_PRODUCT”)

Tìm kiếm 3 tài liệu tương tự hàng đầu

query = “Hành tinh nào được gọi là Hành tinh Đỏ?” results = vector_store.similarity_search_with_score(query, k=3)

In kết quả

for doc, score in results: print(f"Văn bản: {doc.page_content} (điểm số: {score:.4f})”) "”” Văn bản: Sao Hỏa, được biết đến với vẻ ngoài hơi đỏ, thường được gọi là Hành tinh Đỏ. (điểm số: 0.6359) Văn bản: Sao Mộc, hành tinh lớn nhất trong hệ mặt trời của chúng ta, có một vết đỏ nổi bật. (điểm số: 0.4930) Văn bản: Sao Thổ, nổi tiếng với các vành đai, đôi khi bị nhầm với Hành tinh Đỏ. (điểm số: 0.4889) "””

LlamaIndex

EmbeddingGemma cũng được hỗ trợ trong LlamaIndex vì nó sử dụng Sentence Transformers ở chế độ nền. Để có hành vi chính xác, bạn cần chỉ định các lời nhắc truy vấn và tài liệu như được xác định trong cấu hình mô hình. Nếu không, hiệu suất của bạn sẽ không tối ưu. Tập lệnh này cho thấy một ví dụ sơ khai về cách sử dụng EmbeddingGemma với LlamaIndex, nhưng bạn cũng có thể sử dụng lớp HuggingFaceEmbedding trong các cài đặt khó hơn.

Bạn sẽ cần cài đặt các gói sau:

pip install git+https://github.com/huggingface/transformers@v4.56.0-Embedding-Gemma-preview pip install sentence-transformers pip install llama-index pip install llama-index-embeddings-huggingface pip install llama-index-vector-stores-faiss

python import faiss from llama_index.core.schema import TextNode from llama_index.core.vector_stores import VectorStoreQuery from llama_index.embeddings.huggingface import HuggingFaceEmbedding from llama_index.vector_stores.faiss import FaissVectorStore

Tải xuống từ 🤗 Hub. Ngoài ra, hãy chỉ định các lời nhắc truy vấn và tài liệu như

được xác định trong cấu hình mô hình, vì LlamaIndex không tự động tải chúng.

Xem https://huggingface.co/google/embeddinggemma-300m/blob/main/config_sentence_transformers.json

embeddings = HuggingFaceEmbedding( model_name=“google/embeddinggemma-300m”, query_instruction=“task: search result | query: “, text_instruction=“title: none | text: “, )

data = [ “Sao Kim thường được gọi là song sinh của Trái Đất vì kích thước và khoảng cách tương tự.”, “Sao Hỏa, được biết đến với vẻ ngoài hơi đỏ, thường được gọi là Hành tinh Đỏ.”, “Sao Mộc, hành tinh lớn nhất trong hệ mặt trời của chúng ta, có một vết đỏ nổi bật.”, “Sao Thổ, nổi tiếng với các vành đai, đôi khi bị nhầm với Hành tinh Đỏ.” ]

Tạo một kho vectơ mẫu

store = FaissVectorStore(faiss_index=faiss.IndexFlatIP(768)) store.add([TextNode(id=i, text=text, embedding=embeddings.get_text_embedding(text)) for i, text in enumerate(data)])

Tìm kiếm k tài liệu tương tự hàng đầu

query = “Hành tinh nào được gọi là Hành tinh Đỏ?” query_embedding = embeddings.get_query_embedding(query) results = store.query(VectorStoreQuery(query_embedding=query_embedding, similarity_top_k=3))

In kết quả

for idx, score in zip(results.ids, results.similarities): print(f"Văn bản: {data[int(idx)]} (điểm số: {score:.4f})”) "”” Văn bản: Sao Hỏa, được biết đến với vẻ ngoài hơi đỏ, thường được gọi là Hành tinh Đỏ. (điểm số: 0.6359) Văn bản: Sao Mộc, hành tinh lớn nhất trong hệ mặt trời của chúng ta, có một vết đỏ nổi bật. (điểm số: 0.4930) Văn bản: Sao Thổ, nổi tiếng với các vành đai, đôi khi bị nhầm với Hành tinh Đỏ. (điểm số: 0.4889) "””

Haystack

EmbeddingGemma cũng có thể được sử dụng với Haystack, một framework để xây dựng các ứng dụng ngôn ngữ và tìm kiếm sẵn sàng cho sản xuất. Giống như LangChain và LlamaIndex, Haystack sử dụng Sentence Transformers ở chế độ nền và yêu cầu bạn chỉ định các lời nhắc thích hợp. Ví dụ sau đây cho thấy cách thiết lập một quy trình truy xuất cơ bản bằng EmbeddingGemma với Haystack.

Bạn sẽ cần cài đặt các gói sau:

pip install git+https://github.com/huggingface/transformers@v4.56.0-Embedding-Gemma-preview pip install sentence-transformers pip install haystack-ai

python from haystack import Document, Pipeline from haystack.components.embedders import SentenceTransformersDocumentEmbedder, SentenceTransformersTextEmbedder from haystack.components.retrievers import InMemoryEmbeddingRetriever from haystack.document_stores.in_memory import InMemoryDocumentStore

Khởi tạo kho tài liệu

document_store = InMemoryDocumentStore()

Khởi tạo các embedder tài liệu và truy vấn

document_embedder = SentenceTransformersDocumentEmbedder( model=“google/embeddinggemma-300m”, encode_kwargs={“prompt_name”: “document”} ) query_embedder = SentenceTransformersTextEmbedder( model=“google/embeddinggemma-300m”, encode_kwargs={“prompt_name”: “query”} ) document_embedder.warm_up() query_embedder.warm_up()

data = [ “Sao Kim thường được gọi là song sinh của Trái Đất vì kích thước và khoảng cách tương tự.”, “Sao Hỏa, được biết đến với vẻ ngoài hơi đỏ, thường được gọi là Hành tinh Đỏ.”, “Sao Mộc, hành tinh lớn nhất trong hệ mặt trời của chúng ta, có một vết đỏ nổi bật.”, “Sao Thổ, nổi tiếng với các vành đai, đôi khi bị nhầm với Hành tinh Đỏ.”, ]

Chuyển đổi thành tài liệu Haystack và ghi vào kho tài liệu

documents = [Document(content=text, id=str(i)) for i, text in enumerate(data)] documents_with_embeddings = document_embedder.run(documents=documents)[“documents”] document_store.write_documents(documents_with_embeddings)

Tạo một quy trình truy vấn bằng cách sử dụng embedder truy vấn và trình truy xuất tương thích

query_pipeline = Pipeline() query_pipeline.add_component(“text_embedder”, query_embedder) query_pipeline.add_component(“retriever”, InMemoryEmbeddingRetriever(document_store=document_store, top_k=3)) query_pipeline.connect(“text_embedder.embedding”, “retriever.query_embedding”)

Tìm kiếm 3 tài liệu tương tự hàng đầu

query = “Hành tinh nào được gọi là Hành tinh Đỏ?” results = query_pipeline.run({“text_embedder”: {“text”: query}})

In kết quả

for document in results[“retriever”][“documents”]: print(f"Văn bản: {document.content} (điểm số: {document.score:.4f})”) "”” Văn bản: Sao Hỏa, được biết đến với vẻ ngoài hơi đỏ, thường được gọi là Hành tinh Đỏ. (điểm số: 0.6359) Văn bản: Sao Mộc, hành tinh lớn nhất trong hệ mặt trời của chúng ta, có một vết đỏ nổi bật. (điểm số: 0.4930) Văn bản: Sao Thổ, nổi tiếng với các vành đai, đôi khi bị nhầm với Hành tinh Đỏ. (điểm số: 0.4889) "””

txtai

txtai cũng tương thích với EmbeddingGemma. Giống như các framework khác, txtai sử dụng Sentence Transformers ở chế độ nền và cần các lời nhắc thích hợp để có hiệu suất tối ưu với EmbeddingGemma. Ví dụ sau đây trình bày cách thiết lập một hệ thống truy xuất cơ bản với txtai.

Bạn sẽ cần cài đặt các gói sau:

pip install git+https://github.com/huggingface/transformers@v4.56.0-Embedding-Gemma-preview pip install sentence-transformers pip install txtai

python from txtai import Embeddings

Tải xuống từ 🤗 Hub. Ngoài ra, hãy chỉ định các lời nhắc truy vấn và tài liệu như

được xác định trong cấu hình mô hình, vì txtai không tự động tải chúng.

Xem https://huggingface.co/google/embeddinggemma-300m/blob/main/config_sentence_transformers.json

embeddings = Embeddings( path=“google/embeddinggemma-300m”, method=“sentence-transformers”, instructions={ “query”: “task: search result | query: “, “data”: “title: none | text: “, } )

data = [ “Sao Kim thường được gọi là song sinh của Trái Đất vì kích thước và khoảng cách tương tự.”, “Sao Hỏa, được biết đến với vẻ ngoài hơi đỏ, thường được gọi là Hành tinh Đỏ.”, “Sao Mộc, hành tinh lớn nhất trong hệ mặt trời của chúng ta, có một vết đỏ nổi bật.”, “Sao Thổ, nổi tiếng với các vành đai, đôi khi bị nhầm với Hành tinh Đỏ.”, ]

Tạo một kho vectơ mẫu

embeddings.index(data)

Tìm kiếm k tài liệu tương tự hàng đầu

query = “Hành tinh nào được gọi là Hành tinh Đỏ?” results = embeddings.search(query, 3)

In kết quả

for idx, score in results: print(f"Văn bản: {data[int(idx)]} (điểm số: {score:.4f})”) "”” Văn bản: Sao Hỏa, được biết đến với vẻ ngoài hơi đỏ, thường được gọi là Hành tinh Đỏ. (điểm số: 0.6359) Văn bản: Sao Mộc, hành tinh lớn nhất trong hệ mặt trời của chúng ta, có một vết đỏ nổi bật. (điểm số: 0.4930) Văn bản: Sao Thổ, nổi tiếng với các vành đai, đôi khi bị nhầm với Hành tinh Đỏ. (điểm số: 0.4889) "””

Transformers.js

Bạn thậm chí có thể chạy EmbeddingGemma cục bộ 100% trong trình duyệt của bạn với Transformers.js! Nếu bạn chưa có, bạn có thể cài đặt thư viện từ NPM bằng

Recommended for You

Các thủ thuật từ OpenAI gpt-oss mà BẠN 🫵 có thể sử dụng với transformers

Các thủ thuật từ OpenAI gpt-oss mà BẠN 🫵 có thể sử dụng với transformers

Dân chủ hóa An toàn AI với RiskRubric.ai

Dân chủ hóa An toàn AI với RiskRubric.ai