简介

BCEmbedding是由网易有道开发的中英双语和跨语种语义表征算法模型库,其中包含 EmbeddingModelRerankerModel两类基础模型。
EmbeddingModel专门用于生成语义向量,在语义搜索和问答中起着关键作用。
RerankerModel擅长优化语义搜索结果和语义相关顺序精排。
下面对embedding模型进行简单测试及初步使用,后续会结合Langchain对重排模型进行测试使用。

实战

下载及环境安装

主要参考官方git的下载及安装方式,我这里采用国内通道进行下载。
image.png
需要注意的是这里的模型是gated Model,需要登录huggingface的账号,参照hf-mirror官网的方式进行下载。主要是需要添加–token参数,在huggingface官网这里获取,指令如下:

1
huggingface-cli download --token hf_*** --resume-download --local-dir-use-symlinks False meta-llama/Llama-2-7b-hf --local-dir Llama-2-7b-hf

测试模型的Embedding能力

测试程序如下,调用embedding模型,算余弦相似度。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from BCEmbedding import EmbeddingModel
import numpy as np
from sklearn.metrics import classification_report
model = EmbeddingModel(model_name_or_path="../models/bce-embedding-base_v1")

sentence_pairs = []
thresholder = 0.9
pred_label, true_label = [], []

with open("data_test/pair_test/train.csv") as fin:
for i in fin:
sentence_pairs.append(i.strip().split("\t")[:2])
true_label.append(int(i.strip().split("\t")[2]))

for sentence_pair in sentence_pairs:
embeddings = model.encode(sentence_pair)
if np.dot(embeddings[0], embeddings[1]) > thresholder:
pred_label.append(1)
else:
pred_label.append(0)

print(classification_report(true_label, pred_label))

测试数据集

使用2个数据集进行初步测试:
测试数据集1: 讯飞|中文文本匹配数据集
示例:
image.png
测试数据集2: 新冠疫情相似句对
示例:
image.png

结论

使用m3e-base作为基线模型作为对比,分类阈值都设置为0.9.

模型名称/数据集 讯飞中文文本 新冠疫情
bce image.png image.png
m3e-base image.png image.png

从指标上可以看出:句对匹配的指标上这两个模型有较大差异:bce模型更侧重精度,m3e模型更侧重召回。
在新冠疫情数据集上bce大幅领先m3e-base,这个数据集的语义更加细粒度一些。
后续会用更多的数据集和更多的embedding模型做对比实验。

参考:

BCEmbedding: Bilingual and Crosslingual Embedding for RAG