sentence_transformers CrossEncoder输出与预期不符问题咨询
CrossEncoder输出双值的疑问解答
问题描述
我参考sentence_transformers的CrossEncoder相关文档编写了以下代码:
from sentence_transformers.cross_encoder import CrossEncoder model = CrossEncoder('bert_base_uncased') scores = model.predict([["My first", "sentence pair"], ["Second text", "pair"]])
运行后发现每个句子对输出两个值,但文档说明CrossEncoder会输出一个0到1之间的数值,表示输入句子对的相似度。请问这两个值的含义是什么,为何与预期输出不符?
解答
- 双值输出的原因:你使用的
bert_base_uncased是基础BERT预训练模型,并非针对语义相似度任务微调的CrossEncoder专用模型。这类基础模型的默认输出是二分类任务的logits(原始未归一化输出),对应两个类别的得分。 - 值的具体含义:两个值分别对应句子对属于“不相似”和“相似”类别的原始logits,没有经过sigmoid或softmax归一化,因此不是0-1区间的相似度值。
- 获取预期输出的方法:
- 使用专门针对语义相似度任务微调的CrossEncoder模型,比如
cross-encoder/stsb-distilroberta-base; - 在调用
predict方法时添加apply_softmax=True参数,让模型对输出做归一化处理,示例代码:
此时输出的第二个值就是0-1之间的相似度概率,符合文档描述的预期结果。scores = model.predict([["My first", "sentence pair"], ["Second text", "pair"]], apply_softmax=True) - 使用专门针对语义相似度任务微调的CrossEncoder模型,比如
内容的提问来源于stack exchange,提问作者user2355903
相关产品推荐
相关产品推荐

