词向量技术原理及应用详解(三)

为了更高效地获取词向量,有研究者在NNLM和C&W模型的基础上保留其核心部分,得到了CBOW(Continuous Bag of  word,连续词袋模型)和skip gram模型(跳字模型)。下面介绍word2vec词向量的实现方式CBOW模型和skip gram模型,及训练优化方式负采样和层序softmax。

word2vec包含两种结构,一种是skip-gram结构,一种是cbow结构,skip-gram结构是利用中间词预测邻近词,cbow模型是利用上下文词预测中间词。CBOW一般用于数据数据量较小的情况,而Skip-Gram通常用在数据量较大的情况。

这里写图片描述

这两种模型有三层,输入层,映射层,输出层,隐藏层是线性结构,所以相对于语言模型训练较快。

Word2vec的实现方式:Skip-Gram模型(跳字模型)和CBOW(连续词袋模型)。

Word2vec的训练优化方式:近似训练法即负采样和层序softmax。

下面以Skip-Gram模型为例,详细说明word2vec的词向量的生成过程。

        在Skip-Gram模型中,是用一个词来预测它在文本序列周围的词。 CBOW模型用一个中心词在文本序列前后的背景词来预测该中心词。

word2vec输出是神经网络的权重值,用这些值组成词向量,它的输入就是我们文本中的词,先对这些词进行one-hot编码,让计算机进行识别。它的输就是Skip-gram是一个单隐藏层的神经网络结构,那么我们要找的词向量其实就是输入层到第一个隐藏层的权重也就是中Project层的权重值)。

举个栗子:假设文本序列是“我”、“爱”、“中国”、“这片”和“土地”。以“中国”作为中心词,设时间窗口大小为 2。跳字模型所关心的是,给定中心词“中国”生成与它距离不超过 2 个词的背景词“我”、“爱”、“这片”和“土地”的条件概率。

假设Skip-gram是一个最简单的情况,用一个输入词去预测它相邻的一个词,如下图:

                                                                 

 

展开后:

 

                                 词向量技术原理及应用详解(三)_第1张图片

假设词表中有10000个词,那么每个词进行one-hot编码后,就会是一个10000维的向量,其中9999个都是0,只有一个是1。从输入层到隐藏层没有使用激活函数,但在输出层中使用了softmax函数。

                            词向量技术原理及应用详解(三)_第2张图片

 

如果我们想用将每个词表示为一个维度为300的向量,即每个词有300个特征,那么隐藏层就是一个10000行×300列的矩阵(也就是隐藏层有300个结点),这个10000×300的矩阵就是我们最后想要的结果,它会将10000个词中的每一个表示为一个300维的向量,10000维的词瞬间被降维到了300维,当然这个权重矩阵中的值就不是0-1了。输入是一个1×10000的向量,隐藏层是一个10000×300的矩阵,这两个矩阵做乘法运算看似需要耗费很多的计算资源,其实并没有,计算机根本没有在运算,它只是做了一个“查表”的工作,也就是对权重矩阵做了一个“提取”的动作,只提识别1×10000的向量中那个不为0的值对应的索引,并且从10000×300的矩阵中提取该索引所对应的行。简单展示如下:

                                                         

 

最终得到这个1×300的向量。在输出层通过softmax进行变换,使输出层每个结点将会输出一个0-1之间的值(概率),这些所有输出层结点的概率之和为1。

CBOW是同样的道理(如果按照最简单的情况,Skip-gram用一个输入词预测它后面的词,CBOW用一个输出词去预测它前面的一个词,其实是一模一样的套路)

假设我们有一个k维向量z,我们想把它转换为一个k维向量\sigma (z),使其所有元素的范围是[0,1]且所有元素的和为1,函数表达式是

                                                          

 

 

也就是说,\sigma (z)内的每一个元素是对z内的对应元素求指数,再除以所有元素求指数后的和。所以Softmax函数也叫做归一化指数函数。

 

一、Word2vec的实现方式

1、Skip-Gram模型(跳字模型)

           在Skip-Gram模型中,我们用一个词来预测它在文本序列周围的词

举个栗子:假设文本序列是“我”、“爱”、“中国”、“这片”和“土地”。以“中国”作为中心词,设时间窗口大小为 2。跳字模型所关心的是,给定中心词“中国”生成与它距离不超过 2 个词的背景词“我”、“爱”、“这片”和“土地”的条件概率。

数学描述:假设词典索引集 V 的大小为 |V|,且 V={0,1,…,|V|−1}。给定一个长度为T 的文本序列中,时间步 t 的词为 w(t)。当时间窗口大小为 m 时,跳字模型需要最大化给定任一中心词生成所有背景词的概率;

                                                              

