预备知识:
LR、贝叶斯公式、赫夫曼编码、统计语言模型、n-gram模型、神经概率语言模型、词向量、词袋模型、softmax、负采样,可以参考word2vec中的原理
Word2vec将词映射到K维向量空间,并且词向量能和语义相对应。
语言概率模型
计算一个句子的概率的概率模型,基于一个语料库来构建。生成一个句子可以利用贝叶斯公式进行链式分解,求得生成的概率。通常是先计算好词串出现次数,将概率值存起来,下次计算一个句子的概率时,找到概率值进行连乘 image.pngn-gram模型
n-gram是语言概率模型中的一种
对于机器学习而言,通常是构建一个目标函数,然后对这个函数进行优化,求得最优参数解,得到模型,利用模型进行预测
对于语言模型来说,目标函数可以利用最大似然,设为:p(w|context(w))连乘(给定的语料库样本出现的可能性最大,此时参数最可信),这个时候里面的待定参数能够通过不断优化求得。利用这种方法计算的参数比语言概率模型所需要计算的参数少得多
n-gram的优点:
- 常见的Bigram,Trgram 实现简单,能够很好地应用在一些经典场景中,例如检查拼写错误(极大似然句子概率)。
- 常见搜索引擎的输入下拉帮助,就是通过n-gram来实现的。
- 可解释性强,易于理解和调试。
- 易于增量实现和并行训练。
n-gram的缺点:
- 需要解决数据稀疏性的问题(没有出现过的词语的概率会被置为0),一般有平滑算法,back-off算法,Interpolation算法。
- 由于是离散型变量,没有办法度量词语之间相似度。
- 模型巨大,与|V| 词库大小呈指数增长。
神经网络也能够用来构造这样的一个目标函数,并对参数进行训练,同时能利用训练出的词向量来度量词语之间的相似度,并且自带平滑功能,不需要想n-gram那样使用平滑算法进行平滑处理
真正测试/训练的时候,网络的输入和输出都是向量。因此要将输入的文本和单词变成向量的形式。这个时候会涉及到词向量
词向量:将自然语言进行数学化
- one-hot representation:最简单的词向量构造方法,词典的长度为N的话,那么每一个词的词向量的维度都是N,向量的分量只有一个1,对应着它在词典中的位置,其它全为0。缺点:维度过高、不能刻画词与词之间的相似性
- Distributed representation:通过训练,将每一个词映射到一个固定长度的短向量中,把词的信息分布到各个分量中,并且语义相近的词向量见距离越近
神经概率语言模型
四个层:输入层、投影层、隐藏层、输出层 image.png对于给定的语料库,每一个(context(w),w)为一个训练样本 image.png
对于每一层的输入输出:
- 输入层:词的上下文,输入形式为向量形式,这里一个词向量维度为m,n-1个词输入
- 投影层:对输入的n-1个词进行拼接,得到一个维度为(n-1)m的向量
- 隐藏层:利用双曲正切函数tanh作为激活函数,隐藏层规模nh为可调参数
- 输出层:矩阵运算得到y为一个长度为N的向量,但是分量不能代表每个词出现的概率,必须要进行一个softmax归一化,归一化后,p(w|context(w))就可以表示为: image.png
那么,目标函数就能够确定了(最大对数似然),目标函数的待确定参数包括:词向量+神经网络参数,通过优化可求解,最后能够得到语言概率模型,顺便训练出来了每个词的词向量
这里面涉及到的参数:
- n:词的上下文的词数,通常不超过5
- m:词向量长度,通常为10-100量级
- nh:用户指定,通常不用取太大,一般100量级
- N:语料库词典的大小,通常10000-100000量级
整个模型的计算集中在隐藏层和输出层的矩阵运算,以及输出层上的softmax归一化运算。
Word2vec的工作就是针对这一部分进行优化
softmax需要对语料库中每个词语(类)都计算一遍输出概率并进行归一化,当语料库的词汇量很大时,运算量会非常大。(上述过程其实可以看做一个多分类问题。给定特征,根据softmax归一化结果中,从N个分类概率中挑一个词)
不用softmax怎么样?比如SVM中的多分类的问题中,其中有一种方法是由二分类组合而来的: image.png这是一种二叉树结构,应用到word2vec中被称为Hierarchical Softmax(使用二分类近似多分类,使用Huffman编码构造一连串的二分类。比如给定一个词,先判断这个词是名词吗,然后判断是不是水果,再判断是不是橘子。树中每个叶子结点代表词,非叶子结点的中间结点会被赋予一些合适的向量,叶子结点(真正的词)会共用这些抽象结点的向量)
Word2vec两种模型
- CBOW:已知词w上下文context(w)前提下,预测当前词w
- Skip-gram :已知当前词w,预测其上下文context(w) image.png
关于这两种模型,Word2vec给出了两套框架,分别是:
- 基于Hierarchical Softmax (使用Huffman树)
- 基于Negative Sampling(随机负采样)
1、基于Hierarchical Softmax的Word2vec的两种模型
CBOW
CBOW (Continuous Bag-of-Words Model ),根据上下文的词语预测当前词语的出现概率的模型,其学习目标是最大化对数似然函数: image.png网络结构:输入层、投影层、输出层
image.png- 输入层:包含context(w)中的2c个词的词向量(context(w)为词w的前后各c个词构成)
- 投影层:将输入层的2c个向量进行累加求和,得到一个m为的向量: image.png
-
输出层:输出层对应一颗二叉树,叶子结点为预料库中的词,各词在预料库中出现的次数作为权值构成这个Huffman树。非叶子结点相当于一个神经元(感知机,我认为逻辑斯谛回归就是感知机的输出代入f(x)=1/(1+e^x)),二分类决策输出1或0,分别代表分到左边或者是右边。于是每个词语都可以被01唯一地编码,并且其编码序列对应一个事件序列,于是我们可以计算条件概率
在开始计算之前,还是得引入一些符号:
- :从根结点出发到达w对应叶子结点的路径.
- :路径中包含结点的个数
- 路径中的各个节点
- 词w的Huffman编码(),表示路径第j个节点对应的编码(根节点不对应编码)
- 路径中非叶节点对应的向量,向量维度为m(与词向量相同),表示路径第j个非叶子结点对应的向量
写成整体的形式为: image.png
那么得到词w的条件概率p(w|context(w))就可以求解为: image.png 我们的目标函数取对数似然: image.png
目标就是最大化这个函数,用到随机梯度上升法:先求函数对每个变量的偏导数,每取一个样本,就代入偏导数表达式得到函数在该维度的增长梯度,然后让对应参数加上这个梯度,对目标函数的所有参数做一次刷新,函数在这个维度上就增长了。观察目标函数,函数中的参数包括向量.计算函数关于这些向量的梯度:
关于的梯度计算:
image.png那么的更新公式为:
image.png其中为学习率
关于的梯度计算:
image.png但是在模型中,并不是代表每个词的向量,而是上下文词向量的和。Word2vec利用这个梯度,对词向量进行更新:
image.png这里没有将其平均后更新到每个词向量上,而是直接贡献到每个词的词向量上。
Skip-gram
Skip-gram和CBOW模型的网络结构一样,也包括了三层:输入层,投影层,输出层。只是逆转了CBOW的因果关系而已,即已知当前词语,预测上下文。 image.png- 输入层:当前词w的词向量
- 投影层:恒等投影,其实是多余的,将输入层的词向量传递给输出层
-
输出层:输出层也是对应一颗Huffman树(与CBOW模型一样)
那么概率函数被定义为: image.png
(词袋模型,认为每个u之间无序)
其中: image.png
与CBOW一样: image.png
对数似然函数为: image.png
关于的梯度计算:
image.png那么的更新公式为:
image.png关于的梯度计算:
image.png那么的更新公式为:
image.png2、基于Negative Sampling的两种模型
从机器学习的角度来理解,在分类任务的训练中,不但要给正例,还要给负例。对于Hierarchical Softmax,负例是二叉树的其他路径。对于Negative Sampling,负例是随机挑选出来的,不再使用Huffman树,能大幅度提高性能。
CBOW
在给定的一个context(w)中,正样本是w,其它词就是负样本。假设我们通过某种采样方法获得了负例子集NEG(w)。对于正负样本,分别定义一个标签: image.png表示词的标签,正样本标签为1,负样本为0
对一个给定的正样本(context(w),w),我们希望能够最大化: image.png其中: image.png
写成整体表达式为: image.png
这时,g(w)可表示为: image.png
那么我们希望,当u是正样本时,越大越好,当u是负样本时,越小越好。类似于逻辑回归,等于模型预测样本为正例的概率,当答案就是正的时候,我们希望这个概率越大越好,当答案是负的时候,我们希望它越小越好,这样模型的分类效果才好。增大正样本的概率同时降低夫样本的概率
那么对于一个给定的语料库C,函数 image.png 是我们整体的优化目标,取对数,方便计算 image.png 梯度计算: image.pngimage.png
image.png 更新公式: image.png
image.png
Skip-gram
一样的类似Hierarchical Softmax从CBOW过渡到Skip-gram模型,颠倒样本的x和y部分,也即对(w,context(w)),我们希望最大化:
image.png
其中:
image.png
image.png
image.png
image.png
梯度计算:
image.png
image.png
更新公式:
image.png
image.png
网友评论