目录
Models with a pointer/copying
Richard介绍过Pointer Sentinel Mixture Models (Merity et al. 2017),这次讲讲另一种做法。
与其把“指针”当成单词丢入softmax,不如先做个二分类决策,是要softmax已知词语,还是copy未知词语。这个决策可以做成不可导的hard choice,也可以做成概率形式的可导soft choice。
copy机制常用于生成语言的任务,比如在机器翻译上效果非常显著:
但是Google最新的论文说他们线上的NMT都没有用到copy机制,因为深度神经网络中的attention不稳定云云。
另一个大显身手的领域是自动摘要,因为摘要中的稀有人名地名就是原文的词语。
词语之下:书写系统
大多数NLP研究都是词语级别的,因为处理简单,数据多。
但人类语言的书写系统并不是天下大同,有音位书写法,也有音节书写法,还有两者的混合:
有些语言没有词语边界,除了著名的中文之外,还有古希腊语。有些语言的分隔符又过多,比如法语每个附着词素都分割开了。有些语言的复合词会把其中的词语都连着写,比如德语。
就算决定用词语做语言模型,也需要处理非常大的词表。因为有些词语里面有形态变化,人们也会自己创造多种拼写,再加上人名之类总在动态变化的词语,简直是无穷无尽。在人名翻译的时候,最好是翻译成发音相似的,这也不适合用词语级别来做。
形态学
传统语言学上词语最小语义单元是词素,在英文中特别明显:
深度学习中研究较少,比如Luong, Socher, & Manning 2013:
如果不用词素的话,可以用character n-gram,经常用CNN隐式地学习。实践中收获会很大。
Character-Level Models
通过字符embedding来合成词语embedding,理论上完美地解决OOV问题。Manning说他作为语言学家,最初非常怀疑字符模型的表示能力,但LSTM这类强大的模型证实了字符embedding也能包含丰富的语义。
最干净的版本是,Bi-LSTM双向读取字符的embedding,利用隐藏状态作为词语的embedding,通过训练语言模型得到字符embedding。
在更早的时候,还会用到CNN:
上次spotlight讲到了一个很复杂的Highway-LSTM:
类似CMU的做法,将LSTM合成字符embedding得到的word embedding送入word2vec,同时学习两者的embedding:
Sub-word NMT: two trends
在NMT中利用小于词语的颗粒度,有两种流派。一种使用相同的seq2seq框架,但是使用更细颗粒度的输入。另一种则是混合词语与字符两种颗粒度的输入。
Byte Pair Encoding
原本作为压缩算法被发明,目标是找出一种码表,将最频繁的bype pair压缩替换为一个新的byte。
活用到字符上,可以压缩词表。具体做法是从字符开始:
添加词表中最频繁的pair:
继续这一过程:
直到增长到希望的词表大小,比如3万:
最终词表混合了字符、词素和词语,在部分语言中赢得了WMT2016的第一名。
Wordpiece model
Google NMT用到了类似的变种,只不过不再贪心选择,而是以最大化语言模型的对数似然来选择合并。
Hybrid NMT
另一种流派希望结合word level的效率character level的效果,在NMT那课简单提了一下。
通过将OOV以LSTM编码,<unk>作为占位符送入另一个LSTM解码,其他单词原样输入编码解码,得到了这种混血模型:
在两个level都有自己的柱搜索:
在一些变形很多的语言(捷克语)上效果显著:
word level无法应对复杂的变形,就算是copy,也只能copy人名,无法将一种语言的变形词语copy成另一种语言:
Hybrid则可以生成对应语言的变形:
感谢感谢博主!!
英文还是不好,看这课的video看得很懵很懵
多亏您的博文