该paper发表在2017年的ACL
作者:Kelvin Guu, Panupong Pasupat, Evan Zheran Liu, Percy Liang
Percy Liang是stanford的计算机科学与统计学的助理教授,现在主要从事ML和NLP的研究,近几年名声大噪,另外三个是他的Ph.D。
该文提出了一种TANGRAMS方法对文本自动生成程序。主要是通过一个神经编码-解码模型生成一系列程序token,另外考虑到本文提出的模型主要将文本生成程序的任务当做是一个序列预测问题,而序列预测问题的学习方法主要有REINFORCE和BS-MML这两种方法,而REINFORCE和BS-MML都使用一种exploration strategy去近似它们各自的梯度,由于伪程序的种类远大于正确程序的种类,这样导致一开始扩展伪程序的可能性要大于正确的程序,之后每个梯度Step生成正确程序的概率都无法提高,即the rich get richer, and the poor get poorer,从而使生成的程序更加偏向伪程序,为此该文代替提出了一种RANDOMER方法解决该问题。该方法主要是通过减少程序初始分布的敏感度来尽量避免生成的程序偏向伪程序。
**神经编码-解码过程:**
1. **编码:**编码主要是采用一种双向LSTM模型,给定一个输入x,一个话语指针m,初始m=1,为了生成程序表征z,模型的编码器首先编码话语u成为一个话语向量e(在话语中的每个词语都是采用固定的Glove词嵌入,最终的话语嵌入是将获得的词向量做加法),然后,给予e和生成的前面生成的所有表征z,模型的编码器给所有可能的z值定义了一个分布p,下一个话语表征z是被从这个分布抽样出来,如果一个行为表征是被生成,模型m增加1,当所有话语是被执行编码,这个过程终止,生成一个特殊程序的最终概率是p(z|x)=分布p的联乘。
2. **解码:**对于解码该文为了简化使用了一个前馈网络,在该前馈网络中,该文使用话语向量e和一个embedding之前生成的所有程序表征的f函数作为输入,从而计算一个注意力向量c(使用Relu作为激活函数,激活函数用q来表示),在获得q和c之后,可能的程序表征z集合的分布是通过一个Softmax计算出来。 对于执行历史嵌入:该文比较对于之前生成的所有程序表征嵌入的f函数(该文执行历史的嵌入)的两个选择,一个标准的方法是简单的提取k个最早生成的的表征z,并且给他们的嵌入做加法。该文将会参考它做表征,在该文的实验中k=4。
**RANDOMER方法:**本文主要使用RANDOMER方法作为预测问题的学习方法,该方法通过使用ε-greedy randomized beam search减少扩展偏向伪程序,并通过使用β-meritocratic parameter update rule执行更均衡的优化并使获得的回报大致相同。
**ε-greedy randomized beam search:**假设在beam search的step t,在大多数B搜索状态一个beam为Bt,各个状态s∈Bt表示一个部分构造的程序,对于在beam中的每个状态s生成的所有可能的continuations为con(s),cont(Bt)表示在step t所有状态s生成的所有可能的continuations的和。在搜索过程中,该文首先和以往beam search一样,首先计算在iteration t所有con(Bt)的集合,并根据它们的模型概率pθ(s|x),不同于以往的是该文逐个选择B continuations without replacement from con(Bt)。当从余下选择一个continuation时,该文统一以概率ε随机抽样一个continuation或者以1-ε挑选最高分数的continuation。
**β-meritocratic parameter update rule:**该文考虑到对于MML即使所有reward-earning程序都有一个非常低的模型概率,他们总共的的梯度权重也为1,但是仍然不能保证每个情况程序的回报都是一致的。因此该文定义了一个β-smoothed版本的梯度权重。当β=0时,任何情况下的所有reward-earning程序的梯度权重完全一致,当β=1时,就还是MML的梯度权重。
如有不对,欢迎指正。