koocn

导航

CS224n笔记17 NLP存在的问题与未来的架构

hankcs.com 2017-07-13 上午11.32.57.png

  本文转自:http://www.hankcs.com/nlp/cs224n-nlp-issues-architectures.html/3

  课程介绍了各种各样的深度学习网络与应用,是时候从更高层次思考自然语言处理存在的问题与展望未来了。虽然BiLSTM与attention几乎统治了NLP,但在篇章级别的理解与推断上还不尽人意。

新时代人们正在“解决”语言 

深度学习填平了领域鸿沟,许多计算机视觉的泰斗级学者也开始研究起自然语言处理的各种任务。

hankcs.com 2017-07-12 下午10.02.33.png

这里提到的自然语言理解、机器翻译都是较高层次、更难的任务,现有系统做得并不那么好。

旧时代的热血

早期NLP学者拥有崇高的目标,希望让机器像人一样理解语言;但奈何数据和计算力都有限,使得成效甚微。Manning说今天我们有了海量的数据与强大的计算力,却往往自满于跑个LSTM,而不愿意挑战这个终极目标。

AI的师祖Norvig (1986)的Ph.D.论文The unified theory of inference中举了个例子,希望机器从一篇文章中理解如下信息:

2017-07-12_22-12-35.png

其中a和b即便是最前沿的技术也无法自动推断,因为在文本没有提到海与岛的关系,也没提到渔网,省略了太多背景知识。

所以Norvig认为,必须先建立一个包罗万象的知识库,才能进行自然语言理解。但最近二十年,没有知识库我们也完成了许多NLP任务,并且模型学到的“知识”是连续的表示,而不是“知识库”中的离散表示。

Norvig假想的系统中含有如下4种推断(inference):

  1. Elaboration:连接两个实体,表示解释说明

  2. Reference Resolution:就是指代相消

  3. View Application:比喻、活用、习语

  4. Concretization:具体化,一般化,比如TRAVELLING is an AUTOMOBILE is an instance of DRIVING

基础NLP:在进步

Norvig写博士论文的时候,连像样的句法分析器都没有,所有句子都是手工分析的。现在我们有了全自动的句法分析器

hankcs.com 2017-07-13 上午11.30.59.png

但现代NLP依然没有完成Norvig设想的宏伟目标——自动推断:

hankcs.com 2017-07-13 上午11.32.57.png

也许是时候开始挑战这个宏伟目标了。

我们还需要什么

现在BiLSTMs with attention已经统治了NLP领域,你可以在任何任务上应用它,得到超越其他方法的好成绩(就如同若干年前的CRF和SVM一样)。

