FastembedSparseDocumentEmbedder
使用此组件为文档列表添加稀疏嵌入。
| pipeline 中的最常见位置 | 在索引管道中的 DocumentWriter 之前 |
| 强制运行变量 | “documents”:文档列表 |
| 输出变量 | “documents”:一个文档列表(已添加稀疏嵌入) |
| API 参考 | FastEmbed |
| GitHub 链接 | https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/fastembed |
要计算字符串的稀疏嵌入,请使用 FastembedSparseTextEmbedder。
概述
FastembedSparseDocumentEmbedder 计算文档列表的稀疏嵌入,并将获得的向量存储在每个文档的sparse_embedding 字段中。它使用 FastEmbed 支持的稀疏嵌入 模型。
此组件计算的向量对于对一组文档执行稀疏嵌入检索是必需的。在检索过程中,代表查询的稀疏向量会与文档的向量进行比较,以识别最相似或最相关的文档。
兼容模型
您可以在 FastEmbed 文档 中找到支持的模型。
目前,支持的模型基于 SPLADE,这是一种用于生成文本稀疏表示的技术,其中嵌入中的每个非零值都是 BERT WordPiece 词汇表中术语的重要性权重。有关更多信息,请参阅 我们的文档,其中进一步解释了基于稀疏嵌入的检索器。
安装
要开始使用此集成与 Haystack,请使用以下命令安装软件包:
pip install fastembed-haystack
参数
您可以设置模型将存储在缓存目录中的路径。此外,您还可以设置单个onnxruntime 会话可以使用
cache_dir= "/your_cacheDirectory"
embedder = FastembedSparseDocumentEmbedder(
model="prithivida/Splade_PP_en_v1",
cache_dir=cache_dir,
threads=2
)
如果您想使用数据并行编码,可以设置参数parallel 和batch_size.
- 如果
parallel> 1,将使用数据并行编码。建议用于大型数据集的离线编码。 - 如果
parallel为 0,则使用所有可用核心。 - 如果为 None,则不使用数据并行处理;使用默认的
onnxruntime线程。
如果您基于同一模型创建 Sparse Text Embedder 和 Sparse Document Embedder,Haystack 会在后台使用共享资源来节约资源。
Embedding 元数据
文本文档通常包含元数据。如果元数据具有独特性且在语义上具有意义,您可以将其与文档的文本一起嵌入以改进检索。
您可以通过使用稀疏 Document Embedder 轻松实现这一点
from haystack.preview import Document
from haystack_integrations.components.embedders.fastembed import FastembedSparseDocumentEmbedder
doc = Document(text="some text",
metadata={"title": "relevant title",
"page number": 18})
embedder = FastembedSparseDocumentEmbedder(
model="prithivida/Splade_PP_en_v1",
metadata_fields_to_embed=["title"]
)
docs_w_sparse_embeddings = embedder.run(documents=[doc])["documents"]
用法
单独使用
from haystack.dataclasses import Document
from haystack_integrations.components.embedders.fastembed import FastembedSparseDocumentEmbedder
document_list = [
Document(content="I love pizza!"),
Document(content="I like spaghetti")
]
doc_embedder = FastembedSparseDocumentEmbedder()
doc_embedder.warm_up()
result = doc_embedder.run(document_list)
print(result['documents'][0])
# Document(id=...,
# content: 'I love pizza!',
# sparse_embedding: vector with 24 non-zero elements)
在 pipeline 中
目前,稀疏嵌入检索仅支持QdrantDocumentStore.
首先,使用以下命令安装软件包:
pip install qdrant-haystack
然后,尝试这个管道
from haystack import Document, Pipeline
from haystack.components.writers import DocumentWriter
from haystack_integrations.components.retrievers.qdrant import QdrantSparseEmbeddingRetriever
from haystack_integrations.document_stores.qdrant import QdrantDocumentStore
from haystack.document_stores.types import DuplicatePolicy
from haystack_integrations.components.embedders.fastembed import FastembedDocumentEmbedder, FastembedTextEmbedder
document_store = QdrantDocumentStore(
":memory:",
recreate_index=True,
use_sparse_embeddings=True
)
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."),
]
sparse_document_embedder = FastembedSparseDocumentEmbedder()
writer = DocumentWriter(document_store=document_store, policy=DuplicatePolicy.OVERWRITE)
indexing_pipeline = Pipeline()
indexing_pipeline.add_component("sparse_document_embedder", sparse_document_embedder)
indexing_pipeline.add_component("writer", writer)
indexing_pipeline.connect("sparse_document_embedder", "writer")
indexing_pipeline.run({"sparse_document_embedder": {"documents": documents}})
query_pipeline = Pipeline()
query_pipeline.add_component("sparse_text_embedder", FastembedSparseTextEmbedder())
query_pipeline.add_component("sparse_retriever", QdrantSparseEmbeddingRetriever(document_store=document_store))
query_pipeline.connect("sparse_text_embedder.sparse_embedding", "sparse_retriever.query_sparse_embedding")
query = "Who supports fastembed?"
result = query_pipeline.run({"sparse_text_embedder": {"text": query}})
print(result["sparse_retriever"]["documents"][0]) # noqa: T201
# Document(id=...,
# content: 'fastembed is supported by and maintained by Qdrant.',
# score: 0.758..)
其他参考资料
更新于 11 个月前
