Skip to content

Word2vec之公式推导笔记

📅 发表于 2017/11/02
🔄 更新于 2017/11/02
👁️ 次访问
📝 0 字
0 分钟
自然语言处理
#word2vec
#深度学习

cs224n word2vec 简介和公式推导

Word meaning

词意

词的意思就是idea,如下:

  • 词汇本身表达的意义
  • 人通过词汇传达的想法
  • 在写作、艺术中表达的意思
  • signifier - signified(idea or thing) - denotation

传统离散表达

传统使用分类学去建立一个WordNet,其中包含许多上位词is-a和同义词集等。如下:

上义词同义词
entity, physical_entity,object, organism, animalfull, good; estimable, good, honorable, respectable

离散表达的问题:

  • 丢失了细微差别,比如同义词:adept, expert, good, practiced, proficient, skillful
  • 不能处理新词汇
  • 分类太主观
  • 需要人力去构建和修改
  • 很难去计算词汇相似度

每个单词使用one-hot编码,比如hotel=[0,1,0,0,0],motel=[0,0,1,0,0]。 当我搜索settle hotel的时候也应该去匹配包含settle motel的文章。 但是我们的查询hotel向量和文章里面的motel向量却是正交的算不出相似度

分布相似表达

通过一个单词的上下文去表达这个单词。

You shall know a word by the company it keeps. --- JR. Firth

例如,下面用周围的单词去表达banking

government debt problems turning into banking crises as has happened in ​ saying that Europe needs unified banking regulation to replace the hodgepodge

稠密词向量

一个单词的意义应该是由它本身的词向量来决定的。这个词向量可以预测出的上下文单词。

比如lingustics的词向量是[0.286,0.792,0.177,0.107,0.109,0.542,0.349]

词嵌入思想

构建一个模型,根据中心单词wt,通过自身词向量,去预测出它的上下文单词。

p(contextwt)=

损失函数如下,wt表示wt的上下文(负号通常表示除了某某之外),如果完美预测,损失函数为0。

J=1p(wtwt)

Word2Vec

在每个单词和其上下文之间进行预测。

有两种算法:

  • Skip-grams(SG): 给目标单词,预测上下文
  • Continuous Bag of Words(CBOW):给上下文,预测目标单词

两个稍微高效的训练方法:

  • 分层softmax
  • 负采样

课上只是Naive softmax。两个模型,两种方法,一共有4种实现。这里是word2vec详细信息

Skip-gram

对于每个单词wt,会选择一个上下文窗口m。 然后要预测出范围内的上下文单词,使概率P(wt+iwt)最大。

目标函数

θ是我们要训练的参数,目标函数就是所有位置预测结果的乘积,最大化目标函数:

J(θ)=t=1Tmjmp(wt+jwt;θ),tj

一般使用negative log likelihood负采样教程

最大化目标函数,就得得到损失函数。对于对数似然函数,取其负对数就可以得到损失函数,再最小化损失函数,其中T是文本长度,m是窗口大小:

J(θ)=1Tt=1TmjmlogP(wt+jwt)
  • Loss 函数 = Cost 函数 = Objective 函数
  • 对于softmax概率分布,一般使用交叉熵作为损失函数
  • 单词wt+j是one-hot编码
  • negative log probability

Word2vec细节

词汇和词向量符号说明:

  • u 上下文词向量,向量是d维的
  • v 词向量
  • 中心词汇t,对应的向量是vt
  • 上下文词汇j ,对应的词向量是uj
  • 一共有V个词汇

计算p(wt+jwt), 即:

p(wjwt)=softmax(ujTvt)=exp(ujTvt)i=1Vexp(uiTvt)

两个单词越相似,点积越大,向量点积如下:

uTv=i=1Mui×vi

softmax之所以叫softmax,是因为指数会让大的数越大,小的数越小。类似于max函数。下面是计算的详细信息:

一些理解和解释:

  • wt是one-hot编码的中心词汇,维数是(V,1)
  • W是词汇表达矩阵,维数是(d,V),一列就是一个单词
  • Wwt=vt 相乘得到词向量vt(d,V)(V,1)(d,1)d维向量去表达了词汇t
  • WWvt=s(V,d)(d,1)(V,1) , 得到 语义相似度向量s
  • 再对s进行softmax即可求得上下文词汇
  • 每个单词有两个向量,作为center单词向量和context单词向量

偏导计算

o是上下文单词,c是中心单词,条件概率如下:

P(oc)=exp(uoTvc)i=1Vexp(uiTvc)

这里只计算logPvc向量的偏导。

θ向量表示所有的参数,有V个单词,d维向量。每个单词有2个向量。参数个数一共是2dV个。

向量偏导计算公式,x,a 均是向量

xTax=aTxx=a

函数偏导计算,链式法则y=f(u),u=g(x)

dydx=dydududx

最小化损失函数

J(θ)=1Tt=1TmjmlogP(wt+jwt),jm

这里只计算vc的偏导,先进行分解原式为2个部分

vclogP(oc)=vclogexp(uoTvc)i=1Vexp(uiTvc)=vclogexp(uoTvc)1vclogi=1Vexp(uiTvc)2

部分1推导

vclogexp(uoTvc)=vcuoTvc=uo

部分2推导

vclogi=1Vexp(uiTvc)=1i=1Vexp(uiTvc)vcx=1Vexp(uxTvc)=1Ax=1Vvcexp(uxTvc)=1Ax=1Vexp(uxTvc)vcuxTvc=1i=1Vexp(uiTvc)x=1Vexp(uxTvc)ux=x=1Vexp(uxTvc)i=1Vexp(uiTvc)ux=x=1VP(xc)ux

所以,综合起来可以求得,单词o是单词c的上下文概率logP(oc) 对center向量vc的偏导:

vclogP(oc)=uox=1VP(xc)ux=观察到的期望的

实际上偏导是,单词o的上下文词向量,减去,所有单词x的上下文向量乘以x作为c的上下文向量的概率。

总体梯度计算

在一个window里面,对中间词汇vc求了梯度, 然后再对各个上下文词汇uo求梯度。 然后更新这个window里面用到的参数。

比如句子We like learning NLP。设m=1

  • 中间词汇求梯度 vlike
  • 上下文词汇求梯度 uweulearning
  • 更新参数

梯度下降

有了梯度之后,参数减去梯度,就可以朝着最小的方向走了。机器学习梯度下降

θnew=θoldαθoldJ(θ),θnew=θoldαΔθJ(θ)

随机梯度下降

预料会有很多个window,因此每次不能更新所有的。只更新每个window的,对于window t:

θnew=θoldαΔθJt(θ)
总访客数:   ·   总访问量:
PLM's Blog @ 2016 - 2025