首页 > 数据库 >Milvus向量数据库-BM25稀疏嵌入

Milvus向量数据库-BM25稀疏嵌入

时间:2024-08-13 14:28:12浏览次数:12  
标签:嵌入 BM25 语料库 稀疏 文档 Milvus 向量

milvus向量数据库

milvus支持混合搜索,多个向量同时检索,然后进行重排序最终返回结果。多向量包括(多个密集向量或稀疏向量)

Embedding嵌入

它是一种机器学习概念,用于将数据映射到高维空间,其中具有相似语义的数据被放置在一起。通常是来自 BERT 或其他 Transformer 家族的深度神经网络,嵌入模型可以有效地用一系列称为向量的数字表示文本、图像和其他数据类型的语义。这些模型的一个关键特征是高维空间中向量之间的数学距离可以指示原始文本或图像的语义相似性。

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

  • 密集嵌入(Dense embedding) :大多数嵌入模型将信息表示为数百到数千维的浮点向量。输出被称为“密集”向量,因为大多数维度具有非零值。例如,流行的开源嵌入模型 BAAI/bge-base-en-v1.5 输出 768 个浮点数的向量(768 维浮点向量)。
  • 稀疏嵌入(Sparse embedding) :相反��稀疏嵌入的输出向量大多数维度为零,即“稀疏”向量。这些向量通常具有更高的维度(数万甚至更多),这取决于标记词汇的大小。稀疏向量可以通过深度神经网络或对文本语料库进行的统计分析生成。由于它们的可解释性和观察到的更好的跨领域泛化能力,开发人员越来越多地采用稀疏嵌入作为密集嵌入的补充。

Milvus支持的稀疏嵌入函数

嵌入函数类型API 或开源
bm25稀疏开源
Splade稀疏开源
bge-m3混合开源

BM25应用

BM25是信息检索中使用的排名函数,用于估计文档与给定搜索查询的相关性。它通过包含文档长度归一化和词项频率饱和度来增强基本的词项频率方法。BM25可以通过将文档表示为词项重要性分数的向量来生成稀疏嵌入,从而在稀疏向量空间中实现高效的检索和排名。他是TF-IDF(词频-逆文档率)的升级版。

重要的几个概念

  • 分词器:用来标记文本进行分解,根据不同的语言进行分词
  • 语料库:收集所有的文档数据,评估文档内容
  • 评估词项得分:评估词项在文档中的频率和分布,计算每个标记的相关性分数,较稀有的标记获得更高的得分

from pymilvus.model.sparse.bm25.tokenizers import build_default_analyzer
from pymilvus.model.sparse import BM25EmbeddingFunction

# 有一些内置的分析器适用于几种语言,现在我们使用 'zh' 代表中文。
analyzer = build_default_analyzer(language="zh")

corpus = [
    "此前,在男单1/4决赛中,樊振东在开局0-2大比分落后的情况下实现大逆转,最终以4-3击败日本选手张本智和,挺进四强",
    "张本智和也称赞樊振东:他的这个心劲儿比我们都厉害,希望他打得更好。"
]

# 分析器可以将文本标记化为标记
tokens = analyzer(corpus[0])
print("tokens:", tokens)

 

输出分词项


['此前', '男单', '1', '4', '决赛', '中', '樊振东', '开局', '0', '2', '大比分', '落后', '情况', '下', '大逆转', '最终', '4', '3', '击败', '日本', '选手', '张本', '智', '挺进', '四强']

收集语料库的统计信息,使用__fit()__方法:

# 使用分析器实例化 BM25EmbeddingFunction bm25_ef = BM25EmbeddingFunction(analyzer) # 在语料库上拟合模型,获取语料库的统计信息 bm25_ef.fit(corpus)

然后构建查询嵌入,使用__encode_queries()__方法:

queries = ["人工智能是在哪一年成立的", "艾伦·图灵出生在哪里?"] query_embeddings = bm25_ef.encode_queries(queries) # 打印嵌入 print("Embeddings:", query_embeddings)

到这里BM25的简单使用就结束了,细细想来,这怎么应用到真实场景中。

BM25总结

BM25语料库,直接影响文档的相关打分,所有语料库选取比较难,适合业务的场景数据。(很难做到这个)或者选取一个通用的语料库。基于这个问题,本人对BM25不抱希望,所以研究SPLADE模型嵌入。

