梳理2003-2018年NLP词语表示重要标志、论文和简介

397 阅读10分钟

本质上,自然语言理解 NLU 的核心问题其实就是如何从语言文字的表象符号中抽取出来蕴含在文字背后的真实意义,并将其用计算机能够读懂的方式表征出来。当然这通常对应的是数学语言,表征是如此重要,以至于 2012 年的时候 Yoshua Bengio 作为第一作者发表了一篇表征学习的综述 Representation Learning: A Review and New Perspectives,并随后在 2013 年和深度学习三大巨头的另一位巨头 Yann LeCun 牵头创办 ICLR,这一会议至今才过去 5 年时间,如今已是 AI 领域最负盛名的顶级会议之一。可以说,探究 NLP 或 NLU 的历史,同样也是探究文本如何更有效表征的历史。

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

时间 词语表示的特征 论文 解析
-2003 没有统一表示词语的方法,一般采取统计分析模式 NLP 中并没有一个统一的方法去表示一段文本,各位前辈和大师们发明了许多的方法:从 one-hot 表示一个词到用 bag-of-words 来表示一段文本,从 k-shingles 把一段文本切分成一些文字片段,到汉语中用各种序列标注方法将文本按语义进行分割,从 tf-idf 中用频率的手段来表征词语的重要性,到 text-rank 中借鉴 page-rank 的方法来表征词语的权重,从基于 SVD 纯数学分解词文档矩阵的 LSA,到 pLSA 中用概率手段来表征文档形成过程并将词文档矩阵的求解结果赋予概率含义,再到 LDA 中引入两个共轭分布从而完美引入先验......
2003 词语的分布式表示 A Neural Probabilistic Language Model Bengio 在他的经典论文 A Neural Probabilistic Language Model 中,首次将深度学习的思想融入到语言模型中,并发现将训练得到的 NNLM(Neural Net Language Model,神经网络语言模型)模型的第一层参数当做词的分布式表征时,能够很好地获取词语之间的相似度。NNLM 的最主要贡献是非常有创见性地将模型的第一层特征映射矩阵当做词的分布式表示,从而可以将一个词表征为一个向量形式,这直接启发了后来的 word2vec 的工作。
2007 2007 年 Mnih 和 Hinton 提出的 LBL 以及后续的一系列相关模型,省去了 NNLM 中的激活函数,直接把模型变成了一个线性变换,尤其是后来将 Hierarchical Softmax 引入到 LBL 后,训练效率进一步增强,但是表达能力不如 NNLM 这种神经网络的结构。
2008 2008 年 Collobert 和 Weston 提出的 C&W 模型不再利用语言模型的结构,而是将目标文本片段整体当做输入,然后预测这个片段是真实文本的概率,所以它的工作主要是改变了目标输出。由于输出只是一个概率大小,不再是词典大小,因此训练效率大大提升,但由于使用了这种比较“别致”的目标输出,使得它的词向量表征能力有限。
2010 2010 年 Mikolov 提出的 RNNLM 主要是为了解决长程依赖关系,时间复杂度问题依然存在。
2013 word2vec;CBOW 模型;Skip-gram 模型 Efficient estimation of word representations in vector space;Distributed Representations of Words and Phrases and their Compositionality 其实 word2vec 只是一个工具,背后的模型是 CBOW 或者 Skip-gram,并且使用了 Hierarchical Softmax 或 Negative Sampling 这些训练的优化方法。word2vec 对于前人的优化,主要是两方面的工作:模型的简化和训练技巧的优化。word2vec 的出现,极大促进了 NLP 的发展,尤其是促进了深度学习在 NLP 中的应用(不过有意思的是,word2vec 算法本身其实并不是一个深度模型,它只有两层全连接),利用预训练好的词向量来初始化网络结构的第一层几乎已经成了标配,尤其是在只有少量监督数据的情况下,如果不拿预训练的 embedding 初始化第一层,几乎可以被认为是在蛮干。
2014 Glove GloVe: Global Vectors for Word Representation 它整个的算法框架都是基于矩阵分解的做法来获取词向量的,本质上和诸如 LSA 这种基于 SVD 的矩阵分解方法没有什么不同,只不过 SVD 分解太过于耗时,运算量巨大,相同点是 LSA 也是输入共现矩阵,不过一般主要以词-文档共现矩阵为主,另外,LSA 中的共现矩阵没有做特殊处理,而 GloVe 考虑到了对距离较远的词对做相应的惩罚等等。然而,相比 word2vec,GloVe 却更加充分的利用了词的共现信息,word2vec 中则是直接粗暴的让两个向量的点乘相比其他词的点乘最大,至少在表面上看来似乎是没有用到词的共现信息,不像 GloVe 这里明确的就是拟合词对的共现频率。
2015 Skip-shoughts Skip-Thought Vectors 2015 年,多伦多大学的 Kiros 等人提出了一个很有意思的方法叫 Skip-thoughts。同样也是借鉴了 Skip-gram 的思想,但是和 PV-DBOW 中利用文档来预测词的做法不一样的是,Skip-thoughts 直接在句子间进行预测,也就是将 Skip-gram 中以词为基本单位,替换成了以句子为基本单位,具体做法就是选定一个窗口,遍历其中的句子,然后分别利用当前句子去预测和输出它的上一句和下一句。对于句子的建模利用的 RNN 的 sequence 结构,预测上一个和下一个句子时候,也是利用的一个 sequence 的 RNN 来生成句子中的每一个词,所以这个结构本质上就是一个 Encoder-Decoder 框架,只不过和普通框架不一样的是,Skip-thoughts 有两个 Decoder。
2016 fasttext FastText.zip: Compressing text classification models word2vec 和 GloVe 都不需要人工标记的监督数据,只需要语言内部存在的监督信号即可以完成训练。而与此相对应的,fastText 则是利用带有监督标记的文本分类数据完成训练。在输入数据上,CBOW 输入的是一段区间中除去目标词之外的所有其他词的向量加和或平均,而 fastText 为了利用更多的语序信息,将 bag-of-words 变成了 bag-of-features,也就是下图中的输入 x 不再仅仅是一个词,还可以加上 bigram 或者是 trigram 的信息等等。第二个不同在于,CBOW 预测目标是语境中的一个词,而 fastText 预测目标是当前这段输入文本的类别。fastText 最大的特点在于快。
2017 InferSent 框架 Supervised Learning of Universal Sentence Representations from Natural Language Inference Data 除了 Skip-thoughts 和 Quick-thoughts 这两种不需要人工标记数据的模型之外,还有一些从监督数据中学习句子表示的方法。比如 2017 年 Facebook 的研究人员 Conneau 等人提出的 InferSent 框架,它的思想特别简单,先设计一个模型在斯坦福的 SNLI(Stanford Natural Language Inference)数据集上训练,而后将训练好的模型当做特征提取器,以此来获得一个句子的向量表示,再将这个句子的表示应用在新的分类任务上,来评估句子向量的优劣。
2018_2 ELMo Deep contextualized word representations 该研究提出了一种新型深度语境化词表征,可对词使用的复杂特征(如句法和语义)和词使用在语言语境中的变化进行建模(即对多义词进行建模)。这些表征可以轻松添加至已有模型,并在 6 个 NLP 问题中显著提高当前最优性能。
2018_3 Quick thoughts An efficient framework for learning sentence representations 2018 年的时候,在 Skip-thoughts 的基础上,Google Brain 的 Logeswaran 等人将这一思想做了进一步改进,他们认为 Skip-thoughts 的 Decoder 效率太低,且无法在大规模语料上很好的训练(这是 RNN 结构的通病)。所以他们把 Skip-thoughts 的生成任务改进成为了一个分类任务,具体说来就是把同一个上下文窗口中的句子对标记为正例,把不是出现在同一个上下文窗口中的句子对标记为负例,并将这些句子对输入模型,让模型判断这些句子对是否是同一个上下文窗口中,很明显,这是一个分类任务。可以说,仅仅几个月之后的 BERT 正是利用的这种思路。而这些方法都和 Skip-thoughts 一脉相承。
2018_3 Learning General Purpose Distributed Sentence Representations via Large Scale Multi-task Learning 提出了利用四种不同的监督任务来联合学习句子的表征,这四种任务分别是:Natural Language Inference,Skip-thougts,Neural Machine Translation 以及 Constituency Parsing 等。
2018_3 Universal Sentence Encoder 谷歌的 Daniel Cer 等人在论文 Universal Sentence Encoder 中提出的思路基本和 General Purpose Sentence Representation 的工作一样,只不过作者提出了利用 Transformer 和 DAN(上文提到过的和 CBOW 与 fastText 都神似的 Deep Unordered Composition Rivals Syntactic Methods for Text Classification)两种框架作为句子的 Encoder。
2018_6 openai-GPT Improving Language Understanding by Generative Pre-Training OpenAI 最近通过一个与任务无关的可扩展系统在一系列语言任务中获得了当前最优的性能,目前他们已经发布了该系统。OpenAI 表示他们的方法主要结合了两个已存的研究,即 Transformer 和无监督预训练。实验结果提供了非常令人信服的证据,其表明联合监督学习方法和无监督预训练能够得到非常好的性能。这其实是很多研究者过去探索过的领域,OpenAI 也希望他们这次的实验结果能激发更加深入的研究,并在更大和更多的数据集上测试联合监督学习与无监督预训练的性能。
2018_10 Google-BERT BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 论文介绍了一种新的语言表征模型 BERT,意为来自 Transformer 的双向编码器表征(Bidirectional Encoder Representations from Transformers)。与最近的语言表征模型(Peters et al., 2018; Radford et al., 2018)不同,BERT 旨在基于所有层的左、右语境来预训练深度双向表征。因此,预训练的 BERT 表征可以仅用一个额外的输出层进行微调,进而为很多任务(如问答和语言推断任务)创建当前最优模型,无需对任务特定架构做出大量修改。BERT 的概念很简单,但实验效果很强大。它刷新了 11 个 NLP 任务的当前最优结果,包括将 GLUE 基准提升至 80.4%(7.6% 的绝对改进)、将 MultiNLI 的准确率提高到 86.7%(5.6% 的绝对改进),以及将 SQuAD v1.1 的问答测试 F1 得分提高至 93.2 分(提高 1.5 分)——比人类表现还高出 2 分。

更多内容,见望江智库 yuanxiaosc.github.io/