文档API 参考📓 教程🧑‍🍳 食谱🤝 集成💜 Discord🎨 Studio
文档

SentenceTransformersTextEmbedder

SentenceTransformersTextEmbedder 使用与 Sentence Transformers 库兼容的嵌入模型,将字符串转换为捕捉其语义的向量。

在执行嵌入检索时,请首先使用此组件将查询转换为向量。然后,嵌入检索器将使用该向量来搜索相似或相关的文档。

pipeline 中的最常见位置在查询/RAG 管道中的嵌入 检索器 之前
强制运行变量"text": 字符串
输出变量"embedding": 浮点数列表
API 参考Embedders (嵌入器)
GitHub 链接https://github.com/deepset-ai/haystack/blob/main/haystack/components/embedders/sentence_transformers_text_embedder.py

概述

此组件应用于嵌入单个字符串(如查询)到向量。如果要嵌入文档列表,请使用 SentenceTransformersDocumentEmbedder,它会用计算出的嵌入(称为向量)来丰富文档。

身份验证

只有在通过 Serverless Inference API 或 Inference Endpoints 访问私有或受限模型时,才需要使用 Hugging Face API Token 进行身份验证。

该组件使用HF_API_TOKENHF_TOKEN 环境变量,或者您可以在初始化时传递 Hugging Face API Token。有关更多信息,请参阅我们的 Secret Management 页面。

text_embedder = SentenceTransformersTextEmbedder(token=Secret.from_token("<your-api-key>"))

兼容的模型

默认嵌入模型是 `sentence-transformers/all-mpnet-base-v2`。您可以在初始化此组件时通过model 参数指定其他模型。

请参阅 Sentence Transformers 文档中的原始模型。

如今,Massive Text Embedding Benchmark (MTEB) Leaderboard 中的大多数模型都与 Sentence Transformers 兼容。
您可以在模型卡片中查找兼容性:与 BGE 模型相关的示例

说明

MTEB 中一些较新的模型,为了更好地用于检索,需要预先在文本前添加指令。
例如,如果您使用 BAAI/bge-large-en-v1.5,则应在查询前加上以下指令:“Represent this sentence for searching relevant passages:”(将此句子表示为搜索相关段落:)

在以下情况下,它的工作方式是:SentenceTransformersTextEmbedder:

instruction = "Represent this sentence for searching relevant passages:"
embedder = SentenceTransformersTextEmbedder(
	*model="*BAAI/bge-large-en-v1.5",
	prefix=instruction)  

👍

如果您创建一个基于相同模型的 Text Embedder 和 Document Embedder,Haystack 会在后台处理以使用相同的资源,从而节省资源。

用法

单独使用

from haystack.components.embedders import SentenceTransformersTextEmbedder

text_to_embed = "I love pizza!"

text_embedder = SentenceTransformersTextEmbedder()
text_embedder.warm_up()

print(text_embedder.run(text_to_embed))

# {'embedding': [-0.07804739475250244, 0.1498992145061493,, ...]}

在 pipeline 中

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

document_store = InMemoryDocumentStore(embedding_similarity_function="cosine")

documents = [Document(content="My name is Wolfgang and I live in Berlin"),
             Document(content="I saw a black horse running"),
             Document(content="Germany has many big cities")]

document_embedder = SentenceTransformersDocumentEmbedder()
document_embedder.warm_up()
documents_with_embeddings = document_embedder.run(documents)['documents']
document_store.write_documents(documents_with_embeddings)

query_pipeline = Pipeline()
query_pipeline.add_component("text_embedder", SentenceTransformersTextEmbedder())
query_pipeline.add_component("retriever", InMemoryEmbeddingRetriever(document_store=document_store))
query_pipeline.connect("text_embedder.embedding", "retriever.query_embedding")

query = "Who lives in Berlin?"

result = query_pipeline.run({"text_embedder":{"text": query}})

print(result['retriever']['documents'][0])

# Document(id=..., mimetype: 'text/plain', 
#  text: 'My name is Wolfgang and I live in Berlin')

相关链接

在我们的 API 参考中查看参数详情