深度学习-word2vec

1.LM(Language Model,语言模型)

一个语言模型通常构建为字符串s的概率分布p(s),这里的p(s)实际上反映的是s作为一个句子出现的概率。
例如:
句1:”今晚的球赛真精彩“:
句2:”球赛今晚的真精彩“
同样是由[”今晚“,”的“,”球赛“,”真“,”精彩“]这5个词语组成的句子,但是显然句1比句2的语句结构更合理,反应在语言模型上,即字符串组成句1的概率高于句2,因此句1更像人话。

由于计算机无法理解文字,因此在使用语言模型时我们需要把词语转换成数值形式,或者说嵌入到一个数学空间里,这种嵌入方法叫作词嵌入(word embedding),word2vec就是词嵌入的一种。

2.词嵌入

基于神经网络的分布表示一般称为词向量、词嵌入( word embedding)或分布式表示( distributed representation)。核心依然是上下文的表示以及上下文与目标词之间的关系的建模。
本质:词向量是训练神经网络时候的隐藏层参数或者说矩阵。


词嵌入.jpg

相比独热编码改进的方面:
1、将vector每一个元素由整形改为浮点型,变为整个实数范围的表示;
2、将原来稀疏的巨大维度压缩嵌入到一个更小维度的空间。

3.两种语言模型

3.1Skip-gram 模型

Continuous Skip-gram Model:输入一个词语,预测它的上下文


skip-gram.jpg

Skip-gram 模型通过跳过语句中的某些词(相当于缩写),解决了n-gram模型中由于窗口大小的限制导致超出窗口范围的词语与当前词之间的关系不能被正确地反映到模型之中的问题。

3.2CBOW 模型

Continuous Bag-of-Words Model:输入词语的上下文,预测词语本身


cbow.jpg

4.两种加速方法

4.1Hierarchical Softmax

Hierarchical Softmax是一种对输出层进行优化的策略,输出层从原始模型的利用softmax计算概率值改为了利用Huffman树计算概率值。一开始我们可以用以词表中的全部词作为叶子节点,词频作为节点的权,构建Huffman树,作为输出。从根节点出发,到达指定叶子节点的路径是的。Hierarchical Softmax正是利用这条路径来计算指定词的概率,而非用softmax来计算。
即Hierarchical Softmax:把 N 分类问题变成 log(N)次二分类

4.2Negative Sampling

即负采样,这是Noise-Contrastive Estimation(简写NCE,噪声对比估计)的简化版本:把语料中的一个词串的中心词替换为别的词,构造语料 D 中不存在的词串作为负样本。在这种策略下,优化目标变为了:较大化正样本的概率,同时最小化负样本的概率。
假设有一个句子为:“The quick brown fox jumps over the lazy dog.“
如果我们用skip-gram model ,貌似这是一个很大的网络。


NEG.jpg

注意:比如像“the”这种常见的词,我们会遇到两个问题:

  1. 比如(fox,the)其实没有传递我们关于 fox的信息。‘the‘出现得太多了。
  2. 我们有太多 (‘the’,…)的样本,多于我们实际需要的。
    所以word2vec采用了降采样的策略。对于每个我们在训练样本中遇到的词,我们有一个概率去删除它。这个概率与单词出现的频率相关。

如果我们采用window size = 10,同时我们删除‘the’:

  1. 当我们再去训练剩下的词,我们就不会再遇到‘the’了;
  2. 我们减少了10个包含‘the’的样本
    这其实就是‘NEG’的核心思想。

5.word2vec

word2vec是谷歌提出的一种word embedding的具体手段,采用了两种模型(CBOW与skip-gram模型)与两种方法(负采样与层次softmax方法)的组合,比较常见的组合为 skip-gram+负采样方法。

参考:https://zhuanlan.zhihu.com/p/26306795
http://www.dataguru.cn/article-13488-1.html

你可能感兴趣的:(深度学习-word2vec)