• 精选
  • 会员

NLP领域中历史突破——梯子来了

2019年3月9日  来源:THU数据派 作者: 提供人:diliang24......

历史突破——梯子来了

自 NNLM 于 2003 年被提出后,后面又出现了很多类似和改进的工作,诸如 LBL,C&W 和 RNNLM 模型等等,这些方法主要从两个方面去优化 NNLM 的思想:其一是 NNLM 只用了左边的 n-1 个词,如何利用更多的上下文信息便成为了很重要的一个优化思路(如 Mikolov 等人提出的 RNNLM);其二是 NNLM 的一个非常大的缺点是输出层计算量太大,如何减小计算量使得大规模语料上的训练变得可行,这也是工程应用上至关重要的优化方向(如 Mnih 和 Hinton 提出的 LBL 以及后续的一系列模型)。

为了更好理解 NNLM 之后以及 word2vec 诞生前的情况,我们先来看看现有的几个主要模型都有哪些优缺点。

NNLM虽然将 N-Gram 的阶 n 提高到了 5,相比原来的统计语言模型是一个很大的进步,但是为了获取更好的长程依赖关系,5 显然是不够的。再者,因为 NNLM 只对词的左侧文本进行建模,所以得到的词向量并不是语境的充分表征。

还有一个问题就更严重了,NNLM 的训练依然还是太慢,在论文中,Bengio 说他们用了 40 块 CPU,在含有 1400 万个词,只保留词频相对较高的词之后词典大小为 17964 个词,只训练了 5 个 epoch,但是耗时超过 3 周。按这么来算,如果只用一块 CPU,可能需要 2 年多,这还是在仅有 1400 万个词的语料上。如此耗时的训练过程,显然严重限制了 NNLM 的应用。

2007 年 Mnih 和 Hinton 提出的?LBL 以及后续的一系列相关模型,省去了 NNLM 中的激活函数,直接把模型变成了一个线性变换,尤其是后来将 Hierarchical Softmax 引入到 LBL 后,训练效率进一步增强,但是表达能力不如 NNLM 这种神经网络的结构。

2008 年 Collobert 和 Weston 提出的?C&W 模型不再利用语言模型的结构,而是将目标文本片段整体当做输入,然后预测这个片段是真实文本的概率,所以它的工作主要是改变了目标输出。由于输出只是一个概率大小,不再是词典大小,因此训练效率大大提升,但由于使用了这种比较“别致”的目标输出,使得它的词向量表征能力有限。

2010 年 Mikolov(对,还是同一个 Mikolov)提出的?RNNLM?主要是为了解决长程依赖关系,时间复杂度问题依然存在。

深度长文:详细归纳NLP领域中的巨人肩膀

而这一切,似乎都在预示着一个新时代的来临。

1. CBOW 和 Skip-gram

2013 年,Tomas Mikolov 连放几篇划时代的论文,其中最为重要的是两篇,Efficient estimation of word representations in vector space 首次提出了 CBOW和Skip-gram模型,进一步地在 Distributed Representations of Words and Phrases and their Compositionality 中,又介绍了几种优化训练的方法,包括 Hierarchical Softmax(当然,这个方法早在 2003 年,Bengio 就在他提出 NNLM 论文中的 Future Work 部分提到了这种方法,并于 2005 年把它系统化发表了一篇论文),Negative Sampling 和 Subsampling 技术。

放出两篇论文后,当时仍在谷歌工作的 Mikolov 又马不停蹄放出了大杀器——word2vec 工具,并在其中开源了他的方法。顺便提一下的是,很多人以为 word2vec 是一种模型和方法,其实 word2vec 只是一个工具,背后的模型是 CBOW 或者 Skip-gram,并且使用了 Hierarchical Softmax 或 Negative Sampling 这些训练的优化方法。

所以准确说来,word2vec 并不是一个模型或算法,只不过 Mikolov 恰好在当时把他开源的工具包起名叫做 word2vec 而已。不过为了叙述简单,在下文我将用 word2vec 来指代上面提到 Mikolov 两篇论文中的一整个相关的优化思想。

word2vec 对于前人的优化,主要是两方面的工作:模型的简化训练技巧的优化。我们先来看看模型的简化方面,也就是耳熟能详的 CBOW 和 Skip-gram。

对于 CBOW 而言,我们可以从它的名字上一窥究竟,它的全称是 Continuous Bag-of-Words,也就是连续的词袋模型,为什么取这个名字,先来看看它的目标函数。

深度长文:详细归纳NLP领域中的巨人肩膀

