前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >word2vec

word2vec

作者头像
ke1th
发布2019-05-28 23:48:09
7261
发布2019-05-28 23:48:09
举报

版权声明:本文为博主原创文章,转载请注明出处。 /developer/article/1437727

word2vec

为什么要进行embedding

word2vec就是对word进行embedding

首先,我们知道,在机器学习深度学习中,对word的最简单的表示就是使用one-hot(0,0,1,0,0…..来表示一个word). 但是用one-hot表示一个word的话,会有一些弊端:从向量中无法看出word之间的关系((wworda)Twwordb=0(w^{word_a})^Tw^{word_b}=0),而且向量也太稀疏. 所以一些人就想着能否用更小的向量来表示一个word,希望这些向量能够承载一些语法语义上的信息, 这就产生了word2vec

Language Model(Unigrams, Bigrams, Trigrams..etc)

language model序列的概率建模

Unigram:

假设句子中,各个word是独立的

P(w_1,_w_2,_w_3..,_wn)=∏ni=1P(wi) P(w_1,w_2,w_3..,w_n) = \prod_{i=1}^{n}P(w_i)

Bigram

假设句子中,每个word只和之前的一个word有关系

P(w_1,_w_2,_w_3..,_wn)=∏ni=2P(wi|wi?1) P(w_1,w_2,w_3..,w_n) = \prod_{i=2}^{n}P(w_i|w_{i-1})

Trigram

假设句子中,每个word和前两个word有关系

P(w_1,_w_2,_w_3..,_wn)=∏ni=1P(wi|wi?1,wi?2) P(w_1,w_2,w_3..,w_n) = \prod_{i=1}^{n}P(w_i|w_{i-1},w_{i-2})

上面的模型都基于很强的假设,而实际上,句子中的每个word,是和整个句子有关系的,不仅仅只是考虑前一个或前两个

Continuous Bags of Words Model (CBOW)

这个模型是上面几种模型的扩展.CBOW不是简单的只考虑前一个词或前两个词,它是考虑了单词的上下文(context).在CBOW,我们的目标是maxP(w|context(w))max P(w|context(w)).

首先,模型的输入(context)是one-hot’s ,模型的输出(w)是one-hot,one_hotR|V|one\hot\in R^{|V|},这个是已知的.我们要创建两个矩阵_E=Matrix(embedding)∈R|V|?embedding_size_E=Matrix(embedding)\in R^{|V|* {embedding\_size}} , _P=Matrix(projection)∈Rembedding_size?|V|P=Matrix(projection)\in R^{{embedding\size}* |V|}, 这两个矩阵是需要训练的.|_V||V|是字典的大小,embedding__size_embedding\_size是任意值(代表你想把onehot压缩成几维表示).

context=01?0000000010????10000001∈R|context(w)|?|V|

context = \begin{matrix} 0 & 0 & 0 &\cdots & 1 & 0 \ 1 & 0 & 0 &\cdots & 0 & 0 \ \vdots \ 0 & 0 & 1 &\cdots & 0 & 0 \ 0 & 0 & 0 &\cdots & 0 & 1 \end{matrix} \in R^{|context(w)|* |V|}

Embed=0.10.10.10.1?0.10.10.10.10.30.10.30.10.30.10.30.10.20.00.20.00.20.00.20.0????????0.10.60.10.60.10.60.10.60.30.50.30.50.30.50.30.5∈R|V|?embedding_size

Embed = \begin{matrix} 0.1 & 0.3 & 0.2 &\cdots & 0.1 & 0.3 \ 0.1 & 0.1 & 0.0 &\cdots & 0.6 & 0.5 \ 0.1 & 0.3 & 0.2 &\cdots & 0.1 & 0.3 \ 0.1 & 0.1 & 0.0 &\cdots & 0.6 & 0.5 \ \vdots \ 0.1 & 0.3 & 0.2 &\cdots & 0.1 & 0.3 \ 0.1 & 0.1 & 0.0 &\cdots & 0.6 & 0.5 \ 0.1 & 0.3 & 0.2 &\cdots & 0.1 & 0.3 \ 0.1 & 0.1 & 0.0 &\cdots & 0.6 & 0.5 \end{matrix} \in R^{|V|* embedding\_size}

Proj=0.10.10.10.1?0.10.10.10.10.30.10.30.10.30.10.30.10.20.00.20.00.20.00.20.0????????0.10.60.10.60.10.60.10.60.30.50.30.50.30.50.30.5∈Rembedding_size?|V|

Proj = \begin{matrix} 0.1 & 0.3 & 0.2 &\cdots & 0.1 & 0.3 \ 0.1 & 0.1 & 0.0 &\cdots & 0.6 & 0.5 \ 0.1 & 0.3 & 0.2 &\cdots & 0.1 & 0.3 \ 0.1 & 0.1 & 0.0 &\cdots & 0.6 & 0.5 \ \vdots \ 0.1 & 0.3 & 0.2 &\cdots & 0.1 & 0.3 \ 0.1 & 0.1 & 0.0 &\cdots & 0.6 & 0.5 \ 0.1 & 0.3 & 0.2 &\cdots & 0.1 & 0.3 \ 0.1 & 0.1 & 0.0 &\cdots & 0.6 & 0.5 \end{matrix} \in R^{embedding\_size*|V|}

模型运作步骤:

(1) 生成contextone-hot矩阵

(2) 计算出contextembedding matrix, context?ERcontext(w)?|V|context * E \in R^{context(w)* |V|}

