Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【NLP】Word2Vec详解(含数学推导)

【NLP】Word2Vec详解(含数学推导)

作者头像
黄博的机器学习圈子
发布于 2020-09-04 06:45:08
发布于 2020-09-04 06:45:08
2.6K0
举报

word2vec可以在百万数量级的词典和上亿的数据集上进行高效地训练;并且,该工具得到的训练结果——词向量(word embedding),可以很好地度量词与词之间的相似性。随着深度学习(Deep Learning)在自然语言处理中应用的普及,很多人误以为word2vec是一种深度学习算法。其实word2vec算法的背后是一个浅层神经网络。

另外需要强调的一点是,word2vec是一个计算word vector的开源工具。当我们在说word2vec算法或模型的时候,其实指的是其背后用于计算word vector的CBoW模型和Skip-gram模型。很多人以为word2vec指的是一个算法或模型,这也是一种谬误。接下来,本文将从统计语言模型出发,尽可能详细地介绍word2vec工具背后的算法模型的来龙去脉。

Statistical Language Model

在深入word2vec算法的细节之前,我们首先回顾一下自然语言处理中的一个基本问题:如何计算一段文本序列在某种语言下出现的概率?之所为称其为一个基本问题,是因为它在很多NLP任务中都扮演着重要的角色。例如,在机器翻译的问题中,如果我们知道了目标语言中每句话的概率,就可以从候选集合中挑选出最合理的句子做为翻译结果返回。

统计语言模型给出了这一类问题的一个基本解决框架。对于一段文本序列

S=w_{1}, w_{2}, \ldots, w_{T}

它的概率可以表示为:

P(S)=P\left(w_{1}, w_{2}, \ldots, w_{T}\right)=\prod_{t=1}^{T} p\left(w_{t} | w_{1}, w_{2}, \ldots, w_{t-1}\right)

即将序列的联合概率转化为一系列条件概率的乘积。问题变成了如何去预测这些给定previous words下的条件概率:

p\left(w_{t} | w_{1}, w_{2}, \dots, w_{t-1}\right)

由于其巨大的参数空间,这样一个原始的模型在实际中并没有什么用。我们更多的是采用其简化版本一一Ngram模型:

p\left(w_{t} | w_{1}, w_{2}, \dots, w_{t-1}\right) \approx p\left(w_{t} | w_{t-n+1}, \dots, w_{t-1}\right)

常见的如bigram模型 (N=2) 和trigram模型 (N=3) 。事实上,由于模型复杂度和预测精度的限制,我们很少会考虑N>3的模型。我们可以用最大似然法去求解Ngram模型的参数一一等价于去统计每个Ngram的条件词频。型进一步发展出了back-off trigram模型 (用低阶的bigram和unigram代替零概率的trigram) 和interpolated trigram模型(将条件 概率表示为unigram、bigram、trigram三者的线性函数)。

Distributed Representation

不过,Ngram模型仍有其局限性。首先,由于参数空间的爆炸式增长,它无法处理更长程的context(N>3)。其次,它没有考虑词与词之间内在的联系性。例如,考虑"the cat is walking in the bedroom"这句话。如果我们在训练语料中看到了很多类似“the dog is walking in the bedroom”或是“the cat is running in the bedroom”这样的句子,那么,即使我们没有见过这句话,也可以从“cat”和“dog”(“walking”和“running”)之间的相似性,推测出这句话的概率。然而, Ngram模型做不到。

这是因为,Ngram本质上是将词当做一个个孤立的原子单元(atomic unit)去处理的。这种处理方式对应到数学上的形式是一个个离散的one-hot向量(除了一个词典索引的下标对应的方向上是1 ,其余方向上都是0)。例如,对于一个大小为5的词典:{"I", "love", "nature", "luaguage", "processing"},“nature”对应的one-hot向量为:[0,0,1,0,0] 。显然,one-hot向量的维度等于词典的大小。这在动辄上万甚至百万词典的实际应用中,面临着巨大的维度灾难问题(The Curse of Dimensionality)

于是,人们就自然而然地想到,能否用一个连续的稠密向量去刻画一个word的特征呢?这样,我们不仅可以直接刻画词与词之间的相似度,还可以建立一个从向量到概率的平滑函数模型,使得相似的词向量可以映射到相近的概率空间上。这个稠密连续向量也被称为word的distributed representation。

事实上,这个概念在信息检索(Information Retrieval)领域早就已经被广泛地使用了。只不过,在IR领域里,这个概念被称为向量空间模型(Vector Space Model,以下简称VSM)。

