在通过问题查询答案时,需要根据问题与答案的长度来进行搜索。

query和answer的长度相近,例如两句话比较语义相似度 则采用对称语义搜索;

query很短,但是需要检索出的answer是一篇比较长的文档 则采用非对称语义搜索;

根据 SBERT文档 提供的模型有:

  • 余弦相似度模型
    • msmarco-MiniLM-L-6-v3
    • msmarco-MiniLM-L-12-v3
    • msmarco-distilbert-base-v3
    • msmarco-distilbert-base-v4
    • msmarco-roberta-base-v3
  • 点积模型
    • msmarco-distilbert-base-dot-prod-v3
    • msmarco-roberta-base-ance-firstp
    • msmarco-distilbert-base-tas-b

msmarco-MiniLM-L-6-v3和msmarco-MiniLM-L-12-v3

MiniLM是一种小型和高效的语言模型,由中山大学和微软亚太研究院联合研发,用于自然语言处理任务,具有更小的模型体积和更高的计算速度。msmarco-MiniLM-L-6-v3和msmarco-MiniLM-L-12-v3是在MS MARCO数据集上训练的两个版本的MiniLM模型。

msmarco-distilbert-base-v3和msmarco-distilbert-base-v4

DistilBERT是一种基于BERT的轻量级语言模型,由Hugging Face开发。msmarco-distilbert-base-v3和msmarco-distilbert-base-v4是在MS MARCO数据集上训练的两个版本的DistilBERT模型。

msmarco-roberta-base-v3和msmarco-roberta-base-ance-firstp

RoBERTa是一种优化的BERT模型,由Facebook AI Research和University of Washington合作开发。msmarco-roberta-base-v3和msmarco-roberta-base-ance-firstp是在MS MARCO数据集上训练的两个版本的RoBERTa模型。msmarco-roberta-base-v3是基于language modeling的方式进行预训练的,而msmarco-roberta-base-ance-firstp则是基于自监督学习任务进行预训练的。

msmarco-distilbert-base-dot-prod-v3和msmarco-distilbert-base-tas-b

这两个模型是由微软公司开发的基于交互式的BERT算法,用于信息检索任务。msmarco-distilbert-base-dot-prod-v3基于点积相似度进行匹配,可用于文本匹配任务。msmarco-distilbert-base-tas-b是线性交互式BERT模型的一种变体,可用于广告搜索和推荐等应用场景。msmarco-distilbert-base-tas-b的模型大小比msmarco-distilbert-base-dot-prod-v3大,因此可能更适合一些需要更高性能的任务。

余弦相似度的模型倾向于检索较短的段落,而点积的模型则倾向于检索较长的段落

参考代码

1
2
3
4
5
6
7
from sentence_transformers import SentenceTransformer, util
model = SentenceTransformer('msmarco-distilroberta-base-v3')

query_embedding = model.encode('How big is London')
passage_embedding = model.encode('London has 9,787,426 inhabitants at the 2011 census')

print("Similarity:", util.cos_sim(query_embedding, passage_embedding))

模型加载不下来可以去Huggingface下载到本地后,加载本地模型。