教你使用bge-m3生成稀疏向量和稠密向量
本文介绍了RAG技术中语义检索的两种向量表示方法:稀疏向量(基于字词匹配)和稠密向量(基于语义)。通过BGEM3FlagModel库演示了如何生成这两种向量,并提供了处理向量格式的注意事项:稀疏向量需转换为{Long,Float}键值对,稠密向量需从np数组转为普通数组才能JSON化。代码示例展示了如何正确提取和处理这两种向量,为语义检索提供基础数据支持。
·
前言:
现在RAG这么火,对应的语义检索就是必不可少的工具,那么怎么来进行语义检索了?这里就有两个概念需要了解一下,一个是稀疏向量,类似于ES里面的根据字词来进行搜索的,另外一个就是稠密向量,根据语义来生成向量
代码:
from FlagEmbedding import BGEM3FlagModel
import json
model = BGEM3FlagModel('/data/dh/model/bge-m3',device=3)
string = "What is BGE M3?"
sentences_1 = [string]
output_1 = model.encode(sentences_1, return_dense=True, return_sparse=True, return_colbert_vecs=False)
dense_vecs = output_1['dense_vecs'].tolist()
lexical_weights = output_1['lexical_weights'][0]
regular_dict = {}
for key, value in lexical_weights.items():
regular_dict[key] = float(value)
response_dict = {}
response_dict['dense_vecs'] = dense_vecs
response_dict['lexical_weights'] = regular_dict
print(json.dumps(response_dict))
注意事项:
1、稀疏向量是 <Long,Float>的键值对
2、稠密向量是<Float>的数组
3、bge-m3生成的稠密向量是np格式的,需要转换成普通的数组才能进行JSON化
4、bge-m3生成的稀疏向量也是不能直接进行JSON化的,需要做进一步的处理
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)