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

Word2Vec

作者头像
mathor
发布于 2020-04-09 07:26:48
发布于 2020-04-09 07:26:48
2920
举报
文章被收录于专栏:mathormathor

自然语言处理问题中,一般以词作为基本单元,例如我们想要分析"我去过华盛顿州"这句话的情感,一般的做法是先将这句话进行分词,变成去过华盛顿州,由于神经网络无法处理词,所以我们需要将这些词通过某些办法映射成词向量。词向量是用来表示词的向量,也可被认为是词的特征向量。把词映射为实数域向量的技术也叫词嵌入(word embedding)

为何不采用one-hot向量

假设词典中不同词的数量为$N$,每个词可以和从0到$N-1$的连续整数一一对应。假设一个词的相应整数表示为$i$,为了得到该词的one-hot向量表示,我们创建一个全0的长为$N$的向量,并将其第$i$为设为1

然而,使用one-hot词向量并不是一个好选择。一个主要的原因是,one-hot词向量无法表达不同词之间的相似度,例如,任何一对词的one-hot向量的余弦相似度都为0

word2vec

2013年,Google团队发表了word2vec工具。word2vec工具主要包含两个模型:跳字模型(skip-gram)连续词模型(continuous bag of words,简称CBOW),以及两种高效训练的方法:负采样(negative sampling)层序softmax(hierarchical softmax)。值得一提的是,word2vec词向量可以较好地表达不同词之间的相似度和类比关系

跳字模型

在跳字模型中,我们用一个词来预测它在文本序列周围的词。例如,给定文本序列"the","man","hit","his","son"。设背景窗口大小为2, 跳字模型所关心的是,给定"hit",生成它邻近词"the","man"."his","son"的概率(在这个例子中,"hit"叫中心词,"the","man","his","son"叫背景词),即

$$ P(“the”,“man”,“his”,“son”\mid “hit”) $$

假设在给定中心词的情况下,背景词的生成是相互独立的,那么上式可以改写成

$$ P(“the”\mid “hit”)·P(“man”\mid “hit”)·P(“his”\mid “hit”)·P(“son”\mid “hit”) $$

我们来描述一下跳字模型。假设词典大小为$|V|$,我们将词典中的每个词与0到$|V|-1$的整数一一对应:词典索引集$V=\{0,1,...,|V|-1\}$。一个词在该词典中所对应的整数称为词的索引,给定一个长度为$T$的文本序列,$t$时刻的词为$w^{(t)}$。当时间窗口大小为$m$时,跳字模型需要最大化给定任一中心词生成背景词的概率

$$ \prod_{t=1}^T {\prod_{-m≤j≤m,\ j\neq 0}{P(w^{(t+j)}\mid w^{(t)})}} $$

上式得最大似然估计与最小化以下损失函数等价

$$ -\frac{1}{T}\sum_{t=1}^{T}\sum_{-m≤j≤m,\ j\neq 0}logP(w^{(t+j)}\mid w^{(t)}) $$

我们可以用$\boldsymbol v$代表中心词的词向量,$\boldsymbol u$代表背景词的词向量。换言之,对于词典中一个索引为$i$的词,它本身有两个向量$\boldsymbol {v}_i$和$\boldsymbol{u}_i$进行表示,在计算的过程中,根据其所处的角色不同,选择不同的词向量。词典中所有词的这两种向量正是跳字模型所需要学习的参数。为了将模型参数植入损失函数,我们需要使用模型参数表达损失函数中的中心词生成背景词的概率。假设中心词的概率是相互独立的。给定中心词$w_c$在词典中的索引为$c$,背景词$w_o$在词典中的索引为$o$,损失函数中中心词生成背景词的概率可以使用softmax函数进行定义:

$$ P(w_o|w_c)=\frac{exp(\boldsymbol{u}_o^T\boldsymbol {v}_c)}{\sum_{i\in V}exp(\boldsymbol{u}_i^T\boldsymbol{v}_c)} $$

当序列长度$T$较大时,我们通常随机采样一个较小的子序列来计算损失函数并使用SGD优化该损失函数。通过求导,我们可以计算出上式生成概率的对数关于中心词向量$\boldsymbol {v}_c$的梯度为:

$$ \frac{\nabla logP(w_o\mid w_c)}{\nabla \boldsymbol{v}_c}=\boldsymbol{u}_o-\sum_{j\in V}\frac{exp(\boldsymbol{u}_j^T\boldsymbol{v}_c)}{\sum_{j\in v}exp(\boldsymbol{u}_i^T\boldsymbol{v}_c)}\boldsymbol{u}_j $$

