FastembedSparseTextEmbedder
使用此组件将简单字符串(如查询)嵌入为稀疏向量。
| pipeline 中的最常见位置 | 在查询/RAG 管道中,用于稀疏嵌入的检索器 |
| 强制运行变量 | “text”: 一个字符串 |
| 输出变量 | “sparse_embedding”:一个 SparseEmbedding 对象 |
| API 参考 | FastEmbed |
| GitHub 链接 | https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/fastembed |
要嵌入文档列表,请使用 FastembedSparseDocumentEmbedder,它会用计算出的稀疏嵌入来丰富文档。
概述
FastembedSparseTextEmbedder 使用 FastEmbed 支持的稀疏嵌入 模型 将字符串转换为稀疏向量。
当执行稀疏嵌入检索时,请首先使用此组件将查询转换为稀疏向量。然后,稀疏嵌入检索器将使用该向量来搜索相似或相关的文档。
兼容的模型
您可以在 FastEmbed 文档中找到支持的模型。
目前,支持的模型基于 SPLADE,这是一种为文本生成稀疏表示的技术,其中嵌入中的每个非零值都是 BERT WordPiece 词汇表中术语的重要性权重。有关更多信息,请参阅我们关于稀疏嵌入式检索器的文档。
安装
要开始使用此集成与 Haystack,请使用以下命令安装软件包:
pip install fastembed-haystack
参数
您可以设置模型将存储在缓存目录中的路径。此外,您还可以设置单个onnxruntime 会话可以使用
cache_dir= "/your_cacheDirectory"
embedder = FastembedSparseTextEmbedder(
model="prithivida/Splade_PP_en_v1",
cache_dir=cache_dir,
threads=2
)
如果您想使用数据并行编码,可以设置parallel 参数。
- 如果
parallel> 1,将使用数据并行编码。建议用于大型数据集的离线编码。 - 如果
parallel为 0,则使用所有可用核心。 - 如果为 None,则不使用数据并行处理;使用默认设置
onnxruntime线程。
如果您基于同一模型创建稀疏文本嵌入器和稀疏文档嵌入器,Haystack 会在后台利用共享资源来节省资源。
用法
单独使用
from haystack_integrations.components.embedders.fastembed import FastembedSparseTextEmbedder
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 = FastembedSparseTextEmbedder(model="prithivida/Splade_PP_en_v1")
text_embedder.warm_up()
sparse_embedding = text_embedder.run(text)["sparse_embedding"]
在 pipeline 中
目前,稀疏嵌入检索仅支持QdrantDocumentStore.
首先,使用以下命令安装软件包:
pip install qdrant-haystack
然后,尝试这个管道
from haystack import Document, Pipeline
from haystack_integrations.document_stores.qdrant import QdrantDocumentStore
from haystack_integrations.components.retrievers.qdrant import QdrantSparseEmbeddingRetriever
from haystack_integrations.components.embedders.fastembed import FastembedSparseTextEmbedder, FastembedSparseDocumentEmbedder, 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(
model="prithivida/Splade_PP_en_v1"
)
sparse_document_embedder.warm_up()
documents_with_sparse_embeddings = sparse_document_embedder.run(documents)["documents"]
document_store.write_documents(documents_with_sparse_embeddings)
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.561..)
其他参考资料
更新于 11 个月前
