词嵌入(Word embeddings)是一种单词的表示形式,它允许意义相似的单词具有类似的表示形式。
它们是文本的分布式表示,这大概是在挑战自然语言处理问题的深度学习方法时,令人印象深刻的关于性能的重大突破之一。
在这篇文章中,您将会了解到用于表示文本数据的词嵌入方法。
读完本文后,您会知道:
我们开始本次学习之旅吧!
图片作者 Heather,保留部分版权。
这篇文章分为三大部分,分别是:
词嵌入是文本的学习表示,其中意义相同的单词具有相似的表示形式。
正是这种表达单词和文档的方法,被人们认为可能是在挑战自然语言处理问题时,有关深度学习的重大突破之一。
使用密集和低维向量的好处之一是利于计算:大多数神经网络工具包无法很好地处理非常高维的稀疏向量。... 密集表示最重要的益处在于其泛化能力:如果我们相信某些特征可能提供关于相似性的线索,那么为了捕获这些线索而准备一些表示则是值得的。
- 引用自 2017 年出版的 Neural Network Methods in Natural Language Processing(自然语言处理中的神经网络方法),第 92 页。
实际上,词嵌入是一类技术,这种技术将单独的词在预定义的向量空间中表示为实值向量。其中每个单词映射到一个向量上,向量值是以类似于神经网络的方式学习得来,该技术因此常被归类于深度学习领域。
为每个单词使用密集的分布式表示,这是词嵌入方法的核心思想。
每个单词由一个实值向量表示,这一向量通常有数十或几百个维度。这与稀疏词表示所需的成千上百万个维度形成鲜明对比,稀疏表示的一个例子就是独热编码(One-hot encoding)。
词汇表中一个分布式的词特征向量将每个单词互相关联在一起 ... 特征向量表示了词的不同方面:每个词与向量空间中的一个点相关联。特征的数量 ... 远小于词汇表的大小。
- 引用自 2003 年发表的 A Neural Probabilistic Language Model(一个神经概率语言模型)。
分布式表示是基于单词的用法学习得来的。这使得以类似的方式使用的单词能具有相似的表示,并自然地捕捉它们的意义。这可以与词袋模型(Bag-of-words model)中的脆而易碎的表示形成对照:(词袋模型中)除非显式地进行管理,否则不论单词如何被使用,不同的单词都会具有不同的表示。
这种方法有着更深层的语言学理论背景,即 Zellig Harris 的 “distributional hypothesis(分布假说) ”,这一假说可以概括为:具有相似语境的词语具有相似的意义。欲知详情,请参阅 Harris 在 1956 年发表的论文 “Distributional structure(分布式结构)”。
这种概念(让词的用法来定义它的意义)可以用 John Firth 所再三重复的妙语作为总结:
识词于其所友!(You shall know a word by the company it keeps!)
(译者注:这句妙语的翻译源自搜狐网站的一篇文章)
- 引用自 1962 年发表的,对 1930 - 1955 年语言学分析的相关研究, “A synopsis of linguistic theory 1930-1955(1930-1955 年语言学理论概览)”,
词嵌入方法是对文本语料库进行学习,从而得到预定义的固定大小词汇表的实值向量表示。
其学习的过程要么是与某些任务(如文档分类)的神经网络模型的结合,要么就是使用文档统计的无监督过程。
本小节对可用于从文本数据中学习到词嵌入的三种技术进行了综述。
一个嵌入层(Embedding layer),没有比这更贴切的名称了,它是一种与特定自然语言处理任务(如语言建模或文本分类)的神经网络模型共同学习的词嵌入。
它要求对文档文本进行准备与清理,以使得每个单词都是一个独热编码。向量空间的大小被指定为模型的一部分,例如 50, 100 或 300 个维度。向量使用小的随机数进行初始化。嵌入层用于神经网络的前端,并且它采用反向传播算法(Backpropagation algorithm)以有监督(Supervised)的方式进行拟合。
... 当神经网络的输入包含符号分类特征时(例如,从一个封闭的词汇表中取出 k 个不同符号的特征),通常我们将每个可能的特征值(即词汇表中的每个词)通过一些 d 维向量联系起来。然后将这些向量视为模型的参数,并与其他参数一起训练。
- 引用自 2017 年出版的 Neural Network Methods in Natural Language Processing(自然语言处理中的神经网络方法),第 49 页。
词的独热编码被映射到词向量中。如果我们使用多层感知器(Perceptron)模型,那么在将单词向量输入给模型之前,我们要将它们串联在一起。如果使用的是循环神经网络,那么每个单词可以作为输入序列中的一员。
这种学习嵌入层的方法需要大量的训练数据,并且训练速度低下,但是会学习到针对特定文本数据和 NLP 任务的嵌入。
Word2Vec 是一种统计学方法,它可以从文本语料库中高效地学习独立的词嵌入。
2013 年,它由 Tomas Mikolov 等人在谷歌开发,它作为一个响应,使得对基于神经网络的嵌入的训练更加有效。从那时起,它就已成为开发预训练词嵌入的一个约定俗成的标准。
此外,该研究还涉及到对学习到的向量的分析,以及在单词表示方面对向量数学的探索。例如,从 “King”(国王) 中减去 “man-ness”(男人),其结果再加上 “women-ness”(女人)就会得到 “Queen”(女王) 这个词,掌握到这样的类比“king is to queen as man is to woman”(国王与女王是对应的,正如男人对于女人一样)。
我们发现,这些表示法非常善于捕捉语言中的句法和语义规律性,并且每种关联都以特定关系(Relation-specific)的向量偏移作为特征。这允许基于词之间的偏移来进行面向向量的推理。例如,男性/女性的关联是自动学习得到的,在诱导向量的表示下,“ King - Man + Woman” 的结果是一个非常近似于 “Queen” 的向量。
- 引用自 2013 年发表的 Linguistic Regularities in Continuous Space Word Representations( 连续空间词表达中的语言规律)。
有两种不同的学习模型被引入,它们可以作为 word2vec 方法的一部分来学习词嵌入:
CBOW 模型基于上下文来预测当前的词,从而学习到词嵌入。连续 Skip-Gram 模型则是通过预测当前单词的邻近词来学习。
图片源自 2013 年发表的 “Efficient Estimation of Word Representations in Vector Space(向量空间中词表示的有效估计)”。
这两种模型都侧重于在局部使用的上下文语境下进行学习,其中上下文是由一个邻近词窗口来定义的。这个窗口是模型的一个可配置参数。
滑动窗口的大小对得到的向量相似性具有深刻影响。大的窗口趋于产生更多的局部相似性 [...] 而较小的窗口则倾向于产生更多在功能上和句法上的相似性。
- 引用自 2017 年出版的 Neural Network Methods in Natural Language Processing(自然语言处理中的神经网络方法),第 128 页。
这种方法的主要优点就是可以高效地学习到高质量的词嵌入(具有低维度和低时间复杂度的特性),它允许从更大的文本语料(数十亿个词)中学习更大规模的嵌入(更多维度)。
用于词表示的全局向量算法(或称为 GloVe)是由 Pennington 等人于 Stanford 大学开发的,这一算法是对于 word2vec 方法的一个扩展,它可以高效地学习到词向量。
经典的向量空间模型的词表示是使用矩阵分解技术(例如潜在语义分析 [LSA,Latent Semantic Analysis])开发的,这些技术在使用全局文本统计这方面表现优异,但它们并不像 word2vec 那样学习方法一样,能够捕获(词的)意义并在任务中表示出来,比如计算出类比(例如上面描述的国王与女王的例子)。
GloVe 是一种将矩阵分解技术的全局统计(例如 LSA)与 word2vec 中基于局部语境的学习结合起来的方法。
不同于使用窗口来定义局部上下文(word2vec),GloVe 使用了整个文本语料库,语料库中的统计信息用于构造明确的词的上下文或者词的共生矩阵(Co-occurrence matrix)。使用整个文本语料库的结果,是得到一个通常能获得更好的词嵌入的学习模型。
GloVe 是一个新的全局的 Log-bilinear 回归模型,这个模型用于无监督学习的词表示,它在词类比,词相似性以及命名实体识别任务方面皆优于其它模型。
- 引用自 2014 年发表的 GloVe: Global Vectors for Word Representation(GloVe:用于词表示的全局向量)。
当您在自然语言处理项目中使用词嵌入时,您有一些可选设置。
本节将对这些选项进行概述。
你可以选择学习一个词嵌入以帮助解决你的问题。
而这将需要大量的文本数据(如数百万甚至数十亿个词)来确保能学习到有使用价值的嵌入。
训练词嵌入时,您有两个主要选项:
通常情况下,研究人员会基于一些许可协议来免费提供预训练的词嵌入,以便您可以在自己的学术或商业项目中使用它们。
例如,word2vec 和 GloVe 词嵌入都可以免费下载。
你可以在项目中使用它们,而不需要从头开始训练自己的嵌入。
在使用预训练的嵌入时,您有两个主要选项:
如果可以,请对不同的选项进行探索,测试一下,看看哪个能给出最好的结果。
或许您可以从快速的方法开始(比如使用预训练的嵌入),并且只有当使用新的嵌入才能在问题上获得更好的性能时,才使用新的嵌入。
如果您正在深入研究,本节将提供更多有关该主题的资源。
通过本文,您了解到了深度学习应用中作为文本表示方法的词嵌入技术。
具体来说,你学到了: