word2vec代码_Word2vec模型

1 背景

Word2vec是Word Embedding 的方法之一,是2013 年由谷歌的 Mikolov提出了一套新的词嵌入方法。在word embedding之前出现的文本表示方法有one-hot编码和整数编码,one-hot编码和整数编码的缺点均在于无法表达词语之间的相似性关系。如何解决这个问题呢?自动学习向量之间的相似性表示,用更低维度的向量来表示每一个单词。

Word2vec相关论文:

3df7d58b0f504a8c0874f82098996854.png

2 原理

word2vec是一个简单的神经网络,有以下几个层组成:

(1)1个输入层:输入使用的是one-hot编码。即:假设有n个词,则每一个词可以用一个n维的向量来表示,这个n维向量只有一个位置是1,其余位置都是0。

(2)1个隐藏层:隐藏层的神经单元数量,代表着每一个词用向量表示的维度大小。对于输入层和隐藏层之间的权值矩阵,它的形状应该是[vocab_size, hidden_size]的矩阵。

(3)1个输出层:输出层是一个 [vocab_size] 大小的向量,每一个值代表着输出一个词的概率。

39fbadc35a7f584ecf7562243af7e4a2.png

3 模型

Word2Vec模型中,主要有Skip-Gram和CBOW两种训练模型,从直观上理解,Skip-Gram是给定当前值来预测上下文。而CBOW是给定上下文,来预测当前值。

3.1 CBOW

(1)Simple CBOW Model

简单的CBOW 模型仅输入一个词,输出一个词。如下图所示:

e2c20af60d254e7e0f9da977ca6d272a.png
CBOW(输入1个词)

解释:

①input layer输入的X是单词的one-hot representation。

②输入层到隐藏层之间有一个权重矩阵W。

③隐藏层到输出层也有一个权重矩阵W'。

④最终的输出需要经过softmax函数,将输出向量中的每一个元素归一化到0-1之间的概率,概率最大的,就是预测的词。

(2)CBOW Multi-Word Context Model

复杂CBOW输入多个词,如下图所示:

760a593a13fdc4a7460bfd9c08c209c8.png
CBOW(多个输入词)

对比可以发现,和simple CBOW不同之处在于,输入由1个词变成了C个词,每个输入 Xik 到达隐藏层都会经过相同的权重矩阵W,隐藏层h的值变成了多个词乘上权重矩阵之后加和求平均值。

3.2 Skip-gram

Skip-gram输入层到隐藏层的原理和simple CBOW一样,不同的是隐藏层到输出层,损失函数变成了C个词损失函数的总和,权重矩阵W’还是共享的。

ae3d4f44a268763a9a0af88d9acc0b48.png
Skip-gram

4 优化方法

一般神经网络语言模型在预测的时候,输出的是预测目标词的概率,也就是说每一次预测都要基于全部的数据集进行计算,这无疑会带来很大的时间开销。不同于其他神经网络,Word2Vec提出两种加快训练速度的方式:

①Negative Sample(负采样):直接通过采样的方式减少负样本。

②Hierarchical Softmax(层次softmax):通过Hierarchical Softmax将复杂度从 O(n) 降为 O(log n)。

5 关于Word2Vec若干问题的思考和总结

(1)Word2Vec两个算法模型的原理是什么,网络结构怎么画?

①CBOW(continuous bag-of-word): 给定上下文,来预测当前值。

②Skip-gram:给定当前值来预测上下文。

3fa6ba0f9260b2fbeff7653469faacaa.png
网络结构图对比

28bdc67227be0ab16833985ce05adcd8.png
Skip-gram和CBOW实例

(2)网络输入输出是什么?隐藏层的激活函数是什么?输出层的激活函数是什么?

网络的输入是One-Hot向量 ,隐藏层无激活函数,输出层有Softmax函数,输出的是概率分布。层与层之间采用全连接方式,并用反向传播训练网络。

(3)目标函数/损失函数是什么?

CBOW模型的目标函数是:

0fa7a3bf414508e93ffcbad70b2b2397.png

Skip-gram模型的目标函数是:

31a0933dc034331395fc02dd4de5827c.png

(4)Word2Vec如何获取词向量?

通过训练浅层神经网络获得词向量。

(5)推导一下Word2Vec参数如何更新?

①基于Hierarchical Softmax的CBOW

CBOW的目标函数是:

593f58d82ca60ffc7ce669403ebdc9a7.png

参数更新过程:

9fa471cc1bdd6247f6790196051f9db2.png

②基于Hierarchical Softmax的Skip-gram

Skip-gram模型的目标函数是:

10ce9161beaf97d0aa81c3f94408e089.png

参数更新过程:

2c345c83171a8dcf8ba81b6647e51ef2.png

(6)Word2Vec的两个模型哪个效果好哪个速度快?为什么?

效果:CBOW像是小学时做的填空题:I come ___ China,而Skip-Gram像是给你一个 from 让你预测上下文,理论上来说应该是CBOW的效果更好,但实际情况却恰恰相反。我觉得可能是因为CBOW是取上下文的输入向量的质心从而导致一部分有效信息损失,而Skip-Gram虽然看起来荒唐,但每个单词都会得到单独的训练不会损失有效信息,其实Skip-Gram比CBOW的效果好,主要是针对低频词而言,举个例子,让你补全 It is a ___ day,是不是突然有很多可能的答案,你大概率会填写一个高频词汇,如:nice、sun 等,而不会想到要填写gorgeous,而给你gorgeous单词,其特征很明显会想到这可以用来形容day、moon、girl 等等。其次gorgeous本身用量就没有nice那么多,如果再和其他上下文放在一起取质心,很容易被忽略,从而没法充分训练。

