FastembedDocumentEmbedder
此组件使用 FastEmbed 支持的模型计算文档列表的嵌入。
| pipeline 中的最常见位置 | 在索引管道中的 DocumentWriter 之前 |
| 强制运行变量 | “documents”:文档列表 |
| 输出变量 | “documents”:文档列表(已添加嵌入信息) |
| API 参考 | FastEmbed |
| GitHub 链接 | https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/fastembed |
此组件应用于嵌入文档列表。要嵌入字符串,请使用 FastembedTextEmbedder。
概述
FastembedDocumentEmbedder 计算文档列表的嵌入,并将获得的向量存储在每个文档的嵌入字段中。它使用 FastEmbed 支持的 嵌入模型。
此组件计算的向量对于对文档集合执行嵌入检索是必需的。在检索时,表示查询的向量将与文档的向量进行比较,以查找最相似或最相关的文档。
兼容模型
您可以在 FastEmbed 文档 中找到原始模型。
如今,大规模文本嵌入基准 (MTEB) 排行榜上的大多数模型都与 FastEmbed 兼容。您可以在 支持的模型列表 中查找兼容性。
安装
要开始使用此集成与 Haystack,请使用以下命令安装软件包:
pip install fastembed-haystack
参数
您可以设置模型将存储在缓存目录中的路径。此外,您还可以设置单个onnxruntime 会话可以使用的线程数。
cache_dir= "/your_cacheDirectory"
embedder = FastembedDocumentEmbedder(
*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 将在后台使用相同的资源以节省资源。
Embedding 元数据
文本文档通常附带一组元数据。如果它们具有辨识度和语义意义,您可以将它们与文档文本一起 embedding,以提高检索效果。
您可以通过使用 Document Embedder 轻松做到这一点
from haystack.preview import Document
from haystack_integrations.components.embedders.fastembed import FastembedDocumentEmbedder
doc = Document(text="some text",
metadata={"title": "relevant title",
"page number": 18})
embedder = FastembedDocumentEmbedder(
model="BAAI/bge-small-en-v1.5",
batch_size=256,
metadata_fields_to_embed=["title"]
)
docs_w_embeddings = embedder.run(documents=[doc])["documents"]
用法
单独使用
from haystack.dataclasses import Document
from haystack_integrations.components.embedders.fastembed import FastembedDocumentEmbedder
document_list = [
Document(content="I love pizza!"),
Document(content="I like spaghetti")
]
doc_embedder = FastembedDocumentEmbedder()
doc_embedder.warm_up()
result = doc_embedder.run(document_list)
print(result['documents'][0].embedding)
# [-0.04235665127635002, 0.021791068837046623, ...]
在 pipeline 中
from haystack import Document, Pipeline
from haystack.components.writers import DocumentWriter
from haystack.components.retrievers.in_memory import InMemoryEmbeddingRetriever
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.document_stores.types import DuplicatePolicy
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()
writer = DocumentWriter(document_store=document_store, policy=DuplicatePolicy.OVERWRITE)
indexing_pipeline = Pipeline()
indexing_pipeline.add_component("document_embedder", document_embedder)
indexing_pipeline.add_component("writer", writer)
indexing_pipeline.connect("document_embedder", "writer")
indexing_pipeline.run({"document_embedder": {"documents": documents}})
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..)
其他参考资料
🧑🍳 食谱:使用 FastEmbed 生成嵌入的 RAG 管道
更新于 大约 1 年前
