nlp中的生成问题大致可以涵盖以下一些部分:
本质而言,他就是要对一段机器生成的文本来评估其生成质量的好坏。
有关这部分内容,他又可以分为有监督的和无监督的,前者已经有了一些参考的生成结果可以比对,后者完全没有任何参考文本,只能通过文本本身来评估生成质量。
其中有监督的部分我们还可以将其进一步细分,传统的评估方式大都是通过纯字符匹配的方式来对生成文本与参考文本进行比对,比如bleu,rouge等,其优点在于速度快,但是缺点在于无法真正理解语意,因此与真实的质量评估上总是存在一个不小的gap。
基于此,后来就衍生出了使用模型本身来对文本质量进行评估的评估模型,比如bleurt,他们在文本评估方面会更为准确,但是需要大量的训练数据,而且运行起来速度会比较慢。
综上所述,我们可以将其概括为如下:
下面,我们来逐次对其进行考察。
ppl的全称为perplexity,他表示一句话中每一个词出现的概率倒数的均方平均,用公式表达如下:
p p l = ∏ w i 1 p ( w i ∣ w 0 , w 1 , . . . , w i − 1 ) n ppl = \sqrt[n]{\prod_{w_i} {\frac{1}{p(w_i|w_0,w_1,...,w_{i-1})}}} ppl=nwi∏p(wi∣w0,w1,...,wi−1)1
因此,由定义我们就可以看到:
但是,由于n-gram的概率计算复杂度太高,通常而言,我们都会使用马尔可夫假设,即当前输出词汇只与上一个词汇相关,这样就可以大大地简化问题。
但是,同样,这样带来的问题就是,ppl指标只能表征词汇的通顺度,但是在语义上是无法做出什么保证的。
例如:
上面这句话的ppl值大概率就会很小,但是语义上确实完全不合理的。
bleu全称bilingual evaluation understudy,它以及后续的rouge指标是最常用的评价有监督生成问题(比如翻译、内容概括、内容生成等)的自动化统计指标。
他们的核心思想都在于比较生成文本与参考文本间的字符串重合度。
下面,我们首先给出bleu指标的计算公式,
B L E U = B P × e x p ( ∑ n = 1 N w n × l o g p n ) BLEU = BP \times exp(\sum_{n=1}^{N}{w_n \times log p_n}) BLEU=BP×exp(n=1∑Nwn×logpn)
其中, B P BP BP是句长惩罚因子, w n w_n wn是权重因子, p n p_n pn是n-gram字符匹配精度指标,也是bleu指标中最重要的一个指标。
我们来具体考察一下各个指标的计算。
句长惩罚因子 B P BP BP的计算相对简单一些,他的核心思想就是:
据此,我们给出BLEU指标中句长惩罚因子BP的公式表达如下:
B P = { 1 c > r e 1 − r / c c ≤ r BP = \begin{cases} 1 & \text{c > r} \\ e^{1- r/c} & \text{c ≤ r} \end{cases} BP={1e1−r/cc > rc ≤ r
其中 r r r表示参考文本的文本长度, c c c表示生成文本的文本长度。
现在,我们来考察n-gram的字符匹配精度计算公式。
他的核心思想是:
同样的,我们首先给出定义公式,而后结合定义公式进行考察。
p n = ∑ C ∈ c a n d i d a t e s ∑ n − g r a m ∈ C C o u n t c l i p ( n − g r a m ) ∑ C ′ ∈ c a n d i d a t e s ∑ n − g r a m ∈ C ′ C o u n t ( n − g r a m ) p_n = \frac{\sum_{C \in candidates}\sum_{n-gram \in C}Count_{clip}(n-gram)}{\sum_{C' \in candidates}\sum_{n-gram \in C'}Count(n-gram)} pn=∑C′∈candidates∑n−gram∈C′Count(n−gram)∑C∈candidates∑n−gram∈CCountclip(n−gram)
其中, C C C以及 C ′ C' C′分别表示生成文本集合中的文本以及参考文本集合中的文本;n-gram表示连续n个词汇, C o u n t Count Count函数就是普通的计数函数, C o u n t c l i p Count_{clip} Countclip函数表示对计数结果进行上截断,只取其在参考译文以及生成译文中的最大值。
我们给出一个例子来进行具体的计算说明如下:
可以计算得到: p 1 = 2 + 1 + 1 6 = 2 3 p_1 = \frac{2 + 1 + 1}{6} = \frac{2}{3} p1=62+1+1=32, p 2 = 2 5 p_2 = \frac{2}{5} p2=52, p 3 = 1 4 p_3 = \frac{1}{4} p3=41, p 4 = 0 3 p_4 = \frac{0}{3} p4=30。
另一方面,可以计算 B P = e x p ( 1 − r c ) = e − 1 6 BP = exp(1-\frac{r}{c}) = e^{-\frac{1}{6}} BP=exp(1−cr)=e−61。
总即可以得到:
B L E U = e − 1 6 × 1 4 × ( 2 3 + 2 5 + 1 4 + 0 ) ≃ 0.28 BLEU = e^{-\frac{1}{6}} \times \frac{1}{4}\times (\frac{2}{3} + \frac{2}{5} + \frac{1}{4} + 0) ≃ 0.28 BLEU=e−61×41×(32+52+41+0)≃0.28
rouge指标与bleu指标极其相似,但是,相较于bleu关注于生成的精度,rouge更看重生成的召回。
他的核心思想是:
除此之外,rouge没有句长惩罚因子,他的公式可以直接表达为如下形式:
R o u g e − n = ∑ C ∈ c a n d i d a t e s ∑ n − g r a m ∈ C C o u n t c l i p ( n − g r a m ) ∑ C ′ ∈ r e f e r e n c e s ∑ n − g r a m ∈ C ′ C o u n t ( n − g r a m ) Rouge-n = \frac{\sum_{C \in candidates}\sum_{n-gram \in C}Count_{clip}(n-gram)}{\sum_{C' \in references}\sum_{n-gram \in C'}Count(n-gram)} Rouge−n=∑C′∈references∑n−gram∈C′Count(n−gram)∑C∈candidates∑n−gram∈CCountclip(n−gram)
根据n的取值不同,rouge可以分为rouge-1, rouge-2等等。
另外还有常用的rouge指标还有rouge-l,他是rouge-n的一种变体:
用公式表达如下:
R o u g e − L = L C S ( c a n d i d a t e , r e f e r e n c e ) l e n ( r e f e r e n c e ) Rouge-L = \frac{LCS(candidate, reference)}{len(reference)} Rouge−L=len(reference)LCS(candidate,reference)
同样的,我们使用上文中的例子来进行计算说明:
则有:
{ r o u g e − 1 = 4 / 7 ≃ 0.57 r o u g e − 2 = 2 / 6 ≃ 0.33 r o u g e − L = 4 / 7 ≃ 0.57 \left\{ \begin{array}{lr} rouge-1 = 4/7 ≃ 0.57 \\ rouge-2 = 2/6 ≃ 0.33 \\ rouge-L = 4/7 ≃ 0.57 \end{array} \right. ⎩⎨⎧rouge−1=4/7≃0.57rouge−2=2/6≃0.33rouge−L=4/7≃0.57
bleurt来源于文献:BLEURT: Learning Robust Metrics for Text Generation
他的思想事实上也是比较简单的:
通过这种方式,上述文献中的文本质量评价结果足以碾压bleu以及rouge指标,直逼人类的真实评估水平。
但是,同样的,就如所有的机器学习模型一样,这种方式强烈依赖于训练数据,且评估成本很大,耗时很长,因此目前还没有看到业内有大量的使用迹象。