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

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
)

如果您想使用数据并行编码,可以设置参数parallelbatch_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 管道