核心关键:语言表示(Representation)
文本是一种非结构化的数据信息,是不可以直接被计算的。
文本表示的作用就是将这些非结构化的信息转化为结构化的信息,这样就可以针对文本信息做计算,来完成我们日常所能见到的文本分类,情感判断等任务。
主要介绍以下三种
示例
~~~~ 假设有1000个词汇量,排在第一个位置的代表英语中的冠词 a a a, a a a就用 [ 1 , 0 , 0 , . . . . ] [1,0,0,....] [1,0,0,....]表示,只有第一个位置为 1 1 1,其余都是 0 0 0,如下图所示
在one hot representation编码的每个单词都是一个维度,彼此相互独立
优点
缺点
一个数字来表示一个词
缺点
第四节详细阐述分布式表示
代表性的就是词嵌入(Word Embedding),具体将在后面讲解
每个单词之间彼此无关是不符合现实的,实际上大量单词之间会有着相关性
one hot representation的编码方式就不会考虑这些差别
我们更希望用诸如“语义”,“复数”,“时态”等维度去描述一个单词。每一个维度不再是0或1,而是连续的实数,表示不同的程度。
Harris在1954年提出的分布假说(distributional hypothesis):上下文相似的词,其语义也相似
Firth在1957年对分布假说进一步阐述和明确:词的语义由其上下文决定(a word is characterized by
thecompany it keeps)
示例
给machine阅读大量文本,例如下图中的两例,机器通过上下文认为“马英九”和“蔡英文”是相似类型的词
根据建模的不同分为以下三类
上述方法的核心思想
1 Count based
若是两个单词 w i w_i wi和 w j w_j wj经常一起出现,那么这两个单词就有紧密的联系
2 Predition based
在详细介绍词的分布式表示之前,需要将NLP中的一个关键概念描述清楚:语言模型。
语言模型包括文法语言模型和统计语言模型。
一般我们指的是统计语言模型。之所以要将语言模型摆在词表示方法之前,是因为后面的表示方法马上要用到这一概念。
用一句简单的话说,就语言模型就是计算一个句子的概率大小的这种模型。有什么意义呢?
一个句子的打分概率越高,越说明他是更合乎人说出来的自然句子。就是这么简单。
常见的统计语言模型有 N N N元文法模型(N-gram Model),
最常见的是unigram model、bigram model、trigram model等等。
形式化讲,统计语言模型的作用是为一个长度为 m m m 的字符串确定一个概率分布 P ( w 1 ; w 2 ; . . . . . ; w m ) P(w_1; w_2;..... ; w_m) P(w1;w2;.....;wm),表示其存在的可能性,其中 w 1 w_1 w1 到 w m w_m wm 依次表示这段文本中的各个词。一般在实际求解过程中,通常采用下式计算其概率值:
P ( w i ∣ w 1 , w 2 , . . . w i − 1 ) ≈ P ( w i ∣ w i − ( n − 1 ) , . . . , w i − 1 ) P(w_i|w_1,w_2,...w_{i-1}) \approx P(w_i|w_{i-(n-1)},...,w_{i-1}) P(wi∣w1,w2,...wi−1)≈P(wi∣wi−(n−1),...,wi−1)
同时通过这些方法均也可以保留住一定的词序信息,这样就能把一个词的上下文信息capture住。
具体的语言模型请自行搜索。
~~~~ 基于矩阵的分布表示通常又称为分布语义模型,在这种表示下,矩阵中的一行,就成为了对应词的表示,这种表示描述了该词的上下文的分布。由于分布假说认为上下文相似的词,其语义也相似,因此在这种表示下,两个词的语义相似度可以直接转化为两个向量的空间距离。
~~~~ 常见到的Global Vector 模型( GloVe模型)是一种对“词-词”矩阵进行分解从而得到词表示的方法,属于基于矩阵的分布表示。
基 于 神 经 网 络 的 分 布 表 示 一 般 称 为 词 向 量 、 词 嵌 入 ( w o r d e m b e d d i n g ) 或 分 布 式 表 示 ( d i s t r i b u t e d r e p r e s e n t a t i o n ) \color{red}{基于神经网络的分布表示一般称为词向量、词嵌入( word embedding)或分布式表示( distributed representation}) 基于神经网络的分布表示一般称为词向量、词嵌入(wordembedding)或分布式表示(distributedrepresentation),这就是此次文章的主角
神经网络词向量表示技术通过神经网络技术对上下文,以及上下文与目标词之间的关系进行建模。
由于神经网络较为灵活,这类方法的最大优势在于可以表示复杂的上下文。
在前面基于矩阵的分布表示方法中,最常用的上下文是词。如果使用包含词序信息的 n − g r a m n-gram n−gram 作为上下文,当 n n n 增加时, n − g r a m n-gram n−gram的总数会呈指数级增长,此时会遇到维数灾难问题。 而神经网络在表示 n − g r a m n-gram n−gram 时,可以通过一些组合方式对 n n n个词进行组合,参数个数仅以线性速度增长。有了这一优势,神经网络模型可以对更复杂的上下文进行建模,在词向量中包含更丰富的语义信息。
~~~~ 基于神经网络的分布表示又称为词向量、词嵌入,神经网络词向量模型与其它分布表示方法一样,均基于分布假说,核心依然是上下文的表示以及上下文与目标词之间的关系的建模。
前面提到过,为了选择一种模型刻画某个词(下文称“目标词”)与其上下文之间的关系,我们需要在词向量中capture到一个词的上下文信息。同时,上面我们恰巧提到了统计语言模型正好具有捕捉上下文信息的能力。那么构建上下文与目标词之间的关系,最自然的一种思路就是使用语言模型。从历史上看,早期的词向量只是神经网络语言模型的副产品。
~~~~ 2001年, Bengio 等人正式提出神经网络语言模型( Neural Network Language Model ,NNLM),该模型在学习语言模型的同时,也得到了词向量。所以请注意一点:词向量可以认为是神经网络训练语言模型的副产品。
o n e − h o t one-hot one−hot表示法具有维度过大的缺点,那么现在将vector做一些改进:
主要的实现方式
通过神经网络训练模型可以得到词向量,主要的神经网络语言模型如下所示
上面的5个神经网络语言模型,只是逻辑概念上的东西。
具体模型我们得通过设计将其实现出来,而实现CBOW( Continuous Bagof-Words)和 Skip-gram 语言模型的工具正是 word2vec
C&W 模型的实现工具是SENNA。
所以说,分布式词向量并不是word2vec的作者发明的,他只是提出了一种更快更好的方式来训练语言模型罢了。分别是:连续词袋模型Continous Bag of Words Model(CBOW)和Skip-Gram Model,这两种都是可以训练出词向量的方法,再具体代码操作中可以只选择其一,不过据论文说CBOW要更快一些。
根据当前词来预测上下文
Skip-Gram Model 论文