Press "Enter" to skip to content

哈佛邓云天:Cascaded Text Generation with Markov Transformers

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

人工智能论坛如今浩如烟海,有硬货、有干货的讲座却百里挑一。“AI未来说·青年学术论坛”系列讲座由中国科学院大学主办,百度全力支持,读芯术、paperweekly作为合作自媒体。承办单位为中国科学院大学学生会,协办单位为中国科学院计算所研究生会、网络中心研究生会、人工智能学院学生会、化学工程学院学生会、公共政策与管理学院学生会、微电子学院学生会。 2020 年6 月20日,第16期“AI未来说·青年学术论坛”NLP前沿技术及产业化线上专场论坛以“线上平台直播+微信社群图文直播”形式 举行 。 哈佛邓云天 带来报告《 Cascaded Text Generation with Markov Transformers 》。

 

邓云天,哈佛大学计算机系在读博士生,师从Alexander Rush教授和Stuart Shieber教授,主要研究方向为文本生成。 2017年ACL best demo paper award runner-up,2018年百度奖学金获得者,2018年法国-美国博士交流访问学者。 同时,也是OpenNMT机器翻译平台的主要开发者之一,并先后在Bloomberg、Facebook人工智能研究院实习,指导老师分别为David Rosenberg、Gideon Mann和Marc’Aurelio Ranzato。

 

 

Cascaded Text  Generation with Markov Transformers

 

 

首先, 邓云天 介绍了文本生成的背景。 目前文本生成效果最好算法是基于Fully Auto regressive模型。 在Fully Auto regressive模型中假定生成每一个单词概率取决于之前生成所有单词,比如说首先生成第一个单词X1,再基于第一个单词X1生成第二个单词X2,基于前两个单词生成第三个单词,基于前三个单词生成第四个单词,依次类推。 解码的时候使用beam search,从模型中找到概率最高的文本。

 

Fully Autoregressive 模型可以实现非常高质量的文本生成,但是这个组合存在相依问题。 即该组合是顺序解码,为了生成第五个单词X5,需要知道前四个单词,只有X1—X4全部生成完毕才可以,因此没有办法使用并行硬件进行加速这个过程。 为实现更快速的文本生成,Jiatao Gu等人提出了Nonautoregressive模型,在Nonautoregressive中假定各个单词是独立,因此在解码的时候只需要对各个位置取argmax就可以了,这个过程可以使用并行硬件,比如GPU进行加速。 但该模型的问题是没有办法建模词与词之间的关系,因此会生成低质量的文本,有时候观察到Nonautoregressive模型生成文本重复一个词好几遍。

 

 

前面提到Fully Autoregressive模型和Nonautoregressive模型。 这两种模型都可以用同一个框架来描述,这个框架就是Markov Random Field概率表达形式(见下图)。 如果对概率取log可以看出,log等于各个位置l的fl项的求和,这里每一个fl称为log potential,每一个fl是建模相邻m+1个词之间的关系。 举一个具体的例子,比如当m等于1的时候,可以建模相邻两个词之间的关系,f1建模前两个词之间的关系,f2建模第二个词和第三个词之间的关系,f3建模第三和第四个词之间的关系,依次类推。

 

m 取值不同,得到的模型也不同。 当m等于0,这时候相当于做了各个单词独立性假设,只考虑各个单词本身的概率,因此是Nonautoregressive模型。 当m等于L-1的时候(L是序列长度),可以建模任何两个单词之间的关系,因此是Fully Autoregressive模型。 这个工作比较关心m取固定的,介于0—L-1之间的值,把它称之为Partially Autoregressive。

 

 

之后, 邓云天介绍了 Partially Autoregressive模型的三点优势。 第一,和Fully Autoregressive模型比,一个固定阶数的Markov RandomField可以并行解码,解码的时间和序列长度log呈正比,而Fully Autoregressive模型解码时间是序列长度呈正比。 因此一个Partially Autoregressive模型是比Fully Autoregressive模型解码时候更快。 第二,和Nonautoregressive相比,Nonautoregressive模型没有建模词与词的关系,但是partially Autoregressive模型可以建模相邻词之间的关系,因此该模型有可能生成质量更高的文本。 第三,这里m是可以调的参数,它可以实现文本生成的质量和文本生成速度的tradeoff。 这样使用阶数越高的Markov Random Field,可以实现更高质量的文本生成,但也要牺牲一定的速度。

 

