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


    语言模型

    语言模型

    给定一句由 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))

    假设有一个文本集合:

    “词性是动词”
    “判断单词的词性”
    “磁性很强的磁铁”
    “北京的词性是名词”
    
    • 1
    • 2
    • 3
    • 4

    对于上述文本,如果要计算 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矩阵直接得到词向量,然后选择策略(冻结或者是微调)进行下有任务

  • 相关阅读:
    41. 【Android教程】Android 手势处理
    Java IO: 使用 `FileInputStream` 和 `FileOutputStream` 进行文件操作
    大数据技术发展史
    Jtti:windows中apache怎么实现负载均衡
    笨方法学Python
    Error:java: 错误: 不支持发行版本 5
    Hadoop和Spark的对比
    算法面试高频题解指南【一】
    一文带你了解内部开发者门户
    Java_线程的概念和线程的创建的方法
  • 原文地址:https://blog.csdn.net/qq_44707928/article/details/126897206