VSM是基于一种Statistical Semantics Hypothesis[4]:语言的统计特征隐藏着语义的信息(Statistical pattern of human word usage can be used to figure out what people mean)。例如,两篇具有相似词分布的文档可以被认为是有着相近的主题。这个Hypothesis有很多衍生版本。其中,比较广为人知的两个版本是Bag of Words Hypothesis和Distributional Hypothesis。前者是说,一篇文档的词频(而不是词序)代表了文档的主题;后者是说,上下文环境相似的两个词有着相近的语义。后面我们会看到,word2vec算法也是基于Distributional的假设。

那么,VSM是如何将稀疏离散的one-hot词向量映射为稠密连续的Distributional Representation的呢?

简单来说,基于Bag of Words Hypothesis,我们可以构造一个term-document矩阵A:矩阵的行Ai,:: 对应着词典里的一个word;矩阵的列A:,j对应着训练语料里的一篇文档;矩阵里的元素Ai,j代表着wordwi在文档Dj中出现的次数(或频率)。那么,我们就可以提取行向量做为word的语义向量(不过,在实际应用中,我们更多的是用列向量做为文档的主题向量)。

类似地,我们可以基于Distributional Hypothesis构造一个word-context的矩阵。此时,矩阵的列变成了context里的word,矩阵的元素也变成了一个context窗口里word的共现次数。

注意,这两类矩阵的行向量所计算的相似度有着细微的差异:term-document矩阵会给经常出现在同一篇document里的两个word赋予更高的相似度;而word-context矩阵会给那些有着相同context的两个word赋予更高的相似度。后者相对于前者是一种更高阶的相似度,因此在传统的信息检索领域中得到了更加广泛的应用。

不过,这种co-occurrence矩阵仍然存在着数据稀疏性和维度灾难的问题。为此,人们提出了一系列对矩阵进行降维的方法(如LSI/LSA等)。这些方法大都是基于SVD的思想,将原始的稀疏矩阵分解为两个低秩矩阵乘积的形式。

Neural Network Language Model

接下来,让我们回到对统计语言模型的讨论。鉴于Ngram等模型的不足,2003年,Bengio等人发表了一篇开创性的文章:A neural probabilistic language model。在这篇文章里,他们总结出了一套用神经网络建立统计语言模型的框架(Neural Network Language Model,以下简称NNLM),并首次提出了word embedding的概念(虽然没有叫这个名字),从而奠定了包括word2vec在内后续研究word representation learning的基础。

NNLM模型的基本思想可以概括如下:

  • 假定词表中的每一个word都对应着一个连续的特征向量;
  • 假定一个连续平滑的概率模型,输入一段词向量的序列,可以输出这段序列的联合概率;
  • 同时学习词向量的权重和概率模型里的参数。

值得注意的一点是,这里的词向量也是要学习的参数。

在03年的论文里,Bengio等人采用了一个简单的前向反贵神经网络

f\left(w_{t-n+1}, \ldots, w_{t}\right)

来拟合一个词序列的条件概率

p\left(w_{t} | w_{1}, w_{2}, \dots, w_{t-1}\right)

。整个模型的网络结构见下图:

我们可以将整个模型拆分成两部分加以理解:

  • 首先是一个线性的Embedding层。它将输入的N−1个one-hot词向量,通过一个共享的D×V的矩阵C,映射为N−1个分布式的词向量(distributed vector)。其中,V是词典的大小,D是Embedding向量的维度(一个先验参数)。C矩阵里存储了要学习的word vector。
  • 其次是一个简单的前向反馈神经网络g。它由一个tanh隐层和一个softmax输出层组成。通过将Embedding层输出的N−1个词向量映射为一个长度为V的概率分布向量,从而对词典中的word在输入context下的条件概率做出预估:
p\left(w_{i} | w_{1}, w_{2}, \dots, w_{t-1}\right) \approx f\left(w_{i}, w_{t-1}, \dots, w_{t-n+1}\right)=g\left(w_{i}, C\left(w_{t-n+1}\right), \dots, C\left(w_{t-1}\right)\right)

我们可以通过最小化一个cross-entropy的正则化损失函数来调整模型的参数\theta:

L(\theta)=\frac{1}{T} \sum_{t} \log f\left(w_{t}, w_{t-1}, \dots, w_{t-n+1}\right)+R(\theta)

其中,模型的参数θ包括了Embedding层矩阵C的元素,和前向反馈神经网络模型g里的权重。这是一个巨大的参数空间。不过,在用SGD学习更新模型的参数时,并不是所有的参数都需要调整(例如未在输入的context中出现的词对应的词向量)。计算的瓶颈主要是在softmax层的归一化函数上(需要对词典中所有的word计算一遍条件概率)。

然而,抛却复杂的参数空间,我们不禁要问,为什么这样一个简单的模型会取得巨大的成功呢?

