当前位置: 首页 > article >正文

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])
http://www.lryc.cn/news/2379011.html

相关文章:

  • leetcode:58. 最后一个单词的长度(python3解法)
  • 虹科应用 | 探索PCAN卡与医疗机器人的革命性结合
  • entity线段材质设置
  • [STM32] 5-1 时钟树(上)
  • 【Linux网络与网络编程】12.NAT技术内网穿透代理服务
  • 【​​HTTPS基础概念与原理​】TLS握手过程详解​​
  • 从辅助到协作:GitHub Copilot的进化之路
  • Linux运行时的参数、命令、网络、磁盘参数和日志监控
  • 鸿蒙页面布局入门
  • VTK|类似CloudCompare的比例尺实现2-vtk实现
  • 阿里巴巴开源移动端多模态LLM工具——MNN
  • 【漫话机器学习系列】256.用 k-NN 填补缺失值
  • React组件(一):生命周期
  • 金格iWebOffice控件在新版谷歌Chrome中不能加载了怎么办?
  • 实验6分类汇总
  • 如何通过交流沟通实现闭环思考模式不断实现自身强效赋能-250517
  • Python 3.11详细安装步骤(包含安装包)Python 3.11详细图文安装教程
  • [深度解析] 服务器内存(RAM)演进之路(2025):DDR5 vs HBM vs CXL 内存技术与选型指南
  • C语言输入函数对比解析
  • 【Java-EE进阶】SpringBoot针对某个IP限流问题
  • 一个指令,让任意 AI 快速生成思维导图
  • 随言随语(十二):盖章
  • FPGA图像处理(六)------ 图像腐蚀and图像膨胀
  • Spring三级缓存的作用与原理详解
  • LVDS系列12:Xilinx Ultrascale系可编程输入延迟(二)
  • ARM (Attention Refinement Module)
  • 国产免费工作流引擎star 6.5k,Warm-Flow升级1.7.2(新增案例和修复缺陷)
  • 前端二进制数据指南:从 ArrayBuffer 到高级流处理
  • 如何选择高性价比的 1T 服务器租用服务​
  • 一个可拖拉实现列表排序的WPF开源控件