speechbrain.utils.bertscore 模块

提供用于 BERTscore 指标的指标类。

作者 * Sylvain de Langen 2024

摘要

BERTScoreStats

使用提供的 HuggingFace Transformers 文本编码器计算 BERTScore,采用论文 BERTScore: Evaluating Text Generation with BERT 中描述的方法。

函数

get_bert_token_mask

返回一个 token 掩码,其中特殊 token 被掩蔽。

get_bertscore_token_weights

返回用于 BERTScore 指标的 token 权重。

参考

class speechbrain.utils.bertscore.BERTScoreStats(lm: TextEncoder, batch_size: int = 64, use_idf: bool = True, sentence_level_averaging: bool = True, allow_matching_special_tokens: bool = False)[源代码]

基类:MetricStats

使用提供的 HuggingFace Transformers 文本编码器计算 BERTScore,采用论文 BERTScore: Evaluating Text Generation with BERT 中描述的方法。

BERTScore 对上下文化的 token (例如,BERT 的输出,但许多其他模型也适用) 进行操作。由于使用余弦相似度,输出范围将在 -11 之间。有关更多详细信息,请参阅链接的资源。

特殊 token (从 tokenizer 查询) 被完全忽略。

该指标的作者参考实现可以在这里找到。链接的页面详细描述了该方法,并比较了 BERTScore 与许多不同模型的人工评估的相关性。

警告

此实现可能无法严格匹配参考实现的结果。请阅读参数文档以了解差异。

参数:
  • lm (speechbrain.integrations.huggingface.TextEncoder) – 用作 LM 的 HF Transformers tokenizer 和文本编码器包装器。

  • batch_size (int, 可选) – 应一次考虑多少对话语。值越高速度越快,但可能导致 OOM。

  • use_idf (bool, 可选) – 如果启用(默认),则参考文本中的 token 会根据逆文档频率 (IDF) 进行加权,这可以降低可能携带信息较少的常见词语的影响。每个附加的句子都被视为 IDF 计算中的一个文档。

  • sentence_level_averaging (bool, 可选) – 当 True 时,最终的召回率/精确率指标将是每个测试句子的召回率/精确率的平均值,而不是每个测试 token 的平均值,例如,一个很长的句子在最终指标中的权重与一个很短的句子相同。默认值为 True,这与参考实现一致。

  • allow_matching_special_tokens (bool, 可选) – 当 True 时,非特殊 token 可以在贪婪匹配期间与特殊 token 匹配(例如 [CLS]/[SEP])。由于 padding 处理,批次大小必须为 1。默认值为 False,这与参考实现的行为不同(参见 bert_score#180)。

clear()[源代码]

清除收集到的统计信息

append(ids, predict, target)[源代码]

将输入、预测和目标附加到内部列表

参数:
  • ids (list) – 样本的字符串 ID

  • predict (list) – 模型的可分词格式预测

  • target (list) – 地面真相的可分词格式

summarize(field=None)[源代码]

总结分类指标分数。执行实际的 LM 推理和 BERTScore 估计。

完整的字段集合
  • bertscore-recall,可选地按参考 token 的 idf 加权

  • bertscore-precision,可选地按假设 token 的 idf 加权

  • bertscore-f1

参数:

field (str) – 如果提供,仅返回选定的统计信息。如果未提供,则返回所有计算出的统计信息。

返回:

如果提供了 field,则返回浮点数,否则返回包含所有计算出的统计信息的字典。

返回类型:

floatdict

speechbrain.utils.bertscore.get_bert_token_mask(tokenizer) BoolTensor[源代码]

返回一个 token 掩码,其中特殊 token 被掩蔽。

参数:

tokenizer (transformers.PreTrainedTokenizer) – 用于 BERT 模型的 HuggingFace tokenizer。

返回:

可以按 token ID 索引的掩码张量(形状为 [vocab_size])。

返回类型:

torch.BoolTensor

speechbrain.utils.bertscore.get_bertscore_token_weights(tokenizer, corpus: Iterable[str] | None = None) Tensor[源代码]

返回用于 BERTScore 指标的 token 权重。当指定 corpus 时,权重是每个 token 的逆文档频率 (IDF),从 corpus 中提取。

IDF 公式改编自 BERTScore 论文,其中参考语料库中缺失的词语使用 +1 平滑进行加权。

参数:
  • tokenizer (transformers.PreTrainedTokenizer) – 用于 BERT 模型的 HuggingFace tokenizer。

  • corpus (Iterable[str], 可选) – 用于计算 IDF 的可迭代语料库。每次迭代的值在 IDF 计算中被视为语料库中的一个文档。如果省略,则不进行 IDF 加权。

返回:

一个浮点张量,可以按 token ID 索引,形状为 [vocab_size],其中每个条目表示给定 token 的影响应乘以多少。

返回类型:

torch.Tensor