另外神经网络方法也带来了自然语言生成领域的文艺复兴(MT、QA、自动摘要……

这些现代突破都没有采用Norvig假想的“知识库”。究竟是否需要一个显式的、localist(应该指的是领域相关的)语言与知识表示和推断机制,这是一个亟待探讨的科学问题。

虽然神经网络隐含了知识表达,我们也已经取得了如此多的成就,但我们建立和访问记忆或知识的手段依然十分原始。LSTM只是短时记忆,并不能与人类经年累月的经验与记忆相比。LSTM只是线性地扫描最近100个单词而已。

另外,现有模型也无法制定和执行目标或计划。这对对话系统而言非常重要,对话应当是有意义有目标的,而不是闲扯。

虽然句子级别的分析已经可以做到很清楚,句子之间的关系(顺承、原因、转折)则无法理顺。

而且现在无论多深的网络,依然缺少理解语言解释说明的常识或背景知识(虽然模型可能不够复杂,我觉得数据量不够也是很大原因,人类从小到大接受了多少文化教育,你能提供给神经网络的标注语料能有多少个句子)。

接下来介绍一些前沿的尝试“盗火”的研究。

Recursive Neural Networks用于意识形态检测

作为语言学者,Manning还是很喜欢树形模型(赞成)。他的学生尝试用Recursive Neural Networks检测人们在政治上是保守的还是自由激进的等等。

hankcs.com 2017-07-13 下午12.05.18.png

这并不是句子级别或段落级别的分析,而是文章级别的分析。一些政治术语被复合起来检测最终的政治倾向(用不同颜色表示)。红色表示保守的:

hankcs.com 2017-07-13 下午12.07.55.png

TreeRNN

hankcs.com 2017-07-13 下午12.13.13.png

树形模型理论上很有吸引力,但非常慢,需要外部句法分析器(如果用内部的则更慢),而且也没有用到语言的线性结构。

recurrent NN训练快

线性结构的模型适合batch训练,因为对每个训练实例,模型结构都是一样的。

hankcs.com 2017-07-13 下午12.15.46.png

TreeRNN结构取决于输入

所以无法并行化,一个线程在训练某种结构的模型,其他线程得等它。

hankcs.com 2017-07-13 下午12.18.45.png

The Shift-reduce Parser-Interpreter NN (SPINN)

为了提高tree模型的训练效率,人们活用Shift-reduce依存句法分析的思想,将模型的树形机构拆分为动作序列,得到了25倍的速度提升。这还产生了“线性”与“树形”模型的混血,可以离开外部句法分析器独立运行。

binary trees = transition sequences

具体拆分方法如下:

hankcs.com 2017-07-13 下午12.23.14.png

shift入栈,reduce合并。

架构

hankcs.com 2017-07-13 下午12.28.48.png

  模型与parser类似,有stack和buffer储存单词,tracking由LSTM负责track并决策动作,TreeRNN负责拼装成分的表达。

  LSTM还将上文的表示送给TreeRNN拼装,这似乎解决了树形模型无法捕捉语言的线性结构的问题。

实现stack

  由于反向传播要用,所以每个时刻的stack都要备份,这消耗了大量内存。

  朴素实现就是用个固定大小的多维数组存放,还需要移动大量内存。

  高效实现是每个句子一个stack,在每个时刻改动stack的head,记录head的指针。

A thinner stack

hankcs.com 2017-07-13 下午12.40.23.png

  backpointer从右到左记录栈顶的元素。最重要的是,在reduce的时候,不删除array中的任何元素,而是将合并后的成分新增进去,同时更新backpointer。

  应用了这种编程技巧之后,效率提升非常显著,直追线性模型:

2017-07-13_12-50-00.png

  由于parse是个hard decision,这会导致损失函数不可导。

  所以训练的时候直接在已经做了句法分析的句子上训练,这样结构是固定的,就不需要做hard decision了。

  否则就需要用强化学习等复杂手段去work around。

Stanford Natural Language Inference Corpus

hankcs.com 2017-07-13 下午4.19.29.png

根据文本描述的事实,推断与另一句话的关系(补充说明,中立,矛盾)。

NLI with Tree-RNN sentence rep’ns

讲两句话送入SPINN组合,最终交给分类器:

hankcs.com 2017-07-13 下午4.22.13.png

hankcs.com 2017-07-13 下午4.22.30.png

SNLI结果

hankcs.com 2017-07-13 下午4.26.14.png

线性模型和树形模型得分差不多,但结合了两者的SPINN得分显著提高。很遗憾最高分是由word level的attention model拿下的。

SPINN比LSTM更擅长否定和长句子:

hankcs.com 2017-07-13 下午4.27.47.png

Models with a pointer/copying

Richard介绍过Pointer Sentinel Mixture Models (Merity et al. 2017),这次讲讲另一种做法。

hankcs.com 2017-07-13 下午7.09.38.png

与其把“指针”当成单词丢入softmax,不如先做个二分类决策,是要softmax已知词语,还是copy未知词语。这个决策可以做成不可导的hard choice,也可以做成概率形式的可导soft choice。

copy机制常用于生成语言的任务,比如在机器翻译上效果非常显著:

hankcs.com 2017-07-13 下午7.14.02.png

但是Google最新的论文说他们线上的NMT都没有用到copy机制,因为深度神经网络中的attention不稳定云云。

另一个大显身手的领域是自动摘要,因为摘要中的稀有人名地名就是原文的词语。

词语之下:书写系统

大多数NLP研究都是词语级别的,因为处理简单,数据多。

但人类语言的书写系统并不是天下大同,有音位书写法,也有音节书写法,还有两者的混合:

hankcs.com 2017-07-13 下午7.24.06.png

有些语言没有词语边界,除了著名的中文之外,还有古希腊语。有些语言的分隔符又过多,比如法语每个附着词素都分割开了。有些语言的复合词会把其中的词语都连着写,比如德语。

hankcs.com 2017-07-13 下午8.05.11.png

就算决定用词语做语言模型,也需要处理非常大的词表。因为有些词语里面有形态变化,人们也会自己创造多种拼写,再加上人名之类总在动态变化的词语,简直是无穷无尽。在人名翻译的时候,最好是翻译成发音相似的,这也不适合用词语级别来做。

hankcs.com 2017-07-13 下午8.10.22.png

形态学

传统语言学上词语最小语义单元是词素,在英文中特别明显:

hankcs.com 2017-07-13 下午8.12.45.png

深度学习中研究较少,比如Luong, Socher, & Manning 2013:

hankcs.com 2017-07-13 下午8.13.36.png

如果不用词素的话,可以用character n-gram,经常用CNN隐式地学习。实践中收获会很大。

hankcs.com 2017-07-13 下午8.18.01.png

Character-Level Models

通过字符embedding来合成词语embedding,理论上完美地解决OOV问题。

Manning说他作为语言学家,最初非常怀疑字符模型的表示能力,但LSTM这类强大的模型证实了字符embedding也能包含丰富的语义。

最干净的版本是,Bi-LSTM双向读取字符的embedding,利用隐藏状态作为词语的embedding,通过训练语言模型得到字符embedding。

2017-07-13_20-59-08.png

在更早的时候,还会用到CNN:

hankcs.com 2017-07-13 下午9.01.32.png

上次spotlight讲到了一个很复杂的Highway-LSTM

hankcs.com 2017-07-13 下午9.02.17.png

类似CMU的做法,将LSTM合成字符embedding得到的word embedding送入word2vec,同时学习两者的embedding:

hankcs.com 2017-07-13 下午9.04.19.png

Sub-word NMT: two trends

在NMT中利用小于词语的颗粒度,有两种流派。一种使用相同的seq2seq框架,但是使用更细颗粒度的输入。另一种则是混合词语与字符两种颗粒度的输入。

Byte Pair Encoding

原本作为压缩算法被发明,目标是找出一种码表,将最频繁的bype pair压缩替换为一个新的byte。

活用到字符上,可以压缩词表。具体做法是从字符开始:

hankcs.com 2017-07-13 下午9.12.00.png

添加词表中最频繁的pair:

hankcs.com 2017-07-13 下午9.12.35.png

继续这一过程:

hankcs.com 2017-07-13 下午9.12.54.png

直到增长到希望的词表大小,比如3万:

hankcs.com 2017-07-13 下午9.13.10.png

最终词表混合了字符、词素和词语,在部分语言中赢得了WMT2016的第一名。

Wordpiece model

Google NMT用到了类似的变种,只不过不再贪心选择,而是以最大化语言模型的对数似然来选择合并。

Hybrid NMT

另一种流派希望结合word level的效率character level的效果,在NMT那课简单提了一下。

通过将OOV以LSTM编码,<unk>作为占位符送入另一个LSTM解码,其他单词原样输入编码解码,得到了这种混血模型:

2017-07-13_21-25-29.png

在两个level都有自己的柱搜索:

2017-07-13_21-27-09.png

在一些变形很多的语言(捷克语)上效果显著:

2017-07-13_21-29-39.png

word level无法应对复杂的变形,就算是copy,也只能copy人名,无法将一种语言的变形词语copy成另一种语言:

hankcs.com 2017-07-13 下午9.32.42.png

Hybrid则可以生成对应语言的变形:

hankcs.com 2017-07-13 下午9.33.34.png

posted on 2017-10-20 22:19  koocn  阅读(351)  评论(0编辑  收藏  举报