You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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区间的相似度值。
  • 获取预期输出的方法:
    1. 使用专门针对语义相似度任务微调的CrossEncoder模型,比如cross-encoder/stsb-distilroberta-base;
    2. 在调用predict方法时添加apply_softmax=True参数,让模型对输出做归一化处理,示例代码:
    scores = model.predict([["My first", "sentence pair"], ["Second text", "pair"]], apply_softmax=True)
    
    此时输出的第二个值就是0-1之间的相似度概率,符合文档描述的预期结果。

内容的提问来源于stack exchange,提问作者user2355903

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 04:55:00