而上式与下式等价:

$$ \frac{\nabla logP(w_o\mid w_c)}{\nabla \boldsymbol{v}_c}=\boldsymbol{u}_o-\sum_{j\in V}P(w_j|w_c)\boldsymbol {u}_j $$

通过上面计算得到梯度后,我们可以使用随机梯度下降来不断迭代模型参数$\boldsymbol {v}_c$。其它模型参数$\boldsymbol {u}_o$的迭代方式同理可得。最终,对于词典中任一索引为$i$的词,我们均得到该词作为中心词和背景词的两组词向量$\boldsymbol {v}_i$和$\boldsymbol {u}_i$

连续词袋模型

连续词袋模型与跳字模型类似。与跳字模型最大的不同是,连续词袋模型是用一个中心词在文本序列周围的词 来预测中心词。简单的说就是,跳字模型用中心词预测周围的词;连续词袋模型用周围的词预测中心词。例如,给定文本"the","man","hit","his","son",连续词袋模型所关心的是,邻近词"the","man","his","son"一起生成中心词"hit"的概率

连续词袋模型需要最大化由背景词生成任一中心词的概率:

$$ \prod_{t=1}^TP(w^{(t)}\mid w^{(t-m)},...,w^{(t-1)},w^{(t+1)},...,w^{(t+m)}) $$

上式得最大似然估计与最小化以下损失函数等价

$$ -\sum_{t=1}^TlogP(w^{(t)}\mid w^{(t-m)},...,w^{(t-1)},w^{(t+1)},...,w^{(t+m)}) $$

我们可以用$\boldsymbol{v}$和$\boldsymbol{u}$分别代表背景词和中心词的向量(注意符号和跳字模型不同)。给定中心词$w_c$在词典中的索引为$c$,背景词$w_{o_1},...,w_{o_{2m}}$在词典中的索引为$o_1,...,o_{2m}$,损失函数中的背景词生成中心词的概率可以使用softmax函数定义为

$$ P(w_c\mid w_{o_1},...,w_{o_{2m}})=\frac{exp[\boldsymbol{u}_c^T(\boldsymbol{v}_{o_1}+...+\boldsymbol{v}_{o_{2m}})/(2m)]}{\sum_{j\in V}exp[\boldsymbol{u}_j^T(\boldsymbol{v}_{o_1}+...+\boldsymbol{v}_{o_{2m}})/(2m)]} $$

同样,当序列长度$T$较大时,我们通常随机采样一个较小的子序列来计算损失函数,并使用随机梯度下降优化该损失函数,通过微分,我们可以计算出上式生成概率的对数关于任一背景词向量$\boldsymbol{v}_{o_i}(i=1,...,2m)$的梯度为:

$$ \frac{\nabla logP(w_c\mid w_{o_1},...,w_{o_{2m}})}{\nabla \boldsymbol{v}_{o_i}}=\frac{1}{2m}(\boldsymbol {u}_c-\sum_{j\in V}\frac{exp(\boldsymbol u_j^T\boldsymbol v_c)}{\sum_{i\in V}exp(\boldsymbol u_i^T\boldsymbol v_c)}\boldsymbol u_j) $$

而上式与下式等价:

$$ \frac{\nabla logP(w_c\mid w_{o_1},...,w_{o_{2m}})}{\nabla \boldsymbol{v}_{o_i}}=\frac{1}{2m}(\boldsymbol {u}_c-\sum_{j\in V}P(w_j\mid w_c)\boldsymbol u_j) $$

近似训练法

可以看到,无论是跳字模型还是连续词袋模型,每一步梯度计算的开销与词典$V$的大小呈正相关。显然,当词典较大时,这种训练方法的计算开销会很大。所以使用上述训练方法在实际中是由难度的。我们可以使用近似的方法来计算这些梯度,从而减小计算开销。常用的近似训练法包括负采样层序softmax

负采样

以跳字模型为例讨论负采样。词典$V$的大小之所以会在目标函数中出现,是因为中心词$w_c$生成背景词$w_o$的概率$P(w_o|w_c)$使用了softmax,而softmax考虑到了背景词可能是词典中任一词,并体现在了softmax的分母上