上式的最大似然估计与最小化以下损失函数等价:

                                                      

我们可以用V和U分别表示中心词和背景词的向量。换言之,对于词典中索引为i的词,它在作为中心词和背景词时的向量表示分别是vi和ui。而词典中所有词的这两种向量正是跳字模型所要学习的模型参数。为了将模型参数植入损失函数,我们需要使用模型参数表达损失函数中的给定中心词生成背景词的条件概率。

给定中心词,假设生成各个背景词是相互独立的。设中心词wc在词典中索引为c,背景词wo在词典中索引为o,损失函数中的给定中心词生成背景词的条件概率可以通过 softmax 函数定义为:

                                                                

当序列长度 T 较大时,我们通常在每次迭代时随机采样一个较短的子序列来计算有关该子序列的损失。然后,根据该损失计算词向量的梯度并迭代词向量。

下面我们看看如何计算随机采样的子序列的损失有关中心词向量的梯度。和上面提到的长度为T的文本序列的损失函数类似,随机采样的子序列的损失实际上是对子序列中给定中心词生成背景词的条件概率的对数求平均。通过微分,我们可以得到上式中条件概率的对数有关中心词向量 vc 的梯度:

                                                          词向量技术原理及应用详解(三)_第3张图片

该式子也可以写成这样

                                                          

随机采样的子序列有关其他词向量的梯度同理可得;

训练模型时,每一次迭代实际上是用这些梯度来迭代子序列中出现过的中心词和背景词的向量;

训练结束后,对于词典中的任一索引为i的词,我们均得到该词作为中心词和背景词的两组词向量vi和ui;

在自然语言处理应用中,我们会使用跳字模型的中心词向量。

2、CBOW模型(连续词袋模型)

CBOW模型与Skip-Gram模型类似。与Skip-Gram模型最大的不同是, CBOW模型用一个中心词在文本序列前后的背景词来预测该中心词
           举个例子:假设文本序列是“我”、“爱”、“中国”、“这片”和“土地”。以“中国”作为中心词,设时间窗口⼤小为 2。连续词袋模型所关⼼的是,给定与中心词距离不超过 2 个词的背景词“我”、“爱”、“这片”和“土地”生成中心词“中国”的条件概率。

数学描述:假设词典索引集 V 的大小为 |V|,且 V={0,1,…,|V|−1}。给定一个长度为T 的文本序列中,时间步 t 的词为 w(t)。当时间窗口大小为 m 时,CBOW模型需要最大化给定背景词生成任一中心词的概率;

                                 

上式的最大似然估计与最小化以下损失函数等价:

                          

我们可以用V和U分别表示背景词和中心词的向量。换言之,对于词典中索引为i的词,它在作为背景词和中心词时的向量表示分别是vi和ui。而词典中所有词的这两种向量正是连续词袋模型所要学习的模型参数。为了将模型参数植入损失函数,我们需要使用模型参数表达损失函数中的给定背景词生成中心词的概率。设中心词wc在词典中索引为c,背景词 wo1,…,wo2m 在词典中索引为 o1,…,o2m,损失函数中的给定背景词生成中心词的概率可以通过softmax 函数定义为:

                  

和跳字模型一样,当序列长度T较大时,我们通常在每次迭代时随机采样一个较短的子序列来计算有关该子序列的损失。然后,根据该损失计算词向量的梯度并迭代词向量。通过微分,我们可以计算出上式中条件概率的对数有关任一背景词向量 voi(i=1,…,2m)的梯度为:

         词向量技术原理及应用详解(三)_第4张图片

随机采样的子序列有关其他词向量的梯度同理可得。和跳字模型一样,训练结束后,对于词典中的任一索引为i的词,我们均得到该词作为背景词和中心词的两组词向量vi和ui。在自然语言处理应用中,我们会使用连续词袋模型的背景词向量

二、Word2vec的训练优化方式

问题:

                词向量技术原理及应用详解(三)_第5张图片

我们可以看到,无论是跳字模型还是连续词袋模型,每一步梯度计算的开销与词典V的大小相关。当词典较大时,例如几十万到上百万,这种训练方法的计算开销会较大。因此,我们将使用近似的方法来计算这些梯度,从而减小计算开销。

常用的近似训练法包括:负采样 和 层序 softmax

1、负采样

以跳字模型为例讨论负采样

实际上,词典V的大小之所以会在损失中出现,是因为给定中心词wc生成背景词wo的条件概率P(wo∣wc) 使用了softmax运算,而softmax运算正是考虑了背景词可能是词典中的任一词,并体现在分母上。

