算一算-Word2Vec

摘要

在前面的文章里面已经非常粗略的介绍过Word2Vec的原理,因为网上关于W2V的学习材料已经足够多了,写的也非常的好。但是大部分的文章也是只是介绍了整个W2V的原理,对于里面一些计算的细节,似乎并没有文章分析,另一方面,可能对于部分人来说,读完了原理之后非常想有一个真真切切的例子把整个Word2Vec的流程算一遍,所以,本文参照前面对GBDTXGBOOST的文章,把整个W2V的计算过程演示一遍,希望大家能结合论文和本文的例子,对W2V有一个进一步的把握,同时也帮想自己造W2V轮子的读者理一理脉络。

前言:

在本文里面,我先会介绍Word2Vec在Skipgram&Hierarchical SoftMax(层级SoftMax)下的训练过程,之后会介绍Skipgram在Negative Sampling的训练过程。最后一部分是CBOW的训练过程。

另外,本文假设你已经阅读一些关于W2V的学习材料,知道一些基本的概念(哈夫曼树、SkipGram、CBOW、Negative Sampling、基本参数等)

训练参数

为了方便说明整个计算的流程,先做一下参数的设定。

这里写图片描述

学习的预料如下(3个句子)
这里写图片描述
(句子乱敲的,别在意细节)

SkipGram & Hierarchical SoftMax 训练过程

预备工作:

从上面的语料,我们知道,我们一共有6个单词。而且设定了embedding之后的词向量长度为了5,所以,我们先给每个词向量做一个初始化,具体如下:

这里写图片描述

然后,我们来构造一下我们的训练数据,SkipGram的核心思想就是利用中心词 w w 去预测中心词 w 的上下文 Content(w) C o n t e n t ( w ) ,所以,很自然,在窗口为5的情况下我们有如下全部的训练数据:
这里写图片描述
之后,我们再根据预料中单词出现的频次建一个哈夫曼树,具体如下:

这里写图片描述
可以看到,对于出现次数最多的单词’cat’编码为0(最短),其余单词出现次数均为1,这个时候剩余单词的编码就无所谓了。


值得注意的是,其实在层级SoftMax中并非一定要使用哈夫曼树,用这种数据结构是为了性能,使得训练的速度加快,后面代码分析部分会简单说明说这个问题。


另外,我们把每个词的编码,以及每个词从根结点到其叶子结点路径上所经过的 θ θ 编号整理成如下表(后面会用到)
这里写图片描述

在完成上面的准备工作后,是时候给出SkipGram下的 Hierarchical SoftMax的伪代码了。这个伪代码的推导过程参考文章。

Algorithm 1:SkipGramHierarchicalSoftMax_______________________________________________________________________________Input:w,wInput:Context(w)wInput:V(w),wInput:θindex,,indexFor U in Context(w) do:       e=0       For j in range(codelen{ U}) do :               index=word_ point{ U}j               f=σ(V(w)Tθindex)               g=η(1code{ U}jf)               e:=e+gθindex               θindex:=θindex+gV(w)       V(w):=V(w)+eEnd A l g o r i t h m   1 : S k i p G r a m − H i e r a r c h i c a l S o f t M a x _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ I n p u t : w , 中 心 词 w I n p u t : C o n t e x t ( w ) , 中 心 词 w 的 上 下 文 集 合 I n p u t : V ( w ) , 中 心 词 w 的 词 向 量 I n p u t : θ i n d e x , 非 叶 子 结 点 的 向 量 , i n d e x 为 非 叶 子 结 点 的 编 号 F o r   U   i n   C o n t e x t ( w )   d o :               e = 0               F o r   j   i n   r a n g e ( c o d e l e n { U } )   d o   :                               i n d e x = w o r d _   p o i n t { U } j                               f = σ ( V ( w ) T θ i n d e x )                               g = η ( 1 − c o d e { U } j − f )                               e := e + g θ i n d e x                               θ i n d e x := θ i n d e x + g V ( w )               V ( w ) := V ( w ) + e E n d

这里先简单的解释一下算法流程图中的一些变量。


σ(x)sigmoid,σ(x)=11+ex σ ( x ) 是 s i g m o i d 函 数 , 即 σ ( x ) = 1 1 + e − x

η η 为学习率,在此处我们初始化为0.95(注意,这里初始化为0.95是纯粹是为了后面计算的结果的数值稍微大点)

Context(w) C o n t e x t ( w ) 指的是中心词w的上下文集合,比如说对于第二个句子中词dog在窗口大小为5的情况下其上下文集合有 { woof,cat} { w o o f , c a t }

V(w) V ( w ) 是中心词w的词向量,初始化为上图中的数据。

θj θ j 是非叶子结点的向量,其维度与 V(w)

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值