浅谈Word2vec

 

目录

00 前言

01 什么是 Word2vec ?

02 Word2vec 的 2 种训练模式

CBOW(Continuous Bag-of-Words Model)

结构图

模型流程举例

Skip-gram(Continuous Skip-gram Model)

简单情形

一般情形

03 Word2vec 的优化方法

04 Word2vec 的优缺点

优点

缺点

Reference


00 前言

在说明 Word2vec 之前,需要先解释一下 Word Embedding(词嵌入) 。他就是将【不可计算】【非结构化】的词转化为【可计算】【结构化】的向量。这一步解决的是“将现实问题转换为数学问题”,是人工智能非常关键的一步。

将现实问题转化为数学问题只是第一步,后面还需要求解这个数学问题。所以 Word Embedding 的模型本身并不重要,重要的是生成出来的结果——词向量。因为在后续的任务中会直接用到这个词向量。

我们为每个单词构建⼀个 密集 的向量,使其与出现在相似上下⽂中的单词向量相似。词向量(word vectors)有时被称为词嵌⼊(word embeddings)词表示(word representations)
它们是分布式表示(distributed representation)

01 什么是 Word2vec ?

Word2vec 是 Word Embedding 的方法之一。它是2013年由谷歌的 Mikolov 提出的一套新的词嵌入方法。
Word2vec 在整个 NLP 里的位置可以用下图来表示:

在 Word2vec 出现之前,已经有一些 Word Embedding 的方法,但是之前的方法并不成熟,也没有大规模的得到应用。

02 Word2vec 的 2 种训练模式

CBOW(Continuous Bag-of-Words Model)和Skip-gram (Continuous Skip-gram Model),是Word2vec 的两种训练模式。
下面简单做一下解释:

先从一个例子开始:“The cat jumped over the puddle”

CBOW(Continuous Bag-of-Words Model)

通过上下文来预测当前值。相当于一句话种扣掉一个词,让你猜这个词是什么。(类似完形填空)

这⼀⽅法是把 {"The","cat","over","the","puddle"} 作为上下⽂,希望从这些词中能够预测或者⽣成中心词“jumped”。这样的模型我们称之为 continuous bag-of-words(CBOW)模型。

它是从上下文种预测中心词的方法,在这个模型中的每个单词,我们希望学习两个向量:

  • v(输入向量)当词在上下文中
  • u(输出向量)当词是中心词。

结构图

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

  1. 输入层:上下文单词的onehot。【假设单词向量空间维度为 V ,上下文单词个数为C】
  2. 所有onehot分别乘共享的输入权重 W 。【W 为 V*N 矩阵,N为自己设定的数,初始化权重矩阵W】
  3. 所得的向量【因为是onehot所以是向量】相加求平均作为隐层向量,size为 1 * N
  4. 乘输出权重矩阵 W' 【W‘ 为 N*V 矩阵】
  5. 得到向量【1*V】激活函数(softmax)处理得到 V-dim 概率分布【PS: 因为是onehot嘛,其中的每一维都代表着一个单词】,概率最大的index所指示的单词为预测出的中间词(target word)
  6. 与true label 的onehot作比较,误差越小越好。

提醒:我们最终需要训练的是权重矩阵,即W。

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

模型流程举例

(说明:图片源于此处

假设我们此时得到的概率分布已经达到了设定的迭代次数,那么现在我们训练出来的look up table应该为矩阵W。即,任何一个单词的one-hot表示乘以这个矩阵都将得到自己的word embedding。

 

Skip-gram(Continuous Skip-gram Model)

用当前词来预测上下文。相当于给你一个词,让你猜前面和后面可能出现什么词。(类似给中心词分析上下文)

先来举个简单的例子,『她们 夸 吴彦祖 帅 到 没朋友』

简单情形

我们现在想要用当前词 x 去预测它的下一个词 y 。但是一般得数学模型只接受数值型输入,那么这里的 x 该如何表示呢?显然不能用word2vec,因为这是我们训练完模型的产物,现在我们想要的是 x 的一个原始输入形式。

答案是:one-hot encoder

所谓 one-hot encoder ,其思想跟特征工程里处理类别变量的 one-hot 一样。本质上使用一个只含一个 1 ,其他都是 0 的向量来唯一表示词语。

接下来就可以看一下Skip-gram的网络结构了,x就是上面提到的one-hot encoder形式的输入,y是在这V个词上输出的概率,我们希望跟真实的y的one-hot encoder一样。

(说明:图源自此处

首先说明一点:隐藏层的激活函数其实是线性的,相当于没做任何处理(这也是Word2vec简化之前语言模型的独到之处),我们要训练这个神经网络,用反向传播算法,本质上是链式求导,在此不展开说明。

当模型训练完后,最后得到的其实是神经网络的权重,比如现在输入一个 x 的 one-hot encoder:[1,0,0,0,...,0],对应刚才说的那个词语『吴彦祖』,则在输入层到隐藏层的权重里,只有对应1 这个位置的权重被激活,这些权重的个数,跟隐藏层节点数是一致的,从而这些权重组成一个向量 vx 来表示x,而因为每个词语的 one-hot encoder 里面 1 的位置是不同的,所以,这个向量vx就可以用来唯一表示x。

注意:上面这段话说的就是 Word2vec 的精髓!!

此外,我们刚说了,输出 y 也是用 V 个节点表示的,对应V个词语,所以其实,我们把输出节点置成 [1,0,0,…,0],它也能表示『吴彦祖』这个单词,但是激活的是隐含层到输出层的权重,这些权重的个数,跟隐含层一样,也可以组成一个向量 vy,跟上面提到的 vx 维度一样,并且可以看做是词语『吴彦祖』的另一种词向量。而这两种词向量 vx 和 vy,正是 Mikolov 在论文里所提到的,『输入向量』和『输出向量』,一般我们用『输入向量』。

需要提到一点的是,这个词向量的维度(与隐含层节点数一致)一般情况下要远远小于词语总数 V 的大小,所以 Word2vec 本质上是一种降维操作——把词语从 one-hot encoder 形式的表示降维到 Word2vec 形式的表示。

一般情形

上面讨论的是最简单情形,即 y 只有一个词,当 y 有多个词时,网络结构如下:

(说明:图源自此处

可以看成是 单个x->单个y 模型的并联,cost function 是单个 cost function 的累加(取log之后)

03 Word2vec 的优化方法

为了提高速度,Word2vec 经常采用 2 种加速方式:

  1. Negative Sample(负采样)
  2. Hierarchical Softmax

具体加速方法就不在此花篇幅讲了,后续可能填坑。

04 Word2vec 的优缺点

需要说明的是:Word2vec 是上一代的产物(18年之前),18年之后想要得到最好的效果,已经不使用Word Embedding的方法了,所以也不会用到 Word2vec。

优点

  1. 由于 Word2vec 会考虑上下文,跟之前的Embedding方法相比,效果要更好(但不如18年之后的方法)
  2. 比之前的Embedding方法维度更少,所以速度更快
  3. 通用性很强,可以用在各种NLP任务中

缺点

  1. 由于词和向量是一对一的关系,所以多义词的问题无法解决
  2. word2vec是一种静态的方式,虽然通用性强,但是无法针对特定任务做动态优化

(说明:图源自此处

Reference

https://www.zhihu.com/question/44832436
https://zhuanlan.zhihu.com/p/26306795
https://easyai.tech/ai-definition/word2vec/
https://www.jianshu.com/p/471d9bfbd72f
https://www.cnblogs.com/peghoty/p/3857839.html
https://cs224d.stanford.edu/lecture_notes/notes1.pdf

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值