bert_score
BERTScore 是一款基于预训练语言模型 BERT 的自动化文本评估工具,专为衡量文本生成质量而设计。在传统评估方法(如 BLEU 或 ROUGE)往往仅依赖词汇重叠度、难以捕捉语义细微差别的背景下,BERTScore 通过计算生成文本与参考文本在深层语义空间中的相似度,提供了更贴近人类判断的评分标准。
这款工具特别适合自然语言处理领域的研究人员、算法工程师以及需要评估机器翻译、摘要生成或对话系统效果的开发者使用。其核心亮点在于利用上下文相关的词嵌入技术,不仅支持超过 130 种预训练模型(包括 DeBERTa、RoBERTa 等),还能根据具体任务灵活选择最佳模型以获得更高的人类评分相关性。例如,官方推荐使用 microsoft/deberta-xlarge-mnli 模型来进一步提升评估准确度。此外,BERTScore 持续更新,兼容主流深度学习框架,并针对多语言场景提供了广泛支持,让跨语言文本评估变得更加便捷可靠。无论是学术研究还是工业界应用,BERTScore 都能帮助用户高效、客观地量化文本生成系统的性能表现。
使用场景
某电商团队正在迭代智能客服系统,需要频繁评估模型生成的回复是否自然且准确,以优化用户体验。
没有 bert_score 时
- 依赖 BLEU 或 ROUGE 等传统指标,仅通过字面重合度打分,导致语义相同但措辞不同的优质回复被误判为低分。
- 人工抽检耗时费力,标注团队每天需花费数小时逐条阅读对话日志,难以覆盖全量数据,反馈周期长达数天。
- 模型迭代方向模糊,开发人员无法量化“语义相似度”的提升,只能凭感觉调整参数,常出现指标上升但用户满意度下降的错位。
- 多语言场景下缺乏统一标准,不同语种的回复质量难以横向对比,导致小语种服务优化滞后。
使用 bert_score 后
- 利用 BERT 深层语义嵌入计算相似度,精准识别出“请稍等”与“马上为您处理”这类语义一致的表达,评估结果与人类直觉高度吻合。
- 实现自动化批量评分,分钟级完成数万条对话的质量分析,将版本验证周期从三天缩短至两小时,大幅释放人力。
- 提供精确的量化依据,团队能清晰看到更换
deberta-xlarge模型后语义得分的具体提升,从而自信地推进架构升级。 - 支持全球 130+ 种预训练模型,轻松切换至对应语种的 BERT 变体,确保中文、英文及小语种回复均在同一语义维度下公平评估。
bert_score 通过将文本评估从“字面匹配”升级为“语义理解”,成为了连接算法指标与真实用户体验的关键桥梁。
运行环境要求
- 未说明
强烈建议使用 GPU(因为计算密集),但未指定具体型号、显存大小或 CUDA 版本
未说明

