NLP基础之——Word Vectors and Word Senses

参考:【NLP CS224N笔记】Lecture 2 - Word Vectors2 and Word Senses

一、word2vec
1.概述
字面理解为词到向量的方法,即word to vector,实质上word2vector是使用一层神经网络将one—hot形式的词向量映射到分布式形式的词向量。
在训练技巧上使用了负采样(negative sampling)和分层(Hierarchical)softmax的技巧。
2.算法流程
第一步:将one-hot形式的词向量输入到单层神经网络中,其中输入层的神经元结点个数应该和one-hot形式的词向量维数相对应。
第二步:通过神经网络中的映射层中的激活函数,计算目标单词与其他词汇的关联概率,其中在计算时,使用了负采样(negative sampling)的方式来提高其训练速度和正确率。
第三步:通过使用随机梯度下降(SGD)的优化算法计算损失。
第四步:通过反向传播算法将神经元的各个权重和偏置进行更新。

所以,word2vec实质上是一种降维操作,将one-hot形式的词向量转化为word2vec形式。
3.两种训练方法
word2vec主要分为CBOW(Continuous Bag of Words)和Skip-Gram两种模式。CBOW是从上下文单词推测中心目标词;而Skip-Gram正好相反,是从中心目标字词推测出上下文词。CBOW对小型数据库比较合适,而Skip-Gram在大型语料中表现更好。
3.1CBOW模式
CBOW模型结构图
NLP基础之——Word Vectors and Word Senses_第1张图片
输入层:上下文单词的onehot. {假设单词向量空间dim为V,也就是词典的大小。上下文单词个数为C}
所有onehot分别乘以共享的输入权重矩阵W(VN矩阵,N为自己设定的数,N也是隐藏层的神经元个数,初始化权重矩阵W)。
所得的向量 {因为是onehot所以为向量} 相加求平均作为隐层向量, size为1
N。
乘以输出权重矩阵W′W′(NV)。
得到向量 (1
V) ,激活函数处理得到V-dim概率分布,概率最大的index所指示的单词为预测出的中间词(target word)。
与true label的onehot做比较,误差越小越好。
3.2Skip-Gram模式NLP基础之——Word Vectors and Word Senses_第2张图片
3.3Word2Vec计算细节
给定一个中心词, 其窗口内context出现的概率为:
NLP基础之——Word Vectors and Word Senses_第3张图片
通过极大似然方法最大化概率:
NLP基础之——Word Vectors and Word Senses_第4张图片
将连乘简化为求和,则损失函数为:
在这里插入图片描述
假设词典中有V个词,每个单词词向量长度为d, 对于每一个词, 作为中心词(center)和非中心词(outside,上下文)时分别使用v和u两个向量表示:
NLP基础之——Word Vectors and Word Senses_第5张图片
假设第4个词作为中心词,通过上下文矩阵可以得到该词与其他词之间的关系:
NLP基础之——Word Vectors and Word Senses_第6张图片
其中,d为与m个outside(上下文)词的点积,由于两个向量的点乘可以表示其相似度,进一步可用于表示其出现的概率大小,从而得到概率表示:
NLP基础之——Word Vectors and Word Senses_第7张图片
计算细节就说完了,接下来是根据目标函数进行求导数,然后进行U和V参数的更新了, 从而使词向量模型需对出现在同一个context中的词赋予较大的概率。
3.4损失函数的计算:
NLP基础之——Word Vectors and Word Senses_第8张图片
在真实训练情景中的损失函数进行梳理, 也就是交叉熵损失函数。
下面两个公式等价:
NLP基础之——Word Vectors and Word Senses_第9张图片
证明过程如下:NLP基础之——Word Vectors and Word Senses_第10张图片
采用链式法则进行求导:
NLP基础之——Word Vectors and Word Senses_第11张图片
可知:第一项是真正的上下文单词,第二项是预测的上下文单词。使用梯度下降法,模型的预测上下文将逐步接近真正的上下文。

