[笔记]word2vec 的cbow模型和skip-gram模型

word2vec原理(二) 基于Hierarchical Softmax的模型

word2vec 中的数学原理详解(三)背景知识

如何获取词向量?
大部分情况下,词向量和语言模型都是捆绑的,训练完成后,两者同时得到。

用神经网络来训练语言模型的思想最早由百度IDL的徐伟提出。这方面最经典的文章是bengio于2003年发表的《a neural probabilisitc language model》 后来有了谷歌公司的word2vec

PCA降维
PCA : principal component analysis ( 主成分分析)

举个栗子,我们拥有10000个单词的词汇表,我们如果想嵌入300维的词向量,那么我们的输入-隐层权重矩阵和隐层-输出层的权重矩阵都会有 10000 x 300 = 300万个权重,在如此庞大的神经网络中进行梯度下降是相当慢的。更糟糕的是,你需要大量的训练数据来调整这些权重并且避免过拟合。百万数量级的权重矩阵和亿万数量级的训练样本意味着训练这个模型将会是个灾难(太凶残了)。
Word2Vec 的作者在它的第二篇论文中强调了这些问题
下面是作者在第二篇论文中的三个创新:

  1. 将常见的单词组合(word pairs)或者词组作为单个“words”来处理。
  2. 对高频次单词进行抽样来减少训练样本的个数。
  3. 对优化目标采用“negative sampling”方法,这样每个训练样本的训练只会更新一小部分的模型权重,从而降低计算负担。

抽样率

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

ωi 是一个单词,Z(ωi) 是 ωi 这个单词在所有语料中出现的频次。举个栗子,如果单词“peanut”在10亿规模大小的语料中出现了1000次,那么 Z(peanut) = 1000/1000000000 = 1e - 6。

在代码中还有一个参数叫“sample”,这个参数代表一个阈值,默认值为0.001(在gensim包中的Word2Vec类说明中,这个参数默认为0.001,文档中对这个参数的解释为“ threshold for configuring which higher-frequency words are randomly downsampled”)。这个值越小意味着这个单词被保留下来的概率越小(即有越大的概率被我们删除)。
详情见一文详解 Word2vec 之 Skip-Gram 模型(训练篇)

负采样每次让一个训练样本仅仅更新一小部分的权重,这样就会降低梯度下降过程中的计算量。

你可能感兴趣的:(深度学习,中文分词)