BERTScore 思路是什么
BERTScore 用预训练语言模型把候选文本和参考文本都编码成向量,再按 token 级相似度算精确率、召回率与 F1。相比 BLEU、ROUGE 这类按字面 n-gram 重叠计算的指标,它对同义改写更宽容:换了说法但意思没变,分数不会掉得那么厉害。因此它适合做摘要、改写、翻译的辅助对比,用来替代「只看字面重合」的粗糙判断,但不适合单独用来判定正确性。
基本信息
| 来源 | BERTScore: Evaluating Text Generation with BERT(Zhang 等,2020) |
|---|---|
| 计算方式 | 逐 token 做贪心匹配,取最大相似度后聚合出 P / R / F1 |
| 适用平台 | Python 环境,bert-score 库;中文需选中文预训练模型或指定语言参数 |
| 口径要求 | 向量模型、语言设置、聚合方式必须固定,否则分数不可比 |
典型使用场景
- 摘要评测:同一篇文章多个模型输出,横向比较信息覆盖度
- 改写与润色:判断改写是否保留原意,避免语义漂移
- 翻译抽查:与回译、人工评审配合,作为快速筛查手段
- 回归对比:版本迭代前后在同一批样本上跑,看趋势变化
- 批量初筛:把明显离题的输出挑出来,减少人工评审量
使用示例
使用示例
# pip install bert-score
from bert_score import score
cand = ["本次变更调整了重试次数上限,改为 5 次"]
ref = ["重试次数上限由 3 次调整为 5 次"]
P, R, F1 = score(cand, ref, lang="zh", verbose=False)
print(round(float(P), 4), round(float(R), 4), round(float(F1), 4))
# 输出仅作参考:必须配合人工评审与事实核对,不能单独作为通过标准三个输出值怎么读
| 指标 | 衡量什么 | 偏高说明 |
|---|---|---|
| Precision | 候选内容有多少能被参考内容匹配 | 候选写的都在参考里,无明显加料 |
| Recall | 参考内容有多少被候选覆盖 | 候选覆盖较全,漏点少 |
| F1 | 两者调和平均 | 覆盖与精准较均衡 |
| 低分样本 | 语义漂移或漏点较多 | 优先送人工复核,而非直接判失败 |
它衡量的是相似而不是正确:把参考里的数字改错、把「不应」写成「应」,向量相似度仍然可能很高。数字与实体必须另设比对检查,例如关键字段逐个核对。
分数只在同一套设置内部可比:换向量模型、换语言参数、换聚合方式都会整体平移。做版本对比时,把模型与参数写进评测记录,与分数一起存档。