目录
1.词嵌入产生的背景
1.1 NLP关键:语言的表示
我们知道,如果我们需要使用计算机去处理一些信息,则必须对这个问题进行数学建模。自然语言处理也是一样,我们如何对我们的文本进行数学建模呢?我们来看一下其他领域是如何处理的。
我们看看图像和语音是怎么表示数据的
在语音中,用音频频谱序列向量所构成的matrix作为前端输入喂给NN进行处理,good;在图像中,用图片的像素构成的matrix展平成vector后组成的vector序列喂给NN进行处理,good;那在自然语言处理中呢?噢你可能知道或者不知道,将每一个词用一个向量表示出来!想法是挺简单的,对,事实上就是这么简单,然而真有这么简单吗?可能没这么简单。
有人提到,图像、语音属于比较自然地低级数据表示形式,在图像和语音领域,最基本的数据是信号数据,我们可以通过一些距离度量,判断信号是否相似,在判断两幅图片是否相似时,只需通过观察图片本身就能给出回答。而语言作为人类在进化了几百万年所产生的一种高层的抽象的思维信息表达的工具,其具有高度抽象的特征,文本是符号数据,两个词只要字面不同,就难以刻画它们之间的联系,即使是“麦克风”和“话筒”这样的同义词,从字面上也难以看出这两者意思相同(语义鸿沟现象),可能并不是简单地一加一那么简单就能表示出来,而判断两个词是否相似时,还需要更多的背景知识才能做出回答。
那么据上是不是可以自信地下一个结论呢:如何有效地表示出语言句子是决定NN能发挥出强大拟合计算能力的关键前提!
1.2 NLP词的表示方法类型
按照现今目前的发展,词的表示分为独热表示one-hot、分布式表示。
1.2.1 独热表示one-hot
独热编码和我们平时处理结构化数据中的类别型的数据一样。假设有一个大的词典,词的数目为N,则我们对每个词表示成一个N为的向量,只有在该词出现在词典的位置处的值为1,其余位置处的值为0.
每个词都是茫茫 0 海中的一个 1。这种 One-hot Representation 如果采用稀疏方式存储,会是非常的简洁:也就是给每个词分配一个数字 ID。比如刚才的例子中,话筒记为 3,麦克记为 8(假设从 0 开始记)。如果要编程实现的话,用 Hash 表给每个词分配一个编号就可以了。这么简洁的表示方法配合上最大熵、SVM、CRF 等等算法已经很好地完成了 NLP 领域的各种主流任务。
现在我们分析他的不当处。1、向量的维度会随着句子的词的数量类型增大而增大;2、任意两个词之间都是孤立的,根本无法表示出在语义层面上词语词之间的相关信息,而这一点是致命的。
1.2.2 词的分布式表示distributed representation
统的独热表示( one-hot representation)仅仅将词符号化,不包含任何语义信息。如何将语义融入到词表示中?Harris 在 1954 年提出的分布假说( distributional hypothesis)为这一设想提供了理论基础:上下文相似的词,其语义也相似。Firth 在 1957 年对分布假说进行了进一步阐述和明确:词的语义由其上下文决定( a word is characterized by thecompany it keeps)。
到目前为止,基于分布假说的词表示方法,根据建模的不同,主要可以分为三类:基于矩阵的分布表示、基于聚类的分布表示和基于神经网络的分布表示。尽管这些不同的分布表示方法使用了不同的技术手段获取词表示,但由于这些方法均基于分布假说,它们的核心思想也都由两部分组成:一、选择一种方式描述上下文;二、选择一种模型刻画某个词(下文称“目标词”)与其上下文之间的关系。
1.3 NLP中的语言模型
语言模型即对语言建模的模型。NLP中主要包括文法语言模型和统语言模型。其中文法语言模型因为语法的复杂性,很难建模,用的比较少。目前NLP中用的比较多的是统计语言模型。
统计语言模型: 统计语言模型把语言(词的序列)看作一个随机事件,并赋予相应的概率来描述其属于某种语言集合的可能性。给定一个词汇集合 V,对于一个由 V 中的词构成的序列S = ⟨w1, · · · , wT ⟩ ∈ Vn,统计语言模型赋予这个序列一个概率P(S),来衡量S 符合自然语言的语法和语义规则的置信度。
用一句简单的话说,就语言模型就是计算一个句子的概率大小的这种模型。有什么意义呢?一个句子的打分概率越高,越说明他是更合乎人说出来的自然句子。
就是这么简单。常见的统计语言模型有N元文法模型(N-gram Model),最常见的是unigram model、bigram model、trigram model等等。形式化讲,统计语言模型的作用是为一个长度为 m 的字符串确定一个概率分布 P(w1; w2; :::; wm),表示其存在的可能性,其中 w1 到 wm 依次表示这段文本中的各个词。一般在实际求解过程中,通常采用下式计算其概率值:
同时通过这些方法均也可以保留住一定的词序信息,这样就能把一个词的上下文信息capture住。
1.4 词的分布表示
假设语言满足一个分布,是以一定的概率生成某些词的。
1.4.1 基于矩阵的分布表示
基于矩阵的分布表示通常又称为分布语义模型,在这种表示下,矩阵中的一行,就成为了对应词的表示,这种表示描述了该词的上下文的分布。由于分布假说认为上下文相似的词,其语义也相似,因此在这种表示下,两个词的语义相似度可以直接转化为两个向量的空间距离。
常见到的Global Vector 模型( GloVe模型)是一种对“词-词”矩阵进行分解从而得到词表示的方法,属于基于矩阵的分布表示。
1.4.2 基于聚类的分布表示
该方法以根据两个词的公共类别判断这两个词的语义相似度。最经典的方法是布朗聚类(Brown clustering)
1.4.3 基于神经网络的分布表示,词嵌入(word embedding)
基于神经网络的分布表示一般称为词向量、词嵌入(word embedding)或分布式表示(distributed representation)
神经网络词向量表示技术通过神经网络技术对上下文,以及上下文与目标词之间的关系进行建模。由于神经网络较为灵活,这类方法的最大优势在于可以表示复杂的上下文。在前面基于矩阵的分布表示方法中,最常用的上下文是词。如果使用包含词序信息的 n-gram 作为上下文,当 n 增加时, n-gram 的总数会呈指数级增长,此时会遇到维数灾难问题。而神经网络在表示 n-gram 时,可以通过一些组合方式对 n 个词进行组合,参数个数仅以线性速度增长。有了这一优势,神经网络模型可以对更复杂的上下文进行建模,在词向量中包含更丰富的语义信息。
2.什么是词嵌入技术
词嵌入是一类将词映射为低维稠密向量的技术统称。最近比较火的是谷歌开源的word2vec技术。
2.1 概念
基于神经网络的分布表示又称为词向量、词嵌入,神经网络词向量模型与其它分布表示方法一样,均基于分布假说,核心依然是上下文的表示以及上下文与目标词之间的关系的建模。
前面提到过,为了选择一种模型刻画某个词(下文称“目标词”)与其上下文之间的关系,我们需要在词向量中capture到一个词的上下文信息。同时,上面我们恰巧提到了统计语言模型正好具有捕捉上下文信息的能力。那么构建上下文与目标词之间的关系,最自然的一种思路就是使用语言模型。从历史上看,早期的词向量只是神经网络语言模型的副产品。
2001年, Bengio 等人正式提出神经网络语言模型( Neural Network Language Model ,NNLM),该模型在学习语言模型的同时,也得到了词向量。所以请注意一点:词向量可以认为是神经网络训练语言模型的副产品。
2.2 神经网络语言模型与word2vec
2.2.1 神经网络语言模型
a) Neural Network Language Model ,NNLM
b) Log-Bilinear Language Model, LBL
c) Recurrent Neural Network based Language Model,RNNLM
d) Collobert 和 Weston 在2008 年提出的 C&W 模型
e) Mikolov 等人提出了 CBOW( Continuous Bagof-Words)和 Skip-gram 模型
2.2.2 word2vec与CBOW、Skip-gram
2.2.3 word embedding理解
现在,词向量既能够降低维度,又能够capture到当前词在本句子中上下文的信息(表现为前后距离关系),那么我们对其用来表示语言句子词语作为NN的输入是非常自信与满意的。
另外一点很实用的建议,在你做某一项具体的NLP任务时如你要用到词向量,那么我建议你:要么1、选择使用别人训练好的词向量,注意,得使用相同语料内容领域的词向量;要么2、自己训练自己的词向量。我建议是前者,因为……坑太多了。
3.常用的词嵌入技术有哪些
3.1 word2vec , GloVe
在过去的五年里,已经提出了大量可行的词嵌入的方法。 最常用的模型是word2vec和GloVe,它们都是基于分布假设( distributional hypothesis)的无监督方法(出现在相似语境中的词往往具有相似的含义)。
Word2Vec:https://github.com/dav/word2vec/
GloVe:https://nlp.stanford.edu/projects/glove/
3.2 FastText, ELMo
虽然有些研究工作通过结合对语义或句法知识的监督来增强这些无监督的方法,但在2017-2018年,纯粹的无监督方法获得了有趣的进展,最著名的是:FastText(word2vec的扩展)和ELMo(较先进的上下文词向量)。
FastText
FastText由Tomas Mikolov团队提出,word2vec框架也是他们在2013年提出的,FastText促进了对于通用词嵌入研究的爆炸式增长。
FastText对原始word2vec向量的主要改进是包含基于字符的n-gram模型,它允许计算没有出现在训练数据中的单词表示(“词外”字)。
FastText矢量训练速度超快,可在157种语言的Wikipedia和Crawl训练中使用。 他们是一个很好的基准。
ELMo
最近,深层语境化词表征(ELMo)在较好的词嵌入技术基础上有了显著地提升。 它们由艾伦人工智能研究所开发,将于6月初在NAACL 2018展出。
ELMo知道很多关于文字的上下文
在ELMo中,每个单词被赋予一个表征,这个表征是它们所属的整个语料库句子的函数。 嵌入是从双层双向语言模型(LM)的内部状态计算出来的,因此名为“ELMo”:Embeddings from Language Models,从语言模型嵌入。
ELMo的特点:
ELMo的输入是字符而不是单词。 因此,可以利用子字词单元来计算有意义的表征,即使对于词典外的词(如FastText)也是如此。
ELMo是由biLMs若干层激活的连接。 语言模型的不同层对单词上的不同类型信息进行编码(例如,词语标注由biLSTM的较低层完成预测,而词义消歧在较高层中更好地编码)。 把所有层连接起来,可以自由组合各种文字表征,以提高下游任务的性能表现。