FastembedTextEmbedder
此组件使用 FastEmbed 支持的 embedding 模型来计算字符串的 embeddings。
| pipeline 中的最常见位置 | 在查询/RAG 管道中的嵌入 检索器 之前 |
| 强制运行变量 | “text”: 一个字符串 |
| 输出变量 | “embedding”:一个向量(浮点数列表) |
| API 参考 | FastEmbed |
| GitHub 链接 | https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/fastembed |
此组件应用于将简单字符串(如查询)嵌入为向量。要嵌入文档列表,请使用 FastembedDocumentEmbedder,它会用计算出的 embedding(称为向量)来丰富文档。
概述
FastembedTextEmbedder 使用 FastEmbed 支持的 embedding 模型 将字符串转换为捕获其语义的向量。
当您执行 embedding 检索时,请先使用此组件将您的查询转换为向量。然后,embedding Retriever 将使用该向量来搜索相似或相关的文档。
兼容模型
您可以在 FastEmbed 文档 中找到原始模型。
目前,Massive Text Embedding Benchmark (MTEB) Leaderboard 中的大多数模型都与 FastEmbed 兼容。您可以在 支持的模型列表 中查找兼容性。
安装
要开始使用此集成与 Haystack,请使用以下命令安装软件包:
pip install fastembed-haystack
说明
MTEB 中一些较新的模型,为了更好地用于检索,需要预先在文本前添加指令。
例如,如果您使用[BAAI/bge-large-en-v1.5](https://hugging-face.cn/BAAI/bge-large-en-v1.5#model-list) 模型,则应在查询前加上指令:“passage:”.
在以下情况下,它的工作方式是:FastembedTextEmbedder:
instruction = "passage:"
embedder = FastembedTextEmbedder(
*model="*BAAI/bge-large-en-v1.5",
prefix=instruction)
参数
您可以设置模型将存储在缓存目录中的路径。此外,您还可以设置单个onnxruntime 会话可以使用的线程数。
cache_dir= "/your_cacheDirectory"
embedder = FastembedTextEmbedder(
*model="*BAAI/bge-large-en-v1.5",
cache_dir=cache_dir,
threads=2
)
如果您想使用数据并行编码,可以设置参数parallel 和batch_size.
- 如果 parallel > 1,将使用数据并行编码。这推荐用于大型数据集的离线编码。
- 如果 parallel 为 0,则使用所有可用核心。
- 如果为 None,则不使用数据并行处理;使用默认的
onnxruntime线程。
如果您基于相同的模型创建 Text Embedder 和 Document Embedder,Haystack 会在后台使用相同的资源以节省资源。
用法
单独使用
from haystack_integrations.components.embedders.fastembed import FastembedTextEmbedder
text = """It clearly says online this will work on a Mac OS system.
The disk comes and it does not, only Windows.
Do Not order this if you have a Mac!!"""
text_embedder = FastembedTextEmbedder(model="BAAI/bge-small-en-v1.5")
text_embedder.warm_up()
embedding = text_embedder.run(text)["embedding"]
在 pipeline 中
from haystack import Document, Pipeline
from haystack.components.retrievers.in_memory import InMemoryEmbeddingRetriever
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack_integrations.components.embedders.fastembed import FastembedDocumentEmbedder, FastembedTextEmbedder
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(content="fastembed is supported by and maintained by Qdrant."),
]
document_embedder = FastembedDocumentEmbedder()
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", FastembedTextEmbedder())
query_pipeline.add_component("retriever", InMemoryEmbeddingRetriever(document_store=document_store))
query_pipeline.connect("text_embedder.embedding", "retriever.query_embedding")
query = "Who supports FastEmbed?"
result = query_pipeline.run({"text_embedder": {"text": query}})
print(result["retriever"]["documents"][0]) # noqa: T201
# Document(id=...,
# content: 'FastEmbed is supported by and maintained by Qdrant.',
# score: 0.758..)
其他参考资料
更新于 大约 1 年前
