1、 概率语言模型
一句话的概率公式:
根据一句话中的前文预测下一个词:
根据链式概率法则:
根据马尔科夫假设,当前词只和前n个词有关系:
2. 大名鼎鼎的 n-gram模型
为模型想要预测的下一个词,为句子中的历史词语。
之后,我们利用极大似然估计优化模型:
说起来极大似然很高级,在实现上就是统计各种情况下出现的次数,然后再除以因子来归一化。
n-gram的优点:
1. 常见的Bigram,Trgram 实现简单,能够很好地应用在一些经典场景中,例如检查拼写错误(极大似然句子概率)。
2. 常见搜索引擎的输入下拉帮助,就是通过n-gram来实现的。
3. 可解释性强,易于理解和调试。
4. 易于增量实现和并行训练。
n-gram的缺点:
1. 需要解决数据稀疏性的问题(没有出现过的词语的概率会被置为0),一般有平滑算法,back-off算法,Interpolation算法。
2. 由于是离散型变量,没有办法度量词语之间相似度。
3. 模型巨大,与|V| 词库大小呈指数增长。
3. 困惑度(perplexity)
在信息论中,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是一个简单易懂的模型。首先是我们想要预测的词,是预测词的前n-1个词。表示对应词w的词向量。
输入层就是将n-1个词向量首尾相连形成一个(n-1)*m的矩阵输入隐藏层。
隐藏层为一个普通的神经网络隐藏层。之后,使用作为激活函数。值域为(-1,1)
输出层为共有|V|个节点。|V|为词典内词的数目。在进行线性变换之后,通过softmax归一化。
整个网络前馈公式如下:
目标函数为极大化函数L:
整个网络结构如下:(绿色为W的值,如果W值为0,代表词向量不直接进入最后输出层运算)
优缺点:
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)。
4.3 C&W(Collobert and Weston)
跟LBL比较起来,多了一个非线性层,跟NNLM比较起来多了一个非线性层。无话可说,有时候学术圈就是这么喜欢排列组合。
4.4 增加语言特点的特征到语言模型中
例如下图:增加了单个词的POS,先从离散的POS features 转化成向量,再和原来的词向量分别相乘不同的权重参数,最后融合到z中去,后面的步骤与前几个模型相同。
4.5 增加WordNet相似性加训练中
4.6 增加主题信息在训练中
4.7 接下去,大神又再接在励,设计出了RNN语言模型
5. Word2Vec
好啦,以上都是之前的尝试,其实跟Word2Vec一脉相承,前面已经出现了一层非线性一层线性(NNLM),两层线性模型(LBL),一层非线性两层线性(C&W)。而且出现了经典的优化方法,分层二叉树优化,noise contrastive estimation (NCE) 优化。
5.1 CBOW
CBOW的思想很简单,就是运用上下文来预测当前词。目标函数为:
中间层只是一个简单的累计取平均值为h。输出层的优化有两种:层次化softmax(霍夫曼树)和负采样(NEG)。
5.1 霍夫曼树
霍夫曼树是二叉树,有正负两条边,每个词语都唯一对应一个霍夫曼编码(也就是路径)。所以类似于二分类问题,只是我们由许多个二分类器构成的。我们要求的似然函数就为:
其中为路径第i个节点所对应的编码,为路径第i个节点所对应的向量。
最后我们要优化的极大似然估计为:
下图为霍夫曼树作为输出层的整体网络结构:
5.2 NEG优化
NEG的思想很朴素。以上方法都是直接将目标词w和整个词库的所有词都做了一次比较。我们能不能挑出一些词语来作为负样本,我们只需要将我们的目标词从负样本中识别出来就行了。
里面介绍得非常基础且详细。
6. 总结
上面非常朴素地介绍了一遍语言模型的历史和模型。现在最常用的就是谷歌开发的Word2Vec。也有许多工具可以帮助你训练自己的词向量。例如Gensim,Tensorflow中也对词向量有专门的实现。
感谢博客:由NPLM到Word2vec
今天的文章语言概率模型和Word2Vec简述分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/25273.html