基于Seq2Seq的文本生成

文章目录

1. seq2seq 框架

序列到序列模型是一种框架结构,它接受一个序列(单词、字母、图像特征等)并输出另一个序列,由编码和解码两部分构成。

如在机器翻译任务中,一个序列指的是一系列的词,一个接一个地被处理。同样,输出的也是一系列单词。

2. seq2seq任务类型

  • 阅读理解

  • 文本摘要

  • 闲聊系统

  • 看图说话

  • 机器翻译

    seq2seq最早是在机器翻译任务中被提出的。

    在机器翻译的情况下,seq2seq的运行模式,input->encoder->context->decoder->output。

    context(对源文的编码)是一个向量,代表源文的信息。

    <video id=“video” controls="“src=”.\images\machine translation by seq2seq.mp4" preload=“none”>

    • 编码器(为RNN的情况下):每个词首先转化为词向量,一个个地输入。在每个时间步接受两个输入:来自输入语句的单词和上一时间步的隐藏状态。
    • 解码器(RNN):注意最后一个隐藏状态实际上是传递给解码器的context。

    2015年,引入注意力机制,极大地提高机器翻译的质量。

    <video id=“video” controls="“src=”.\images\machine translation by seq2seq+attention.mp4" preload=“none”>

    添加注意力后的模型的特点,主要有两个方面:

    • 编码器向解码器传递更多的数据,编码器不传递编码阶段的最后一个隐藏状态,而是将所有隐藏状态传递给解码器。

    • 注意解码器在产生输出之前执行额外的步骤,为了聚焦于与该解码时间步骤相关的输入部分,解码的每一时刻执行以下操作:

      • 通过编码器隐藏状态与解码器当前隐藏状态的相关性,对不同的编码器隐藏状态打分。

        <video id=“video” controls=""src=“E:\课程资料\京东NLP\30-31\images\attention at time step 4.mp4” preload=“none”>

      • 打分之后的编码器隐藏状态加权相加,并与当前隐藏状态结合,再进行最后的输出运算。

        重复下一个时间步骤。

        <video id=“video” controls="“src=”.\images\attention decoder.mp4" preload=“none”>

    • 训练后的attention可视化结果:解码中不同的步骤会专注于不同的编码器隐状态。

      <video id=“video” controls="“src=”.\images\visualization.mp4" preload=“none”>

    • 模型并不是预先地将输出的第一个单词与输入的第一个单词对齐。它实际上是从训练阶段学会了如何对齐语言对中的单词。

基于Seq2Seq的文本生成

4. 文本生成任务的评价方法

参考资料:https://baijiahao.baidu.com/s?id=1655137746278637231&wfr=spider&for=pc

4.1 BLEU

BLEU (Bilingual Evaluation Understudy)

  • 核心:比较候选译文和参考译文里的 n-gram 的重合程度,重合程度越高就认为译文质量越高。

  • unigram用于衡量单词翻译的准确性,高阶n-gram用于衡量句子翻译的流畅性。

  • 通常取N=1~4,再加权平均。

基于Seq2Seq的文本生成

  • P n P_n Pn​ 指 n-gram 的精确率。

  • W n W_n Wn​ 指 n-gram 的权重。

  • B P BP BP 是惩罚因子。

  • l r lr lr指参考译文长度。

  • l c lc lc指候选译文长度。

  • 希望译文更长些。

假设机器翻译的译文C和一个参考翻译S1如下:

C: a cat is on the table

S1: there is a cat on the table

则可以计算出 1-gram,2-gram,… 的准确率:

基于Seq2Seq的文本生成

直接这样子计算 Precision 会存在一些问题,例如:

C: there there there there there

S1: there is a cat on the table

这时候机器翻译的结果明显是不正确的,但是其 1-gram 的 Precision 为1,因此 BLEU 一般会使用修正的方法。给定参考译文 S 1 , S 2 , . . . , S m S_1,S_2, ...,S_m S1​,S2​,...,Sm​,可以计算 C C C里面 n 元组的 Precision,计算公式如下:

基于Seq2Seq的文本生成

4.2 ROUGE

ROUGE (Recall-Oriented Understudy for Gisting Evaluation)专注于召回率(关注有多少个参考译句中的 n- gram出现在了输出之中)而非精度(候选译文中的n-gram有没有在参考译文中出现过)。

基于Seq2Seq的文本生成

4.2.1 ROUGE-N (将BLEU的精确率优化为召回率)

基于Seq2Seq的文本生成

公式的分母是统计在参考译文中 N-gram 的个数,而分子是统计参考译文与机器译文共有的 N-gram 个数。

C: a cat is on the table

S1: there is a cat on the table

上面例子的 ROUGE-1 和 ROUGE-2 分数如下:
基于Seq2Seq的文本生成