快速开始
BERTScore
自动评估指标,如论文《BERTScore:用BERT评估文本生成》(ICLR 2020)中所述。目前我们支持约130种模型(请参阅此电子表格,其中列出了它们与人工评价的相关性)。当前表现最佳的模型是microsoft/deberta-xlarge-mnli,建议使用该模型代替默认的roberta-large,以获得与人工评价的最佳相关性。
最新消息:
更新至0.3.13版本
- 修复了transformers版本>4.17.0时的bug (#148)
更新至0.3.12版本
更新至0.3.11版本
- 支持6个DeBERTa v3模型
- 支持3个ByT5模型
更新至0.3.10版本
更新至0.3.9版本
- 支持3个BigBird模型
- 修复了mBART和T5的若干bug
- 按照请求支持了4个mT5模型 (#93)
更新至0.3.8版本
- 支持53个新的预训练模型,包括BART、mBART、BORT、DeBERTa、T5、BERTweet、MPNet、ConvBERT、SqueezeBERT、SpanBERT、PEGASUS、Longformer、LED、Blendbot等。其中,DeBERTa在WMT16数据集上与人工评分的相关性高于我们的默认模型RoBERTa。相关性数据见此Google表格。
- 如果希望得分与人工评分有更好的相关性,请考虑使用
--model_type microsoft/deberta-xlarge-mnli或--model_type microsoft/deberta-large-mnli(速度更快)。 - 添加了DeBERTa模型的基准文件。
- 提供了生成基准文件的示例代码(详情请参阅
get_rescale_baseline)。
更新至0.3.7版本
如需复现我们在COCO字幕数据集上的实验,请参阅#22。
对于中国用户来说,下载预训练权重可能会非常缓慢。我们已在百度网盘上提供了部分模型的副本:
- roberta-large 提取码:dhe5
- bert-base-chinese 提取码:jvk7
- bert-base-multilingual-cased 提取码:yx3q
Hugging Face的
datasets库已将BERTScore纳入其度量指标集合中。
往期更新
- 更新至0.3.6版本
- 支持自定义基准文件 #74
--rescale-with-baseline选项现已改为--rescale_with_baseline,以与其他选项保持一致。
- 更新至0.3.5版本
- 更新至0.3.4版本
- 现在与transformers v2.11.0兼容 (#58)。
- 更新至0.3.3版本
- 更新至0.3.2版本
- 修复了bug:解决了v0.3.1版本中处理多条参考句时出现的问题。
- 现在我们的命令行工具支持多条参考句。
- 更新至0.3.1版本
- 引入了一个新的
BERTScorer对象,可缓存模型以避免重复加载。使用方法请参阅我们的Jupyter Notebook示例。 - 现在每个样本可以有多个参考句。
score函数现在可以接受一个字符串列表的列表作为参考,并返回候选句与其最接近的参考句之间的分数。
- 引入了一个新的
更多旧版本的更新信息,请参阅发布日志。
作者:
*: 共同贡献
概述
BERTScore 利用 BERT 的预训练上下文嵌入,通过余弦相似度匹配候选句和参考句中的词语。研究表明,它与人类对句子级别和系统级别的评价具有相关性。此外,BERTScore 还可以计算精确率、召回率和 F1 分数,这些指标对于评估不同的语言生成任务非常有用。
例如,BERTScore 的召回率可以这样计算:

如果您觉得这个仓库很有用,请引用以下文献:
@inproceedings{bert-score,
title={BERTScore: Evaluating Text Generation with BERT},
author={Tianyi Zhang* and Varsha Kishore* and Felix Wu* and Kilian Q. Weinberger and Yoav Artzi},
booktitle={International Conference on Learning Representations},
year={2020},
url={https://openreview.net/forum?id=SkeHuCVFDr}
}
安装
- Python 版本 >= 3.6
- PyTorch 版本 >= 1.0.0
可以通过 pip 从 pypi 安装:
pip install bert-score
也可以从 GitHub 主分支安装最新的不稳定版本:
pip install git+https://github.com/Tiiiger/bert_score
或者从源代码安装:
git clone https://github.com/Tiiiger/bert_score
cd bert_score
pip install .
安装完成后,您可以运行以下命令来测试安装是否成功:
python -m unittest discover
使用方法
Python 函数
总体来说,我们提供了一个 Python 函数 bert_score.score 和一个 Python 对象 bert_score.BERTScorer。函数提供了所有支持的功能,而评分器对象则会缓存 BERT 模型,以便进行多次评估。请查看我们的 示例,了解如何使用这两个接口。实现细节请参阅 bert_score/score.py。
运行 BERTScore 可能会非常消耗计算资源(因为它使用了 BERT :p)。因此,通常需要 GPU。如果您没有 GPU,可以尝试我们在 Google Colab 上的演示。
命令行界面 (CLI)
我们不仅提供了 Python 模块,还提供了一个 BERTScore 的命令行界面。以下是 CLI 的使用方法:
- 评估英文文本文件:
我们提供了一些示例输入文件在 ./example 目录下。
bert-score -r example/refs.txt -c example/hyps.txt --lang en
最终您将得到如下输出:
roberta-large_L17_no-idf_version=0.3.0(hug_trans=2.3.0) P: 0.957378 R: 0.961325 F1: 0.959333
其中“roberta-large_L17_no-idf_version=0.3.0(hug_trans=2.3.0)”是哈希码。
从 0.3.0 版本开始,我们支持使用基准分数对得分进行重新缩放:
bert-score -r example/refs.txt -c example/hyps.txt --lang en --rescale_with_baseline
您将得到:
roberta-large_L17_no-idf_version=0.3.0(hug_trans=2.3.0)-rescaled P: 0.747044 R: 0.770484 F1: 0.759045
这使得得分范围更大,更易于理解。详细信息请参阅这篇 文章。
如果有多个参考句,请使用以下命令:
bert-score -r example/refs.txt example/refs2.txt -c example/hyps.txt --lang en
其中 -r 参数可以接受任意数量的参考文件。每个参考文件的行数应与候选句文件相同。每个参考文件的第 i 行对应于候选句文件的第 i 行。
- 评估其他语言的文本文件:
我们目前支持多语言 BERT 中的 104 种语言(完整列表)。
请指定该语言的双字母缩写。例如,对于中文文本,使用 --lang zh。
更多选项请使用 bert-score -h 查看。
- 加载自定义模型:
请通过
--model和--num_layers指定模型路径和要使用的层数。
bert-score -r example/refs.txt -c example/hyps.txt --model path_to_my_bert --num_layers 9
- 可视化匹配得分:
bert-score-show --lang en -r "There are two bananas on the table." -c "On the table are two apples." -f out.png
生成的图像将保存为 out.png。
- 如果在使用 BERTScore 时看到以下提示,请忽略。这是正常现象:
Some weights of the model checkpoint at roberta-large were not used when initializing RobertaModel: ['lm_head.decoder.weight', 'lm_head.layer_norm.weight', 'lm_head.dense.bias', 'lm_head.layer_norm.bias', 'lm_head.bias', 'lm_head.dense.weight']
- This IS expected if you are initializing RobertaModel from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).
- This IS NOT expected if you are initializing RobertaModel from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).
实用技巧
- 在论文中报告哈希码(例如:
roberta-large_L17_no-idf_version=0.3.0(hug_trans=2.3.0)-rescaled),以便他人了解您使用的设置。这一做法受到 sacreBLEU 的启发。Hugging Face 的 transformers 版本变化也可能影响得分(参见 issue #46)。 - 与 BERT 不同,RoBERTa 使用 GPT2 风格的分词器,在连续出现多个空格时会生成额外的空格标记。建议使用
sent = re.sub(r' +', ' ', sent)或sent = re.sub(r'\s+', ' ', sent)来去除多余的空格。 - 在参考句上使用逆文档频率(idf)来权衡单词的重要性,可能会与人类判断更加一致。然而,当参考句集过小时,idf 得分可能会变得不准确或无效。我们现在将其设为可选。如果要使用 idf,请在使用 CLI 工具时设置
--idf,或在调用bert_score.score函数时设置idf=True。 - 当 GPU 内存不足时,可以在调用
bert_score.score函数时设置batch_size。 - 如果要使用特定模型,请在使用 CLI 工具时设置
-m MODEL_TYPE,或在调用bert_score.score函数时设置model_type=MODEL_TYPE。 - 我们根据 WMT16 评测数据集调整了使用的层数。您也可以通过设置
-l LAYER或num_layers=LAYER来选择不同的层。要为您的自定义模型找到最佳层数,请按照 tune_layers 文件夹中的说明操作。 - 局限性:由于 BERT、RoBERTa 和 XLM 等带有学习型位置嵌入的模型是在最大长度为 512 的句子上预训练的,因此 BERTScore 对于超过 510 个 token 的句子(加上 [CLS] 和 [SEP] 标记后为 512 个 token)是未定义的。超过此长度的句子会被截断。请考虑使用 XLNet,它可以支持更长的输入。
默认行为
默认模型
| 语言 | 模型 |
|---|---|
| en | roberta-large |
| en-sci | allenai/scibert_scivocab_uncased |
| zh | bert-base-chinese |
| tr | dbmdz/bert-base-turkish-cased |
| 其他 | bert-base-multilingual-cased |
默认层
请参阅此 Google 表格,以了解支持的模型及其性能。
致谢
如果没有出色的 bert、fairseq 和 transformers,这个仓库将无法实现。
版本历史
v0.3.132023/02/20v0.3.122022/10/14v0.3.112021/12/10v0.3.102021/08/05v0.3.92021/04/17v0.3.82021/03/03v0.3.72020/12/06v0.3.62020/09/03v0.3.52020/07/17v0.3.42020/06/10v0.3.32020/05/10v0.3.22020/04/18v0.3.12020/04/18v0.3.02020/04/18v0.2.32020/04/18v0.2.22020/04/18v0.2.12020/04/18v0.2.02020/04/18常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

