chapter 14 词的向量表示:word2vec 与 词嵌入

一、为什么要做词嵌入

1、假设:在文本任务中,vocabulary_size = 10000,则,如果将word用one-hot表示的话,word向量维度将高达10000,这种高维表示将降低模型性能(如:RNN模型)。而利用“词嵌入向量”可以有效降低“词向量维度”。
2、one-hot表示法,平均化了vocabulary_set中的所有单词,无法显示word之间的相关关系。利用“词嵌入”能够挖掘更多关于word的信息,例如,利用“词嵌入”表示的cat和dog,会拥有相似的向量表示。

二、词嵌入原理

所谓word2vec,是指学习一个映射f,将单词变为向量表示,vec = f(word)。
学习映射f的方法一般分为2种:
1、基于“计数”的方法:在大型语料库中,计算一个word和另一个word同时出现的频率,将经常同时出现的words映射到相似的位置。
2、基于“预测”的方法:即从一个词或几个词出发(inputs),预测他们的相邻词(outputs),在学习的过程中,自然而然的学习“词嵌入映射f”。
下面介绍的两种“词嵌入原理”都是基于“预测”,分别为:CBOW 和 Skip-Gram。

(一)CBOW(Continuous Bag of words)

CBOW的核心思想是:利用某个词的上下文来预测该词。
举例说明:有如下句子:the man fall in love with the ____。通过该句我们可以猜测,空白处填“woman”。这就是CBOW所要做的事情,训练一个Net,使得输入word上下文,可以预测出word。该Net的中间层(隐含层)即可视为词嵌入层,当训练好Net后,向该Net输入一个word,其隐含层的vec即为该词的“词嵌入向量”。
下面先来看一个“用一个word预测另一个word的Net结构”,如下图所示:
该Net的input为一个单词的one-hot表示,其维度为(v,)。input通过一个全连接层形成隐含层h(h1,h2,…),h在经过一个全连接层形成output,output维度为(v,)。output相当于softmax的输入,如果vocabulary_size = v,则softmax要输出v个概率值,以确定最终的“predict_word”。
在这个Net,隐含层h具有N个unit,该隐含层即为“词嵌入层”,“词嵌入向量”的维度为N(N<v)。
训练好Net以后,输入一个word,其“词嵌入向量”即为“隐含层各个unit组成的向量”。

下面的Net:用多个词来预测一个词,Net结构如下:
与第一个Net类似,input为各个单词的one-hot向量,input通过一个全连接层得到隐含层h,h经过一个全连接层得到output。将output送入softmax即可得到词表中各个单词的“预测概率”。
在这个Net中,隐含层为“词嵌入向量层”,输入各个单词,其隐含层的unit组成的向量,即为其“词嵌入向量”。

上述的Net均有一个明显的downside:即整个网络相当于一个V类分类器,V是vocabulary_size,其值往往很大,因此,很难训练,为了简化训练复杂度,我们将V类分类变为两类分类:
具体来说,设要预测的目标词汇为“wt”,我们会在整个词汇表中随机选取若干个词汇作为噪声词汇,假设为"~w",设上下文为"h"。现在要做一个“二分类模型”,其输入为(上下文context,预测单词),输出为概率值,判断input(context,prediction)的优劣,当input(h,wt)时,我们希望得到的概率值=1,当Input(h, ~w)时,我们希望得到的概率值=0,因此,我们可以将改进后的Net的损失函数定义如下,我们的目标是minimize(J):

Q(D=1|wt,h):利用wt,h的词嵌入向量进行一次logistic回归得到的概率。我们希望对应的概率值D=1。
Q(D=0|~w,h):利用 ~w ,h的词嵌入向量进行一次logistic回归得到的概率。我们希望对应的概率值D=0。
E表示期望,实际中不可能精确计算这一期望,通常的做法是随机选取一些噪声单词去预估这个期望。
通过优化“二分类损失函数”,最后得到的Net的隐含层即为“词嵌入向量层”。
“改进的Net”使用的损失函数称为“NCE损失”,在tensorflow中用tf.nn.nce_loss()实现。

(二)Skip-Gram

Skip-Gram与CBOW的核心思想刚好相反,它是利用word去预测他的上下文。如输入woman,预测man, fall,…。
在损失函数的选择上,Skip-Gram同CBOW,均采用NCE损失训练一个“二分类器”,而非V分类器。
Skip-Gram的Net结构与CBOW相似。

推荐博文: word2vec

三、Tensorflow中实现Skip-Gram

code解析:Skip-Gram

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sarah ฅʕ•̫͡•ʔฅ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值