仔细观察这个模型就会发现,它其实在同时解决两个问题:一个是统计语言模型里关注的条件概率

p\left(w_{t} | \text {context}\right)

的计算; 一个是向量空间模型里关注的词向量的表达。而这两个问题本质上并不独立。通过引入连续的词向量和平滑的概率模型,我们就可以在一个连续空间里对序列概率进行建模,从而从根本上缓解数据稀政性和维度灾难的问题。另一方面,以条件概率

p\left(w_{t} | \text {context}\right)

为学习目标去更新 词向量的权重, 具有更强的导向性, 同时也与VSM里的Distributional Hypothesis不谋而合。

在主角正式登场前,我们先看一下NNLM存在的几个问题。

一个问题是,同Ngram模型一样,NNLM模型只能处理定长的序列。在03年的论文里,Bengio等人将模型能够一次处理的序列长度N提高到了5,虽然相比bigram和trigram已经是很大的提升,但依然缺少灵活性。

因此,Mikolov等人在2010年提出了一种RNNLM模型[7],用递归神经网络代替原始模型里的前向反馈神经网络,并将Embedding层与RNN里的隐藏层合并,从而解决了变长序列的问题。

另一个问题就比较严重了。NNLM的训练太慢了。即便是在百万量级的数据集上,即便是借助了40个CPU进行训练,NNLM也需要耗时数周才能给出一个稍微靠谱的解来。显然,对于现在动辄上千万甚至上亿的真实语料库,训练一个NNLM模型几乎是一个impossible mission。

这时候,还是那个Mikolov站了出来。他注意到,原始的NNLM模型的训练其实可以拆分成两个步骤:

  • 用一个简单模型训练出连续的词向量
  • 基于词向量的表达,训练一个连续的Ngram神经网络模型。
  • 而NNLM模型的计算瓶颈主要是在第二步。

如果我们只是想得到word的连续特征向量,是不是可以对第二步里的神经网络模型进行简化呢?

Mikolov是这么想的,也是这么做的。他在2013年一口气推出了两篇paper,并开源了一款计算词向量的工具——至此,word2vec横空出世,主角闪亮登场。

1 Word2Vec模型总述

Word2Vec 简单讲其实就是通过学习文本然后用词向量的方式表征词的语义信息,即通过 Embedding 把原先词所在空间映射到一个新的空间中去, 使得语义上相似的单词在该空间内 距离相近。以传统神经网络为基础的神经概率语言模型,缺点主要是计算量太大,集中体现在:隐 层和输出层之间的矩阵运算和输出层上的 Softmax 归一化运算上。因此 Word2Vec 就 是针对这两点来优化神经概率语言模型的。Word2Vec 中两个重要的模型是:CBOW 模 型和 Skip-gram 模型。对于这两个模型, Word2Vec 给出了两套框架,分别是基于 Hierarchical Softmax 和 Negative Sampling 来设计的,本文硫理的是第一种类型。

2 CBOW模型

2.1 基于

Hierarchical Softmax

模型的网络结构CBOW 模型的全称是 Continous bag-of-words,它包括三层结构分别是:输入层。投影层和输出层。

  1. 输入层:包含 Context
(w)

2 c

个词的词向量

v\left(\text {Context}(w)_{1}\right), v\left(\text {Context}(w)_{2}\right), \cdots, v\left(\text {Context}(w)_{2 c}\right) \text { 其中 } \forall v \in \mathbb{R}^{n}, \quad n

表示词向量的长度。

  1. 投影层:将输入层的
2c

个向量做求和累加处理,即

X_{w}=\sum_{i=1}^{2 c} v\left(\text {Context}(w)_{i}\right)

Sample:

(\text {Context}(w), w)
  1. 输出层:输出层对应一颗 Huffman 树,它是以语料中出现过的词当叶子节点,以各词 在 语料库中出现的次数当权值构造而成。在这颗 Huffman 树中,叶子结点共
N(=|\mathcal{D}|)

个 分别对应词典 \mathcal 中的词,非叶结点

N-1

个 (上图中黄色的结点) 。

2.2 梯度的计算为了后续方便描述问题,首先对

CBOW

模型中用到的符号做一个统一的说明:

\boldsymbol{p}^{w}:

从根节点到出发到达

\boldsymbol{w}

对应叶子结点的路径;

\begin{array}{ll}\cdot l^{w}: \text { 路径 } p^{w} & \text { 中包含节点的个数 }\end{array}
\cdot\left\{p_{1}^{w}, p_{2}^{w}, \cdots, p_{l^{w}}^{w}\right\}:

路径

p^{w}

中的

l^{w}

个结点, 其中

p_{1}^{w}

表示根结点,

p_{l^{w}}^{w}