速度:我觉得Skip-Gram的速度慢可能是因为其预测值比较多需要分别计算多个Softmax,时间复杂度为O(kn),而CBOW虽然也有多个输入,但我们求其质心简化了操作,时间复杂度为O(n)。

(7)Word2Vec加速训练的方法有哪些?

主要有两个:

①Negative Sample(负采样):以一定概率的选取负样本,使得每次迭代时只需修改一小部分参数,这是典型Categorical Distribution Sampling分布问题。即给定一些变量及其概率,随机采样使其满足变量出现的概率。

②Hierarchical Softmax(层次softmax):是一种非常高效的训练方法,模型使用Huffman二叉树的叶节点来表示语料库的所有单词。

(8)介绍下Negative Sampling,对词频低的和词频高的单词有什么影响?

词典D中的词在语料C中出现的次数有高有低,高频词被选为负样本的概率比较大,低频词被选中的概率比较小。

(9)Word2Vec和隐狄利克雷模型(LDA)有什么区别与联系?

c7c104c1f22146d780fa09f0d9dfb533.png

(10)介绍下Hierarchical Softmax的计算过程,怎么把 Huffman 放到网络中的?参数是如何更新的?对词频低的和词频高的单词有什么影响?为什么?

Hierarchical Softmax利用了Huffman树依据词频建树,词频大的节点离根节点较近,词频低的节点离根节点较远,距离远参数数量就多,在训练的过程中,低频词的路径上的参数能够得到更多的训练,所以效果会更好。

(11)Word2Vec有哪些参数,有没有什么调参的建议?

①Skip-Gram 的速度比CBOW慢一点,小数据集中对低频次的效果更好;

Sub-Sampling Frequent Words可以同时提高算法的速度和精度,Sample 建议取值为

②Hierarchical Softmax对低词频的更友好;

③Negative Sampling对高词频更友好;

④向量维度一般越高越好,但也不绝对;

⑤Window Size,Skip-Gram一般10左右,CBOW一般为5左右。

(12)Word2Vec有哪些局限性?

Word2Vec作为一个简单易用的算法,其也包含了很多局限性:

①Word2Vec只考虑到上下文信息,而忽略了全局信息;

②Word2Vec只考虑了上下文的共现性,而忽略了彼此之间的顺序性。

6 Word2Vec在工业界的应用

Word2Vec可以根据上下文来预测单词,一个词的意义往往可以从其前后的句子中抽取出来。而用户的行为也是一种相似的时间序列,可以通过上下文进行推断。当用户浏览并与内容进行交互时,我们可以从用户前后的交互过程中判断行为的抽象特征,这就使得我们可以把词向量模型应用到推荐、广告等领域当中。

6.1 NLP领域

Word2Vec学习到的词向量代表了词的语义,可以用来做分类、聚类、也可以做词的相似度计算。

把Word2Vec生成的向量直接作为深度神经网络的输入,可以做情感分析等工作。

6.2 图嵌入

基于Word2Vec这一类的Graph Embedding方法有很多,具体可以参考DeepWalk(是引入Word2Vec思想比较经典的图嵌入算法),node2vec,struc2vec 等相关论文。

6.3 推荐领域

Airbnb在论文《Real-time Personalization using Embeddings for Search Ranking at Airbnb》中提出将用户的浏览行为组成List,通过Word2Vec方法学习item的向量,其点击率提升了21%,且带动了99%的预定转化率。该论文主要是在Skip-gram 模型的基础上做了改进。

Yahoo在论文《E-commerce in Your Inbox: Product Recommendations at Scale》中提出Yahoo邮箱从发送到用户的购物凭证中抽取商品并组成List,通过Word2Vec学习并为用户推荐潜在的商品。

6.4 广告领域

Yahoo在论文《Scalable Semantic Matching of Queries to Ads in Sponsored Search Advertising》中提出将用户的搜索查询和广告组成List,并为其学习特征向量,以便对于给定的搜索查询可以匹配适合的广告。

7 基于python使用word2vec模型的代码实现

代码:

20f69765784c8f5b73496f8b1d3de1db.png

a201c3096803351c3372283859079e17.png

参考资料:

[1]http://mccormickml.com/2016/04/19/word2vec-tutorial-the-skip-gram-model/

[2]https://blog.csdn.net/cindy_1102/article/details/88079703

[3]https://zhuanlan.zhihu.com/p/26306795

[4]https://mp.weixin.qq.com/s?src=11×tamp=1594857895&ver=2463&signature=kg0Nsc5Yj7qtUhWiYIFVG3w-2r4nxSIfzzIm3TPvABz-iMrvdETDJzz8fslxYdV0u-ebdebBL60Q36MLttQ3mjC*nNrmSOYcV8eCisG7*MxIBqmuCMPeqN3tHCEPo9uM&new=1

[5]https://blog.csdn.net/github_37412255/article/details/78360971

[6]google word2vec预训练模型下载repo:

https://code.google.com/archive/p/word2vec/source/default/source

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值