特征工程-3-词嵌入模型-word2vec

Word2Vec

谷歌2013年提出的Word2Vec是目前最常用的词嵌入模型之一。Word2Vec实际是一种浅层的神经网络模型,它有两种网络结构,分别是CBOW(Continues Bag of Words)和Skip-gram。

CBOW的目标是根据上下文出现的词语来预测当前词的生成概率,如下图(a)所示;而Skip-gram是根据当前词来预测上下文中各词的生成概率,如下图(b)所示。

截屏2022-06-20 19.27.51

其中 $w(t) $ 是当前所关注的词,\(w(t−2)\)\(w(t−1)\)\(w(t+1)\)\(w(t+2)\) 是上下文中出现的词。假设有一个句子“There is an apple on the table”作为训练样本,所以图中设定的前后滑动窗口大小均设为2。CBOW的输入为(is, an, on, the),输出为apple。而Skip-gram的输入为apple,输出为(is, an, on, the)。

CBOW和Skip-gram都可以表示成由输入层(Input)、映射层(Projection)和输出层(Output)组成的神经网络。

img

输入层中的每个词由独热编码方式表示,即所有词均表示成一个N维向量,其中N为词汇表中单词的总数。在向量中,每个词都将与之对应的维度置为1,其余维度的值均设为0。

在映射层(又称隐含层)中,\(K\) 个隐含单元(Hidden Units)的取值可以由 \(N\) 维输入向量以及连接输入和隐含单元之间的 \(N×K\) 维权重矩阵计算得到。在CBOW中,还需要将各个输入词所计算出的隐含单元求和。

同理,输出层向量的值可以通过隐含层向量(\(K\) 维),以及以及连接隐含层和输出层之间的 \(K×N\) 维权重矩阵计算得到。输出层也是一个 \(N\) 维向量,每维与词汇表中的一个单词相对应。最后,对输出层向量应用Softmax激活函数,可以计算出每个单词的生成概率。Softmax激活函数的定义为:

\[P(y=w_n|x)=\frac{e^{x_n}}{\sum^N_{k=1}e^{x_k}} \]

其中 \(x\) 代表N维的原始输出向量,\(x_n\) 为在原始输出向量中,与单词 \(w_n\) 所对应维度的取值。

接下来的任务就是训练神经网络的权重,使得语料库中所有单词的整体生成概率最大化。从输入层到隐含层需要一个维度为 \(N×K\) 的权重矩阵,从隐含层到输出层又需要一个维度为 \(K×N\) 的权重矩阵,学习权重可以用反向传播算法实现,每次迭代时将权重沿梯度更优的方向进行一小步更新。但是由于Softmax激活函数中存在归一化项的缘故,推导出来的迭代公式需要对词汇表中的所有单词进行遍历,使得每次迭代过程非常缓慢,由此产生了Hierarchical Softmax和Negative Sampling两种改进方法。

CBOW

img

  1. 输入层:上下文单词的One-Hot编码词向量,\(V\) 为词汇表单词个数,\(C\) 为上下文单词个数。还使用上面 \(C=4\),所以模型的输入是(is,an,on,the)4个单词的One-Hot编码词向量。

    2、初始化一个权重矩阵 \(W_{V \times N}\) ,然后用所有输入的One-Hot编码词向量左乘该矩阵,得到维数为N的向量\(w_1, w_2, w_3, ..., w_c\) ,这里的 \(N\) 由自己根据任务需要设置。

    3、将所得的向量 [公式] 相加求平均作为隐藏层向量 \(h\)

    4、初始化另一个权重矩阵 \(W^{\prime}_{N \times V}\) ,用隐藏层向量 \(h\) 左乘 \(W^{'}_{N \times V}\) ,再经激活函数处理得到 \(V\) 维的向量 \(y\)\(y\) 的每一个元素代表相对应的每个单词的概率分布。

    5、\(y\) 中概率最大的元素所指示的单词为预测出的中间词(target word)与true label的One-Hot编码词向量做比较,误差越小越好(根据误差更新两个权重矩阵)。

    在训练前需要定义好损失函数(一般为交叉熵代价函数),采用梯度下降算法更新 \(W\)\(W^{'}\)。训练完毕后,输入层的每个单词与矩阵 \(W\) 相乘得到的向量的就是分布式表示的词向量(Word embedding)。

Skip-Gram

img

  1. 首先我们选定句子中间的一个词作为我们的输入词,例如我们选取“apple”作为 input word;
  2. 有了input word以后,我们再定义一个叫做 skip_window 的参数,它代表着我们从当前 input word 的一侧(左边或右边)选取词的数量。如果我们设置skip_window=2,那么我们最终获得窗口中的词(包括input word在内)就是[‘is’, ’an’, ’apple’, ’on’, ’the’ ]。skip_window=2代表着选取 input word 左侧2个词和右侧2个词进入我们的窗口,所以整个窗口大小 \(span=2\times2=4\) 。另一个参数叫 num_skips,它代表着我们从整个窗口中选取多少个不同的词作为我们的output word,当skip_window=2,num_skips=2时,我们将会得到两组 (input word, output word) 形式的训练数据,即 ('apple', 'an'),('apple', 'one')。
  3. 神经网络基于这些训练数据中每对单词出现的次数习得统计结果,并输出一个概率分布,这个概率分布代表着到我们词典中每个词有多大可能性跟 input word 同时出现;
  4. 通过梯度下降和反向传播更新矩阵 \(W\)
  5. \(W\) 中的行向量即为每个单词的 Word embedding 表示
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值