表示词

w

对应的结点;

\cdot\left\{d_{2}^{w}, d_{3}^{w}, \cdots, d_{l^{w}}^{w}\right\},

其中

d_{j}^{w} \in\{0,1\}:

w

对应的 Huffman 编码, 它由

\left.l^{w}-1 \text { 位编码构成, } \quad d_{j}^{w} \text { 表示路径 } p^{w} \text { 中第 } j \text { 个结点对应的编码(根结点不对应编码 }\right)
\cdot\left\{\theta_{1}^{w}, \theta_{2}^{w}, \cdots, \theta_{l^{w}-1}^{w}\right\},

其中

\theta_{j}^{w} \in \mathbb{R}^{n}:

路径

p^{w}

中非叶子结点对应的向量,

\theta_{j}^{w}

表示 路径

p^{w}

中第

j

个非叶子结点对应的向量。

所以 Hierarchical Softmax 的思想,即对于词典 D 中的任意词

w, H u f f m a n

树中必然存在唯一一条从根结点到词

w

对应叶子结点的路径

p^{w}

。路径

p^{w}

上存在

l^{w}-1

个分支, 将每个分支看作一次二分类,那么每一次分类就对应一个概率,最后将这些概率连乘得到

p(w | \text { Context }(w))
\begin{aligned} p(w | \operatorname{Context}(w)) &=\prod_{j=2}^{l^{w}} p\left(d_{j}^{w} | X_{w} ; \theta_{j-1}^{w}\right) \\ p\left(d_{j}^{w} | X_{w} ; \theta_{j-1}^{w}\right) &=\left\{\begin{array}{ll}\sigma\left(X_{w}^{T} \theta_{j-1}^{w}\right), & \text { if } d_{j}^{w}=0 \\ 1-\sigma\left(X_{w}^{T} \theta_{j-1}^{w}\right), & \text { otherwise }\end{array}\right.\\ &=\left[\sigma\left(X_{w}^{T} \theta_{j-1}^{w}\right)\right]^{1-d_{j}^{w}} \cdot\left[1-\sigma\left(X_{w}^{T} \theta_{j-1}^{w}\right)\right]^{d_{j}^{w}} \end{aligned}

其中

\sigma(x)=\frac{1}{1+e^{-x}}

。通过对数极大似然化处理可得

\boldsymbol{C B O W}

模型的目标函数为:

\mathcal{L}=\sum_{w \in \mathcal{D}} \log \prod_{j=2}^{l^{w}}\left(\left[\sigma\left(X_{w}^{T} \theta_{j-1}^{w}\right)\right]^{1-d_{j}^{v}} \cdot\left[1-\sigma\left(X_{w}^{T} \theta_{j-1}^{w}\right)\right]^{d_{j}^{w}}\right)
=\sum_{w \in \mathcal{D}} \sum_{j=2}^{l^{w}}\left(\left(1-d_{j}^{w}\right) \cdot \log \left[\sigma\left(X_{w}^{T} \theta_{j-1}^{w}\right)\right]+d_{j}^{w} \cdot \log \left[1-\sigma\left(X_{w}^{T} \theta_{j-1}^{w}\right)\right]\right)
=\sum_{w \in \mathcal{D}} \sum_{j=2}^{l^{w}} \Phi\left(\theta_{j-1}^{w}, X_{w}\right)

Word

2 \mathrm{Vec}

极大化化目标函数使用的算法是是随机梯度上升法, 首先考虑

\Phi\left(\theta_{j-1}^{w}, X_{w}\right)

关 于

\theta_{j-1}^{w}

的梯度计算:

\begin{aligned} \frac{\partial \Phi\left(\theta_{j-1}^{w}, X_{w}\right)}{\partial \theta_{j-1}^{w}} &=\frac{\partial}{\theta_{j-1}^{w}}\left(\left(1-d_{j}^{w}\right) \cdot \log \left[\sigma\left(X_{w}^{T} \theta_{j-1}^{w}\right)\right]+d_{j}^{w} \cdot \log \left[1-\sigma\left(X_{w}^{T} \theta_{j-1}^{w}\right)\right]\right) \\ &=\left(1-d_{j}^{w}\right)\left[1-\sigma\left(X_{w}^{T} \theta_{j-1}^{w}\right)\right] X_{w}-d_{j}^{w} \sigma\left(X_{w}^{T} \theta_{j-1}^{w}\right) X_{w} \\ &=\left(\left(1-d_{j}^{w}\right)\left[1-\sigma\left(X_{w}^{T} \theta_{j-1}^{w}\right)\right]-d_{j}^{w} \sigma\left(X_{w}^{T} \theta_{j-1}^{w}\right)\right) X_{w} \\ &=\left(1-d_{j}^{w}-\sigma\left(X_{w}^{T} \theta_{j-1}^{w}\right)\right) X_{w} \end{aligned}

于是,

\quad \theta_{j-1}^{w}

的更新公式为:

\theta_{j-1}^{w}:=\theta_{j-1}^{w}+\eta\left(1-d_{j}^{w}-\sigma\left(X_{w}^{T} \theta_{j-1}^{w}\right)\right) X_{w}

然后再考虑

\Phi\left(\theta_{j-1}^{w}, X_{w}\right)

关于

X_{w}

的梯度计算:

\begin{aligned} \frac{\partial \Phi\left(\theta_{j-1}^{w}, X_{w}\right)}{\partial X_{w}} &=\frac{\partial}{X_{w}}\left(\left(1-d_{j}^{w}\right) \cdot \log \left[\sigma\left(X_{w}^{T} \theta_{j-1}^{w}\right)\right]+d_{j}^{w} \cdot \log \left[1-\sigma\left(X_{w}^{T} \theta_{j-1}^{w}\right)\right]\right) \\ &=\left(1-d_{j}^{w}\right)\left[1-\sigma\left(X_{w}^{T} \theta_{j-1}^{w}\right)\right] \theta_{j-1}^{w}-d_{j}^{w} \sigma\left(X_{w}^{T} \theta_{j-1}^{w}\right) \theta_{j-1}^{w} \\ &=\left(\left(1-d_{j}^{w}\right)\left[1-\sigma\left(X_{w}^{T} \theta_{j-1}^{w}\right)\right]-d_{j}^{w} \sigma\left(X_{w}^{T} \theta_{j-1}^{w}\right)\right) \theta_{j-1}^{w} \\ &=\left(1-d_{j}^{w}-\sigma\left(X_{w}^{T} \theta_{j-1}^{w}\right)\right) \theta_{j-1}^{w} \end{aligned}

如果观察到

\Phi\left(\theta_{j-1}^{w}, X_{w}\right)

\theta_{j-1}^{w}

X_{w}

具有对称性, 那么计算相应梯度会更方便。由于

X_{w}

表示的是 Context

(w)

中所有词向量的蛋加, 那么如何根据

\nabla_{X_{w}} \Phi\left(\theta_{j-1}^{w}, X_{w}\right)

来更 新每一个分量

v(\widetilde{w})

呢?

\quad W o r d 2 V e c

中的做法非常的朴素,

,

直接取

v(\widetilde{w}):=v(\widetilde{w})+\eta \sum_{j=2}^{l^{w}} \frac{\partial \Phi\left(\theta_{j-1}^{w}, X_{w}\right)}{\partial X_{w}}, \widetilde{w} \in \text { Context }(w)

2.3 CBOW模型更新相关参数伪代码

e=0, X_{w}=\sum_{u \in \text {Context}(w)} v(u)
  1. FOR
j=2: l^{w} D O
q=\sigma\left(X_{w}^{T} \theta_{j-1}^{w}\right)
g=\eta\left(1-d_{j}^{w}-q\right)
e:=e+g \theta_{j-1}^{w}
\circ \theta_{j-1}^{w}:=\theta_{j-1}^{w}+g X_{w}
  1. FOR
u \in

Context

(w)

DO

\circ v(u):=v(u)+e

3 Skip-gram模型

\boldsymbol{C B O W}

模型一样, Skip-gram 模型的网络结构也包括三层结构分别是输入层、投影 层和输出层:

  1. 输入层:只含有当前样本的中心词
w

的词向量

v(w) \in \mathbb{R}
  1. 投影层:该层为恒等投影,其实这层可有可无,在这里只是为了方便和 CBOW 模型的网络 结构做对比。

Sample:

(\text {Context}(w), w)
  1. 输出层:和 CBOW 模型一样,输出层也是一颗 Huffman 树。

3.2 梯度的计算

对于 Skip-gram 模型已知的是当前词

w,

需要对其上下文 Context

(w)

中的词进行预 测,所以关键是条件概率函数

p(\text {Context}(w) | w)

的构造,

\quad

Skip-gram 模型中将其定义 为:

p(\text { Context }(w) | w)=\prod_{u \in \text {Context}(w)} p(u | w)

上式中的

p(u | w)

可以类比上节介绍的 Hierarchical Softmax 的思想, 因此可得:

\begin{aligned} p(u | w) &=\prod_{j=2}^{l^{w}} p\left(d_{j}^{u} | v(w) ; \theta_{j-1}^{u}\right) \\ &=\prod_{j=2}^{l^{u}}\left[\sigma\left(v(w)^{T} \theta_{j-1}^{u}\right)\right]^{1-d_{j}^{u}} \cdot\left[1-\sigma\left(v(w)^{T} \theta_{j-1}^{u}\right]^{d_{j}^{u}}\right. \end{aligned}

通过对数极大似然化处理可得 Skip-gram 模型的目标函数为:

\begin{aligned} \mathcal{L} &=\sum_{w \in \mathcal{D}} \log \prod_{u \in \operatorname{Contert}(w)} \prod_{j=2}^{t^{u}}\left(\left[\sigma\left(v(w)^{T} \theta_{j-1}^{u}\right)\right]^{1-d_{j}^{u}} \cdot\left[1-\sigma\left(v(w)^{T} \theta_{j-1}^{u}\right]^{d_{j}^{u}}\right)\right.\\ &=\sum_{w \in \mathcal{D}} \sum_{u \in \operatorname{Context}(w)} \sum_{j=2}^{l^{u}}\left(\left(1-d_{j}^{u}\right) \cdot \log \left[\sigma\left(v(w)^{T} \theta_{j-1}^{u}\right)\right]+d_{j}^{u} \cdot \log \left[1-\sigma\left(v(w)^{T} \theta_{j-1}^{u}\right)\right]\right) \\ &=\sum_{w \in \mathcal{D}} \sum_{u \in \text {Context}(w)} \sum_{j=2}^{l^{u}} \mathcal{O}\left(\theta_{j-1}^{u}, v(w)\right) \end{aligned}

首先考虑

\mathcal{O}\left(\theta_{j-1}^{u}, v(w)\right)

关于

\theta_{j-1}^{u}

的梯度计算:

\begin{aligned} \frac{\partial \mathcal{O}\left(\theta_{j-1}^{u}, v(w)\right)}{\partial \theta_{j-1}^{u}} &=\frac{\partial}{\partial \theta_{j-1}^{u}}\left(\left(1-d_{j}^{u}\right) \cdot \log \left[\sigma\left(v(w)^{T} \theta_{j-1}^{u}\right)\right]+d_{j}^{u} \cdot \log \left[1-\sigma\left(v(w)^{T} \theta_{j-1}^{u}\right)\right]\right) \\ &=\left(1-d_{j}^{u}\right)\left[1-\sigma\left(v(w)^{T} \theta_{j-1}^{u}\right)\right] v(w)-d_{j}^{u} \sigma\left(v(w)^{T} \theta_{j-1}^{u}\right) v(w) \\ &=\left(\left(1-d_{j}^{u}\right)\left[1-\sigma\left(v(w)^{T} \theta_{j-1}^{u}\right)\right]-d_{j}^{u} \sigma\left(v(w)^{T} \theta_{j-1}^{u}\right)\right) v(w) \\ &=\left(1-d_{j}^{u}-\sigma\left(v(w)^{T} \theta_{j-1}^{u}\right)\right) v(w) \end{aligned}

于是,

\quad \theta_{j-1}^{v}

的更新公式为:

\theta_{j-1}^{u}:=\theta_{j-1}^{u}+\eta\left(1-d_{j}^{u}-\sigma\left(v(w)^{T} \theta_{j-1}^{u}\right)\right) v(w)

然咸再考虑

\mathcal{O}\left(\theta_{j-1}^{u}, v(w)\right)

对关于

v(w)

的梯度计算

(\text { 亦可根据对称性直接得出 })
\begin{aligned} \frac{\partial \mathcal{O}\left(\theta_{j-1}^{u}, v(w)\right)}{\partial v(w)} &=\frac{\partial}{\partial v(w)}\left(\left(1-d_{j}^{u}\right) \cdot \log \left[\sigma\left(v(w)^{T} \theta_{j-1}^{u}\right)\right]+d_{j}^{u} \cdot \log \left[1-\sigma\left(v(w)^{T} \theta_{j-1}^{u}\right)\right]\right) \\ &=\left(1-d_{j}^{u}\right)\left[1-\sigma\left(v(w)^{T} \theta_{j-1}^{u}\right)\right] \theta_{j-1}^{u}-d_{j}^{u} \sigma\left(v(w)^{T} \theta_{j-1}^{u}\right) \theta_{j-1}^{u} \\ &=\left(\left(1-d_{j}^{u}\right)\left[1-\sigma\left(v(w)^{T} \theta_{j-1}^{u}\right)\right]-d_{j}^{u} \sigma\left(v(w)^{T} \theta_{j-1}^{u}\right)\right) \theta_{j-1}^{u} \\ &=\left(1-d_{j}^{u}-\sigma\left(v(w)^{T} \theta_{j-1}^{u}\right)\right) \theta_{j-1}^{u} \end{aligned}

于是,

\quad v(w)

的更新公式为:

v(w):=v(w)+\eta \sum_{u \in C o n t e x t(w)} \sum_{j=2}^{l^{u}} \frac{\partial \mathcal{O}\left(\theta_{j-1}^{u}, v(w)\right)}{\partial v(w)}

3.3 Skip-gram 模型更新相关参数伪代码

\bullet e=0

・FOR

u \in

Context

(w)

DO

\begin{array}{c} \text { } \begin{array}{c} \text { FOR } j=2: l^{u} \text { DO } \\ \text q=\sigma\left(v(w)^{T} \theta_{j-1}^{u}\right) \end{array} \\ \text g=\eta\left(1-d_{j}^{u}-q\right) \\ \text e:=e+g \theta_{j-1}^{u} \\ \text {} \theta_{j-1}^{u}:=\theta_{j-1}^{u}+g v(w) \\ \text { o } v(w):=v(w)+e \end{array}

4 总结

Word2Vec

的基本功能就是把自然语言中的每一个词,表示成一个统一意义统一维度的词向量,因为只有把自然语言转化为向量的形式,才能在此之上构建相关的算法,至于向量中的每个维度具体是什么含义,得自己探索了~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习初学者 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
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(一)原理推导[通俗易懂]
本章是介绍Word2Vec的原理推导部分,后面还会有基于TensorFlow的Word2Vec代码实现讲解。
全栈程序员站长
2022/08/30
2.2K0
超详细总结之Word2Vec(一)原理推导[通俗易懂]
word2vec原理与Gensim使用[通俗易懂]
与NNLM相比,word2vec的主要目的是生成词向量而不是语言模型,在CBOW中,投射层将词向量直接相加而不是拼接起来,并舍弃了隐层,这些牺牲都是为了减少计算量。不经过优化的CBOW和Skip-gram中 ,在每个样本中每个词的训练过程都要遍历整个词汇表,也就是都需要经过softmax归一化,计算误差向量和梯度以更新两个词向量矩阵(这两个词向量矩阵实际上就是最终的词向量,可认为初始化不一样),当语料库规模变大、词汇表增长时,训练变得不切实际。为了解决这个问题,word2vec支持两种优化方法:hierarchical softmax 和negative sampling。
全栈程序员站长
2022/08/29
1.6K0
word2vec原理与Gensim使用[通俗易懂]
词嵌入Word2Vec
⾃然语⾔是⼀套⽤来表达含义的复杂系统。在这套系统中,词是表义的基本单元。顾名思义,词向量是⽤来表⽰词的向量,也可被认为是词的特征向量或表征。**把词映射为实数域向量的技术也叫词嵌⼊(word embedding)。**近年来,词嵌⼊已逐渐成为⾃然语⾔处理的基础知识。
大数据技术与机器学习
2019/11/20
9550
从Word2Vec到Bert,聊聊词向量的前世今生(一)
原文链接:https://zhuanlan.zhihu.com/p/58425003
zenRRan
2019/08/19
1.5K0
从Word2Vec到Bert,聊聊词向量的前世今生(一)
【NLP-词向量】从模型结构到损失函数详解word2vec
上周我们讲到,在进行NNLM训练时,能够得到副产品,词向量。本文介绍一种专门用于词向量制备的方法:word2vec,利用它能够高效的训练出词向量。
用户1508658
2019/09/10
1.1K0
【NLP-词向量】从模型结构到损失函数详解word2vec
Word2Vec原理简单解析
词的向量化就是将自然语言中的词语映射成是一个实数向量,用于对自然语言建模,比如进行情感分析、语义分析等自然语言处理任务。下面介绍比较主流的两种词语向量化的方式:
全栈程序员站长
2022/08/27
1.4K0
Word2Vec原理简单解析
【图文并茂】通过实例理解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
NLP之word2vec简介
Word2vec,是为一群用来产生词向量的相关模型。这些模型为浅而双层的神经网络,用来训练以重新建构语言学之词文本。网络以词表现,并且需猜测相邻位置的输入词,在word2vec中词袋模型假设下,词的顺序是不重要的。训练完成之后,word2vec模型可用来映射每个词到一个向量,可用来表示词对词之间的关系,该向量为神经网络之隐藏层。
里克贝斯
2021/05/21
5390
NLP之word2vec简介
词向量(1)--从Word2Vec到ELMo
若你是做NLP的,一定对词向量很亲切,若你是做推荐的,对词向量也一定不会陌生,以词向量为代表的序列向量化方法已经成为机器学习中必不可少的实战利器。
流川枫
2020/04/24
9280
NLP从词袋到Word2Vec的文本表示
在NLP(自然语言处理)领域,文本表示是第一步,也是很重要的一步,通俗来说就是把人类的语言符号转化为机器能够进行计算的数字,因为普通的文本语言机器是看不懂的,必须通过转化来表征对应文本。早期是基于规则的方法进行转化,而现代的方法是基于统计机器学习的方法。
mantch
2019/07/30
1.4K0
NLP从词袋到Word2Vec的文本表示
NLP: Word Embedding 词嵌入(Part1: 基础和 Word2Vec)
例如:[1, 0, 0, 0, 0, 0, 0, 0, 0, 0] 这个 one-dimension vector 就代表这是整个句子里的第一个词
JiahuiZhu1998
2022/11/27
1.2K0
自然语言处理第3天:Word2Vec模型
与CBOW模型不同的是,Skip-Gram模型的训练任务是给定某个词,来预测它的上下文,这点与CBOW正好相反
Nowl
2024/01/18
2570
自然语言处理第3天:Word2Vec模型
不懂word2vec,还敢说自己是做NLP?
如今,深度学习炙手可热,deep learning在图像处理领域已经取得了长足的进展。随着Google发布word2vec,深度学习在自然语言处理领域也掀起了一阵狂潮。由于最近正在做一个相关的NLP项目,所以抽时间总结一下word2vec的相关知识点。
机器学习算法工程师
2018/07/27
9120
不懂word2vec,还敢说自己是做NLP?
博客 | Word2Vec 学习心得
好嘛博主食言了。不过本文没什么干货,主要是前后看了大概一个星期,反复去读源码和解读文章,终于感觉这东西不那么云山雾罩了。同时也发现网上很多材料有点扯淡,99% 的博文不过是把别人的东西用自己的话说一下,人云亦云。好多人自己理解错了而不自知,实在是误人误己。
AI研习社
2018/08/16
5520
NLP问题之word2vec
其用于有如下的 从「中文分词」、「词云画像」、「词性分析」到「自动摘要」、「关系挖掘」、「情感分析」、「知识图谱」等
热心的社会主义接班人
2018/10/25
1.1K0
NLP问题之word2vec
词向量技术 | 从word2vec到ELMo
"词和句子的嵌入已成为所有基于深度学习的自然语言处理(NLP)系统的重要组成部分,它们在固定长度的稠密向量中编码单词和句子,以大幅度提高神经网络处理文本数据的能力。"
用户1332428
2018/08/17
2.5K0
词向量技术 | 从word2vec到ELMo
NLP中的词向量对比:word2vec/glove/fastText/elmo/GPT/bert
一、文本表示和各词向量间的对比 1、文本表示哪些方法? 2、怎么从语言模型理解词向量?怎么理解分布式假设? 3、传统的词向量有什么问题?怎么解决?各种词向量的特点是什么? 4、word2vec和NNLM对比有什么区别?(word2vec vs NNLM) 5、word2vec和fastText对比有什么区别?(word2vec vs fastText) 6、glove和word2vec、 LSA对比有什么区别?(word2vec vs glove vs LSA) 7、 elmo、GPT、bert三者之间有什么区别?(elmo vs GPT vs bert)
zenRRan
2019/06/14
3.8K0
NLP中的词向量对比:word2vec/glove/fastText/elmo/GPT/bert
【论文解读】NLP重铸篇之Word2vec
word2vec原论文讲得比较简单,几乎没有细节,本文会根据另一篇论文【word2vec Parameter Learning Explained】,来详细介绍两种加速方法。本文使用python+tensorflow2.0来复现word2vec模型,所以模型中的反向梯度计算与参数优化更新,都是使用的tf中的自动求导与优化器实现,也因此本文中只涉及到word2vec的两种结构(CBOW与Skip-gram)及两种加速方式(Huffman树-层次softmax和负采样)从输入到loss的前向计算,完整代码已开源,具体请查看https://github.com/wellinxu/nlp_store。
黄博的机器学习圈子
2020/12/11
3K0
【论文解读】NLP重铸篇之Word2vec
一文详解 Word2vec 之 Skip-Gram 模型(结构篇)
这次的分享主要是对Word2Vec模型的两篇英文文档的翻译、理解和整合,这两篇英文文档都是介绍Word2Vec中的Skip-Gram模型。下一篇专栏文章将会用TensorFlow实现基础版Word2Vec的skip-gram模型,所以本篇文章先做一个理论铺垫。 原文英文文档请参考链接: - Word2Vec Tutorial - The Skip-Gram Model http://t.cn/Rc5RfJ2 - Word2Vec (Part 1): NLP With Deep Learning with T
AI研习社
2018/03/19
3.2K0
一文详解 Word2vec 之 Skip-Gram 模型(结构篇)
相关推荐
NLP之——Word2Vec详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档