首先,CBOW 没有隐藏层,本质上只有两层结构,输入层将目标词语境 c 中的每一个词向量简单求和(当然,也可以求平均)后得到语境向量,然后直接与目标词的输出向量求点积,目标函数也就是要让这个与目标词向量的点积取得最大值,对应的与非目标词的点积尽量取得最小值。

从这可以看出,CBOW 的第一个特点是取消了 NNLM 中的隐藏层,直接将输入层和输出层相连;第二个特点便是在求语境 context 向量时候,语境内的词序已经丢弃(这个是名字中 Continuous 的来源);第三,因为最终的目标函数仍然是语言模型的目标函数,所以需要顺序遍历语料中的每一个词(这个是名字中 Bag-of-Words 的来源)。

因此有了这些特点(尤其是第二点和第三点),Mikolov 才把这个简单的模型取名叫做 CBOW,简单却有效的典范。

深度长文:详细归纳NLP领域中的巨人肩膀

需要注意的是这里每个词对应到两个词向量,在上面的公式中都有体现,其中 e(wt) 是词的输入向量,而 e

不过说个八卦,为什么 fastText 结构和 CBOW 如此相似。感兴趣的读者想要继续深挖的话,还可以看看 2015 年 ACL 的一篇论文?Deep Unordered Composition Rivals Syntactic Methods for Text Classification,结构又是何其相似,并且比 fastText 的论文探讨的更为深入一些,但是 fastText 是 2016 年的文章,剩下的大家自己去想好了。

这里面大概一个特别重要的原因就是 fastText 的作者之一便是 3 年前 CBOW 的提出者 Mikolov 本人,只不过昔日的 Mikolov 还在谷歌,如今 3 年时间一晃而过,早已是 Facebook 的人了。

爬上第一级梯子的革命意义

为什么说 word2vec 的出现极大促进了 NLP 领域的发展?

通常以为,word2vec 一类的方法会给每一个词赋予一个向量的表征,不过似乎从来没有人想过这个办法为什么行之有效?难道是皇帝的新衣?按理来说,包括 NNLM 在内,这些方法的主要出发点都是将一个词表示成词向量,并将其语义通过上下文来表征。

其实,这背后是有理论基础的,1954 年 Harris 提出分布假说(distributional hypothesis),这一假说认为:上下文相似的词,其语义也相似,1957 年 Firth 对分布假说进行了进一步阐述和明确:词的语义由其上下文决定(a word is characterized by the company it keeps),30 年后,深度学习的祖师爷 Hinton 也于 1986 年尝试过词的分布式表示。

而 word2vec 的贡献远不止是给每一个词赋予一个分布式的表征,私以为,它带来了一种全新的 NLP 模型建立方法。在这之前,大多数 NLP 任务都要在如何挖掘更多文本语义特征上花费大量时间,甚至这一部分工作占去了整个任务工作量的绝大部分。

而以 word2vec 为代表的 distributed representation 方法大量涌现后(尤其是因为大规模语料上的预训练词向量成为现实,并且被证明确实行之有效之后),算法人员发现利用 word2vec 在预训练上学习到的词向量,初始化他们自己模型的第一层,会带来极大效果的提升,以至于这五年以来,几乎业内的默认做法便是要用无论 word2vec 还是 GloVe 预训练的词向量,作为模型的第一层,如果不这么做,大约只有两个原因:

  • 你很土豪,有钱标注大量监督数据;
  • 你在蛮干。

而这一个思想,绝不是如它表象所显示的一样,似乎和过去做文本特征没什么太大区别,是的,表象确实是这样,无非是把一个词用了一堆数字来表征而已,这和离散化的特征有什么本质区别吗?

有,因为它开启了一种全新的 NLP 模型训练方式——迁移学习。基本思想便是利用一切可以利用的现成知识,达到快速学习的目的,这和人类的进化历程何其相似。

虽然咿咿呀呀囫囵吞枣似的刚开始能够说得三两个词,然而这是“NLP 的一小步,人类 AI 的一大步”。正如人类语言产生之初,一旦某个原始人类的喉部发出的某个音节,经无比智慧和刨根问底考证的史学家研究证实了它具有某个明确的指代意义(无论它指代什么,即便是人类的排泄物),这便无比庄严的宣示着一个全新物种的诞生,我想迁移学习在 NLP 中的这一小步,大概与此同担当。

NLP / 机器学习 / CBOW / Skip-gram / 迁移学习

如涉及版权,请著作权人与本网站联系,删除或支付费用事宜。

0000