Word2Vec模型总结

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

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


    其中参数的物理意义,如下所示:
    (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模型)
    解析:

    这里写图片描述

    其中, 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=0 lk=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 ,具体示意图如下所示:

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

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

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

猜你喜欢

转载自blog.csdn.net/shengshengwang/article/details/78448583