但Partially Autoregressive模型在文本生成中尚未被广泛应用,因为它有个最大的挑战。 如果给定一个m阶Markov Random Field,想要从中精确解码的话,若使用维特比算法,解码的时间和词表大小V的m+1幂是呈正比的,实际应用中词表大小在万这个量级。 因此即使m取1,1万的平方在现在硬件条件下也是不现实的,其时间复杂度太高。

 

 

针对该挑战, 邓云天 提出了Cascaded Decoding解码思路。 与beam search不同,Cascaded Decoding是考虑所有序列组成的空间,使用逐渐增加阶数的Markov Random Field,从这个空间中逐渐剔除不好的序列,直到最后得到比较小的空间,最后在小空间进行解码。 具体来说,首先使用0阶的Markov Random Field,在每一个位置只保留前K个最好的unigram或者单词。 其次,在已经缩小的空间再引入1阶的Markov Random Field,保留K个最好的bigram。 然后,在此基础上引用2阶Markov Random Field,保留K个最好的trigram,一直重复这个过程直到最后达到比较高阶的模型。 最后,缩小空间使用动态算法维特比进行解码。

 

 

邓云天以具体案例向大家做了讲解。 如图所示,当序列长度为3的情况,长度为3的序列,所有序列可以用三维直角坐标系表示,这里XYZ三个轴对应第一个单词、第二个单词、第三个单词。

 

第一步从0阶Markov Random Field开始,每个位置保留前10个最好的unigram。 这个步骤完成之后空间大小缩解为10×10×10的立方体,对应着第一个词有10种可能、第二个词有10种可能、第三个词有10种可能的组合。

 

 

第二步在这个基础上引入1阶Markov Random Field,每个位置保留最好的10个bigram,进一步缩小空间。 细心的同学会发现,小方块在二维平面X1、X2和二维空间X2、X3投影,恰好是10个阴影小方块,对应着10个最好bigram,X1、X2和10个最好bigram X2、X3。

 

 

第三步再在此基础上引入2阶的Markov Random Field,在每个位置保留前10个最好的trigram。 因为序列长度只是3,所以这一步过程中结束之后,得到序列总共个数只有10个,最后在10个序列中使用维特比算法进行解码,找出概率最高的序列。 这就是Cascaded Decoding大致的过程。

 

 

邓云天进一步补充道, 在这个过程中是如何决定哪些ngram是最好的呢? 这里面是有很多种可能衡量方式,如使用Max-marginals。 一个ngram的Max—marginals定义是,给定ngram,给所有包含这个ngram的序列使用动态算法找出序列中最大概率的序列,这个概率是ngram的Max-marginals。

 

 

如前所述,使用一个固定阶数的Markov Random Field原因是想要实现更加快速的解码。 前面提到过的log potentialfl可以在各个位置并行计算,因为各个位置fl没有相关的关系,不管序列长度有多长,fl可以用O(1)时间并行计算。 比较麻烦的事情是这里Max-marginals不能进行各个位置独立计算。 论文中提出一种方法可以并行之后用log时间长度计算Max-marginals取值。 理论上讲,这个算法的时间复杂度是log L,但是实际上Max-marginals理论复杂度更高,然而实际使用时间却不到1%。 因此,事实上算法的时间复杂度或者说算法速度,实际上和Nonautoregressive算法一样快。

 

 

与很多Nonautoregressive算法一样,这里也要提前获得序列长度。 但如果没有完成解码,很难准确预测序列的长度。 好在Markov Random Field允许同时考虑不同长度的可能取值,只需要在生成的时候,首先估计出来最大可能的长度,当解码的时候在词表中引入特殊占位的字符“padding”,并修改Markov Random Field,使得词尾下一个单词一定是padding,而且padding的下一个单词也是padding。 这样一来,在搜索过程中可以考虑所有长度比预先最大长度小的序列,不同长度序列相当于句尾padding个数不一样,但是padding的存在并不影响分数,因此可以同时参与搜索。

 

 

