语言概率模型和Word2Vec简述

时间:2021-07-24 13:27:35

1、 概率语言模型

一句话的概率公式:

语言概率模型和Word2Vec简述

根据一句话中的前文预测下一个词:

语言概率模型和Word2Vec简述

根据链式概率法则:

语言概率模型和Word2Vec简述

语言概率模型和Word2Vec简述

根据马尔科夫假设,当前词只和前n个词有关系:

语言概率模型和Word2Vec简述


2. 大名鼎鼎的 n-gram模型

语言概率模型和Word2Vec简述

语言概率模型和Word2Vec简述为模型想要预测的下一个词,语言概率模型和Word2Vec简述为句子中的历史词语。

之后,我们利用极大似然估计优化模型:

语言概率模型和Word2Vec简述

说起来极大似然很高级,在实现上就是统计各种情况下出现的次数,然后再除以因子来归一化。

n-gram的优点:

1. 常见的Bigram,Trgram 实现简单,能够很好地应用在一些经典场景中,例如检查拼写错误(极大似然句子概率)。

2. 常见搜索引擎的输入下拉帮助,就是通过n-gram来实现的。

3. 可解释性强,易于理解和调试。

4. 易于增量实现和并行训练。

n-gram的缺点:

1. 需要解决数据稀疏性的问题(没有出现过的词语的概率会被置为0),一般有平滑算法,back-off算法,Interpolation算法。

2. 由于是离散型变量,没有办法度量词语之间相似度。

3. 模型巨大,与|V| 词库大小呈指数增长。


3. 困惑度(perplexity)

语言概率模型和Word2Vec简述

在信息论中,perplexity(困惑度)用来度量一个概率分布或概率模型预测样本的好坏程度。它也可以用来比较两个概率分布或概率模型。(译者:应该是比较两者在预测样本上的优劣)低困惑度的概率分布模型或概率模型能更好地预测样本。

在语言概率模型中,我们用来检测整个语料整体的困惑度。整体困惑度越低,说明模型效果越好。


4. 连续空间语言模型

我们设想把每个词都在低维向量空间中,有唯一的连续向量对应。我们可以通过比较向量之间的距离来判断词之间的距离,解决了词相似度度量的问题。(例如:Dot product,Cosine similarity,Eucliean distance,但是一般选择Cosine相似度,因为词向量的基本都是很小的浮点数,欧氏距离和点乘需要额外的操作)。

所有通过神经网络训练得到词向量的都有一个基本的假设:

words that occur in similar contexts tend to have similar meanings

(拥有相似上下文的词语通常也会有相似的语义)


4.1 NNLM(Neural Network Language Model)

NNLM是一个简单易懂的模型。首先语言概率模型和Word2Vec简述是我们想要预测的词,语言概率模型和Word2Vec简述是预测词的前n-1个词。语言概率模型和Word2Vec简述表示对应词w的词向量。

输入层语言概率模型和Word2Vec简述就是将n-1个词向量首尾相连形成一个(n-1)*m的矩阵输入隐藏层。

隐藏层为一个普通的神经网络隐藏层。语言概率模型和Word2Vec简述之后,使用语言概率模型和Word2Vec简述作为激活函数。语言概率模型和Word2Vec简述值域为(-1,1)

输出层为共有|V|个节点。|V|为词典内词的数目。在进行线性变换之后,通过softmax归一化。

整个网络前馈公式如下:

语言概率模型和Word2Vec简述

目标函数为极大化函数L:

语言概率模型和Word2Vec简述

整个网络结构如下:(绿色为W的值,如果W值为0,代表词向量不直接进入最后输出层运算)

语言概率模型和Word2Vec简述

优缺点:

1. 模型实现起来效果不错,但是计算量很大。时间消耗在两个大型矩阵的乘法,H和U。

2. 没有解决一词多义的情况。

3. 网络输入窗口为固定值,不能更改。

4. 整个网络参数与词库大小|V| 呈线性增长,因为需要逐个对U对应的每个参数做更新。

后来作者本人又提出了 Hierarchical Neural Language(分层神经语言模型),简单来说就是简历一棵树,每个节点都做一个分类判断,树的叶子是每个词。这样做虽然减少了计算量,从|V|变到了log2|V|,但是分类树模型构建需要专家知识,而且分层模型比不分层模型要差。


4.2 LBL(Log-Bilinear Language Model)

LBL的模型跟NNLM非常相似,它只是去掉了中间的tanh激活函数,从非线性变成线性。之后又提出了各种办法来优化训练速度。例如分层模型(hierarchical softmax),noisecontrastive estimation (NCE)。

语言概率模型和Word2Vec简述


4.3 C&W(Collobert and Weston)

跟LBL比较起来,多了一个非线性层,跟NNLM比较起来多了一个非线性层。无话可说,有时候学术圈就是这么喜欢排列组合。

语言概率模型和Word2Vec简述


4.4 增加语言特点的特征到语言模型中

例如下图:增加了单个词的POS,先从离散的POS features 转化成向量,再和原来的词向量分别相乘不同的权重参数,最后融合到z中去,后面的步骤与前几个模型相同。

语言概率模型和Word2Vec简述


4.5 增加WordNet相似性加训练中

语言概率模型和Word2Vec简述


4.6 增加主题信息在训练中

语言概率模型和Word2Vec简述语言概率模型和Word2Vec简述


4.7 接下去,大神又再接在励,设计出了RNN语言模型

语言概率模型和Word2Vec简述


5. Word2Vec

好啦,以上都是之前的尝试,其实跟Word2Vec一脉相承,前面已经出现了一层非线性一层线性(NNLM),两层线性模型(LBL),一层非线性两层线性(C&W)。而且出现了经典的优化方法,分层二叉树优化,noise contrastive estimation (NCE) 优化。

5.1 CBOW

CBOW的思想很简单,就是运用上下文来预测当前词。目标函数为:

语言概率模型和Word2Vec简述

中间层只是一个简单的累计取平均值为h。输出层的优化有两种:层次化softmax(霍夫曼树)和负采样(NEG)。

语言概率模型和Word2Vec简述

5.1 霍夫曼树

霍夫曼树是二叉树,有正负两条边,每个词语都唯一对应一个霍夫曼编码(也就是路径)。所以类似于二分类问题,只是我们由许多个二分类器构成的。我们要求的似然函数就为:

语言概率模型和Word2Vec简述

其中语言概率模型和Word2Vec简述为路径第i个节点所对应的编码,语言概率模型和Word2Vec简述为路径第i个节点所对应的向量。

最后我们要优化的极大似然估计为:

语言概率模型和Word2Vec简述


下图为霍夫曼树作为输出层的整体网络结构:

语言概率模型和Word2Vec简述

5.2 NEG优化

NEG的思想很朴素。以上方法都是直接将目标词w和整个词库的所有词都做了一次比较。我们能不能挑出一些词语来作为负样本,我们只需要将我们的目标词从负样本中识别出来就行了。

博文:word2vec基于负采样的模型原理介绍

里面介绍得非常基础且详细。


6. 总结

上面非常朴素地介绍了一遍语言模型的历史和模型。现在最常用的就是谷歌开发的Word2Vec。也有许多工具可以帮助你训练自己的词向量。例如Gensim,Tensorflow中也对词向量有专门的实现。


感谢博客:由NPLM到Word2vec