语言模型和词向量的发展史及其原理

语言模型

语言模型

给定一句由 n 个词组成的句子 W= w 1 w_1 w1, w 2 w_2 w2,⋯, w n w_n wn

计算这个句子的概率 P( w 1 w_1 w1, w 2 w_2 w2,⋯, w n w_n wn)

或者计算根据上文计算下一个词的概率 P( w 1 w_1 w1| w 1 w_1 w1, w 2 w_2 w2,⋯, w n − 1 w_n-1 wn1)

语言(人说的话) + 模型(完成某个任务)

任务1:

​ P(“判断这个词的磁性”),P(“判断这个词的词性”)

任务2:

​ “判断这个词的__”

统计语言模型

用统计的方法去解决上述问题

解决任务1:

条件概率的链式法则:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m6DaLooX-1663331346370)(G:\学业\计算生物研究所\自主学习\图神经网络\img\image-20220914211734780.png)]

类似于全概率公式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JUMWf3S6-1663331346372)(G:\学业\计算生物研究所\自主学习\图神经网络\img\image-20220914212549957.png)]

通过这个链式法则,可以根据每个词出现的概率以及条件概率,得出这句话的概率。

显然任务1中"磁性"的概率更小。

解决任务2:

根据给定词序列,判断下一个词,可以直接计算如下概率,如公式1:

P ( w n e x t ∣ 判断,这个,词,的 ) P(w_{next}|判断,这个,词,的) P(wnext判断,这个,词,的)

展开得到公式2:

P ( w n e x t ∣ 判断,这个,词,的 ) = c o u n t ( w n e x t ,判断,这个,词,的 ) c o u n t ( 判断,这个,词,的 ) P(w_{next}|判断,这个,词,的) = \frac{count(w_{next},判断,这个,词,的)}{count(判断,这个,词,的)} P(wnext判断,这个,词,的)=count(判断,这个,词,的)count(wnext,判断,这个,词,的)

类似于贝叶斯公式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D03IQHVi-1663331346373)(G:\学业\计算生物研究所\自主学习\图神经网络\img\image-20220914220311084.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EvuoO7BU-1663331346373)(G:\学业\计算生物研究所\自主学习\图神经网络\img\image-20220914212617354.png)]

其中 w n e x t w_{next} wnext∈V 表示词序列的下一个词,V 是一个具有 |V| 个词的词典

当V非常大时计算非常困难

n元统计语言模型 n-gram

假设字典 V 中有 “火星” 一词,可以明显发现 “火星” 不可能出现在 “判断这个词的” 后面,因此(火星,判断,这个,词,的)这个组合是不存在的,并且词典中会存在很多类似于 “火星” 这样的词。

进一步,可以发现我们把(火星,判断,这个,词,的)这个组合判断为不存在,是因为 “火星” 不可能出现在 “词的” 后面,也就是说我们可以考虑是否把公式1转化为公式3:
P ( w n e x t ∣ 判断,这个,词,的 ) ≈ P ( w n e x t ∣ 词,的 ) P(w_{next}|判断,这个,词,的)≈P(w_{next}|词,的) P(wnext判断,这个,词,的)P(wnext词,的)

公式3就是马尔科夫链的思想:假设 w(next) 只和它之前的 k 个词有相关性,k=1 时称作一个单元语言模型,k=2时称为二元语言模型。

可以发现通过马尔科夫链后改写的公式计算起来将会简单很多,下面我们举个简单的例子介绍下如何计算一个二元语言模型的概率。

其中二元语言模型如公式4所示:
P ( w i ∣ w i − 1 = c o u n t ( w i − 1 , w i ) c o u n t ( w i − 1 ) ) P(w_{i}|w_{i-1}=\frac{count(w_{i-1},w_{i})}{count(w_{i-1})}) P(wiwi1=count(wi1)count(wi1,wi))

假设有一个文本集合:

“词性是动词”
“判断单词的词性”
“磁性很强的磁铁”
“北京的词性是名词”

对于上述文本,如果要计算 P(词性|的)P(词性|的) 的概率,通过公式4,需要统计 “的,词性” 同时按序出现的次数,再除以 “的” 出现的次数,如公式5所示:

P ( 词性 ∣ 的 ) = c o u n t ( 的 , 词性 ) c o u n t ( 的 ) = 2 3 P(词性|的)=\frac{count(的,词性)}{count(的)}=\frac{2}{3} P(词性)=count()count(,词性)=32

上述文本集合是我们自定制的,然而对于绝大多数具有现实意义的文本,会出现零概率问题,例如训练时未出现,测试时出现了的未登录单词

由于零概率问题问题,则会出现概率值为 0 的情况(填空题将无法从词典中选择一个词填入),为了避免 0 值的出现,会使用一种平滑的策略——分子和分母都加入一个非 0 正数,例如可以把公式(4)改为公式6:拉普拉斯平滑
P ( w i ∣ w i − 1 = c o u n t ( w i − 1 , w i ) + 1 c o u n t ( w i − 1 ) + ∣ V ∣ ) P(w_{i}|w_{i-1}=\frac{count(w_{i-1},w_{i})+1}{count(w_{i-1})+|V|}) P(wiwi1=count(wi1)+Vcount(wi1,wi)+1)

