前言:

现在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化的,需要做进一步的处理

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