Press "Enter" to skip to content

【视觉指南:使用向量化BERTScore评估文本生成】

BERTScore视觉化演示

基于人工智能的文本生成明显已经进入主流。从自动化写作助手到法律文件生成、市场营销内容生成、电子邮件撰写等等,变压器模型成功地在商业用例中开拓了许多。现在,公司可以从众多的模型和训练范式中多选(有可能是超级多选)。然而,选择哪种模型不应仅靠个别报告来决定。模型的评估应该设为一个实验证明,其中利益相关者同意一组对于使用案例而言重要的评估准则。

文本生成的评估准则包括的示例;即给定此输入,生成此输出,其中X和Y是使用案例的重要覆盖范例。但这种准则可能过于具体,意味着自动评估不应过于认真地要求X的输出完全匹配Y。相反,更重要的是模型输出Y’与Y的含义相同,即使在短语或标记使用上不完全匹配。

https://browse.arxiv.org/pdf/1904.09675.pdf

BERTScore的创建是为了处理这种不精确的评估准则。BERTScore的主要思想是使用好 at 处理文本的语言模型,例如BERT,并使用它来评估两个句子的相似性,即测试集中的Y和代表模型生成文本的Y’之间的相似度。BERTScore基于标记嵌入计算相似度分数,作为对人工评估相似性的代理。在2020年,当BERTScore在ICLR中发布时,尚未普遍使用BERT本身作为文本生成的度量单位。领先的方法是使用精确的字符串匹配的BLEU和使用启发式方法匹配文本的METEOR,而这些方法都具有众所周知的问题。与此同时,BERTScore的评估仍然相关,因为现在可以使用众多现有的BERT变种之一。

计算BERTScore可以以完全向量化的方式进行,因此可以将一批参考句子(Y 帽)与其真实标签(Y)进行比较。这很高效,因为它可以利用GPU核进行并行化,并且它还使得将BERTScore本身作为对比损失函数变得容易,例如用于微调文本生成模型,即作为与下一个标记预测的交叉熵损失的替代方法。这样,你的损失函数实际上与含义对齐,而不是完全的文本。

在本文中,我将介绍如何以向量化方式计算BERTScore。首先,我们将从计算仅在两个句子之间的相似性开始,然后扩展到基于批处理的句子比较,就像你可能在训练目标中使用的那样。

可视化详情

计算步骤将使用节点图可视化工具进行可视化展示。每个块都是一个操作,它接受左侧的输入并产生右侧变量的数据。链接表示从输出到输入的数据传递,而输入上的圆圈表示数据是在适当的位置固定指定的。

操作可以是复合操作,其中包含一个”取消”图标的子图,它解构成一个子图,其输入为父输入,输出为父输出,或者它们是原始操作,表示它们无法进一步解构,并对应于低级张量操作,例如从NumPy或TensorFlow导入的操作。颜色表示数据类型,图案表示数据形状。蓝色表示数据类型为整数,而紫色/粉色表示其为小数数据类型。实线链接表示数据形状为标量,而链接中的点表示数组的维数(虚线之间的点数)。在每个图的底部是一个表格,描述了模型中携带数据的每个变量的形状、类型和操作名称。

我之前在之前的文章中介绍并使用了可视化,例如为GPT Fully VisualizedBERT Fully Visualized创建参考地图,以及关于Graph Attention NetworksLoRA精调方法的演练。

BERTScore

这里,我们将逐步讲解BERTScore的计算步骤,使用以下公式:

【视觉指南:使用向量化BERTScore评估文本生成】 四海 第3张

下面的图示大致显示了这些步骤的轮廓。给定两个句子,一个是参考句子,另一个是候选句子,对BERT嵌入进行成对相似性比较。然后针对每个参考标记,取参考标记轴上的最大相似性。最后,对重要性加权(idf weights)进行点积,并除以idf weights的总和。

https://browse.arxiv.org/pdf/1904.09675.pdf

在原始论文中,有召回BERTScore(如上所示)和准确率BERTScore,它们组合成F-BERTScore。区别完全相对于最大相似性取自哪个轴。

IDF重要性加权计算如下:

【视觉指南:使用向量化BERTScore评估文本生成】 四海 第5张

给定M个参考句子的数据集,计算每个标记出现的次数,然后除以M,将结果用作负自然对数函数的参数。

以下是计算每个标记的重要性加权的代码块。作为示例,我传入了标准情绪树库(SST)数据集的一个小型40个句子子集。输出是与词汇表大小相对应的[30523] 1D数组。该步骤只需要在预处理期间计算一次。

【视觉指南:使用向量化BERTScore评估文本生成】 四海 第6张

点击公式块中的展开图标,我们可以看到IDF重要性计算的完整计算图。我使用BERT WordPiece tokenizer为每个句子的每个标记生成ID,生成一个[40, 30523]的数组。在40轴上求和后,将[30523]的数组除以所有值都为40的[30523]数组(即M=40)。

【视觉指南:使用向量化BERTScore评估文本生成】 四海 第7张

关于“Get Tokenized 1 Hot”的更多上下文信息,我们可以看到它从文本清理开始,添加特殊标记如[CLS]和[PAD],然后WordPiece tokenizer从一个词汇表文件中读取。

【视觉指南:使用向量化BERTScore评估文本生成】 四海 第8张

