Word2Vec

作者: Luuuuuua | 来源:发表于2019-05-28 15:23 被阅读0次

    本文基本上“复现”这篇博客 / 转载自 https://blog.csdn.net/itplus/article/details/37969519

    前言

    入门学习NLP的同学,遇到的第一个概念可能就是词向量。因为将文本向量化已经是NLP任务中的常规操作。

    预备知识

    sigmoid 函数

    sigmoid函数是神经网络中常用的激活函数之一。
    定义如下:
    \sigma = \frac{1}{1+e^{-x}}
    导数为:
    \sigma^{'}(x) = \frac{e^{-x}}{({1+e^{-x}})^{2}} = \frac{1}{1+e^{-x}}(1-\frac{1}{1+e^{-x}}) = \sigma(x)(1-\sigma(x))
    (1-\sigma(x))'=(\frac{e^{-x}}{1+e^{-x}})'=\left(\frac{1}{1+e^{-x}}\right)\left(\frac{-e^{-x}}{1+e^{-x}}\right)=\sigma(x)(\sigma(x)-1)
    则:
    [\log\sigma(x)]^{'} = \frac{1}{\sigma(x)}(\sigma^{'}(x))=1-\sigma(x) [\log(1-\sigma(x))]^{'}=\frac{1}{1-\sigma(x)}((1-\sigma(x))^{'}=-\sigma(x)
    图像如下:

    sigmoid

    逻辑回归

    二分类问题:设\lbrace\left(x_i,y_i\right)\rbrace_{i=1}^m 是一个二分类问题的样本数据,其中x_i\in R^n,y_i\in\lbrace0,1\rbrace,当y_i=1时称相应的样本为正例,当y_i=0时称相应的样本为负例。
    利用sigmoid函数,可将二分类问题的假设函数(Hypothesis)写成:
    h_\theta(x)=\sigma(\theta^Tx)=\frac{1}{1+e^{-\theta^Tx}}
    h_\theta(x_i)可认为是x_i所对应的样本被判定为正例的概率,那么,对应的1-h_\theta(x_i)可认为是x_i所对应的样本被判定为负例的概率。若y_i=1,那么h_\theta(x)的值应较大,即x_i所对应的样本被判定为正例的概率较大,被判定为负例的概率较小。
    取阈值为0.5,则二分类的判别公式为:
    y(x)=\begin{cases} 1,\, h_\theta(x)\ge0.5 \\ 0,\, h_\theta(x)<0.5 \end{cases}
    要求参数\theta,先定义一个整体损失函数:
    J(\theta)=\frac{1}{m}\sum_{i=1}^{m}cost(x_i,y_i)
    其中,单个样本的损失函数cost(x_i,y_i)一般取为对数似然函数
    cost(x_i,y_i)=\begin{cases} -\log(h_\theta(x_i)),\, y_i=1\\ -\log(1-h_\theta(x_i)),\, y_i=0\\ \end{cases}
    所以,整体损失函数可写为:
    J(\theta)=\frac{1}{m}\sum_{i=1}^{m}(-y_i\log(h_\theta(x_i))-(1-y_i)\log(1-h_\theta(x_i)))
    然后对其优化,梯度下降求最优值\theta^*

    贝叶斯公式

    P(A),P(B)分别表示事件A和事件B发生的概率,P(A|B)表示事件B发生的情况下事件A发生的概率,P(A,B)表示事件A,B同时发生的概率,则有
    P(A|B)=\frac{P(A,B)}{P(B)},\,P(B|A)=\frac{P(A,B)}{P(A)},\,P(AB)=P(A)P(B|A)

    Huffman编码

    首先介绍Huffman树的定义及其构造算法。


    • 树是一种非线性数据结构,若干棵互不相交的树所构成的集合成为森林
    • 二叉树
      每个结点最多有两个子树的有序树,两个子树顺序不能颠倒,分别被称为“左子树”,“右子树”。
    • 路径和路径长度
      在一棵树中,从一个结点往下可以达到的孩子或孙子之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层号为1,则从根结点到第L层结点的路径长度为L-1
    • 结点的权和带权路径长度
      若为树中结点赋予一个具有某种含义的(非负)数值,则这个数值称为该结点的权。结点的带权路径是指,从根结点到该结点之间的路径长度与该结点的权的乘积。
    • 树的带权路径长度
      树的带权路径长度规定为所有叶子结点的带权路径长度之和。
    • Huffman树/最优二叉树
      给定n个权值作为n个叶子结点,构造一棵二叉树,其带权路径长度最小。
    • Huffman树的构造
      1. 将{{\omega_1,\omega_2,...\omega_n}}看成是有n棵树的森林(每棵树只有一个结点)
      2. 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左右子树,且新树的根结点权值为其左,右子树根结点权值之和。
      3. 从森林中删除选取的两棵树,并将新树加入森林。
      4. 重复2,3步,直到森林中只剩一棵树为止,该树就是Huffman树。


        Huffman树的构造过程
    • Huffman编码 :利用Huffman树设计的二进制前缀编码
      • 不等长编码: 频率高的使用短码,频率低的使用长码,优化报文编码
      • 前缀编码: 一个字符的编码不能是另一个字符编码的前缀


        Huffman编码示例

    背景知识

    统计语言模型

    统计语言模型是用来计算一个句子的概率的概率模型。假设W=\omega_i^T:=(\omega_1,\omega_2,...,\omega_T)表示由T个词\omega_1,\omega_2,...\omega_T按顺序构成的一个句子,那么这个句子是一句真正/正常的句子的概率可以表示为:
    p(W)=p(\omega_i^T)=p(\omega_1,\omega_2,...\omega_T)
    利用贝叶斯公式,上式可以分解为:
    p(W)=p(\omega_1)p(\omega_2|\omega_1)p(\omega_3|\omega_1\omega_2)...
    其中的(条件)概率p(\omega_1)p(\omega_2|\omega_1)p(\omega_3|\omega_1\omega_2)...就是语言模型的参数,知道这些参数,那么给定一个句子,就可以很快的计算出相应的概率。
    但是,简单进行一下分析可知,模型参数的个数是比较大的,假设句子的长度为T,语料库对应词典大小是N,那么每个句子需要计算T个参数,而一共有N^T种句子,总共就需要计算TN^T个参数。
    因此,人们提出很多计算语言模型的参数的方法,如n-gram模型,决策树、最大熵模型、条件随机场、神经网络等等。

    n-gram模型

    p(\omega_4|\omega_1\omega_2\omega_3)为例进行说明,利用贝叶斯公式,有:
    p(\omega_4|\omega_1\omega_2\omega_3)=\frac{p(\omega_1\omega_2\omega_3\omega_4)}{p(\omega_1\omega_2\omega_3)}
    根据大数定律,有:
    p(\omega_4|\omega_1\omega_2\omega_3)=\frac{count(\omega_1\omega_2\omega_3\omega_4)}{count(\omega_1\omega_2\omega_3)}
    而n-gram的思想就是:n-1阶的马尔可夫假设(Markov),认为一个词出现的概率就只与它前面的n-1个词相关,若n=2,那么,上式变为:
    p(\omega_4|\omega_1\omega_2\omega_3)=\frac{count(\omega_3\omega_4)}{count(\omega_3)}
    这样,统计时所匹配的词串更短,单个参数的统计变得更容易,而且参数的总数也变少了。模型的参数数量随着n的增大而增大,量级是词典大小N的指数函数(O(N^n)),实际应用种一般采用n=2/n=3的二元模型或三元模型。
    总结一下,n-gram模型的主要工作是在语料中统计各种词串出现的次数以及平滑性处理,概率值计算好后就存储起来,下次需要计算一个句子的概率时,就找到相应的概率参数,将它们连乘起来。
    而在机器学习中,解决问题的方法是:对所考虑的问题建模后先为其构造一个目标函数,然后对这个目标进行优化,从而求得一组最优的参数,最后利用这组最优参数对应的模型来进行预测。
    对于统计语言模型,利用最大似然,可把目标函数设为:
    \prod_{\omega\in C}p(\omega|(Context(omega)))
    其中,C表示语料(Corpus),Context(\omega)表示词\omega的上下文(Context),即\omega周边的词的集合,若是n-gram模型,那么就是上下文就是\omega前面的n-1个单词。
    实际应用中经常采用最大对数似然,目标函数变为:
    L=\sum_{\omega \in C}\log p(\omega|Context(\omega))
    然后对这个函数进行最大化。
    分析可知,概率 p(\omega|Context(\omega))已被视为关于\omegaContext(\omega)的函数,即
    p(\omega|Context(\omega))=F(\omega,Context(\omega),\theta)
    求得最优参数\theta^*后,F就被确定了,那么任何概率都可以通过F进行计算,不需要像n-gram一样,提前计算并保存好所有可能的概率值。
    通过神经网络可以构造F。

    神经概率语言模型

    该模型出自Bengio等人的文章《A neural probabilistic language model》

    神经概率语言模型

    神经概率语言模型对应的神经网络结构可以分为四层:输入层(Input Layer)、投影层(Projection Layer)、隐藏层(Hidden Layer)和输出层(Output layer),其中W,U分别为投影层与隐藏层以及隐藏层和输出层之间的权值矩阵,p,q分别为隐藏层和输出层上的偏置向量。
    训练样本为二元对(Context(\omega),\omega),其中,Context(\omega)\omega前面的n-1个词。
    输入层:输入就是\omega前面的n-1个词的词向量。
    投影层:输入层的n-1个词向量按顺序首尾拼接起来形成一个长向量,即投影层的向量X_\omega。那么,投影层的规模就是(n-1)m,m为词向量的维度。
    隐藏层和输出层:隐藏层的规模n_h是可调参数,输出层的规模是N即语料C的词汇量大小。计算过程如下:
    \begin{cases} z_\omega=\tanh(Wx_\omega+p),\\ y_\omega=Uz_\omega+q\end{cases}
    计算得到的y_\omega=(y_{\omega,1},y_{\omega,2},...,y_{\omega,n})^T是一个长度为N的向量,其分量不能表示概率,需要做softmax归一化:
    p(\omega|Context(\omega))=\frac{e^{y_{\omega,i_\omega}}}{\sum_{i=1}^Ne^{y_\omega,i}}
    其中,i_\omega表示词\omega在词典D中的索引。
    结合上一节,可知F(\omega,Context(\omega),\theta)=p(\omega|Context(\omega))=\frac{e^{y_{\omega,i_\omega}}}{\sum_{i=1}^Ne^{y_\omega,i}}
    其中需要确定的参数有:

    • 词向量:v(\omega)\in R^m
    • 神经网络参数:W\in R^{n_h\times(n-1)m},p\in R^{n_h};U\in R^{N\times n_h},q\in R^N
      这些参数都可以通过模型训练得到。

    词向量的理解

    • one-hot representation
      用向量长度为词典D大小的向量表示单词,向量的分量中只有一个是1,其他都为0,1的位置对应该词在词典中的索引。如:
      苹果:[0,0,0,...,1,0,0] 香蕉:[0,0,1,...,0,0,0]
      存在一些缺点:容易受维数灾难的困扰,向量维度会随着词典的增大而增大,不能刻画词与词之间的相似性等。
    • distributed representation
      词典中的每个词都被映射到一个词向量空间里的一个固定长度的向量,词与词之间的相似性可以通过“距离”(如欧式距离、余弦距离)来度量。如:
      苹果:[0.3,9.6,-98,...,23,2,45] 香蕉:[0.6,7.8,-79,...,31,8,57]

    wordvec

    word2vec中的两个重要模型 : CBOW模型(Continuous Bag-of-Words Model)和 Skip-gram(Continuous Skip-gram Model)出自于Tomas Mikolov 的论文《Efficient Estimation of Word Representations in Vector Space》

    CBOW & Skip-gram Model.PNG
    CBOW模型是在已知上下文的前提下预测当前词,Skip-gram模型是在已知当前词的前提下,预测其上下文。
    对于CBOW和Skip-gram模型,wordvec给出了两套框架,分别基于Hierarchical Softmax和negative samping进行设计的。

    基于Hierarchical Softamx 的模型

    目标函数
    CBOW: L=\sum_{w\in C}log p(w|Context(w))
    Skip-gram: L=\sum_{w\in C}logp(Context(w)|w)
    应将重点放到目标函数的构造上。

    CBOW模型

    CBOW模型包括三层:输入层、投影层和输出层。以样本 (Context(w),w)为例(假设Context(w)w前后各c个词构成),对这三个层进行简要说明。

    CBOW模型的网络结构示意图
    • 输入层
      包含Context(w)中的2c个词的词向量v(Context(w)_1),v(Context(w)_2),...,v(Context(w)_{2c}),词向量的维度为m
    • 投影层
      将输入层的2c个词的词向量做求和累加,即x_w=\sum_{i=1}^{2c}v(Context(w)_i) \in R^m
    • 输出层
      输出层是一棵以语料中的词作为叶子结点,以各词在语料中出现的次数作为权值构造出来的Huffman树。在这棵Huffman树中,叶子结点共N(=|D|)个,分别对应词典D中的词,非叶子结点N-1个(图中标成黄色的那些结点)。
    梯度计算

    考虑Huffman树中的某个叶子结点,假设它对应词典D中的词w,记

    1. p^w:从根结点出发到达w对应叶子结点的路径。
    2. l^w:路径p^w中包含结点的个数。
    3. p_1^w,p_2^w,...,p_{l^w}^w:路径p^w中的l^w个结点,其中p_1^w表示根结点,p_{l^w}^w表示词w对应的结点。
    4. d_1^w,d_2^w,...,d_{l^w}^w:词w的Huffman编码,由l^w-1为编码构成,d_j^w表示路径p^w中第j个结点对应的编码(根结点不对应编码)。
    5. \theta_1^w,\theta_2^w,...,\theta_{l^w-1}^w \in R^m : 路径p^w中非叶子结点对应的向量,\theta_j^w表示路径p^w中第j个非叶子结点对应的向量。
      w=足球时的记号示意图
      从根结点出发到达“足球”这个叶子结点时,共经历了四次二分类。可将分到左边看作正类,编码为1,分到右边看作负类,编码为0。
      Label(p_i^w)=d_i^w,i=1,2,..,l^w
      根据前面介绍的逻辑回归,可知,一个结点被分为正类的概率是:
      \sigma(x_w^T\theta)=\frac{1}{1+e^{-x_w^T\theta}}
      被分为负类的概率是:
      1-\sigma(x_w^T\theta)
      对于上边的例子,从根结点到达“足球”这个叶子结点经历的四次二分类,将每次的分类结果写出来就是:
      1. 第一次:p(d_2^w|x_w,\theta_1^w)=\sigma(x_w^T\theta_1^w)
      2. 第二次:p(d_3^w|x_w,\theta_2^w)=1- \sigma(x_w^T\theta_2^w)
      3. 第三次:p(d_4^w|x_w,\theta_3^w)=1-\sigma(x_w^T\theta_3^w)
      4. 第四次:p(d_5^w|x_w,\theta_4^w)=\sigma(x_w^T\theta_4^w)
        我们最终要求的是p(足球|Context(足球)),有了上边4个概率值,可以求得:
        p(足球|Context(足球))=\prod_{j=2}^5p(d_j^w|x_w,\theta_{j-1}^w)
        对Hierarchical Softmax思想做一下总结:对于词典D中的任意词w,Huffman树中必存在一条从根结点到词w对应结点的路径p^w,而且这条路径是唯一的。路径p^w上存在l^w-1个分支,每个分支都可以看作一次二分类,每一次二分类产生一个概率,将这些概率相乘起来就是p(w|Context(w))
        条件概率p(w|Context(w))的一般公式可写为:
        p(w|Context(w))=\prod_{j=2}^{l^w}p(d_j^w|x_w,\theta_{j-1}^w)
        其中:
        p(d_j^w|x_w,\theta_{j-1}^w)=\begin{cases} \sigma(x_w^T\theta),\, d_j^w=1\\1-\sigma(x_w^T\theta),d_j^w=0\end{cases}
        或者整理为一个整体表达式:
        p(d_j^w|x_w,\theta_{j-1}^w)= \sigma(x_w^T\theta_{j-1}^w)^{d_j^w}(1-\sigma(x_w^T\theta_{j-1}^w))^{1-d_j^w}
        目标函数可以整理为:
        L=\sum_{w \in C}log\prod_{j=2}^{l^w} \sigma(x_w^T\theta_{j-1}^w)^{d_j^w}(1-\sigma(x_w^T\theta_{j-1}^w))^{1-d_j^w} \\ = \sum_{w\in C}\sum_{j=2}^{l^w}d_j^{l^w}log(\sigma(x_w^T\theta_{j-1}^w))+(1-d_j^{l^w})log(1-\sigma(x_w^T\theta_{j-1}^w))
        为了梯度求导方便,可将上式简记为:
        L(w,j)=d_j^{l^w}log(\sigma(x_w^T\theta_{j-1}^w))+(1-d_j^{l^w})log(1-\sigma(x_w^T\theta_{j-1}^w))
        得到CBOW模型的目标函数之后,优化目标是将这个函数最大化,word2vec中采用的随机梯度上升法:每取一个样本(Context(w),w),就对目标函数中的所有相关参数做一次更新。观察目标函数L可知,函数中包含的参数有x_w,\theta_{j-1}^w,j=2,3...,l^w
        可先对\theta_{j-1}^w进行梯度计算:
        \frac{\partial{L}}{\partial{\theta_{j-1}^w}}=\frac{\partial}{\theta_{j-1}^{w}}( d_j^{l^w}log(\sigma(x_w^T\theta_{j-1}^w))+(1-d_j^{l^w})log(1-\sigma(x_w^T\theta_{j-1}^w))) \\ =d_j^w(1-\sigma(x_w^T\theta_{j-1}^w))x_w +(1-d_j^{l^w})(-\sigma(x_w^T\theta_{j-1}^w))x_w \\ =(d_j^w-\sigma(x_w^T\theta_{j-1}^w))x_w
        于是,\theta_{j-1}^w的更新公式为:
        \theta_{j-1}^w:=\theta_{j-1}^{w}+\eta(d_j^w-\sigma(x_w^T\theta_{j-1}^w))x_w
        其中\eta表示学习率。
        观察目标函数发现,L(w,j)中变量x_w\theta_{j-1}^w是对称的,因此,x_w的梯度计算为:
        \frac{\partial{L}}{\partial{x_w}}=(d_j^w-\sigma(x_w^T\theta_{j-1}^w))\theta_{j-1}^w
        因为x_w表示的是Context(w)中各词词向量的累加,要求得每个单词的词向量,可以取:
        v(w_i)=v(w_i)+\eta\sum_{j=2}^{l^w}\frac{\partial(L(w,j))}{\partial(x_w)},w_i \in Context(C), i = 1,2 ..,|C|
        伪代码
    Skip-gram模型

    Skip-gram模型同CBOW模型一样,包括三层:输入层,投影层和输出层,接下来以(w,Context(w))为例,对这三个层进行简要说明。

    • 输入层: 含当前样本中心词w的词向量v(w) \in R^m
    • 投影层: 恒等投影,其实是多余的,只是与CBOW模型做对比。
    • 输出层: 是一棵Huffman树
      Skip-gram模型的网络结构示意图
      直接进行梯度计算,关键是条件概率函数p(Context(w)|w)的构造,可将其定义为:
      p(Context(w)|w)=\prod_{u \in Context(w)}p(u|w)
      进一步,应用Hierarchical Softmax 思想,可写为:
      p(u|w)=\prod_{j=2}{l^u}p(d_j^u|v(w),\theta_{j-1}^u)
      其中
      p(d_j^u|v(w),\theta_{j-1}^u)=\sigma(v(w)^T\theta_{j-1}^u)^{d_j^u}(1-\sigma(v(w)^T\theta_{j-1}^u))^{1-d_j^u}
      整理可得对数似然函数的具体表达式:
      L=\sum_{w \in C}log\prod_{w \in Context(c)} \prod_{j=2}^{l^u} \sigma(v(w)^T\theta_{j-1}^u)^{d_j^u}(1-\sigma(v(w)^T\theta_{j-1}^u))^{1-d_j^u} \\ = \sum_{w\in C}\sum_{w \in Context(c)}\sum_{j=2}^{l^u}d_j^{l^u}log(\sigma(v(w)^T\theta_{j-1}^u))+(1-d_j^{l^u})log(1-\sigma(v(w)^T\theta_{j-1}^u)
      可简记为
      L(w,u,j)= d_j^{l^u} log(\sigma(v(w)^T\theta_{j-1}^u))+(1-d_j^{l^u})log(1-\sigma(v(w)^T\theta_{j-1}^u
      \theta_{j-1}^u进行梯度计算得(与CBOW模型对应部分的推导一样)
      \frac{\partial L(w,u,j)}{\partial \theta_{j-1}^u}=(d_j^u-\sigma(v(w)^T\theta_{j-1}^u))v(w)
      于是,\theta_{j-1}^u的更新公式为:
      \theta_{j-1}^u:=\theta_{j-1}^{u}+\eta(d_j^u-\sigma(v(w)^T\theta_{j-1}^u))v(w)
      对应的,v(w)的梯度为:
      \frac{\partial L(w,u,j)}{\partial v(w)}=(d_j^u-\sigma(v(w)^T\theta_{j-1}^u))\theta_{j-1}^u
      v(w)的更新公式为
      v(w):=v(w)+\eta\sum_{w \in Context(w)}\sum_{j=2}^{l^u}\frac{\partial L(w,u,j)}{\partial v(w)}
      Skip-gram模型采用随机梯度上升法更新各参数的伪代码

    基于Negative Sampling的模型

    Negative Sampling 的目的是用来提高训练速度并改善所得词向量的质量。与Hierarchical Softmax 相比,Negative Sampling 不再使用复杂的Huffman 树,而是利用相对简单的随机负采样,能大幅提高性能。

    CBOW模型

    对于CBOW模型来说,已知Context(w),预测w。那么,w为正样本,其他词都是负样本。
    假定现在已经选定一个关于Context(w)的负样本子集NEG(w)\neq \varnothing,且对\forall\widetilde{w}\in D,定义
    L^w(\widetilde{w}) = \begin{cases} 1,\, \widetilde{w}=w,\\ 0,\, \widetilde{w}\neq w \end{cases}
    表示词\widetilde{w}的标签,即正样本的标签为1,负样本的标签为0。
    对于一个正样本,我们希望最大化
    g(w)=\prod_{u\in {w}\bigcup NEG(w)}p(u|Context(w))
    其中
    p(u|Context(w))=\begin{cases} \sigma(x_w^T\theta^u),\, L^w(u)=1,\\ 1-\sigma(x_w^T\theta^u),\, L^w(u)=0 \end{cases}
    整理为一个整体表达式为
    p(u|Context(w))=[\sigma(x_w^T\theta^u)]^{ L^w(u)}[(1-\sigma(x_w^T\theta^u))]^{(1- L^w(u))}
    x_wContext(w)中各词的词向量之和,\theta^u\in R^m表示词u对应的一个向量。
    则目标函数可表示为
    g(w)=\sigma(x_w^T\theta^u)\prod_{u\in NEG}(1-\sigma(x_w^T\theta^u))
    整体的目标函数可表示为
    G=\prod_{w\in C}g(w)
    取对数后为
    L=\log G=\log \prod_{w\in C}g(w)=\sum_{w\in C}\log g(w)\\ =\sum_{w\in C}\log \prod_{u\in {w}\bigcup NEG(w)}p(u|Context(w)) \\ =\sum_{w\in C} \sum_{u\in {w}\bigcup NEG(w)}\log p(u|Context(w))\\ =\sum_{w\in C} \sum_{u\in {w}\bigcup NEG(w)}\log [\sigma(x_w^T\theta^u)]^{ L^w(u)}[(1-\sigma(x_w^T\theta^u))]^{(1- L^w(u))} \\ =\sum_{w\in C} \sum_{u\in {w}\bigcup NEG(w)} \{L^w(u) \log [\sigma(x_w^T\theta^u)]+(1- L^w(u))\log [(1-\sigma(x_w^T\theta^u))]\}
    为求导方便,可将上式简记为
    L(w,u)=L^w(u) \log [\sigma(x_w^T\theta^u)]+(1- L^w(u))\log [(1-\sigma(x_w^T\theta^u))]
    利用梯度上升法对上式进行优化,首先计算对\theta^u的梯度(与之前的梯度计算一样)
    \frac{\partial L(w,u)}{\partial \theta^u}=(L^w(u)-\sigma(x_w^T\theta^u))x_w
    于是,\theta^u的更新公式为:
    \theta^u:=\theta^{u}+\eta(L^w(u)-\sigma(x_w^T\theta^u))x_w
    同样,利用对称性,得到x_w的梯度
    \frac{\partial L(w,u)}{\partial x_w}=(L^w(u)-\sigma(x_w^T\theta^u))\theta^u
    那么,v(\widetilde{w})的更新公式为
    v(\widetilde{w}):=v(\widetilde{w})+\eta(L^w(u)-\sigma(x_w^T\theta^u))\theta^u

    伪代码
    Skip-gram模型

    基于Negative Sampling 的Skip-gram 模型的思想与上一节的CBOW模型一样,直接从目标函数出发。
    整体的目标函数可表示为
    G=\prod_{w\in C}\prod_{u\in Context(w)}g(u)
    这里\prod_{u\in Context(w)}g(u)表示给定一个样本,我们需要最大化的量。
    g(u)=\prod_{z\in u\bigcup NEG(u)}p(z|w)
    其中NEG(u)表示处理词u时生成的负样本子集,条件概率
    p(z|w)=\begin{cases} \sigma(v(w)^T\theta^z),\, L^u(z)=1,\\ 1-\sigma(v(w)^T\theta^z),\, L^u(z)=0 \end{cases}
    整理为一个整体表达式为
    p(z|w)=[\sigma(v(w)^T\theta^z)]^{ L^u(z)}[(1-\sigma(v(w)^T\theta^z))]^{(1- L^u(z))}

    取对数后为
    L=\log G=\log \prod_{w\in C}\prod_{u\in Context(w)}g(u) =\sum_{w\in C}\sum_{u\in Context(w)}g(u)\\ =\sum_{w\in C}\sum_{u\in Context(w)} \log \prod_{z\in u\bigcup NEG(u)}p(z|w) \\ =\sum_{w\in C}\sum_{u\in Context(w)} \sum_{z\in u\bigcup NEG(u)} \log p(z|w) \\ =\sum_{w\in C}\sum_{u\in Context(w)} \sum_{z\in u\bigcup NEG(u)} \log [\sigma(v(w)^T\theta^z)]^{ L^u(z)}[(1-\sigma(v(w)^T\theta^z))]^{(1- L^u(z))}\\ =\sum_{w\in C}\sum_{u\in Context(w)} \sum_{z\in u\bigcup NEG(u)} L^u(z) \log [\sigma(v(w)^T\theta^z)]+(1- L^u(z)) \log [(1-\sigma(v(w)^T\theta^z))]

    相关文章

      网友评论

          本文标题:Word2Vec

          本文链接:https://www.haomeiwen.com/subject/uiwiwqtx.html