我们不妨换个角度,假设中心词$w_c$生成背景词$w_o$由以下两个互相独立的联合事件组成来近似

  1. 中心词$w_c$和背景词$w_o$同时出现在该训练数据窗口
  2. 中心词$w_c$和噪声词不同时出现在该训练数据窗口
    • 中心词$w_c$和第1个噪声词$w_1$不同时出现在训练数据窗口(噪声词$w_1$按噪声词分布$P(w)$随机生成)
    • ...
    • 中心词$w_c$和第$K$个噪声词$w_k$不同时出现在训练数据窗口(噪声词$w_K$按噪声词分布$P(w)$随机生成)

我们可以使用$\sigma(x)=\frac{1}{1+exp(-x)}$函数来表达中心词$w_c$和背景词$w_o$同时出现在训练数据窗口的概率:

$$ P(D=1\mid w_o,w_c)=\sigma(\boldsymbol{u}_o^T,\boldsymbol{v}_c) $$

那么,中心词$w_c$生成背景词$w_o$的对数概率可以近似为

$$ logP(w_o\mid w_c)=log[P(D=1\mid w_o,w_c)\prod_{k=1,w_k\sim P(w)}^KP(D=0\mid w_k,w_c)] $$

假设噪声词$w_k$在词典中的索引为$i_k$,上式可改写为

$$ logP(w_o\mid w_c)=log\frac{1}{1+exp(-\boldsymbol u_o^T\boldsymbol{v}_c)}+\sum_{k=1,w_k\sim P(w)}^Klog[1-\frac{1}{1+exp(-\boldsymbol u_{i_k}^T\boldsymbol{v}_c)}] $$

因此,有关中心词$w_c$生成背景词$w_o$的损失函数是

$$ -logP(w_o\mid w_c)=-log\frac{1}{1+exp(-\boldsymbol u_o^T\boldsymbol{v}_c)}-\sum_{k=1,w_k\sim P(w)}^Klog\frac{1}{1+exp(\boldsymbol u_{i_k}^T\boldsymbol{v}_c)} $$

现在,训练中每一步的梯度计算开销不再与词典大小相关,而与$K$线性相关。当$K$取较小的常数时,负采样的每一步梯度计算开销也较小

同理,也可以对连续词袋模型进行负采样。有关背景词$w^{(t-m)},...,w^{(t-1)},w^{(t+1)},...,w^{(t+m)}$

生成中心词$w_c$的损失函数

$$ -logP(w^{(t)}\mid w^{(t-m)},...,w^{(t-1)},w^{(t+1)},...,w^{(t+m)}) $$

在负采样中可以近似为

$$ -log\frac{1}{1+exp[-\boldsymbol{u}_c^T(\boldsymbol{v}_{o_1}+...+\boldsymbol{v}_{o_{2m}})/(2m)]}-\sum_{k=1,w_k\sim P(w)}^Klog\frac{1}{1+exp[\boldsymbol{u}_{i_k}^T(\boldsymbol{v}_{o_1}+...+\boldsymbol{v}_{o_{2m}})/(2m)]} $$

层序softmax

层序softmax利用了二叉树。树的每个叶子节点代表着词典$V$中的每个词。每个词$w_i$对应的词向量为$\boldsymbol{v}_i$。我们以下图为例,来描述层序softmax的工作机制

设$L(w)$为从二叉树根节点到代表词$w$的叶子节点的路径上的节点数,并设$n(w,i)$为该路径上第$i$个节点,该节点的向量为$\boldsymbol{u}_{n(w,j)}$。以上图为例,$L(w_3)=4$。那么,跳字模型和连续词袋模型所需要计算的任意词$w_i$生成词$w$的概率为:

$$ P(w\mid w_i)=\prod_{j=1}^{L(w)-1}\sigma([n(w,j+1)=left\_child(n(w,j))]·\boldsymbol{u}_{n(w,j)}^T\boldsymbol{v}_i) $$

其中,如果$x$为真,$[x]=1$;反之$[x]=-1$

由于$\sigma(x)+\sigma(-x)=1$,$w_i$生成词典中任何词的概率之和为1:

$$ \sum_{w=1}^VP(w\mid w_i)=1 $$

上面公式可能比较抽象,下面举个具体的例子,计算$w_i$生成$w_3$的概率,由于在二叉树中由根到$w_3$的路径需要向左、向右、再向左地遍历,所以得到

