词向量表示

 

1、语言表示

语音中,用音频频谱序列向量所构成的矩阵作为模型的输入;在图像中,用图像的像素构成的矩阵数据作为模型的输入。这些都可以很好表示语音/图像数据。而语言高度抽象,很难刻画词语之间的联系,比如“麦克风”和“话筒”这样的同义词,从字面上也难以看出这两者意思相同,即“语义鸿沟”现象。

1.1、分布假说

上下文相似的词,其语义也相似。

1.2、语言模型

文本学习:词频、词的共现、词的搭配。 
语言模型判定一句话是否为自然语言。机器翻译、拼写纠错、音字转换、问答系统、语音识别等应用在得到若干候选之后,然后利用语言模型挑一个尽量靠谱的结果。 

 

n元语言模型:对语料中一段长度为n 的序列wn−i+1,...,wi−1,即长度小于n的上文,n元语言模型需要最大化如下似然:      

                            词向量表示

wi为语言模型要预测的目标词,序列wn−i+1,...,wi−1为模型的输入,即上下文,输出则为目标词wi的分布。用频率估计估计n元条件概率: 

                     词向量表示

通常,n越大,越能保留词序信息,但是长序列出现的次数会非常少,导致数据稀疏的问题。一般三元模型较为常用。

2、词向量表示

2.1、词向量表示之one-hot

     1、 构建语料库

     2、构建id2word的词典

     3、词向量表示

    例如构建的词典为:

     {“John”: 1, “likes”: 2, “to”: 3, “watch”: 4, “movies”: 5, “also”: 6, “football”: 7, “games”: 8, “Mary”: 9, “too”: 10}

     则词向量表示为:

     John: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]

  • 缺点:维度大;词与词之间是孤立的,无法表示词与词之间的语义信息! 

2.2、词带模型之 (Bag of Words)

1)文档的向量表示可以直接将各词的词向量表示加和
John likes to watch movies. Mary likes too. => [1, 2, 1, 1, 1, 0, 0, 0, 1, 1]

2)计算词权重 TF-IDF

   IDF计算需要考虑到所有的文档,计算逆词频数

这种一般也可以统计ngram的tf-idf

2.3、词的分布式表示

       分布式表示 主要分为三类:基于矩阵的分布式表示、基于聚类的分布式表示、基于神经网络的分布式表示。这三种方法使用了不同的技术手段,但是它们都是基于分布假说,核心思想也都由两部分组成:一是选择一种方式描述上下文二是选择一种模型刻画目标词与上下文之间的关系

2.3.1 基于矩阵的分布式表示

基于矩阵的分布表示主要是构建“词-上下文”矩阵,通过某种技术从该矩阵中获取词的分布表示。矩阵的行表示词,列表示上下文,每个元素表示某个词和上下文共现的次数,这样矩阵的一行就描述了改词的上下文分布。

常见的上下文有:(1)文档,即“词-文档”矩阵;(2)上下文的每个词,即“词-词”矩阵;(3)n-元词组,即“词-n-元组”矩阵。矩阵中的每个元素为词和上下文共现的次数,通常会利用TF-IDF、取对数等技巧进行加权和平滑。另外,矩阵的维度较高并且非常稀疏,可以通过SVD、NMF等手段进行分解降维,变为低维稠密矩阵。 

eg:

词向量表示

这是一个矩阵,这里的一行表示一个词在哪些title(文档)中出现了(词向量表示),一列表示一个title中有哪些词。比如说T1这个title中就有guide、investing、market、stock四个词,各出现了一次,我们将这个矩阵进行SVD,得到下面的矩阵: 

词向量表示

左奇异向量表示词的一些特性,右奇异向量表示文档的一些特性,中间的奇异值矩阵表示左奇异向量的一行与右奇异向量的一列的重要程序,数字越大越重要。 
将左奇异向量和右奇异向量都取后2维(之前是3维的矩阵),投影到一个平面上,可以得到(如果对左奇异向量和右奇异向量单独投影的话也就代表相似的文档和相似的词): 

词向量表示