上式进一步改写为:
NLP基础之——Word Vectors and Word Senses_第12张图片
对u_o进行偏导计算:
NLP基础之——Word Vectors and Word Senses_第13张图片
3.5负采样
Negative sampling是另外一种有效的求解embedding matrix EE的方法。它的做法是判断选取的context word和target word是否构成一组正确的context-target对,一般包含一个正样本和k个负样本。例如,“orange”为context word,“juice”为target word,很明显“orange juice”是一组context-target对,为正样本,相应的target label为1。若“orange”为context word不变,target word随机选择“king”、“book”、“the”或者“of”等。这些都不是正确的context-target对,为负样本,相应的target label为0。这就是如何生成训练集的方法。选一个正样本和K个负样本(样本是成对出现的)。
1.负采样。目前为止仍然以更简单但是计算量大的传统softmax为主要方案, 即公式2.1中的分母(正则项)。
2.由于经典方案正则化计算量太大,因此我们在作业二中使用负采样方案。其主要思想为:训练一个logistics regression分类器, 判断一个词语对是否来自于同一个context。
3.损失函数:最大化如下函数。
NLP基础之——Word Vectors and Word Senses_第14张图片
Negative sampling的数学模型为:
在这里插入图片描述
其中,σ表示sigmoid激活函数。很明显,negative sampling某个固定的正样本对应k个负样本,即模型总共包含了k+1个binary classification。对比之前介绍的10000个输出单元的softmax分类,negative sampling转化为k+1个二分类问题,计算量要小很多,大大提高了模型运算速度。
(就是每一次训练,都是K+1个二分类问题, 就看target的那几个是不是我们想要的0或者1,然后用这几个去计算损失更新参数即可)。 负采样的损失函数长这个样子:在这里插入图片描述
更改一下
在这里插入图片描述
我们分析中括号里面那块,理解起来的话,就是我们的输入是选择的中心词,也就是这里的vcvc v_{c}vc​, 是embedding之后的向量,而输出是正负样本的embedding后的向量。 前面的那部分是正确的上下文词和中心词的关系,uouo u_{o}uo​就是正样本embedding后的形式,这两个的内积操作其实就是两者的关系程度(内积的几何意义)。 后面的那部分是负样本和中心词的关系,我们希望的是中心词与正样本的关系尽可能的近,也就是前面那部分越大越好,希望负样本与中心词的关系尽可能的小,但是后面发现内积前加了个负号,那就表示后面那部分越大越好。 所以中括号那部分应该越大越好。而前面加了负号, 就是希望损失越小越好。

通过这样的方式, 就可以提高训练的效率, 因为这种就相当于每次训练做了一个K+1次的二分类任务, 而之前那种方式是做了V分类的任务, 而这个V是单词的个数, 往往会上百万。 而这里的K, 如果训练样本小, 取5-20, 训练样本大, 取2-5即可。

计算损失函数的导数:
NLP基础之——Word Vectors and Word Senses_第15张图片
从这个偏导也可以看出, 梯度更新的时候, 负采样的计算参数量要远远小于softmax的。
4.Count-Based 模型
该模型也是学习词向量的一种方式, 这类模型的经典代表就是SVD模型, 就是大作业1里面的思路, 在相似的上下文中我们一般会使用意思相似的单词(同义词),因此,意思相近的单词会通过上下文的方式在一起出现。通过检查这些上下文,我们可以尝试把单词用词向量的方式表示出来,一种简单的方式就是依赖于单词在一起出现的次数, 所以就得到了一种叫做共现矩阵的策略,这是一个基于单词频数的词向量矩阵, 然后再进行SVD分解降维得到每个单词的词向量。
共现矩阵X的方式有两种选择:
1.word-document co-occurrence matrix: 基本假设是在同一篇文章中出现的单词更有可能相互关联。 假设单词i出现在文章j中, 则矩阵元素Xij加一, 当处理完所有文章后, 就得到了矩阵X, 大小是∣V∣×M ,∣V∣表示词汇量, M是文章数。
2.word-word co-occurrence matrix: 利用某个定长窗口中单词与单词同时出现的次数来得到矩阵X, 这个的大小会是∣V∣×∣V∣。 具体详细的在大作业一里面已经说明并实现了这种方式, 这里就不详细说了。
NLP基础之——Word Vectors and Word Senses_第16张图片
这就是共现矩阵了, 当然我们很容易发现, 这种矩阵存在问题,可以看出,随着词汇量的增大,矩阵 X的尺度会越来大,为了有效的存储,我们可以对其进行SVD处理:
NLP基础之——Word Vectors and Word Senses_第17张图片
为了减少尺度同时尽量保存有效信息,可保留对角矩阵的最大的k个值,其余置零,并将u矩阵的相应的行列保留,其余置零:
NLP基础之——Word Vectors and Word Senses_第18张图片
这就是经典的SVD算法, 具体实现上可以调用sklearn里面的Truncated SVD包实现降维。
NLP基础之——Word Vectors and Word Senses_第19张图片
对比分析一下direct prediction和Count based这两种方式的优缺点:
NLP基础之——Word Vectors and Word Senses_第20张图片

你可能感兴趣的:(理论,笔记)