上一篇介绍了DQN在文字游戏中的应用,本文将分享一篇DQN在文本生成中的应用,将一个领域的知识迁移到其他领域应用的时候,都需要做概念上的等效替换,比如context可以替换为state,被预测的word可以替换为action。本文分享的题目是Generating Text with Deep Reinforcement Learning,作者是来自National Research Council of Canada的Hongyu Guo研究员,文章最早于2015年10月30日submit在arxiv上。
语言模型往往用来生成文本,在很多例子中都有应用,比如:自动文摘、bot、机器翻译、QA等等。本文想要做的事情是用DQN来生成文本,起到一个语言模型的作用,并且这是第一次尝试用DQN来生成文本。仔细想想,DQN在解决video games时遇到的情况和现在不同,state可能还好,可生成的action数量远远大于游戏中action的数量,所以,如何解决action的问题对于DQN在NLP中的应用前景至关重要。目前来看,读此类的paper,需要关注的有两个部分:
1、action的问题如何解决?
2、DQN中每条数据集包含的元素与NLP问题中各个元素的对应关系。
本文解决第一个问题采用的方法是,用传统的语言模型decoder来为DQN的action生成candidated actions,虽然这个actions集合是动态,但对于每一条数据来说,action的数量只有很少了,与video games差不太多了。
NLP不像video games直接可以用游戏画面作为输入,用多层CNN提取feature进行action选择,因为text不仅仅是一个序列,而且是变长度的,所以一般来说也都是RNN来处理。本文模型如下图:
首先,回答关心的第二个问题,DQN中各元素的对应关系(transition tuple)。
DQN中:(s(t),a(t),r(t),s(t+1))
本文:([EnSen(t),DeSen(t)],y(t),r(t),[EnSen(t),DeSen(t+1)])
整个模型是一个迭代decoding的过程,通过LSTM decoder生成最初的DeSen(t)之后,开始不断地迭代。DeLSTM负责提供actions集合,在decoder的每一个time step,DQN会从DeLSTM为其生成的actions中选择一个可以获得最大reward的action作为该time step新生成的词,用这个新词来代替之前的旧词,生成新的状态DeSen(t+1),依次迭代下去,每一次迭代都只生成一个新词来代替旧词,直到最后一个新词被生成。这里的reward r(t)是计算target sentence和DeSen(t+1)的相似度得来的。
本文在这个模型的基础上,尝试了在decoder部分用双向的LSTM来表示,并且用一个光滑的BLEU来做reward。这一点与Neural Headline Generation with Minimum Risk Training这篇文章从某一个角度来说有一点点类似,本文是用最终的评价指标BLEU作为reward,而那篇文章是用ROUGE指标作为优化函数,最终取得了非常令人满意的结果。
整个算法流程大体上都是遵循DQN的框架,只是细节有一些不同,如下图:
实验部分,用了10000个sentences作为训练集,source和target是一样的,是一个autoencoder问题,对比了只用LSTM decoder和本文模型的结果,如下表:
验证了本文方法的有效性。
本文较前一篇文字游戏的文章更难的一点是处理大量actions的方法,上一篇其实仍旧是个游戏,actions的数量在一个非常有限的范围内,本篇是做语言模型的,actions和词汇表一样大,这是DQN在NLP中应用最头疼的问题。本文用了DeLSTM在每个time step中预测出的高排名词作为候选actions,很好地解决了这个问题,那么到底有没有更好的方法来减少actions呢?有没有不需要用这么复杂的模型来做处理呢?期待后续的研究。
来源:paperweekly