评价

​ 依赖训练语科、泛化能力差

​ 以离散符号为统计单元,无法体现语义相关性

神经网络语言模型NNML

为了预测词向量

NNML通过词向量的距离衡量单词之间的相似度,因此,对于未登录单词,也可以通过相似词进行估计

采用神经网络的方法完成语言模型的两个任务

首先考虑解决第二个问题——根据已知单词,预测下一个单词

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CAqWiS2H-1663331346375)(G:\学业\计算生物研究所\自主学习\图神经网络\img\image-20220914234629837.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WqwHRJdp-1663331346375)(G:\学业\计算生物研究所\自主学习\图神经网络\img\image-20220915002055872.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p70GF1gx-1663331346375)(G:\学业\计算生物研究所\自主学习\图神经网络\img\image-20220915005924472.png)]

在这张图中,输入层shape为1*v,且不需要flatten,需要concat处理

首先根据V中每个input元素的索引i,找到词向量矩阵Q中对应的词向量,置为Ci,将结果拼接成1*(t-1)*v,再经过tanh激活函数,传到softmax层,最终输出为v个合为1的概率向量。

其中,input元素的索引可以使用ont-hot编码,编码为t-1维的向量,通过与Q的矩阵乘法就可以很简单地计算出词向量Ci

具体公式为:y=softmax(U(tanh( ∏ i = 1 t − 1 \prod_{i=1}^{t-1} i=1t1 w i w_i wiQ+b1))+b2)

原作者并没有提出词向量

当矩阵Q的训练效果越来越好时,C就可以取代w成为表示词的向量。

词向量

独热编码One-Hot

如果直接用字符去存储单词,耗费空间很大

独热编码思想:根据单词数量n给出一个n*n的矩阵

可以让计算机认识单词,具有很重要的意义

但如此存储计算出的词与词之间的余弦相似度和点积都为0,也就是无法体现出词与词之间的关联性

Word Embedding(Distributed Representation)

又叫分布式表示/稠密表示

由于独热编码无法表示相关性这一缺陷,很快就被词向量表示取代。在NNLM中的C(wi),就是单词对应的Word Embedding值,也就是词向量。词向量矩阵Q训练好之后,几乎没有空值,计算余弦相似度也几乎不会为0,所以可以保存词与词之间的关联性。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7d5uWhR8-1663331346376)(G:\学业\计算生物研究所\自主学习\图神经网络\img\image-20220915212933940.png)]

一旦得到了词向量,第一个问题也可以直接解决(下游任务)

Word2Vec 模型

为了得到词向量

word2vec模型与NNLM模型很类似,有两种训练方法,但最终目的都是得到Q矩阵,且前向传播并没有加入tanh作为激活函数,因为不需要预测的精度非常高,只要能够将词向量矩阵Q训练出来就可以

在这里插入图片描述

CBOW

核心思想是从一个句子里面把一个词抠掉,用这个词的上文和下文去预测被抠掉的这个词(NNML是根据上文来预测下一个词,没有本质区别,但Word2Vec的主要目的是得到词向量),根据一个output和多个input去训练Q矩阵

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vrTTJcdj-1663331346377)(G:\学业\计算生物研究所\自主学习\图神经网络\img\image-20220916141259126.png)]

背景词需要进行平均池化,将多个词向量池化为1个词向量。

得到的是预测中心词c的概率

∏ t = 1 T P ( w ( t ) ∣ w ( t − m ) , . . . , w ( t − 1 ) , w ( t + 1 ) , . . . , w ( t + m ) ) ) \prod_{t=1}^{T}P({w}^{(t)}|{w}^{(t-m)},...,{w}^{(t-1)},{w}^{(t+1)},...,{w}^{(t+m)})) t=1TP(w(t)w(tm),...,w(t1),w(t+1),...,w(t+m)))

Skip-gram

和 CBOW 相反,输入某个单词,要求预测它的上下文单词,根据多个output和一个input去训练Q矩阵。

选定窗口大小长度的字符串,用其中的一个字符去预测剩余的字符。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IKs2rzfQ-1663331346377)(G:\学业\计算生物研究所\自主学习\图神经网络\img\image-20220916140421865.png)]

得到的是预测背景词 u o u_o uo的概率

∏ t = 1 T ∏ − m ≤ j ≤ m , j ≠ 0 P ( w ( t + j ) ∣ w ( t ) ) ) \prod_{t=1}^{T}\prod_{-m≤j≤m,j≠0}P({w}^{(t+j)}|{w}^{(t)})) t=1Tmjm,j=0P(w(t+j)w(t)))

负采样

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NoqwvZ1d-1663331346377)(G:\学业\计算生物研究所\自主学习\图神经网络\img\image-20220916202617684.png)]

缺陷

词向量无法表示多义词(ELMo模型(双向LSTM模型))解决多义词

预训练语言模型的下游任务改造

比如可以根据独热编码(非预训练模型,只是一一对应的表查询)使用Word2Vec预训练好的Q矩阵直接得到词向量,然后选择策略(冻结或者是微调)进行下有任务

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值