理解Word2vec

理解Word2vec

,词向量

首先需要理解词向量。

比如有一个城市的词汇表(北京,上海,宁夏,纽约,巴黎,,,,,南京)One-Hot Encoder按照如下方式:

杭州 [0,0,0,0,0,0,0,1,0,……,0,0,0,0,0,0,0]

上海 [0,0,0,0,1,0,0,0,0,……,0,0,0,0,0,0,0]

宁波 [0,0,0,1,0,0,0,0,0,……,0,0,0,0,0,0,0]

北京 [1,0,0,0,0,0,0,0,0,……,0,0,0,0,0,0,0]

 

但是使用One-Hot Encoder有以下问题。一方面,城市编码是随机的,向量之间相互独立,看不出城市之间可能存在的关联关系。其次,向量维度的大小取决于语料库中字词的多少。如果将世界所有城市名称对应的向量合为一个矩阵的话,那这个矩阵过于稀疏,并且会造成维度灾难。

 

使用Vector Representations可以有效解决这个问题。Word2Vec可以将One-Hot Encoder转化为低维度的连续值,也就是稠密向量,并且其中意思相近的词将被映射到向量空间中相近的位置。如果将embed后的城市向量通过PCA降维后可视化展示出来,那就是这个样子。

 

华盛顿和纽约聚集在一起,北京上海聚集在一起,且北京到上海的距离与华盛顿到纽约的距离相近。也就是说模型学习到了城市的地理位置,也学习到了城市地位的关系。

 

二,Word2vec--具体理解之Word embedding

干什么的?

首先有了文本语料库,你需要对语料库进行预处理,得到你想要的processed corpus之后,将他们的one-hot向量作为word2vec的输入,通过word2vec训练低维词向量(word embedding)就ok了。

目前有两种训练模型(CBOW和Skip-gram),两种加速算法(Negative Sample与Hierarchical Softmax)。

本文主要用了词向量,这里阐述word2vec如何将corpus的one-hot向量(模型的输入)转换成低维词向量(模型的中间产物,更具体来说是输入权重矩阵)

2.1 Word2Vec两种模型

Word2Vec包含了两种词训练模型:CBOW模型和Skip-gram模型。

1)CBOW模型根据中心词W(t)周围的词来预测中心词
2)Skip-gram模型则根据中心词W(t)来预测周围词

word2vec模型其实就是简单化的神经网络。

 

输入是One-Hot VectorHidden Layer没有激活函数,也就是线性的单元。Output Layer维度跟Input Layer的维度一样,用的是Softmax回归。我们要获取的dense vector其实就是Hidden Layer的输出单元。

抛开两个模型的优缺点不说,它们的结构仅仅是输入层和输出层不同。请看:

1)CBOW模型

 

2)Skip-gram模型


接下来我们具体分析一下CBOW模型的构造,以及词向量是如何产生的。理解了CBOW模型,Skip-gram模型也就不在话下啦。

2.2 CBOW模型的理解

先来看着这个结构图,用自然语言描述一下CBOW模型的流程:


CBOW模型结构图

1) 输入层:上下文单词的onehot. {假设单词向量空间dim为V,上下文单词个数为C}。

2)所有onehot分别乘以共享的输入权重矩阵W. {V*N矩阵,N为自己设定的数,初始化权重矩阵W}。

3)所得的向量 {因为是onehot所以为向量} 相加求平均作为隐层向量, size为1*N。

4)乘以输出权重矩阵W' {N*V}。

5)得到向量 {1*V} 激活函数处理得到V-dim概率分布 {PS: 因为是onehot嘛,其中的每一维斗代表着一个单词},概率最大的index所指示的单词为预测出的中间词(target word)。

6)true label的onehot做比较,误差越小越好。

 

所以,需要定义loss function(一般为交叉熵代价函数),采用梯度下降算法更新W和W'。训练完毕后,输入层的每个单词与矩阵W相乘得到的向量的就是我们想要的词向量(word embedding),这个矩阵(所有单词的word embedding)也叫做look up table(其实这个look up table就是矩阵W自身),也就是说,任何一个单词的onehot乘以这个矩阵都将得到自己的词向量。有了look up table就可以免去训练过程直接查表得到单词的词向量了。

 

三, 具体例子理解CBOW模型流程

假设我们现在的Corpus是这一个简单的只有四个单词的document:
      {I drink coffee everyday}
    

我们选coffee作为中心词,window size设为2。也就是说,我们要根据单词"I","drink"和"everyday"来预测一个单词,并且我们希望这个单词是coffee。


这里,drink稀疏的表示[0 1 0 0]经过embedding之后变为了稠密的矩阵[2 2 1]。

 

 

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值