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

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..)

其他参考资料

🧑‍🍳 食谱:使用 Qdrant 和 FastEmbed 进行稀疏嵌入检索