此后, 邓云天又以 最大长度为8的具体的例子进行了讲解。 这里面做了机器翻译的工作,原文本是德语,翻译成英语大概意思是an amazing woman。 此处,使用K=5,也就是每个位置保留前五个最好的,这里展示连接Markov Random Field的结果,如果看每一列的话,对应前5个最好unigram,按Max-marginal从大到小排列。 相当于如果使用Nonautoregressive模型,就会直接输出表格第一行an amazing woman woman eos eos eos padding,可以看到woman这个单词被重复生成了两遍,这是Nonautoregressive模型常见的问题,因为没有办法建模词与词之间关系。

 

 

实际上cascaded decoding不会就此直接输出,而会在此基础上,首先引入1阶Markov Random Field,在每个位置输出或者每个位置保留前5个最好的bigram; 然后再引入2阶Markov Random Field,每个位置保留前5个最好trigram。 此时,当再读取表格第一行,使用维特比算法进行输出时,得到结果是an amazing woman.eos pad pad pad,就解决了重复单词的问题。 原因在于最后一步解码时使用的是2阶Markov Random Field,而2阶Markov Random Field可以建模邻近3个单词的关系,所以比Nonautoregressive建模更多的单词之间的关系。

 

 

接下来, 邓云天介绍了什幺样的模型可以支持这个Cascaded Search算法,因为Cascade Search需要不同阶数的 Markov Random Field,而我们不希望同时维护多个模型。 这里提出一种算法,通过对Transformer训练过程的微小修改,可以把一个Transformer模型在测试时当作不同阶数Markov Random Field使用。 训练时,每隔M单词重置一下hidden state,在Transformer中具体来说每隔M单词插入一个屏障,强制要求self attention不能穿越这个屏障,以保证解码时Markov Random Field可以当作任何比M低的Markov Random Field使用。

 

 

那幺,Cascaded search这一方法的具体效果如何呢? 作为文本生成算法,它能实现文本生成质量和速度之间的trade off。 这里的实验是在机器翻译实验上做的,使用数据集是IWSLT。 和Fully Autoregressive相比,可以比它快5.83倍情况下,speedup值比它低0.5,如果愿意进一步牺牲速度,使用更高阶的Markov Random Field可以实现2.94倍更快速度,但是达到几乎一样的BLEU。 因此这个方法可以实现非常理想的文本生成质量和速度之间的trade off。

 

 

同时, 邓云天进一步比较了这一方法与 Beam search之间的区别。 如果使用Beam search生成长度为L的文本,若Beam Size是K的话,一共最多只考虑K×L序列的个数。 但是Cascaded search过程中,每一步每一个位置保留了全K最好的ngram,所以说有可能考虑序列个数是不同序列ngram的组合,有可能随着序列长度指数增长,而Beam search线性增长。 在具体测量上,前三列对应着2阶Markov Random Field、3阶Markov Random Field、4阶Markov Random Field和使用Cascaded Search过程中具体考虑了多少个序列; 第四列是Fully Autoregressive模型和Beam search能够考虑多少个序列。 可以看到如果比较第三列和第四列的话,即使使用4阶Markov Random Field依然可以比Fully Autoregressive模型多考虑1—2个量级和更多序列的个数,这是非常有意思的特点。

 

 

邓云天对上述内容作了简短小结。 Nonautoregressive 模型是快速文本生成充分但不必要条件,因而可以考虑更一般的情况,就是固定阶数Markov Random Field,它可以实现并行解码,因此速度比Fully Autoregressive模型要快。 同时由于Markov Random Field可以考虑词与词之间的关系,因此可以比Nonautoregressive模型生成质量更高的文本。 为了实现从固定阶数Markov Random Field用有限时间内或者目前硬件可以支持时间内完成解码,提出Cascaded Search这个和Beam search完全不同解码算法。 最后为了支持Cascaded Search这个解码算法,提出了对transformer训练时候的改进,实现Markov Transformer,使得用一个单独模型当作不同阶数Markov Random Field来使用。

 

 

最后,邓云天对导师M.Rush教授,HarvardNLP以及百度奖学金的支持表示了感谢,并 鼓励大家通过邮件方式向他咨询相关问题。代码已经在https://github.com/harvardnlp/cascaded-generation开源。

 

谢谢!

 

 

(整理人: 郭仪)

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注