(3) 将获取的matrix平均, v? =reducemean(context?E,1)\hat v=reduce_mean(context*E, 1)

(4) 生成评分向量 z=reduce_mean(context?E,1)?PR|V|z=reduce\_mean(context*E,1)* P \in R^{|V|}

(5) 将评分向量转成概率分布 y? =softmax(z)\hat y = softmax(z)

y? \hat y 的分布和实际分布y_y越相近,则模型学习的越好, 如何描述两个分布的相似性呢?借用信息论中的交叉熵_H(y? ,y)=?∑|V|i=1yilog(y? i)H(\hat y,y)=-\sum_{i=1}^{|V|}y_ilog(\hat y_i)作为目标函数, 然后使用梯度下降来更新参数.

minimize J=?logP(wc|wc?m,wc?m+1,...,wc?1,wc+1,...,wc+m)=?logP(projc|v? )=?logexp(projcv? T)∑|V|i=1projiv? T

\begin{aligned} minimize\space J &= -logP(w_c|w_{c-m},w_{c-m+1},...,w_{c-1},w_{c+1},...,w_{c+m})\ &= -logP(proj_c|\hat v)\ &= -log\frac{exp(proj_c\hat v^T)}{\sum_{i=1}^{|V|}proj_i\hat v^T} \end{aligned}

m:窗口大小

skip-gram Model

skip-gram modelCBOW结构相反, CBOW输入上下文, 输出中间的word.skip-gram输入中间的word,输出上下文.

需要学习的依旧是两个矩阵, EmbedR|V|?embedding_size_Embed\in R^{|V|* embedding\_size}和_ProjRembedding_size?|V|Proj\in R^{embedding\_size* |V|}

minimize J=?logP(wc?m,wc?m+1,...,wc?1,wc+1,...,wc+m|wc)=?logi=c?m,icc+mP(wi|wc)=?logi=c?m,icc+mP(proji|embedc)

\begin{aligned} minimize\space J&=-logP(w_{c-m},w_{c-m+1},...,w_{c-1},w_{c+1},...,w_{c+m}|w_c)\ &= -log \prod_{i=c-m,i \neq c}^{c+m}P(w_i|w_c)\ &= -log\prod_{i=c-m,i \neq c}^{c+m}P(proj_i|embed_c) \end{aligned}

Negtive Sampling

看公式∑|V|i=1projiv? T\sum_{i=1}^{|V|}proj_i\hat v^T,如果|V||V|很大,那么运算量是相当大的,为了减少运算量,就提出了Negtive Sampling.

Negtive Sampling基于skip-gram model.

考虑一个(w,c)对,其中w是中心单词,cw上下文中的一个单词,P(D=1|w,c,θ)P(D=1|w,c,\theta)表示cw上下文中单词的概率,P(D=0|w,c,θ)P(D=0|w,c,\theta)表示c不是w上下文中单词的概率.我们先对P(D=1|w,c,θ)P(D=1|w,c,\theta)进行建模:

P(D=1|w,c,θ)=11+exp(?(projc)(embedTw)) embedwRembedding_size

P(D=1|w,c,\theta)=\frac{1}{1+exp(-(proj_c)(embed_w^T))} \space\space embed_w\in R^{embedding\_size}

相比CBOWskip-gram,Negtive Sampling思想是,如果cw的上下文中的单词,就最大P(D=1|w,c,θ)P(D=1|w,c,\theta),如果不是,就最大化P(D=0|w,c,θ)P(D=0|w,c,\theta),θ\theta就是Embed,_Proj_Embed, Proj

θ=argmaxθ∏(w,c)∈DP(D=1|w,c,θ)∏(w,c)?DP(D=0|w,c,θ)=argmaxθ∑(w,c)∈DlogP(D=1|w,c,θ)+∑(w,c)?Dlog(1?P(D=0|w,c,θ))=argmaxθ∑(w,c)∈Dlog_11+_exp(?(projc)(embedTw))+∑(w,c)?Dlog(1?11+exp(?(projc)(embedTw)))

\begin{aligned} \theta &= argmax_{\theta} \prod_{(w,c)\in D}P(D=1|w,c,\theta)\prod_{(w,c)\notin D}P(D=0|w,c,\theta) \ &= argmax_{\theta} \sum_{(w,c)\in D}logP(D=1|w,c,\theta)+\sum_{(w,c)\notin D}log(1-P(D=0|w,c,\theta)) \ &= argmax_{\theta}\sum_{(w,c)\in D}log\frac{1}{1+exp(-(proj_c)(embed_w^T))}+\sum_{(w,c)\notin D}log(1-\frac{1}{1+exp(-(proj_c)(embed_w^T)))}\ \end{aligned}

这样运算量就被减小了.

x训练之后,对_Embed_Embed和_Proj_Proj有多种处理方式:

(1) 求和

(2)平均

(3)连接起来

问题:

(1): Negtive Sampling只考虑了上下文关系,没有考虑单词之间的顺序关系,如果考虑进去的话,效果会不会更好?

(2): word2vec,优化的都是proj_cembed_w的距离,让这两个向量尽量的近,这个代表了什么?

(3):对于_Embed_Embed,感觉更新的频率不够

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年11月18日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • word2vec
    • 为什么要进行embedding
      • Language Model(Unigrams, Bigrams, Trigrams..etc)
        • Continuous Bags of Words Model (CBOW)
          • skip-gram Model
            • Negtive Sampling
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
            http://www.vxiaotou.com