$$ P(w_3\mid w_i)=\sigma(\boldsymbol{u}_{n(w_3,1)}^T\boldsymbol{v}_i)·\sigma(-\boldsymbol{u}_{n(w_3,2)}^T\boldsymbol{v}_i)·\sigma(\boldsymbol{u}_{n(w_3,3)}^T\boldsymbol{v}_i) $$

由此,我们就可以使用随机梯度下降在跳字模型和连续词袋模型中不断迭代计算词典中所有词向量$\boldsymbol{v}$和非叶子节点的向量$\boldsymbol{u}$。每次迭代的计算开销由$O(|V|)$降为二叉树的高度$O(log|V|)$

最后一个问题,层序softmax的二叉树是如何建立的?

这里的二叉树Huffman树,权重是语料库中word出现的频率

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【图文并茂】通过实例理解word2vec之Skip-gram
word2vec主要实现方法是Skip-gram和CBOW,CBOW的目标是根据上下文来预测当前词的概率,且上下文所有的词对当前词出现概率的影响的权重是一样的,因此叫做continuous bag-of-words模型。如在袋子中取词,去取出数量足够的词就可以了,与取出词的先后顺序无关。Skip-gram刚好相反,其是根据当前词来预测上下文概率的。在实际应用中算法并无高下之分,主要根据呈现的效果来进行算法选择。这里介绍Skip-gram,并通过例子来理解Skip-gram是如何实现预测上下文,并如何训练得到词向量。
zenRRan
2020/02/27
3.4K2
【图文并茂】通过实例理解word2vec之Skip-gram
词嵌入
自然语言是一套用来表达含义的复杂系统,词是表义的基本单元。而我们要考虑是如何构造词向量来表示词。把词映射为实数域向量的技术称为词嵌入。
hotarugali
2022/03/13
1.5K0
词嵌入
Glove和fastText
本文介绍两种更新一点的词向量,它们分别是2014年由Stanford团队发表的Glove和2017年由Facebook团队发表的fastText
mathor
2020/04/10
5410
NLP之——Word2Vec详解
2013年,Google开源了一款用于词向量计算的工具——word2vec,引起了工业界和学术界的关注。首先,word2vec可以在百万数量级的词典和上亿的数据集上进行高效地训练;其次,该工具得到的训练结果——词向量(word embedding),可以很好地度量词与词之间的相似性。随着深度学习(Deep Learning)在自然语言处理中应用的普及,很多人误以为word2vec是一种深度学习算法。其实word2vec算法的背后是一个浅层神经网络。另外需要强调的一点是,word2vec是一个计算word vector的开源工具。当我们在说word2vec算法或模型的时候,其实指的是其背后用于计算word vector的CBoW模型和Skip-gram模型。很多人以为word2vec指的是一个算法或模型,这也是一种谬误。接下来,本文将从统计语言模型出发,尽可能详细地介绍word2vec工具背后的算法模型的来龙去脉。
10JQKA
2018/07/25
1.2K0
NLP之——Word2Vec详解
词向量技术 | 从word2vec到ELMo
"词和句子的嵌入已成为所有基于深度学习的自然语言处理(NLP)系统的重要组成部分,它们在固定长度的稠密向量中编码单词和句子,以大幅度提高神经网络处理文本数据的能力。"
用户1332428
2018/08/17
2.5K0
词向量技术 | 从word2vec到ELMo
词向量的维度大概多少才够?
更简约的话可以直接记n > 8\log NN是词表的大小,n是词向量的维度。当n超过这个阈值时,就说明模型有足够的容量容纳这N个词(当然n越大过拟合风险也越大)。这样一来,当N=100000时,得到的n大约是96,所以对于10万个词的词向量模型来说,维度选择96就足够了;如果要容纳500万个词,那么n大概就是128
mathor
2021/07/07
2.6K0
词向量(1)--从Word2Vec到ELMo
若你是做NLP的,一定对词向量很亲切,若你是做推荐的,对词向量也一定不会陌生,以词向量为代表的序列向量化方法已经成为机器学习中必不可少的实战利器。
流川枫
2020/04/24
9120
word2vec原理与Gensim使用[通俗易懂]
与NNLM相比,word2vec的主要目的是生成词向量而不是语言模型,在CBOW中,投射层将词向量直接相加而不是拼接起来,并舍弃了隐层,这些牺牲都是为了减少计算量。不经过优化的CBOW和Skip-gram中 ,在每个样本中每个词的训练过程都要遍历整个词汇表,也就是都需要经过softmax归一化,计算误差向量和梯度以更新两个词向量矩阵(这两个词向量矩阵实际上就是最终的词向量,可认为初始化不一样),当语料库规模变大、词汇表增长时,训练变得不切实际。为了解决这个问题,word2vec支持两种优化方法:hierarchical softmax 和negative sampling。
全栈程序员站长
2022/08/29
1.6K0
word2vec原理与Gensim使用[通俗易懂]
无所不能的Embedding 1 - Word2vec模型详解&代码实现
word2vec是google 2013年提出的,从大规模语料中训练词向量的模型,在许多场景中都有应用,信息提取相似度计算等等。也是从word2vec开始,embedding在各个领域的应用开始流行,所以拿word2vec来作为开篇再合适不过了。本文希望可以较全面的给出Word2vec从模型结构概述,推导,训练,和基于tf.estimator实现的具体细节。完整代码戳这里 https://github.com/DSXiangLi/Embedding
风雨中的小七
2020/08/11
1.8K0
无所不能的Embedding 1 - Word2vec模型详解&代码实现
重磅!!|“NLP系列教程04”之word2vec 02
本次文章主要介绍Word2vec的跳字模型(Skip-Gram)的训练、连续词袋模型(CWOB)及其优化、近似训练优化(负采样)。
ShuYini
2019/08/08
5710
重磅!!|“NLP系列教程04”之word2vec 02
中文NER的那些事儿1. Bert-Bilstm-CRF基线模型详解&代码实现
这个系列我们来聊聊序列标注中的中文实体识别问题,第一章让我们从当前比较通用的基准模型Bert+Bilstm+CRF说起,看看这个模型已经解决了哪些问题还有哪些问题待解决。以下模型实现和评估脚本,详见 Github-DSXiangLi/ChineseNER
风雨中的小七
2021/04/30
9.2K3
中文NER的那些事儿1. Bert-Bilstm-CRF基线模型详解&代码实现
【NLP CS224N笔记】Lecture 2 - Word Vector Representations: word2vec
那么在计算机中是如何获取一个word的meaning的呢?常见的解决办法是使用像WordNet之类的数据集,它包含了同义词(synonym)组和上位词(hypernyms)组。这种表示方法属于Discrete representation
marsggbo
2019/01/02
5630
WSDM'22 | 利用反事实框架预测用户流失
本文针对用户流失预测提出结合因果推断的方法CFChurn。结合反事实推理,捕获社会影响的信息从而对流失进行预测。
秋枫学习笔记
2022/09/19
6400
word2vec
版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/u012436149/article/details/53214016
ke1th
2019/05/28
7731
斯坦福NLP课程 | 第1讲 - NLP介绍与词向量初步
教程地址:http://www.showmeai.tech/tutorials/36
ShowMeAI
2022/04/29
1.2K0
斯坦福NLP课程 | 第1讲 - NLP介绍与词向量初步
NLP教程(1)-词向量、SVD分解与Word2Vec
教程地址:http://www.showmeai.tech/tutorials/36
ShowMeAI
2022/04/29
1.1K0
NLP教程(1)-词向量、SVD分解与Word2Vec
Word2vec理论基础——词向量
我们希望原始文本信息能够得到保留,例如国王和女王之间的关系和男人与女人之间的关系应是特别接近的,法国和巴黎之间关系与德国和巴黎的关系也是接近的。
Hsinyan
2022/06/19
5230
Word2vec理论基础——词向量
Word2vec 源码详解
已经看了很久的word2vec,但是发现了很多不同版本的解释,再加上原始论文没有提到太多的细节,所以打算直接看一遍源码,一方面可以加深自己理解;另一方面,以后也可以做适当的改进!
阿泽 Crz
2021/01/11
1.7K0
Word2vec 源码详解
什么特征进行交互才是有效的?
本文主要针对推荐系统中的特征交互而提出的相关方法,如果将所有可能的特征都进行交互,那消耗是很大的,本文提出HIRS用于直接生成有益特征交互。生成的特征交互的数量可以指定为远小于所有可能的交互的数量,因此模型运行时间更短。
秋枫学习笔记
2022/09/19
8720
Skip-gram模型(2)
假如用余弦相似度来计算两个词的one-hot编码得到0,即不能编码词之间的相似性,所以有了word2vec的方法,包括skip-gram和CBOW。
何武凡
2023/10/18
3250
相关推荐
【图文并茂】通过实例理解word2vec之Skip-gram
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档