此篇文章,作者使用character-based的seq-2seq模型结合attention 模型的经典的处理自然语言的解决方案,但是作者采用了一个比较特殊的处理,在seq2seq模型的decoder层后又加了一个语言模型,实现了一个文本纠错的模型。现在常用的解决方案是使用语言模型来生成n-grams的score或者使用SMT(statistical machine translation)的方法。但是这些方法没法不能灵活的解决一些错误,比如拼写错误,大小写和标点符号错误等。
其中有三类错误是在NLC(Neural Language Correction)领域是很难解决的:第一个,错误拼写,这种错误常用的处理方式是使用固定的词典;第二个,为止词的处理;第三个,介词等的错误使用。如果使用模板的方式来应对如此多的情形是非常困难的。于是,借助于神经网络的模型。
模型结构
总结来讲,本文结构主要的特点或者亮点如下:
- Encoder层采用多层双向GRU,且cell的数量遵循金字塔状。
- Decoder层结合Atttention model
- Character level
- 使用 Beam Search, 来结合Encoder-docoder和Language model,作为re-ranker.
- 在模型最后,为了控制准确率(Controlling Precision),作者训练一个额外的分类器来判断执行此次修改是不是ok的。
=====================================================================================
- Character level
两点原因:1.做NLC经常出现的错误是是拼写错误,特别是英文中。2.传统方法处理OOVs,比如多位数字,表情符号或者网页地址,通过神经网络可以作为变通的方法。尽管character lavel会使得要处理的序列变长,因为毕竟正确的更多,所以character常常只需要从source复制到target。
- Encoder 采用多层双向GRU,且cell的数量遵循金字塔状
每层的cell个数减半。这样做的目的是为了减少参数数量。尽管使用character-level的方式可以减少每一time step的softmax的计算,但是使用attention model需要在每一time step考虑 所有 encoder 的隐层状态(hidden state),因此使用金字塔状的多层结构,最顶层的cell个数变少,这样就可以大大减少计算复杂性。
- 使用 Beam Search, 来结合Encoder-docoder和Language model,作为re-ranker
在k时刻, Beam 使用下面的 $score$ 来rank所有的输出假设,:
$$ s_{k}(y_{1:y}|x) = \log P_{NN}(y_{1:k}|x) + \lambda \log P_{LM}(y_{1:k}) $$
后一部分代表语言模型,前面部分是Decoder的输出. 其中超参数 $\lambda$ 决定了语言模型的占比。为了防止不公平惩罚到更长的句子,对$score$除以假设的字长度来规则化(normalization)。语言模型$P_{LM}(.)$仅仅在遇到空格或者句子结束才被加入到上面的式子中,因为这个模型事character-level的,但是语言模型必须是word-level。
- Controlling Precision
当做NLC时,控制precision比控制recall更重要,因为一次不正确的修正比一次错失的错误要更严重。为了过滤荒谬的编辑(spurious edit),作者额外的训练了一个分类器。首先,在所有训练集上运行模型的Decoder,得到候选修正句 (candidate corrected sentences),然后用这些候选修正句跟未修正的句子做字符级别的对齐来最小化 字级编辑距离(word-level Levenshtein distance) , 重复这个对齐和修正的过程得到黄金修复句子, 然后这些未修改句子作为黄金编辑(gold edit)。'好的'编辑和'坏的'编辑 作为要区分的两类,其中,'好的'编辑看做与黄金编辑有交集,而'坏的'编辑是黄金编辑中不包含的。作者使用编辑特征(edit features)训练一个多层的神经网络二类分类器,所使用的特征有1.编辑距离特征 2.词向量特征。然后设定一个阈值 $p_{min}$ ,只有当预测的概率大于这个阈值时才接受此次是正确的修正。
===============================================================================
补充知识点:
Beam Search
仿射变换