赞
踩
在传统的文本生成任务中,对于模型生成的文本,往往很难评估他们的质量,对于以往的做饭,一般会通过人工评估的方式来评选最优的模型,但是其评估过程是非常昂贵和耗时的,而且每个人的评估标准会不一致,从而导致评分出现误差,当研究人员对模型进行更新或改进之后,该过程又得重复进行,因此,影响了很多研究人员的效率。为了改善这个问题,很多学者开始对这方面进行研究,希望得出一些有效的自动评估方法,来自动对文本生成模型进行评估,这过程衍生出了很多方法,笔者通过查看近些年来的一些相关文献,对这些方法大致分为了以下三大类:
本文将对这三大类方法分别展开具体介绍,并介绍每种方法的适用场景和局限性。
基于词重叠率的方法是指基于词汇的级别计算模型的生成文本和人工的参考文本之间的相似性,比较经典的代表有BLEU、METEOR和ROUGE,其中BLEU和METEOR常用于机器翻译任务,ROUGE常用于自动文本摘要。
在2002年,微软提出了一个比较综合的机器翻译评估指标——BLEU,该指标认为机器翻译效果如果比较好的话,那么翻译出来的文本应该与人工给定的参考翻译有比较多的重叠之处,因此,通过计算生成文本和参考文本中共同的n-gram,来计算两者的相似度。
在介绍BLEU指标的计算公式前,先介绍一个指标,即修正的n-gram精确度(Modified n-gram precision),我们知道,在考察模型生成的文本的质量时,我们习惯会将模型生成的文本与人工的参考文本进行对比,如果生成的文本与人工的参考文本有比较多的重复片段时,则认为两者越相似。因此,按照这种思想,我们会想到用n-gram精确度来计算两个文本之间的相似性,即生成的文本中出现在参考文本中的n-gram的次数总和在生成文本中所有n-gram次数总和的占比,这个占比越高,则说明相似性越高,但是,如果直接采用这样的计算方式,会出现一个问题,可以看下面一个机器翻译中极端的场景:
给定一个模型生成的翻译文本和两个参考翻译文本,此时,模型生成的文本全是“the”,如果采用1-gram精确度计算的话,则此时计算出来的精确度为7/7,但是这时生成的文本质量其实是不好的,因此,BLEU提出了一种修正的方式,即修正的n-gram精确度:
P
n
=
∑
n
−
g
r
a
m
∈
C
Count
c
l
i
p
(
n-gram
)
∑
n
−
g
r
a
m
∈
C
Count
(
n-gram
)
P_n = \frac{\sum_{n-gram\in C} {\text { Count }_{c l i p}(\text{n-gram})}}{\sum_{n-gram\in C} {\text { Count }(\text{n-gram})}}
Pn=∑n−gram∈C Count (n-gram)∑n−gram∈C Count clip(n-gram)其中,
Count
c
l
i
p
(
n-gram
)
=
min
(
C
o
u
n
t
,
Max
−
R
e
f
−
C
o
u
n
t
)
\text { Count }_{c l i p}(\text{n-gram}) = \min \left(Count, \operatorname{Max}_{-}Ref_{-} Count\right)
Count clip(n-gram)=min(Count,Max−Ref−Count),即对于分子的计算,这时会对那些出现在参考文本中的n-gram,只取生成文本中出现的次数和参考文本中出现的最大次数两者之间的最小值,即对于上面的案例,采用修正的1-gram精确度计算的值应该是2/7,这样一来,那些重复出现的n-gram也会得到一个相对比较低的精确度。通过上面的公式,可以推广到2-gram、3-gram、4-gram等,作者在实验中一般会计算到4-gram,然后对四者得到的精确度进行加权平均,但是我们知道,随着
n
n
n的增大,计算得到的精确度肯定越来越小,如果直接对它们进行加权平均可能会导致后面的n-gram的贡献值会比较小,因此,作者对他们先取了对数,然后再进行平均,即:
exp
(
∑
n
=
1
N
w
n
log
p
n
)
\exp \left(\sum_{n=1}^{N} w_{n} \log p_{n}\right)
exp(n=1∑Nwnlogpn)其中
N
N
N表示最大的
n
n
n,一般取到4,
w
n
w_{n}
wn表示每项n-gram对应的权重,可以取
w
n
=
1
/
N
w_{n}=1 / N
wn=1/N,即算术平均。
不过,单独采用上面修正的n-gram精确度进行计算还是会有问题,我们可以看下面一个案例:
此时,模型生成的文本非常短,只有两个词汇,并且在参考文本中都包括这两个词汇,因此,采用上面的计算公式得到的精确度还是1,但是这显然是不合理的,因此,对于这种太短的文本,需要对他们施加一些惩罚,作者提出了如下的惩罚机制:
B
P
=
{
1
if
c
>
r
e
(
1
−
r
/
c
)
if
c
≤
r
\mathrm{BP}=\left\{
通过前面两节的介绍,我们可以得出BLEU的计算公式如下:
B
L
E
U
=
B
P
⋅
exp
(
∑
n
=
1
N
w
n
log
p
n
)
\mathrm{BLEU}=\mathrm{BP} \cdot \exp \left(\sum_{n=1}^{N} w_{n} \log p_{n}\right)
BLEU=BP⋅exp(n=1∑Nwnlogpn)其中
B
P
=
{
1
if
c
>
r
e
(
1
−
r
/
c
)
if
c
≤
r
\mathrm{BP}=\left\{
需要注意的是,BLEU由于只计算精确率,因此,要求生成的文本与真实文本之间有较多的重叠,比较适合于机器翻译任务中,但是对于其他任务,比如闲聊对话任务,由于回答有比较广的开放性,因此,很难要求生成文本与真实文本之间必须有重叠,此时采用BLEU就不见得是一种好的选择。
由于BLEU只考虑了精确率而没有考虑召回率,因此,在2004年,Chin-Yew Lin提出了一种新的评估方法ROUGE,该方法主要是从召回率的角度计算生成文本与参考文本之间的相似性,比较适用于文本摘要任务,因为文本摘要我们更考察生成文本包括了多少参考文本中包含的信息。作者在论文中总共提出了4种不同的计算方式:ROUGE-N、ROUGE-L、ROUGE-W、ROUGE-S。
ROUGE-N计算生成文本中,出现在参考文本中的n-gram次数总和在参考文本中各个n-gram次数总和的占比,其计算公式如下:
ROUGE-N
=
∑
S
∈
{
Referemce Summaries
}
∑
gram
n
∈
S
Count
match
(
gram
n
)
∑
S
∈
{
Referemce Summaries
}
∑
gram
n
∈
S
Count
(
gram
n
)
\text{ROUGE-N} = \frac{\sum_{S \in\{\text {Referemce Summaries}\}} \sum_{\operatorname{gram}_{n} \in S} \operatorname{Count}_{\text {match}}\left(\operatorname{gram}_{n}\right)}{\sum_{S \in\{\text {Referemce Summaries}\}} \sum_{\operatorname{gram}_{n} \in S} \operatorname{Count}\left(\operatorname{gram}_{n}\right)}
ROUGE-N=∑S∈{Referemce Summaries}∑gramn∈SCount(gramn)∑S∈{Referemce Summaries}∑gramn∈SCountmatch(gramn) 其中
S
S
S表示参考文本集中的某一条,
g
r
a
m
n
gram_n
gramn表示n-gram,
Count
match
(
gram
n
)
\operatorname{Count}_{\text {match}}\left(\operatorname{gram}_{n}\right)
Countmatch(gramn)表示与参考文本匹配到的n-gram的次数。可以发现,ROUGE-N的分母此时是各个参考文本的n-gram的次数总和,因此,其代表的是召回率。
ROUGE-L则通过计算生成文本与参考文本的最长公共子序列的长度LCS来计算文本的相似性,假设
X
X
X为参考文本,其长度为
m
m
m,
Y
Y
Y为生成文本,其长度为
n
n
n。则ROUGE-L的计算公式如下:
R
l
c
s
=
L
C
S
(
X
,
Y
)
m
P
l
c
s
=
L
C
S
(
X
,
Y
)
n
F
l
c
s
=
(
1
+
β
2
)
R
l
c
s
P
l
c
s
R
l
c
s
+
β
2
P
l
c
s
其中,
L
C
S
(
X
,
Y
)
L C S(X, Y)
LCS(X,Y)表示
X
X
X和
Y
Y
Y的最长公共子序列,
β
\beta
β为参数,
β
=
P
l
c
s
/
R
l
c
s
\beta=P_{l c s} / R_{l c s}
β=Plcs/Rlcs,当其取值为无穷大时,则此时相当于只考虑$R_{l c s} $。举个例子:
此时有两条生成文本C1和C2,以及一条参考文本R1,令 β = 1 \beta=1 β=1,则此时C1的ROUGE-L为3/4,而C2的ROUGE-L为2/4,因此C1比C2好。
当生成文本和参考文本都同时包含多个句子时,则此时的计算方式需要稍微调整一下,假设给定一个参考文本
R
R
R,含有
u
u
u个句子和
m
m
m个单词,以及一个生成文本
C
C
C,含有
v
v
v个句子和
n
n
n个单词,则此时ROUGE-L的计算公式改为如下:
R
l
c
s
=
∑
i
=
1
u
L
C
S
∪
(
r
i
,
C
)
m
P
l
c
s
=
∑
i
=
1
u
L
C
S
∪
(
r
i
,
C
)
n
F
l
c
s
=
(
1
+
β
2
)
R
l
c
s
P
l
c
s
R
l
c
s
+
β
2
P
l
c
s
由于ROUGE-L在计算最长公共子序列时,对于子序列的连续性没有限制,即两个词汇之间可以有任意长度的代沟,但是这是不合理的,我们可以看下面一个案例:
可以发现,上面的两个生成文本与参考文本都具有同样的最大公共子序列,此时ROUGE-L的值一样大,但是第一个生成文本的匹配是连续的,而第二个生成文本的匹配是不连续的,因此,应该是第一个生成文本的质量相对好一点才对,所以ROUGE-W在ROUGE-L的基础上对连续性添加一个权重,其计算公式如下:
R
w
l
c
s
=
f
−
1
(
W
L
C
S
(
X
,
Y
)
f
(
m
)
)
P
w
l
c
s
=
f
−
1
(
W
L
C
S
(
X
,
Y
)
f
(
n
)
)
F
w
l
c
s
=
(
1
+
β
2
)
R
w
l
c
s
P
w
l
c
s
R
w
l
c
s
+
β
2
P
w
l
c
s
f
(
x
+
y
)
>
f
(
x
)
+
f
(
y
)
f(x+y)>f(x)+f(y)
f(x+y)>f(x)+f(y)这样才能使得连续性的序列其权重更大,因此,加权函数可以取为
f
(
k
)
=
k
α
f(k)=k^{\alpha}
f(k)=kα,其中
α
>
1
\alpha>1
α>1,一般会令
α
=
2
\alpha=2
α=2,而
f
−
1
f^{-1}
f−1则为
f
f
f的逆函数,
W
L
C
S
(
X
,
Y
)
W L C S(X, Y)
WLCS(X,Y)的计算过程如下:
因此,采用ROUGE-W计算时,C1和C2的分数分别为4/7和2/7,此时C1比C2好。
ROUGE-S的计算更加简单,ROUGE-S先对生成文本和参考文本中的2-gram进行组合,此时的2-gram不一定是连续的,可以是有间隔的,称为Skip-Bigram,然后计算生成文本中出现在参考文本的Skip-Bigram在参考文本所有Skip-Bigram的比重,其计算公式如下:
R
s
k
i
p
2
=
S
K
I
P
2
(
X
,
Y
)
C
(
m
,
2
)
P
s
k
i
p
2
=
S
K
I
P
2
(
X
,
Y
)
C
(
n
,
2
)
F
s
k
i
p
2
=
(
1
+
β
2
)
R
s
k
i
p
2
P
s
k
i
p
2
R
s
k
i
p
2
+
β
2
P
s
k
i
p
2
此时参考文本R1的Skip-Bigram有(“police killed”, “police the”, “police gunman”, “killed the”, “killed gunman”, “the gunman”),C1与R1的共同Skip-Bigram有(“police the”, “police gunman”, “the gunman”),C2与R1的共同Skip-Bigram有(“the gunman”),C3与R1的共同Skip-Bigram有(“police killed”, “the gunman”),因此,当 β = 1 \beta=1 β=1时,三个生成文本的ROUGE-S分别为0.5、0.167和0.333。由于ROUGE-S考虑了更多的2-gram组合,因此,在实验中往往取得比较不错的效果。
2005年,Alon Lavie等人也提出了一个新的指标METEOR用于机器翻译,我们知道,BLEU只考虑精确率,METEOR则同时考虑精确率和召回率,采用加权的F值来作为评估指标。
METEOR在计算前,先对模型生成的文本与参考文本进行文本对齐,对齐的步骤依次采用以下三个模块:
经过上面三个步骤后,将得到一个对齐后的文本,假设文本的词汇数量为
m
m
m,生成文本的词汇数量为
t
t
t,参考文本的词汇数量为
r
r
r,则可以计算精确率
P
=
m
/
t
P=m / t
P=m/t和召回率
R
=
m
/
r
R=m / r
R=m/r,计算完精确率和召回率后,可以计算加权的F值:
F
mean
=
P
⋅
R
α
⋅
P
+
(
1
−
α
)
⋅
R
F_{\text {mean}}=\frac{P \cdot R}{\alpha \cdot P+(1-\alpha) \cdot R}
Fmean=α⋅P+(1−α)⋅RP⋅R其中
α
\alpha
α为超参,由于上面F值的计算是基于unigram的,因此,没法反映生成的文本的流畅性,因此,为了引入流畅性的考核,作者将对齐后的文本分为了
c
h
ch
ch小的分块,这样一来,每个分块就类似于n-gram的形式,然后计算一个惩罚参数:
P
e
n
=
γ
⋅
f
r
a
g
β
P e n=\gamma \cdot f r a g^{\beta}
Pen=γ⋅fragβ其中,
f
r
a
g
=
c
h
/
m
f r a g=c h / m
frag=ch/m,
β
\beta
β和
γ
(
0
≤
γ
≤
1
)
\gamma(0 \leq \gamma \leq 1)
γ(0≤γ≤1)都为超参。最后,METEOR指标的计算公式如下:
score
=
(
1
−
P
e
n
)
⋅
F
mean
\text{score}=(1-P e n) \cdot F_{\text {mean}}
score=(1−Pen)⋅Fmean
虽然METEOR的计算不难,但是引入了三个参数
α
\alpha
α、
β
\beta
β和
γ
\gamma
γ,对这三个参数的取值得通过训练模型,使得最终得到的METEOR分数与人工标注的分数相关性最大,因此,增加了模型训练的成本,另一方面,需要人工标注一批数据作为训练集和测试集,而且WN synonymy模块的同义词词库也很难获取到,所以笔者对这种方法并不觉得有多方便。
在2012年,Vasile Rus等人提出了基于词向量的方法——Greedy Matching,该方法的基本思想是先计算参考文本中每个词语与生成文本中每个词语的最高词向量相似度,然后进行加总平均,接着反过来计算生成文本中每个词语与参考文本中每个词语的最高词向量相似度,同样对每个词语进行加总平均,最后将两个值进行平均作为参考文本和生成文本的相似度。
记
R
R
R和
R
^
\hat{R}
R^分别为参考文本集和生成文本集,集合的长度都为
N
N
N,每个生成文本只有一个参考文本与之对应,
r
i
r_i
ri和
r
^
i
\hat{r}_i
r^i分别为
R
R
R和
R
^
\hat{R}
R^中的第
i
i
i个句子,对于参考文本
r
r
r中的每个词汇
w
w
w,Greedy Matching依次计算其词向量与生成文本中每个词汇的词向量的余弦相似度,然后从中选择最大的相似度作为该词的相似度,最终将
r
r
r中每个词汇的相似度计算平均,即:
G
(
r
,
r
^
)
=
∑
w
∈
r
;
max
w
^
∈
r
^
cos
(
e
w
,
e
w
^
)
∣
r
∣
G(r, \hat{r})=\frac{\sum_{w \in r ;} \max _{\hat{w} \in \hat{r}} \cos \left(e_{w}, e_{\hat{w}}\right)}{|r|}
G(r,r^)=∣r∣∑w∈r;maxw^∈r^cos(ew,ew^)然后对生成文本中的每个词汇也采用上述计算方式计算
G
(
r
^
,
r
)
G(\hat{r}, r)
G(r^,r),最终将两者进行平均得到两个文本的平均相似度:
G
M
(
r
,
r
^
)
=
G
(
r
,
r
^
)
+
G
(
r
^
,
r
)
2
G M(r, \hat{r})=\frac{G(r, \hat{r})+G(\hat{r}, r)}{2}
GM(r,r^)=2G(r,r^)+G(r^,r)
2015年,John Wieting等人则通过对比Embedding Average、iRNN、projection、DAN、RNN、LSTM六种句子向量化方法,来计算文本的相似度,并最终发现直接对句子中词汇的词向量进行平均效果最好。
Embedding Average方法则更简单,它直接计算生成文本和参考文本中词向量的平均值作为文本的向量表示,然后计算两个文本的余弦相似度作为生成文本和参考文本的相似度:
e
‾
r
=
∑
w
∈
r
e
w
∣
∑
w
′
∈
r
e
w
′
∣
E
A
:
=
cos
(
e
‾
r
,
e
‾
r
^
)
2014年,Gabriel Forgues等人则提出了另一种文本向量的计算方法,即Vector Extrema,该方法对文本中的词向量在每一维取极值,作为最终句子的向量表示,因为作者在试验中发现,文本中很多关键词一般会分布在极值附近,因此,对词向量的每一维取极值就相当于提取了文本中的关键信息,作者发现这样的计算方式比直接平均或加权平均效果要好。
Vector Extrema方法与Embedding Average方法类似,只是计算句子的向量表示不是直接使用词向量的平均值,而是使用词向量每一维的极值:
e
r
d
=
{
max
w
∈
r
e
w
d
if
e
w
d
>
∣
min
w
′
∈
r
e
w
′
d
∣
min
w
∈
r
e
w
d
otherwise
e_{r d}=\left\{
在2017年,Anjuli Kannan等人在GAN网络思想的激发下,尝试了用GAN网络的思想来对对话系统的质量进行评估,他们的思想是把文本生成模型当做GAN网络中的生成器,然后采用一个RNN作为判别器,来判断一对问答对是机器生成的还是人工生成的。
在具体的训练过程中,该方法其实并没有像GAN网络那样交替训练生成器和判别器,而是先训练好生成器,然后再训练判别器。假设对于一个给定的问答语料库
(
o
,
r
)
(\mathbf{o}, \mathbf{r})
(o,r),其中,
o
\mathbf{o}
o表示输入文本,其词汇序列为
{
o
1
,
…
,
o
n
}
\left\{o_{1}, \dots, o_{n}\right\}
{o1,…,on},
r
r
r表示输出文本,其词汇序列为
{
r
1
,
…
,
r
m
}
\left\{r_{1}, \dots, r_{m}\right\}
{r1,…,rm},模型先利用条件概率最大化训练生成器,即:
∑
(
o
,
r
)
log
P
(
r
1
,
…
,
r
m
∣
o
1
,
…
,
o
n
)
\sum_{(\mathbf{o}, \mathbf{r})} \log P\left(r_{1}, \ldots, r_{m} | o_{1}, \ldots, o_{n}\right)
(o,r)∑logP(r1,…,rm∣o1,…,on)然后,选取一个测试集
(
o
,
r
)
(\mathbf{o}, \mathbf{r})
(o,r),将其中一半样本作为正例
(
o
,
r
,
1
)
(\mathbf{o}, \mathbf{r}, 1)
(o,r,1),另一半样本中的输出文本改为用生成器生成的文本,并作为负例
(
o
,
r
′
,
0
)
\left(\mathbf{o}, \mathbf{r}^{\prime},0\right)
(o,r′,0),然后采用一个RNN模型作为判别器,用这部分测试集进行训练,使得模型的交叉熵达到最小:
∑
(
o
,
r
,
y
)
log
P
(
y
∣
o
1
,
…
,
o
n
,
r
1
,
…
,
r
m
)
\sum_{(\mathbf{o}, \mathbf{r}, y)} \log P\left(y | o_{1}, \ldots, o_{n}, r_{1}, \ldots, r_{m}\right)
(o,r,y)∑logP(y∣o1,…,on,r1,…,rm)
作者在实验中其实并没有应用该方法作为模型的评估方法,但是作者通过实验发现,通过该方法训练得到的判别器最后的准确率大概只有62.5%,并且该判别器对于那些比较长的生成文本和回复缺乏多样性的文本的预测准确率比较高,也就是说判别器其实学到了人工的评判标准,因为我们知道,现在的文本生成模型对于长文本的解码能力往往会出现逻辑不通顺或者重复,并且产生的回复比较倾向于平淡无奇的回复,而这两种场景下人工往往会将其判为不好的文本。因此,采用这样的方法也许真的可以模仿人进行评估。但是这里其实也有两个问题,首先,该模型因为准确率不高,一种原因可能是生成器的生成的文本质量太好了,也可能是判别器的预测能力比较差,如果是后者这种情况下,用这个模型进行评估可能会出现不准确的现象;其次,判别器的训练与生成器的训练是分离开的,因此,如何将判别器用于评估多个生成模型也是一个问题。
2017年,Ryan Lowe等人提出了一个新的方法——ADEM,该方法思想其实与上面基于GAN方法的思想比较接近,作者通过选取TFIDF、Dual Encoder、HRED、人工回复四个系统生成一批训练数据集,然后将输入文本、生成文本、参考文本三者构成配对数据,并采用人工标注的形式对这四个系统的数据进行打分,分数越高表示生成文本质量越好,然后基于标注的数据,训练一个ADEM模型用于模拟人的打分。作者发现采取这样的方式得到模型打分与人工打分的相关性要比基于词重叠的方法的相关性要好得多。
ADEM的模型结构如下图所示,对于给定的输入文本
c
c
c、参考文本
r
r
r和模型生成文本
r
^
\hat{r}
r^,ADEM模型首先采用一个层叠的RNN encoder将三者转化为三个向量
c
,
r
,
r
^
\mathbf{c}, \mathbf{r},\hat{\mathbf{r}}
c,r,r^,作者直接采用预训练好的VHRED模型的encoder,并且保持其参数固定不变。然后采用点积的形式计算三者的评分:
score
(
c
,
r
,
r
^
)
=
(
c
T
M
r
^
+
r
T
N
r
^
−
α
)
/
β
\operatorname{score}(c, r, \hat{r})=\left(\mathbf{c}^{T} M \hat{\mathbf{r}}+\mathbf{r}^{T} N \hat{\mathbf{r}}-\alpha\right) / \beta
score(c,r,r^)=(cTMr^+rTNr^−α)/β其中,
M
,
N
∈
R
n
M, N \in \mathbb{R}^{n}
M,N∈Rn为参数矩阵,是需要学习的参数,
α
,
β
\alpha, \beta
α,β是两个常数,用于初始化模型的预测分数在
[
1
,
5
]
[1,5]
[1,5]之间,然后,模型通过最小化预测的分数与人工的打分之间的平方误差来优化模型:
L
=
∑
i
=
1
:
K
[
score
(
c
i
,
r
i
,
r
^
i
)
−
human
i
]
2
+
γ
∥
θ
∥
2
\mathcal{L}=\sum_{i=1 : K}\left[\operatorname{score}\left(c_{i}, r_{i}, \hat{r}_{i}\right)-\text {human}_{i}\right]^{2}+\gamma\|\theta\|_{2}
L=i=1:K∑[score(ci,ri,r^i)−humani]2+γ∥θ∥2其中,
γ
\gamma
γ为正则化参数,
θ
=
{
M
,
N
}
\theta=\{M, N\}
θ={M,N}为模型的参数。通过最小化模型的打分与人工的打分之间的差距,来学习人为的打分规则。
ADEM模型的思想其实跟GAN方法很接近,只是他采用的是人工标注的方式,并且采用多模型生成的数据作为训练数据,因此,训练后的模型相对更加稳健。但是,由于模型采用的是平方误差作为损失函数,因此,ADEM的打分会偏向于比较保守。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。