微信扫码
与创始人交个朋友
我要投稿
Milvus 是一个专为 AI 应用设计的开源矢量数据库。无论您是从事机器学习、深度学习,还是其他任何与人工智能相关的项目,Milvus 都能为您提供一种强大且高效的方法来处理大规模的矢量数据。
现在,通过将模型模块集成到 PyMilvus(Milvus 的 Python SDK)中,添加嵌入和重新排序模型变得更加容易。这种集成简化了将数据转换为可搜索向量或对结果重新排序的过程,从而获得更准确的结果,例如在检索增强生成 (RAG) 中。
在本篇文章中,我们将回顾密集嵌入模型、稀疏嵌入模型和重新排序器,
Rerank模型哪款最强?详解如何轻松集成到你的项目中!
如何高效选择RAG的中文Embedding模型?揭秘最佳实践与关键标准!
并展示如何使用 Milvus Lite(Milvus 的轻量级版本)在实践中应用这些模型。Milvus Lite 可以在您的 Python 应用程序中本地运行,提供高效、简便的矢量搜索功能。
矢量嵌入通常分为两大类:密集嵌入和稀疏嵌入。
密集嵌入:高维向量,其中大多数或所有元素都是非零的,非常适合编码文本语义或模糊的含义。
稀疏嵌入:高维向量,但包含许多零元素,更适合用于编码精确或相邻的概念。
Milvus 支持这两种类型的嵌入,并提供混合搜索功能。混合搜索允许您在同一集合内的不同矢量字段上进行搜索。这些向量可以代表数据的不同方面,使用不同的嵌入模型或数据处理方法,并通过重新排序器将结果组合在一起。
接下来,我们将通过三个实际示例展示如何使用这些集成功能来生成嵌入和进行矢量搜索。
要使用 Milvus 的嵌入和重新排序功能,您首先需要使用模型包安装 pymilvus 客户端。
pip install pymilvus[model]# 如果您使用 zsh,请使用 "pip install 'pymilvus[model]'" 命令。
此步骤将安装 Milvus Lite,允许您在 Python 应用程序中本地运行 Milvus。它还包括模型子包,其中包含所有用于嵌入和重新排序的实用工具。
模型子包支持各种嵌入模型,包括 OpenAI、Sentence Transformers、BGE-M3、BM25、SPLADE 和 Jina AI 预训练模型。
为了简单起见,此示例使用基于 all-MiniLM-L6-v2 Sentence Transformer 模型的 DefaultEmbeddingFunction。该模型大约为 70MB,在首次使用时会下载:
from pymilvus import model
# 这将下载 "all-MiniLM-L6-v2" 模型,这是一个轻量级模型。
ef = model.DefaultEmbeddingFunction()
# 要生成嵌入的数据
docs = [
"Artificial intelligence was founded as an academic discipline in 1956.",
"Alan Turing was the first person to conduct substantial research in AI.",
"Born in Maida Vale, London, Turing was raised in southern England.",
]
embeddings = ef.encode_documents(docs)
print("Embeddings:", embeddings)
# 打印嵌入的维度和形状
print("Dim:", ef.dim, embeddings[0].shape)
BM25 是一种众所周知的方法,它通过计算单词的出现频率来确定查询和文档之间的相关性。在此示例中,我们将展示如何使用 BM25EmbeddingFunction 为查询和文档生成稀疏嵌入。
在 BM25 中,计算文档中的统计信息以获得 IDF(逆文档频率)非常重要,因为它可以代表文档中的模式。IDF 衡量一个单词提供了多少信息,无论该单词在所有文档中是常见还是罕见的。
from pymilvus.model.sparse import BM25EmbeddingFunction
# 1. 准备一个小型语料库进行搜索
docs = [
"Artificial intelligence was founded as an academic discipline in 1956.",
"Alan Turing was the first person to conduct substantial research in AI.",
"Born in Maida Vale, London, Turing was raised in southern England.",
]
query = "Where was Turing born?"
bm25_ef = BM25EmbeddingFunction()
# 2. 拟合语料库,以获取文档上的 BM25 模型参数
bm25_ef.fit(docs)
# 3. 存储拟合参数,以加速未来的处理
bm25_ef.save("bm25_params.json")
# 4. 加载保存的参数
new_bm25_ef = BM25EmbeddingFunction()
new_bm25_ef.load("bm25_params.json")
docs_embeddings = new_bm25_ef.encode_documents(docs)
query_embeddings = new_bm25_ef.encode_queries([query])
print("Dim:", new_bm25_ef.dim, list(docs_embeddings)[0].shape)
搜索系统的目标是快速高效地找到最相关的结果。传统上,方法如 BM25 或 TF-IDF 已被用于根据关键字匹配对搜索结果进行排序。最近的基于嵌入的余弦相似度方法虽然简单,但有时会忽略语言的微妙之处,尤其是文档与查询意图之间的交互。
这时,重新排序器(ReRanker)就派上用场了。重新排序器是一种高级 AI 模型,它获取搜索的初始结果集(通常由基于嵌入或基于令牌的搜索提供),并重新评估这些结果,以确保它们更贴近用户的意图。它不仅仅停留在术语的表面匹配上,还深入考虑了搜索查询与文档内容之间的互动。
在这个示例中,我们将使用 Jina AI Reranker。
from pymilvus.model.reranker import JinaRerankFunction
jina_api_key = "<YOUR_JINA_API_KEY>"
rf = JinaRerankFunction("jina-reranker-v1-base-en", jina_api_key)
query = "What event in 1956 marked the official birth of artificial intelligence as a discipline?"
documents = [
"In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.",
"The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.",
"In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess, demonstrating an early example of AI in game strategy.",
"The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems."
]
results = rf(query, documents)
for result in results:
print(f"Index: {result.index}")
print(f"Score: {result.score:.6f}")
print(f"Text:
Milvus:为AI应用而生的开源矢量数据库。
优点
专为AI设计: Milvus 专注于 AI 应用,能够处理大规模的矢量数据。其设计目标是提高处理海量数据的效率,使其成为机器学习、深度学习等 AI 项目的理想选择。
灵活的嵌入支持: Milvus 支持密集嵌入和稀疏嵌入,适用于多种场景,如文本语义编码和精确概念编码。还支持混合搜索,允许在同一集合内的不同向量字段中进行搜索,并结合重新排序器(ReRanker)来提高搜索结果的相关性。
高效的检索性能: Milvus 提供了高效的矢量搜索功能,能够快速返回大规模数据中的相关结果。其内置的模型模块允许轻松集成嵌入和重新排序模型,以实现更精确的结果,如在检索增强生成(RAG)中的应用。
开源和社区支持: 作为一个开源项目,Milvus 拥有活跃的开发者社区,提供了丰富的文档和持续的技术支持。用户可以自由定制和扩展其功能,以满足特定的项目需求。
跨平台部署: Milvus 具有良好的跨平台支持,能够在多种操作系统上运行,并且可以轻松集成到现有的AI应用程序中。
缺点
学习曲线较陡: 对于没有矢量搜索或数据库经验的用户来说,Milvus 的功能和配置可能比较复杂,需要一定的学习和适应时间。
资源消耗: 由于 Milvus 专注于处理大规模的矢量数据,可能需要大量的计算资源和存储空间来确保其高效运行,特别是在处理海量数据集时。
依赖第三方工具: 虽然 Milvus 提供了丰富的功能,但有时需要结合其他工具或平台(如嵌入模型和重新排序器)才能充分发挥其潜力,这可能增加系统的复杂性。
使用场景
推荐系统: Milvus 可用于构建基于内容的推荐系统,通过高效的矢量搜索为用户提供个性化推荐。例如,在电商平台上,Milvus 可用于基于用户浏览历史的商品推荐。
自然语言处理(NLP): Milvus 在 NLP 中的应用非常广泛,特别是在文本嵌入和相似度搜索中。例如,它可用于语义搜索、问答系统、文本分类和情感分析等。
计算机视觉: 在图像搜索和图像识别中,Milvus 可用于将图像转换为特征向量,并通过矢量搜索找到相似的图像。这在产品检索、视觉识别系统等场景中非常实用。
生物信息学: Milvus 在生物信息学领域也有广泛应用,如基因序列的相似度搜索、药物筛选等。
智能监控: 在智能监控系统中,Milvus 可用于实时视频数据的处理和分析,通过矢量搜索快速检索到可疑对象或行为。
总的来说,Milvus 作为一个专为 AI 应用设计的开源矢量数据库,凭借其强大的处理能力和灵活的嵌入支持,适用于各种需要高效处理和搜索大规模矢量数据的场景。尽管它有一定的学习曲线,并且对资源有较高要求,但其在 AI 项目中的广泛应用前景无疑使其成为一个值得关注的技术工具。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-11-23
FastRAG半结构化RAG实现思路及OpenAI O1-long COT蒸馏路线思考
2024-11-23
检索增强生成(RAG):解密AI如何融合记忆与搜索
2024-11-23
如何提高RAG系统准确率?12大常见痛点及巧妙解!
2024-11-23
RAG 2.0性能提升:优化索引与召回机制的策略与实践
2024-11-22
RAG技术在实际应用中的挑战与解决方案
2024-11-22
从普通RAG到RAPTOR,10个最新的RAG框架
2024-11-22
如何使用 RAG 提高 LLM 成绩
2024-11-21
提升RAG性能的全攻略:优化检索增强生成系统的策略大揭秘 | 深度好文
2024-07-18
2024-05-05
2024-07-09
2024-05-19
2024-07-09
2024-06-20
2024-07-07
2024-07-07
2024-07-08
2024-07-09
2024-11-06
2024-11-06
2024-11-05
2024-11-04
2024-10-27
2024-10-25
2024-10-21
2024-10-21