接下来,我们将重要性加权传入一个R_{BERT}计算中。参考句子是“今天天气很冷”,上下文句子是“今天很冷”,与原始论文信息图中使用的示例相匹配。输出是一个单一的小数值,这里是0.7066,对应于BERTScore。

【视觉指南:使用向量化BERTScore评估文本生成】 四海 第9张

在了解BERTScore操作的内部工作原理之后,我们将详细解析其计算过程。首先,我们将两个句子输入BERT模型中进行处理。通常情况下,BERT会返回最后一个隐藏状态,其形状为[num tokens, 768]的张量,以及Pooler输出,其形状为[768]。由于我们的重要性加权是基于词汇Ids进行的,因此我在BERT中进行了修改,以返回句子的输入Ids。

【视觉指南:使用向量化BERTScore评估文本生成】 四海 第10张

有关BERT图形的详细信息,请参阅我的先前的文章

向右滚动,我们使用余弦相似度作为嵌入之间相似性的衡量标准。余弦相似度操作的输入是BERT输出的最后隐藏状态行,每一行对应一个输入句子。在生成逐对的令牌相似性之后,我们在Y轴上取最大值,该轴对应于我们的上下文句子令牌(而不是参考句子令牌)。然后,我们乘以重要性权重,再除以重要性分数的总和。

【视觉指南:使用向量化BERTScore评估文本生成】 四海 第11张

给定数组A和B,余弦相似度的计算如下:

余弦相似度公式

我们可以通过向量化的计算步骤进行运行,如下所示。首先,我们对X和Y进行点积,然后对其进行转置,以产生形状为[num_tokens, num_tokens]的分子。其次,我们通过对每个项进行平方求和来对X和Y进行归一化处理,每次得到一个形状为[num_tokens, 1]的输出(在求和过程中不丢弃维度)。然后,我们将它们相乘,得到[num_tokens, num_tokens]的结果,并将我们的分子除以此值。

【视觉指南:使用向量化BERTScore评估文本生成】 四海 第13张

批量BERTScore

到目前为止,我们已经计算出了两个句子之间的BERTScore。我将其称为2D BERTScore,因为计算步骤涉及[num_tokens, hidden_dimension]的上下文嵌入。现在,我们将扩展此计算,同时计算批量句子的BERTScore。我将其称为批量BERTScore,因为我们将在一个句子批次上进行操作,使用形状为[num_sentences, num_tokens, hidden_dimensions]的张量进行余弦相似度计算。以完全向量化的方式(无需显式循环)进行此计算可以通过启用GPU并行化来提高性能。

为了演示,我们将提交一个包含4对<参考, 候选>句子的批处理。第一对是我们的原始句子,最后一对实际上是相同的句子,用于测试是否获得1.0的相似度。

【视觉指南:使用向量化BERTScore评估文本生成】 四海 第14张

结果是一个由浮点数组成的[4]数组,每个元素表示一对句子之间的相似度比较。事实上,第四个元素具有1.0的相似度BERTScore,因为它们是相同的句子。

【视觉指南:使用向量化BERTScore评估文本生成】 四海 第15张

如果您已经正确设置了余弦相似度操作(如前所示),则无需进行任何更改即可将其扩展为批量余弦相似度计算。结果将是形状为[num_sent, num_tokens, num_tokens]的张量,对应于每对句子的逐对令牌相似性。然后,我们在最后一个维度上取最大值,并保留维度以生成一个形状为[num_sent, num_tokens, 1]的张量,称为“maximum result”。

【视觉指南:使用向量化BERTScore评估文本生成】 四海 第16张

现在我们乘以重要性得分。我们重新调整重要性得分的形状为[num_sent, 1, num_tokens],这样我们就可以得到[num_sent, 1, 1]的乘积结果。最终,这就是我们想要的,因为现在每个句子基本上只有一个得分。最后一步是除以重要性得分的总和。你可以在删除尾随的1维之前或之后进行这个操作。

【视觉指南:使用向量化BERTScore评估文本生成】 四海 第17张

结论

这个视觉指南详细介绍了BERTScore的主要公式。具体来说,我们介绍了带有重要性权重的召回BERTScore,但是将其与精确度BERTScore相结合并进行推荐的重新缩放应该是直观的。召回BERTScore项目和余弦相似度操作都可以在Github上找到。

BERTScore可以用于为文本生成的评分标准产生度量标准,以便将模型生成的文本与理想文本进行比较,而不是仅仅进行精确的文本匹配。与以前的方法(如BLEU和METEOR)相比,这种方法更能附近人类评估相似性的方式。

这里还有一个有趣的想法,就是将类似BERTScore的东西用于训练目标的损失函数。例如,如果你正在对GPT进行微调,以进行文本生成,通常情况下你会有一些任务对齐的测试集,或者你直接使用下一个标记预测作为训练目标。使用BERTScore,你不会因为生成的文本与标签具有相同的含义而对模型输出做出惩罚。不过,如果需要通过BERT运行每个模型输出,BERTScore会变得很慢。因此,需要进行一些修改。

你认为呢?这个视觉指南有帮助吗?你希望看到下一步的内容是什么?在评论中告诉我吧!

Leave a Reply

Your email address will not be published. Required fields are marked *