欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > Milvus 视角看主流嵌入式模型(Embeddings)

Milvus 视角看主流嵌入式模型(Embeddings)

2025/5/18 20:09:30 来源:https://blog.csdn.net/FENGQIYUNRAN/article/details/147963754  浏览:    关键词:Milvus 视角看主流嵌入式模型(Embeddings)

嵌入是一种机器学习概念,用于将数据映射到高维空间,其中语义相似的数据被紧密排列在一起。嵌入模型通常是 BERT 或其他 Transformer 系列的深度神经网络,它能够有效地用一系列数字(称为向量)来表示文本、图像和其他数据类型的语义。这些模型的一个关键特性是,高维空间中向量之间的数学距离可以指示原始文本或图像语义的相似性。这一特性解锁了许多信息检索应用,例如 Google 和 Bing 等网络搜索引擎、电商网站上的产品搜索和推荐,以及最近流行的生成式人工智能中的检索增强生成 (RAG) 范式。

嵌入主要有两种类别,每种类别都会产生不同类型的向量:

  • 密集嵌入:大多数嵌入模型将信息表示为数百到数千维的浮点向量。由于大多数维度都具有非零值,因此输出被称为“密集”向量。例如,流行的开源嵌入模型 BAAI/bge-base-en-v1.5 输出 768 个浮点数的向量(768 维浮点向量)。

  • 稀疏嵌入:相比之下,稀疏嵌入的输出向量大多数维度为零,即“稀疏”向量。这些向量通常具有更高的维度(数万甚至更高),这取决于标记词汇量的大小。稀疏向量可以通过深度神经网络或文本语料库的统计分析生成。由于稀疏嵌入具有可解释性且在领域外具有更佳的泛化能力,它越来越多地被开发人员用作密集嵌入的补充。

Milvus 是一款专为矢量数据管理、存储和检索而设计的矢量数据库。通过集成主流的嵌入和重排序模型,您可以轻松地将原始文本转换为可搜索的向量,或使用强大的模型对结果进行重排序,从而为 RAG 获得更准确的结果。这种集成简化了文本转换,无需额外的嵌入或重排序组件,从而简化了 RAG 的开发和验证。

要实际创建嵌入,请参阅使用 PyMilvus 的模型生成文本嵌入。

Embedding FunctionTypeAPI or Open-sourced
openaiDenseAPI
sentence-transformerDenseOpen-sourced
SpladeSparseOpen-sourced
bge-m3HybridOpen-sourced
voyageaiDenseAPI
jinaDenseAPI
cohereDenseAPI
InstructorDenseOpen-sourced
Mistral AIDenseAPI
NomicDenseAPI
mGTEHybridOpen-sourced
Model2VecHybridOpen-sourced
GeminiHybridPrivate

示例 1:使用默认嵌入函数生成密集向量

要在 Milvus 中使用嵌入函数,首先安装 PyMilvus 客户端库以及model包含所有用于嵌入生成的实用程序的子包。

pip install "pymilvus[model]"

model子包支持各种嵌入模型,从OpenAI、Sentence Transformers、BGE M3到SPLADE预训练模型。为简单起见,本示例使用了DefaultEmbeddingFunctionMiniLM-L6-v2句子 Transformer 模型,该模型大小约为 70MB,首次使用时需要下载:

from pymilvus import model# This will download "all-MiniLM-L6-v2", a light weight model.
ef = model.DefaultEmbeddingFunction()# Data from which embeddings are to be generated 
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
print("Embeddings:", embeddings)
# Print dimension and shape of embeddings
print("Dim:", ef.dim, embeddings[0].shape)

预期输出类似于以下内容:

Embeddings: [array([-3.09392996e-02, -1.80662833e-02,  1.34775648e-02,  2.77156215e-02,-4.86349640e-03, -3.12581174e-02, -3.55921760e-02,  5.76934684e-03,2.80773244e-03,  1.35783911e-01,  3.59678417e-02,  6.17732145e-02,
...-4.61330153e-02, -4.85207550e-02,  3.13997865e-02,  7.82178566e-02,-4.75336798e-02,  5.21207601e-02,  9.04406682e-02, -5.36676683e-02],dtype=float32)]
Dim: 384 (384,)

示例 2:使用 BGE M3 模型在一次调用中生成密集和稀疏向量

在本例中,我们使用BGE M3混合模型将文本嵌入到密集向量和稀疏向量中,并利用它们检索相关文档。总体步骤如下:

  1. 使用 BGE-M3 模型将文本嵌入为密集和稀疏向量;

  2. 建立一个 Milvus 集合来存储稠密向量和稀疏向量;

  3. 将数据插入到Milvus;

  4. 搜索并检查结果。

首先,我们需要安装必要的依赖项。

from pymilvus.model.hybrid import BGEM3EmbeddingFunction
from pymilvus import (utility,FieldSchema, CollectionSchema, DataType,Collection, AnnSearchRequest, RRFRanker, connections,
)

使用 BGE M3 对文档和查询进行编码以进行嵌入检索。

# 1. prepare a small corpus to search
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 = "Who started AI research?"# BGE-M3 model can embed texts as dense and sparse vectors.
# It is included in the optional `model` module in pymilvus, to install it,
# simply run "pip install pymilvus[model]".bge_m3_ef = BGEM3EmbeddingFunction(use_fp16=False, device="cpu")docs_embeddings = bge_m3_ef(docs)
query_embeddings = bge_m3_ef([query])

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词