bert_score

GitHub
1.9k 238 简单 1 次阅读 今天MIT语言模型开发框架
AI 解读 由 AI 自动生成,仅供参考

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

强烈建议使用 GPU(因为计算密集),但未指定具体型号、显存大小或 CUDA 版本

内存

未说明

依赖
notes该工具计算密集型,通常必须使用 GPU。支持约 130 种预训练模型(如 RoBERTa, DeBERTa, BART 等),首次运行需下载模型权重。中国用户下载预训练权重可能较慢,README 提供了百度网盘链接。若使用 fast tokenizer 可能会导致分数差异。
python>=3.6
torch>=1.0.0
transformers
bert_score hero image

快速开始

BERTScore

made-with-python arxiv PyPI version bert-score Downloads Downloads License: MIT Code style: black

自动评估指标,如论文《BERTScore:用BERT评估文本生成》(ICLR 2020)中所述。目前我们支持约130种模型(请参阅此电子表格,其中列出了它们与人工评价的相关性)。当前表现最佳的模型是microsoft/deberta-xlarge-mnli,建议使用该模型代替默认的roberta-large,以获得与人工评价的最佳相关性。

最新消息:

  • 更新至0.3.13版本

    • 修复了transformers版本>4.17.0时的bug (#148)
  • 更新至0.3.12版本

    • 使get_idf_dict与DDP兼容 (#140)
    • 修复了安装问题 (#138)
  • 更新至0.3.11版本

    • 支持6个DeBERTa v3模型
    • 支持3个ByT5模型
  • 更新至0.3.10版本

    • 支持8个SimCSE模型
    • 修复了scibert的支持问题(使其与transformers >= 4.0.0兼容)
    • 添加了用于复现我们论文中部分结果的脚本(详见此文件夹
    • 支持Hugging Face Transformers中的快速分词器,可通过--use_fast_tokenizer选项启用。需要注意的是,由于分词器实现的不同,您可能会得到不同的分数 (#106)。
    • 修复了空候选字符串时召回率不为零的问题 (#107)。
    • 增加了对土耳其语BERT的支持 (#108)。
  • 更新至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版本

    • 与Hugging Face的transformers库v4.0.0及以上版本兼容。感谢各位社区贡献者(#84, #85, #86)。
  • 如需复现我们在COCO字幕数据集上的实验,请参阅#22

  • 对于中国用户来说,下载预训练权重可能会非常缓慢。我们已在百度网盘上提供了部分模型的副本:

  • Hugging Face的datasets库已将BERTScore纳入其度量指标集合中。

往期更新

  • 更新至0.3.6版本
    • 支持自定义基准文件 #74
    • --rescale-with-baseline选项现已改为--rescale_with_baseline,以与其他选项保持一致。
  • 更新至0.3.5版本
    • 与Hugging Face的transformers库v3.0.0及以上版本兼容,并进行了一些小修复 (#58, #66, #68)。
    • 进行了多项效率相关的改进 (#67, #69)。
  • 更新至0.3.4版本
    • 现在与transformers v2.11.0兼容 (#58)。
  • 更新至0.3.3版本
    • 修复了空字符串的bug issue #47
    • 支持6个ELECTRA模型和24个小型BERT模型。
    • 新增了一个Google表格,用于记录不同模型在WMT16英译任务中与人工判断的皮尔逊相关性。
    • 包含了针对WMT16英译数据调优英语预训练模型最佳层数的脚本(详情请参阅tune_layers)。
  • 更新至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 的使用方法:

  1. 评估英文文本文件:

我们提供了一些示例输入文件在 ./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 行。

  1. 评估其他语言的文本文件:

我们目前支持多语言 BERT 中的 104 种语言(完整列表)。

请指定该语言的双字母缩写。例如,对于中文文本,使用 --lang zh

更多选项请使用 bert-score -h 查看。

  1. 加载自定义模型: 请通过 --model--num_layers 指定模型路径和要使用的层数。
bert-score -r example/refs.txt -c example/hyps.txt --model path_to_my_bert --num_layers 9
  1. 可视化匹配得分:
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。

  1. 如果在使用 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 LAYERnum_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 表格,以了解支持的模型及其性能。

致谢

如果没有出色的 bertfairseqtransformers,这个仓库将无法实现。

版本历史

v0.3.132023/02/20
v0.3.122022/10/14
v0.3.112021/12/10
v0.3.102021/08/05
v0.3.92021/04/17
v0.3.82021/03/03
v0.3.72020/12/06
v0.3.62020/09/03
v0.3.52020/07/17
v0.3.42020/06/10
v0.3.32020/05/10
v0.3.22020/04/18
v0.3.12020/04/18
v0.3.02020/04/18
v0.2.32020/04/18
v0.2.22020/04/18
v0.2.12020/04/18
v0.2.02020/04/18

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|1周前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|1周前
开发框架图像Agent

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 真正成长为懂上

157.4k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.3k|★★☆☆☆|6天前
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|6天前
插件Agent图像

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 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|1周前
插件开发框架