Skip to content

Word2vec之总体介绍

📅 发表于 2017/11/13
🔄 更新于 2017/11/13
👁️ 次访问
📝 0 字
0 分钟
自然语言处理
#word2vec
#cbow
#skip-gram
#负采样

cs224n笔记,word2vec总体介绍,包括CBOW和Skip-gram,负采样训练

Word2vec

简介

把词汇变成词向量。

类别1类别2
算法CBOW,上下文预测中心词汇Skip-gram,中心词汇预测上下文
训练方法负采样哈夫曼树

语言模型

两种句子:

  • 正常的句子:The cat jumped over the puddle。 概率高,有意义。
  • 没意义的句子:stock boil fish is toy 。概率低,没意义。

二元模型

一个句子,有n个单词。每个词出现的概率由上一个词语来决定。则整体句子的概率如下表示:

P(w1,w2,,wn)=i=2nP(wiwi1)

缺点

  • 只考虑单词相邻传递概率,而忽略句子整体的可能性
  • context size=1,只学了相邻单词对的概率
  • 会计算整个大数据集的全局信息

CBOW

给上下文The cat _ over the puddle ,预测jump 。对于每个单词,学习两个向量:

  • v输入向量 ,(上下文单词)
  • u输出向量 , (中心单词)

符号说明

  • V :词汇表,后面用V代替词汇表单词个数
  • wi :词汇表中第i个单词
  • d :向量的维数
  • Vd×|V|:输入矩阵,也可以用W来表达
  • viV的第i列,wi的输入向量表达
  • U|V|×d :输出矩阵,可以用W来表达
  • uiU的第i行, wi的输出向量表达

输入与输出

  • x(c), 输入2m个上下文单词,上下文词汇的one-hot向量
  • yc: 真实标签
  • y^(c), 输出一个中心单词,中心词汇的one-hot向量

步骤

1 上下文单词onehot向量

one-hot向量的表达:(x(cm),,x(c1),x(c+1),x(c+m)RV)

2 上下文单词向量

(vcm,vcm+1,.vc+mRd), 其中,vcm=Vx(cm), 即输入矩阵乘以one-hot向量就找到所在的列

3 平均上下文词向量

v^=vcm++vc+m2mRd

4 输出单词与上下文计算得分向量

z=Uv^RV 。点积,单词越相似,得分越高

5 得分向量转为概率

$\hat y = \mathrm{softmax}(z) \in \mathbb R^V $

6 真实预测概率对比

预测的概率向量y^与唯一真实中心单词one-hot向量y,进行交叉熵比较算出loss。

目标函数

使用交叉熵计算loss,损失函数如下:

H(y^,y)=j=1|V|yjlog(y^j)

由于中心单词y是one-hot编码,只有正确位置才为1,其余均为0,所以只需计算中心单词对应的位置概率的loss即可:

H(y^,y)=yclog(y^c)=log(y^c)

交叉熵很好是因为

  • 1log(1)=0,预测得好
  • 1log(0.01)=4.605, 预测得不好

最终损失函数

minimizeJ=logP(wcwcm,,wc1,wc+1,,wc+m)=logP(ucv^)=logexp(ucTv^)j=1|V|exp(ujTv^)=ucTv^+logj=1|V|exp(ujTv^)

再使用SGD方法去更新相关的两种向量uc,vj

Skip-gram

给中心单词 jump,预测上下文The cat _ over the puddle

输入中心单词x, 输出上下文单词y 。与CBOW正好输入输出相反,但同样有两个矩阵U,V 。符号说明同CBOW。

步骤

1 中心单词onehot向量

xR|V|

2 中心单词词向量

vc=VxRd

3 中心词与其他词的得分向量

z=UvcR|V|

4 得分向量转为概率

概率 y^=softmax(z)y^cm,,y^c+m 是目标上下文单词是中心单词的上下文的预测概率

5 预测真实概率对比

预测概率y^2m 个真实上下文onehot向量ycm,,yc+m进行交叉熵对比,算出loss

目标函数

与CBOW不同的是,Skip-gram做了一个朴素贝叶斯条件假设,所有的输出上下文单词都是独立的

minimizeJ=logP(wcm,,wc1,wc+1,,wc+mwc)=logj=0,jm2mP(wcm+jwc)=logj=0,jm2mexp(ucm+jTvc)k=1|V|exp(ukTvc)=j=0,jm2m(logexp(ucm+jTvc)logk=1|V|exp(ukTvc))=j=0,jm2mucm+jTvc+2mlogk=1|V|exp(ukTvc)

一样,使用SGD去优化U和V。

损失函数实际上是2m个交叉熵求和,求出的向量y^2m个onehot向量ycm+j 计算交叉熵

J=j=0,jm2mlogP(ucm+jvc)=j=0,jm2mH(y^,ycm+j)

负采样训练

每次计算都会算整个|V|词表,太耗时了。 可以从噪声分布Pn(w)中进行负采样,来代替整个词表。当然单词采样概率与其词频相关。只需关心:目标函数梯度更新规则

标签函数

对于一对中心词和上下文单词(w,c) ,设标签如下:

  • P(l=1w,c)(w,c) 来自于真实语料
  • P(l=0w,c)(w,c)来自于负样本,即不在语料中

sigmoid表示标签函数:

P(l=1w,c;θ)=σ(uwTvc)=11+euwTvcP(l=0w,c;θ)=1σ(uwTvc)=11+euwTvc

目标函数

选取合适的θ=U,V去增大正样本的概率,减小负样本的概率。设D为正样本集合,D¯为负样本集合。

θ=argmaxθ(w,c)DP(l=1w,c,θ)(w,c)D¯P(l=0w,c,θ)=argmaxθ(w,c)DP(l=1w,c,θ)(w,c)D¯(1P(l=1w,c,θ))=argmaxθ(w,c)DlogP(l=1w,c,θ)+(w,c)D¯log(1P(l=1w,c,θ))=argmaxθ(w,c)Dlog11+exp(uwTvc)+(w,c)D¯log11+exp(uwTvc)=argmaxθ(w,c)Dlogσ(uwTvc)+(w,c)D¯logσ(uwTvc)

最大化概率也就是最小化负对数似然

J=(w,c)Dlogσ(uwTvc)(w,c)D¯logσ(uwTvc)

负采样集合选择

为中心单词wcPn(w) 采样K个假的上下文单词。表示为{u¯kk=1K}

CBOW

给上下文向量v^=vcm++vc+m2m 和真实中心词uc

原始loss

J=ucTv^+logj=1|V|exp(ujTv^)

负采样loss

J=logσ(ucTv^)k=1Klogσ(u¯kTv^)

Skip-gram

给中心单词vc, 和2m个真实上下文单词ucm+j

原始loss

J=j=0,jm2mucm+jTvc+2mlogk=1|V|exp(ukTvc)

负采样loss

J=j=0,jm2mlogσ(ucm+jTvc)k=1Klogσ(u¯kTvc)
总访客数:   ·   总访问量:
PLM's Blog @ 2016 - 2025