Word2Vec模型总结

  1. Huffman树的构造
    解析:给定n个权值作为n个叶子节点,构造一棵二叉树,若它的带权路径长度达到最小,则称这样的二叉树为最优二叉树,也称Huffman树。数的带权路径长度规定为所有叶子节点的带权路径长度之和。Huffman树构造,如下所示:
    (1)将{w1,w2,...,w3}看成是有n颗树的森林;
    (2)在森林中选出两个根节点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根节点权值为其左、右子树根节点权值之和;
    (3)从森林中删除选取的两颗树,并将新树加入森林;
    (4)重复(2)(3)步,直到森林中只剩一棵树为止,该树即为所求的Huffman树。
    说明:利用Huffman树设计的二进制前缀编码,称为Huffman编码,它既能满足前缀编码条件,又能保证报文编码总长最短。

  2. 基于Hierarchical Softmax的模型(CBOW模型)
    解析:

    Word2Vec模型总结

    其中参数的物理意义,如下所示:
    (1)Xw=i=12cv(Context(w)i)Rm
    (2)dwj表示路径pw中第j结点对应的编码(根结点不对应编码)
    (3)θwj表示路径pw中第j非叶子结点对应的向量
    (4)pw表示从根结点出发到达w对应叶子结点的路径。
    (5)lw表示路径pw中包含结点的个数。
    Hierarchical Softmax基本思想,如下所示:
    p(w|Context(w))=j=2lwp(dwj|xw,θwj1)

    p(dwj|xw,θwj1)=[σ(xTwθwj1)]1dwj[1σ(xTwθwj1)]dwj

    对于word2vec中基于Hierarchical Softmax的CBOW模型,优化的目标函数,如下所示:
    L=wClogp(w|Context(w))

    这样得到对数似然函数,如下所示:
    L=wClogj=2lw{[σ(xTwθwj1)]1dwj[1σ(xTwθwj1)]dwj}=wCj=2lw{(1dwj)log[σ(xTwθwj1)]+dwjlog[1σ(xTwθwj1)]}

    将花括号中的内容简记为L(w,j),如下所示:
    L(w,j)=(1dwj)log[σ(xTwθwj1)]+dwjlog[1σ(xTwθwj1)]

    使用随机梯度上升法对θwj1求偏导,如下所示:
    L(w,j)θwj1=θwj1{(1dwj)log[σ(xTwθwj1)]+dwjlog[1σ(xTwθwj1)]}=(1dwj)[1σ(xTwθwj1)]xwdwjσ(xTwθwj1)xw={(1dwj)[1σ(xTwθwj1)]dwjσ(xTwθwj1)}xw=[1dwjσ(xTwθwj1)]xw

    θwj1的更新方程,如下所示:
    θwj1:=θwj1+η[1dwjσ(xTwθwj1)]xw

    使用随机梯度上升法对xw求偏导,如下所示:
    L(w,j)xw=[1dwjσ(xTwθwj1)]θwj1

    对于词典中每个词的词向量v(w~)更新方程,如下所示:
    v(w~):=v(w~)+ηj=2lwL(w,j)xw,w~Context(w)

  3. 基于Hierarchical Softmax的模型(Skip-Gram模型)
    解析:

    Word2Vec模型总结

    其中,v(w)Rm表示当前样本的中心词w的词向量。
    对于word2vec中基于Hierarchical Softmax的Skip-Gram模型,优化的目标函数,如下所示:
    L=wClogp(Context(w)|w)

    Skip-Gram模型中条件概率函数p(Context(w)|w),如下所示:
    p(Context(w)|w)=uContext(w)p(u|w)

    p(u|w)=j=2lup(duj|v(w),θuj1)

    p(duj|v(w),θuj1)=[σ(v(w)Tθuj1)]1duj[1σ(v(w)Tθuj1)]duj

    这样得到对数似然函数,如下所示:
    L=wCloguContext(w)j=2lu{[σ(v(w)Tθuj1)]1duj[1σ(v(w)Tθuj1)]duj}=wCuContext(w)i=2lu{(1duj)log[σ(v(w)Tθuj1)]+dujlog[1σ(v(w)Tθuj1)]}

    将花括号中的内容简记为L(w,u,j),如下所示:
    L(w,u,j)=(1duj)log[σ(v(w)Tθuj1)]+dujlog[1σ(v(w)Tθuj1)]

  4. 基于Negative Sampling的模型(CBOW模型)
    Negative Sampling不再使用Huffman树,而是使用随机负采样,能大幅度提高性能。假定已经选好w的负样本子集NEG(w),定义词w~的标签(正样本为1,负样本为0),如下所示:

    Lw(w~)={1,w~=w0,w~w

    对于给定的正样本(Context(w),w),最大化g(w),如下所示:
    g(w)=u{w}NEG(w)p(u|Context(w))

    p(u|Context(w))=[σ(xTwθu)]Lw(u)[1σ(xTwθu)][1Lw(u)]

    其中,xw表示Context(w)中各词的词向量之和,θuRm表示词u对应的一个辅助向量,为待训练的参数。简化g(w)方程,如下所示:
    g(w)=σ(xTwθw)uNEG(w)[1σ(xTwθu)]

    其中,σ(xTwθw)表示当上下文为Context(w)时,预测中心词为w的概率,同样σ(xTwθu),uNEG(w)表示当上下文为Context(w)时,预测中心词为u的概率。
    对于给定的语料库C,目标函数如下所示:
    L=logG=logwCg(w)=wClogg(w)=wClogu{w}NEG(w){[σ(xTwθu)]Lw(u)[1σ(xTwθu)]1Lw(u)}=wCu{w}NEG(w){Lw(u)log[σ(xTwθu)]+[1Lw(u)]log[1σ(xTwθu)]}=wClog[σ(xTwθw)]+uNEG(w)log[1σ(xTwθu)]=wClog[σ(xTwθw)]+uNEG(w)log[σ(xTwθu)]

    L(w,u)=Lw(u)log[σ(xTwθu)]+[1Lw(u)]log[1σ(xTwθu)],使用随机梯度上升法对θu求偏导,如下所示:
    L(w,u)θu=θu{Lw(u)log[σ(xTwθu)]+[1Lw(u)]log[1σ(xTwθu)]}=Lw(u)[1σ(xTwθu)]xw[1Lw(u)]σ(xTwθu)xw={Lw(u)[1σ(xTwθu)][1Lw(u)]σ(xTwθu)}xw=[Lw(u)σ(xTwθu)]xw

    参数θu的更新方程,如下所示:
    θu:=θu+η[Lw(u)σ(xTwθu)]xw

    使用随机梯度上升法对xw求偏导,如下所示:
    L(w,u)xw=[Lw(u)σ(xTwθu)]θu

    参数v(w~),w~Context(w)的更新方程,如下所示:
    v(w~):=v(w~)+ηu{w}NEG(w)L(w,u)xw,w~Context(w)

  5. 基于Negative Sampling的模型(Skip-Gram模型)
    对于给定的语料库C,目标函数如下所示:

    G=wCuContext(w)g(u)

    g(u)=z{u}NEG{u}p(z|w)

    p(z|w)=[σ(v(w)Tθz)]Lu(z)[1σ(v(w)Tθz)]1Lu(z)

    L=logG=logwCuContext(w)g(u)=wCuContext(w)logg(u)=wCuContext(w)logz{u}NEG{u}p(z|w)=wCuContext(w)z{u}NEG{u}log{[σ(v(w)Tθz)]Lu(z)[1σ(v(w)Tθz)]1Lu(z)}=wCuContext(w)z{u}NEG{u}{Lu(z)log[σ(v(w)Tθz)]+[1Lu(z)]log[1σ(v(w)Tθz)]}

    对每一个样本(w,Context(w)),需要针对Context(w)中的每一个词进行负采样,但是word2vec源码中只是针对w进行了|Context(w)|次负采样。它本质上用的还是CBOW模型,只是将原来通过求和累加做整体用的上下文Context(w)拆成一个一个来考虑。对于给定的语料库C,目标函数如下所示:
    g(w)=w~Context(w)u{w}NEGw~(w)p(u|w~)

    p(u|w~)=[σ(v(w~)Tθu)]Lw(u)[1σ(v(w~)Tθu)]1Lw(u)

    L=logG=logwCg(w)=wClogg(w)=wClogw~Context(w)u{w}NEGw~(w){[σ(v(w~)Tθu)]Lw(u)[1σ(v(w~)Tθu)]1Lw(u)}=wClogw~Context(w)u{w}NEGw~(w){Lw(u)log[σ(v(w~)Tθu)]+[1Lw(u)]log[1σ(v(w~)Tθu)]}

    L(w,w~,u)=Lw(u)log[σ(v(w~)Tθu)]+[1Lw(u)]log[1σ(v(w~)Tθu)]。使用随机梯度上升法,对θu求偏导,如下所示:
    L(w,w~,u)θu=Lθu{Lw(u)log[σ(v(w~)Tθu)]+[1Lw(u)]log[1σ(v(w~)Tθu)]}=Lw(u)[1σ(v(w~)Tθu)]v(w~)[1Lw(u)]σ(v(w~)Tθu)v(w~)={Lw(u)[1σ(v(w~)Tθu)][1Lw(u)]σ(v(w~)Tθu)}v(w~)=[Lw(u)σ(v(w~)Tθu)]v(w~)

    θu的更新方程,如下所示:
    θu:=θu+η[Lw(u)σ(v(w~)Tθu)]v(w~)

    使用随机梯度上升法,对v(w~)求偏导,如下所示:
    L(w,w~,u)v(w~)=[Lw(u)σ(v(w~)Tθu)]θu

    参数v(w~)的更新,如下所示:
    v(w~):=v(w~)+ηu{w}NEGw~(w)L(w,w~,u)v(w~)

    其中,NEGw~(w)表示处理词w~时生成的负样本子集。

  6. Negative Sampling算法
    (1)带权采样原理
    设词典D中的每一个词w对应一个线段l(w),长度如下所示:
    len(w)=counter(w)uDcounter(u)

    这里counter()表示一个词在语料C中出现的次数。现在将这些线段首尾相连地拼接在一起,形成一个长度为1的单位线段。如果随机地往这个单位线段上打点,那么其中长度越长的线段(对应高频词)被打中的概率就越大。
    (2)word2vec负采样
    l0=0lk=j=1klen(wj),k=1,2,,N,这里wj表示词典D中第j个词,则以{lj}Nj=0为剖分结点可得到区间[0,1]上的一个非等距剖分,Ii=(li1,li],i=1,2,,N为其N个剖分区间。进一步引入区间[0,1]上的一个等距离剖分,剖分结点为{mj}Mj=0,其中MN,具体示意图如下所示:
    Word2Vec模型总结

    将内部剖分结点{mj}M1j=1投影到非等距剖分上,则可建立{mj}M1j=1与区间{Ij}Nj=1(或{wj}Nj=1)的映射关系,如下所示:
    Table(i)=wk,miIk,i=1,2,,M1

    根据映射每次生成一个[1,M1]间的随机整数rTable(r)就是一个样本。当对wi进行负采样时,如果采样为wi,那么就跳过去。

参考文献:
[1] word2vec中的数学原理详解