不妨换个角度考虑给定中心词生成背景词的条件概率。我们先定义噪声词分布P(w),接着假设给定中心词wc生成背景词wo由以下相互独立事件联合组成来近似:

       词向量技术原理及应用详解(三)_第6张图片

         词向量技术原理及应用详解(三)_第7张图片

     词向量技术原理及应用详解(三)_第8张图片

 词向量技术原理及应用详解(三)_第9张图片

2、层序 softmax

层序softmax是另一种常用的近似训练法。它利用了二叉树这一数据结构。树的每个叶子节点代表着词典V中的每个词。我们以图为例来描述层序softmax的工作机制:

            词向量技术原理及应用详解(三)_第10张图片

词向量技术原理及应用详解(三)_第11张图片

                        词向量技术原理及应用详解(三)_第12张图片

                        词向量技术原理及应用详解(三)_第13张图片

可以看到,无论是跳字模型还是连续词袋模型,每一步梯度计算的开销与词典V的大小相关。当词典较大时,例如几十万到上百万,这种训练方法的计算开销会较大。因此,我们将使用负采样和层序softmax来计算这些梯度,从而减小计算开销。

我们需从上面get到的点:

第一问 

word2vec有哪两种结构?

面试官问此问题的目的:主要是考察应聘者对word2vec的基本认知的了解,其实用白话说,你到底知不知道word2vec。如果此问题回答不出了,基本就凉凉了。

    相应答案(仅供参考)

    word2vec包含两种结构,一种是skip-gram结构,一种是cbow结构,skip-gram结构是利用中间词预测邻近词,cbow模型是利用上下文词预测中间词,网络结构如下图 :

                               这里写图片描述

 

 加分项:在面试过程中一般面试官都会给你笔和纸或者白板,因此在回答问题的时候一定要把网络结构给画出来,凸显自己对模型的了解。

第二问

word2vec中有没有非线性层?

    面试官问此问题的目的:主要是考察应聘者对word2vec的稍微深入的理解,很多初学者理解word2vec大多都是看博客等,很少去看原版论文,国内很多博客大多会讲word2vec是神经网络训练过程中的副产物,而我们都知道联系到神经网络一般都会引入非线性激励,因此面试官问这道问题还是比较阴险的,稍不留神就会入坑。

    相应答案(仅供参考)

    word2vec两种模型有三层,输入层,映射层,输出层,隐藏层是线性结构,这也是为什么相对于语言模型训练较快的原因。

第三问

CBOW模型输入是什么,输出是什么,初始化出入是怎么做的?

    面试官问此问题的目的:主要是考察应聘者对word2vec有没有进行过实操,就是应聘者有没有用自己训练过word2vec。

    相应答案(仅供参考)

    CBOW模型输入是上下文的词向量,这个词向量时随机初始化的产生的,将这个上下文词向量加起来得到映射层,输出层是层次softmax(hierarchical Softmax),最终输出中心词的最大概率。

第四问

层次softmax(hierarchical Softmax)在word2vec中是怎么应用的,为什么要用,用了有哪些好处?

    面试官问此问题的目的:主要是考察应聘者对word2vec优化的理解及对word2vec更深层次的理解。在回答这个问题的时候应聘者应先阐述普通softmax会产生什么样的问题,然后再阐述使用层次softmax后能够达到什么样的效果。

    相应答案(仅供参考)

    假设我们采用普通的softmax,那么在输出层需要得到一个词典大小的概率分布,假设公式我们采用softmax(Wx+b)(这里一定要在纸或者白板上写出),那么W将会有一个维度是10000维,这是一个很大的权重矩阵,那么我们整个优化目标是10000个,这个工作量的巨大的,会严重影响计算效率。如果采用层次softmax,那么我们的输出层将是一个霍夫曼二叉树,这个二叉树的最大深度是log(D)-1,每个节点处进行一个二分类,二分类的权重矩阵W2有一个维度是2,相对于词典大小10000来说就是很小的数。采用层次softmax好处是将一个多分类问题转换成一个一个的二分类问题,降低的计算复杂度,提高了运算效率。

第五问

在word2vec优化中采用层次softmax的哈夫曼树如何构建,叶子节点代表什么?

    面试官问此问题的目的:主要是考察应聘者对word2vec优化底层原理的理解。

    相应答案(仅供参考)

    在word2vec中构建哈夫曼树中,我们以词表中的全部词作为叶子节点,词频作为节点的权,构建Huffman树,叶子节点为词表中的全部词,权重是词频。

参考资料:

微信公众号:AI壹号堂

word2vec、glove和 fasttext 的比较

文本分类需要CNN? No!fastText完美解决你的需求(前篇)

word2vec 中的数学原理详解

[NLP] 秒懂词向量Word2vec的本质

https://www.cnblogs.com/pinard/p/7243513.html

 

你可能感兴趣的:(NLP)