背景
如何评估生成的文本的好坏?
如果有人工评价的数据集:
参考句子: ,句长为r,表示为每个token
生成的句子: , 句长为p
对新生成的句子,预测和参考句子的相关性,也就是模仿人工打分:
但,实际有人工评分的数据集不多,对大规模的文本生成,让人工打分是非常耗时耗力的。和发展迅猛的文本生成模型相比,对生成的文本进行度量的方法仍旧比较滞后,常见的依然是是BLEU,ROUGE。这两种方法依赖n-gram重叠,对语义相似词汇不相似的文本对判断不友好。
因此,本文提出了BLEURT,基于BERT模型的端对端的评估模型,可以在少量甚至于无的训练数据上进行fine_tune,就可以对文本生成的评估得到很好效果。实验显示,BLEURT在WMT17~19,WEBNLG数据集上都达到SOTA。
Model
Pre-Training on Synthetic Data
在做fine_tune前,需要进行合成数据的预训练模型,旨在获得大批量多样性强的词对,提高BLEURT的泛化能力。后面的实验结果表明,加了这个预训练模型后,效果提升。模型结构如下:
Generating Sentence Pairs
数据源获取:约180w条Wikipedia的句子z
-
合成句子对:
通过以下3种方法,对句子z进行扰乱,得到句子对。- Mask-filling with BERT:对输入的句子,随机mask一些词,用BERT填满,生成新的句子。mask的方法有两种:Random Masking和Contiguous sequences of mask tokens,mask一定长度的连续的词。
- Backtranslation:通过回译来进行打乱,比如将英文翻译成另一个语种,再翻译回英语,旨在构建参考句子的变体且不改变句子语义。
- Dropping words:随机drop一些词,产生新的文本。
Pre-training Signals
得到大批量的配对句子后,对这些数据进行BERT预训练,预训练任务类型如下:
通过一系列的预训练监督信息{},对 进行增强。这里,指的是预训练任务k的目标向量。有以下四种类型的任务:
Automatic Metrics: 用表示不同度量方法;
-
Backtranslation Likelihood:在翻译模型中,衡量语义相似度。对,计算由z的回译;
比如 "英文-法语 -英文"的回译:
: 表示句子 由句子z的回译,用的长度进行归一化,得到回译的目标向量:
, 其中
假设, ,则: Textual Entailment:在MNLI数据集上,使用BERT fine_tune,对句子对关系进行推理,有entail,contradict,neural3种关系;
Backtranslation Flag:数据扰乱的方式,分mask-filling和回译。
Loss
针对不同的预训练任务,进行分类、回归损失计算,并通过weighted-sum汇总这些损失。
: 每个任务的目标向量;
任务k的损失: ,其中表示维度;
分类任务:每个类别的logit:
回归任务:
总loss:
其中::grid_search的超参数
Fine-Tuning BERT for Quality Evaluation
将生成的文本和参考文本一同输入到BERT模型中,产生向量:
使用[CLS]的向量,添加线性层,得到:
模型得分和人工打分的loss:
Experiments
Translation
模型在WMT17年到19年评估效果如下:
BLEURTbase:Bert_base
BLEURT:Bert_large
BLEURT -pre:不做Pre-Training on Synthetic Data
Data-to-Text
评估:语义,语法,流畅度
备注:
Pre-Training on Synthetic Data不是必要的,可以直接对Bert进行fine-tuning,但是加了这个预训练模型,模型效果好很多。