在图上,每一个红色的点,都表示一个词,每一个蓝色的点,都表示一篇文档,这样我们可以对这些词和文档进行聚类,比如说stock 和 market可以放在一类,因为他们老是出现在一起,real和estate可以放在一类,dads,guide这种词就看起来有点孤立了。按这样聚类出现的效果,可以提取文档集合中的近义词,这样当用户检索文档的时候,是用语义级别(近义词集合)去检索了,而不是之前的词的级别。这样一减少我们的检索、存储量,因为这样压缩的文档集合和PCA是异曲同工的,二可以提高我们的用户体验,用户输入一个词,我们可以在这个词的近义词的集合中去找,这是传统的索引无法做到的。

详细的LSI算法可以参考这篇博客https://blog.****.net/qq_16633405/article/details/80577851

2.3.2 基于聚类的分布式表示

这类方法通过聚类手段构建词与其上下文之间的关系。布朗聚类(Brown clustering);目前看到的是可以将相似的词聚到一个簇里面,具体的词向量表示,本人还没太理解,有待探讨。

布朗聚类原理详细解释可参考:https://zhuanlan.zhihu.com/p/158892642

                                                       https://blog.****.net/u014516670/article/details/50574147

2.4基于神经网络的分布式表示

2.4.1、NNLM

Bengio 神经网络语言模型(Neural Network Language Model ,NNLM)是对 n 元语言模型进行建模,估算 P(wi|wn−i+1,...,wi−1) 的概率值。与n-gram等模型区别在于:NNLM不用记数的方法来估算 n 元条件概率,而是使用一个三层的神经网络模型(前馈神经网络),根据上下文的表示以及上下文与目标词之间的关系进行建模求解,如下图: 

词向量表示

wt−1,...,wt−n+1 为 wt 之前的 n−1 个词,NNLM就是要根据这 n−1 个词预测下一个词 wt。C(w) 表示 w对应的词向量,存储在矩阵 C 中,C(w) 为矩阵 C 中的一列,其中,矩阵 C 的大小为 m∗|V|,|V| 为语料库中总词数,m 为词向量的长度。

输入层 x:将 n−1 个词的对应的词向量 C(wt−n+1),...,C(wt−1) 顺序拼接组成长度为 (n−1)∗m的列向量,用 x 表示,

词向量表示

隐含层

h:使用 tanh 作为激励函数,输出

词向量表示

词向量表示为输入层到隐藏层的权重矩阵,d 为偏置项(biases);

输出层

 

y:一共有 |V| 个节点,分量 y(wt=i) 为上下文为 wt−n+1,...,wt−1 的条件下,下一个词为 wt 的可能性,即上下文序列和目标词之间的关系,而 yi 或者 y(wt) 是未归一化 log 概率(unnormalized log-probabilities),其中,y 的计算为:

 

                      词向量表示

词向量表示为隐藏层到输出层的权重矩阵,b为偏置项,词向量表示 为输入层到输出层直连边的权重矩阵,对输入层到输出层做一线性变换1。由于输出层的各个元素yi之和不等于1,最后使用 softmax **函数将输出值 yi 进行归一化,将 y 转化为对应的概率值: 

                     词向量表示

训练时使用梯度下降优化上述目标,每次训练从语料库中随机选取一段序列wi−n+1,...,wi−1作为输入,利用如下方式进行迭代: 

                      词向量表示

其中,α为学习速率,θ=(b,d,W,U,H,C)。 

该结构的学习中,各层的规模: 
输入层:n为上下文词数,一般不超过5,m为词向量维度,10~10^3; 
隐含层:n_hidden,用户指定,一般为10^2量级; 
输出层:词表大小V,10^4~10^5量级; 
同时,也可以发现,该模型的计算主要集中在隐含层到输出层 tanh 的计算以及输出层 softmax 的计算。

参考博客:https://blog.****.net/aspirinvagrant/article/details/52928361

 

 

https://zhuanlan.zhihu.com/p/46026058 (综述)

https://blog.****.net/aspirinvagrant/article/details/52928361 (综述 cbow和skip-gram继续看着篇)

https://www.jianshu.com/p/2a1af0497bcc  (RNNLM)

https://blog.****.net/u014203254/article/details/104428602 (另一篇词向量综述,word2vec解释比较详细)