标签:嵌入,BM25,语料库,稀疏,文档,Milvus,向量
From: https://blog.csdn.net/liuyanqun_q/article/details/141162943

相关文章

  • 自学嵌入式第十七天:共用体和位运算
    qsort() voidqsort(      void*base,  //要排序的数组的首地址       size_tnmemb, //数组元素的个数        size_tsize, //单个元素的大小       int(*compar)(constvoid*,constvoid*)//比较函数......
  • 重头开始嵌入式第十八天(Linux系统编程 文件IO)
    Linux系统编程内容Linux系统编程涵盖了众多方面的知识和技术: 1. 文件I/O操作:包括打开、读取、写入、关闭文件,以及处理文件的权限、属性等。2. 进程管理:创建新进程、进程的终止、等待进程结束、进程的执行状态控制等。3. 信号处理:接收和处理系统发送的各种信号,以响......
  • 【嵌入式linux开发】旭日x3派部署自己训练的yolov5模型(安全帽识别、视频流推理、yolov
    旭日x3派部署自己训练的模型(安全帽识别、视频流推理、yolov5-6.2)windows,框架pytorch,python3.7效果模型训练模型转换1、pt模型文件转onnx2、检查onnx模型3、准备校准数据4、onnx转bin上板视频流推理1、图片推理2、视频流推理效果模型训练进官网可克隆yolov5......
  • 【python学习】使用 jieba和 rank_bm25进行文本相似度计算
    介绍如何使用jieba分词库和rank_bm25库中的BM25Okapi算法来计算文本相似度。我们将通过一个简单的示例,展示如何实现这一过程。准备句子列表首先,我们准备一个包含多个句子的列表:sentences=["这是一个测试句子","温格高赢得了2023环法冠军","北京奥......
  • 无缝融入,即刻智能[一]:Dify-LLM大模型平台,零编码集成嵌入第三方系统,42K+星标见证专属智
    无缝融入,即刻智能[一]:Dify-LLM大模型平台,零编码集成嵌入第三方系统,42K+星标见证专属智能方案1.Dify简介1.1功能情况Dify,一款引领未来的开源大语言模型(LLM)应用开发平台,革新性地融合了后端即服务(BackendasaService,BaaS)与LLMOps的精髓,为开发者铺设了一条从创意原型到高效生......
  • 嵌入式人工智能ESP32(4-PWM呼吸灯)
    1、PWM基本原理PWM(Pulse-widthmodulation)是脉冲宽度调制的缩写。脉冲宽度调制是一种模拟信号电平数字编码方法。脉冲宽度调制PWM是通过将有效的电信号分散成离散形式从而来降低电信号所传递的平均功率的一种方式。所以根据面积等效法则,可以通过对改变脉冲的时间宽度,来等效的......
  • 痞子衡嵌入式:探析i.MXRT1050在GPIO上增加RC延时电路后导致边沿中断误触发问题(上篇)
    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是i.MXRT1050在GPIO上增加RC延时电路后导致边沿中断误触发问题探析。前段时间有一个RT1052客户反馈了一个有趣的问题,他们设计得是一个带LCD屏交互的应用,应用以官方SDK里的lvgl_demo_widgets_bm例程......
  • 【嵌入式DIY实例-ESP32篇】-物联网实时电池电流和功率监控
    物联网实时电池电流和功率监控文章目录物联网实时电池电流和功率监控1、硬件准备与接线:2、代码实现3、运行结果锂离子电池是消费电子产品中最受欢迎的电池。然而,无论是新手还是经验丰富的工程师和爱好者,在选择适合他们项目的电池时都会面临问题。一个主要问......
  • 嵌入式初学-C语言-二十
    通过指针引用数组数组元素的指针数组指针:        数组中第一个元素的地址,也就是数组的首地址指针数组:        用来存放数组元素地址的数组,称之为指针数组//定义一个一般数组inta[]={1,4,9};//使用指针变量存储数组的第一个元素的首地址,也就是......
  • 嵌入式硬件操作接口实现分享
    一、前言以STM32为例,打开网络上下载的例程或者是购买开发板自带的例程,都会发现应用层中会有stm32f10x.h或者stm32f10x_gpio.h,这些文件严格来时属于硬件层的,如果软件层出现这些文件会显得很乱。使用过Linux的童鞋们肯定知道linux系统无法直接操作硬件层,打开linux或者rt_threa......