如果给定多个参考译文 S i S_i Si​,Chin-Yew Lin 论文也给出了一种计算方法,假设有 M 个译文 S 1 , S 2 , . . . , S m S_1,S_2, ...,S_m S1​,S2​,...,Sm​。ROUGE-N 会分别计算机器译文和这些参考译文的 ROUGE-N 分数,并取其最大值,公式如下。这个方法也可以用于 ROUGE-L,ROUGE-W 和 ROUGE-S。

基于Seq2Seq的文本生成

4.2.2 ROUGE-L (将BLEU的n-gram优化为公共子序列)

ROUGE-L 中的 L 指最长公共子序列 (longest common subsequence, LCS),ROUGE-L 计算的时候使用了机器译文C和参考译文S的最长公共子序列,计算公式如下:

基于Seq2Seq的文本生成

  • R L C S R_{LCS} RLCS​ 表示召回率,而 P L C S P_{LCS} PLCS​ 表示精确率, F L C S F_{LCS} FLCS​ 就是 ROUGE-L。
  • β \beta β用于调节对精确率和召回率的关注度。
  • 如果 β \beta β 很大,则 F L C S F_{LCS} FLCS​ 会更关注 R L C S R_{LCS} RLCS​ , P L C S P_{LCS} PLCS​ 可以忽略不计。

基于Seq2Seq的文本生成

4.2.3 ROUGE-W (ROUGE-W 是 ROUGE-L 的改进版)

ROUGE-L在计算最长公共子序列时,对于子序列的连续性没有限制,即两个词汇之间可以有任意长度的代沟,但是这不一定是不合理的。考虑下面的例子, X X X表示参考译文,而 Y 1 Y_1 Y1​, Y 2 Y_2 Y2​¥表示两种机器译文。

基于Seq2Seq的文本生成

在这个例子中,明显 Y 1 Y_1 Y1​的翻译质量更高,因为 Y 1 Y_1 Y1​ 有更多连续匹配的翻译。但是采用 ROUGE-L 计算得到的分数确实一样的,即 R O U G E − L ( X , Y 1 ) = R O U G E − L ( X , Y 2 ) ROUGE-L(X,Y_1)=ROUGE-L(X, Y_2) ROUGE−L(X,Y1​)=ROUGE−L(X,Y2​)。

因此作者提出了一种加权最长公共子序列方法 (WLCS),给连续翻译正确的更高的分数。所以ROUGE-W在ROUGE-L的基础上对连续性添加一个权重。

4.2.4 ROUGE-S (Skip-Bigram Co-Occurrence Statistics)

ROUGE-S 也是对 N-gram 进行统计,但是其采用的 N-gram 允许"跳词 (Skip)",即单词不需要连续出现。skip-bigram是一句话中任意两个有序的词,它们之间可以间隔任意长,基于skip-bigram的ROUGE-S计算如下:

  1. ROUGE-S先对生成文本和参考文本中的2-gram进行组合,此时的2-gram不一定是连续的,可以是有间隔的,称为Skip-Bigram;
  2. 然后计算生成文本中出现在参考文本的Skip-Bigram在参考文本所有Skip-Bigram的比重(即 R s k i p 2 R_{skip2} Rskip2​);
  3. 计算参考文本中出现在生成文本的Skip-Bigram在生成文本所有Skip-Bigram的比重(即 P s k i p 2 P_{skip2} Pskip2​);
  4. 选择 β \beta β计算ROUGE-S。

基于Seq2Seq的文本生成

例如句子 “I have a cat” 的 Skip-bigram 包括 (I, have),(I, a),(I, cat),(have, a),(have, cat),(a, cat)。

其中 C C C是组合函数,相比与ROUGE-L来说,ROUGE-S能捕捉所有有序的两个词,为了避免匹配一些相隔过长而无意义的词比如"the the",可以设置最长间隔,此时相应的分母也要按照这个最长距离来计算。

4.3 METEOR

  • METEOR同时考虑了基于整个语料库上的准确率和召回率。
  • 也包括其他指标没有发现一些其他功能,如同义词匹配,同形词等。
  • 在评价句子流畅性的时候,用了 chunk 的概念(候选译文和参考译文能够对齐的、空间排列上连续的单词形成一个 chunk)。
  • 应用不是很广泛:只有java版本;超参数多;需要外部资源(比较鸡肋)

基于Seq2Seq的文本生成

5. 参考

  • BLEU, METEOR, ROUGE:

《ROUGE: A Package for Automatic Evaluation of Summaries》

《Meteor: An Automatic Metric for MT Evaluation with High Levels of Correlation with Human Judgments》

机器翻译与自动文摘评价指标 BLEU 和 ROUGE

在NLP当中,不同的评价指标,BLEU, METEOR, ROUGE和CIDEr的逻辑意义?

BLEU,ROUGE,METEOR,ROUGE-浅述自然语言处理机器翻译常用评价度量

文本生成13:万字长文梳理文本生成评价指标

文本生成任务常见评估指标

上一篇:【nlp】BLEU、ROUGE评价指标


下一篇:sqlite3 数据库命令操作