什么是Word2Vec

将单词转换成向量,语义上相似的单词在一个多维空间距离很近

可以看看gensim包

Skip-Gram

给定input word来预测上下文
【机器学习】Word2Vec
假设我们有一个句子:

The dog barked at the mailman

首先我们选取dog作为我们的输入词,然后设置skip_window为2,那么我们从dog左侧和右侧都取两个词,那么就是The,dog,barked,at

设置num_skips为2,我们会得到(dog,barked)和(The,dog)两组形式的训练数据

我们的模型会从每对单词出现的次数中学习出现的概率,比如我们的训练样本有很多(“Soviet“,”Union“)这样的样本对,那么输入Soviet,输出结果为Union的概率就会很高

但是,神经网络只能接受数值的输入,我们需要用数值来表示单词,比如我们可以从文档中抽取10000个词组成词汇表,使用独热编码,将每个单词都是10000维的向量

模型的输入是10000维的向量,那么输出包含了这10000个单词的概率大小:
【机器学习】Word2Vec
最终的模型就是一个概率分布

隐层

假设我们想用300维的向量表示一个单词,那么隐层的权重矩阵位10000行,300列

经过神经网络的隐层计算,单词会从10000维的向量变成300维的向量

输出层

输出层是一个softmax回归分类器,输出0-1之间的概率

如果两个单词有着很相似的上下文,那么两个单词的嵌入向量也会很相似

高效训练

Word2Vec模型是一个超级大的神经网络,比如10000个词,300维,那么就有300万的权重

所以有了一些优化点

单词组合成词组

有些单词只有有组合在一起才有意义呢

对高频单词进行抽样

有些单词,比如the,for这种,在训练文本中到处都是,我们可以让the这种不在上下文窗口中出现

word2vec的C语言代码实现了一个计算在词汇表中保留某个词概率的公式

【机器学习】Word2Vec
Z(Wi)表示某个单词在预料中出现的概率

【机器学习】Word2Vec
我们可以看到,出现概率越小,保留的概率越大

负采样

负采样让每训练一个样本仅仅更新一小部分权重,而不是全部,可以降低计算量

负采样的思想特别简单,就是每次按照一定概率随机采样一些词当做负例,从而就只需要计算这些负采样出来的负例了

对于小规模数据集,选择5-20个negative words会比较好,对于大规模数据集可以仅选择2-5个negative words

我们的隐层-输出层拥有300 x 10000的权重矩阵。如果使用了负采样的方法我们仅仅去更新我们的positive word-“quick”的和我们选择的其他5个negative words的结点对应的权重,共计6个输出神经元,相当于每次只更新[公式]个权重。对于3百万的权重来说,相当于只计算了0.06%的权重,这样计算效率就大幅度提高

相关文章:

  • 2021-11-17
  • 2019-12-22
  • 2021-04-10
  • 2021-05-24
  • 2021-09-08
  • 2021-11-29
  • 2022-01-31
猜你喜欢
  • 2022-12-23
  • 2021-11-27
  • 2022-02-12
  • 2022-12-23
  • 2021-06-09
  • 2021-12-17
  • 2022-12-23
相关资源
相似解决方案