美文网首页
Word2Vec 理解过程记录

Word2Vec 理解过程记录

作者: 大豆油 | 来源:发表于2019-11-04 21:55 被阅读0次

以下是记录 word2vec 的详细内容,但是不包含推导公式。首先需要先去了解 NNLM 模型,这是先验知识。然后再来讨论 word2vec,主要内容是它的两个模型 CBOW 和 Skip-Gram,我们平常讨论的 word2vec,实则是这两个模型来实现的。然后介绍改进的训练方法:Hierarchical Softmax 和 Negative Sampling,这两个方法都是针对隐藏层到输出层这一步,后面会详细讨论。

一、NNLM(Neural Network Language Model)模型

首先,需要有一个概念:词嵌入。传统的词表示,如 one-hot 编码和共现矩阵都不能很好的表示词与词之间的关系。而词嵌入,是把每个词映射到固定的维度大小的向量上。

然后,看一下 NNLM 模型的结构图:

可以看得出来,这是一个由输入层,隐藏层(以一层为例),和输出层。这里的 C 矩阵也就是需要训练的词嵌入,事实上,C 矩阵只是这个模型的副产物。模型的输出是概率函数,整个模型的含义是根据前 t-1 个单词来预测第 t 个单词,这是一种无监督学习。这里面最大的问题在于从隐藏层到输出的 softmax 层的计算量很大,因为要计算所有词的 softmax 概率,再去找概率最大的值。

二、word2vec 中 CBOW 和 Skip-Gram

1. CBOW 模型

CBOW 的含义是利用上下文来预测当前词,网络结构如下图所示:

具体的步骤如下:

  • one-hot 编码的 x 向量通过隐藏层,得到 C 个词嵌入。
  • 对上述的向量求平均值 hi。
  • 然后生成一个得分向量 z=hi * W',然后再对 z 向量归一化,得到所有词的预测概率(大小为向量 (|V|,1) ),选择对应预测词的概率与真实值进行比较,然后反向传播。在测试阶段,直接选择最大的概率值对应的词即可。

2. Skip-Gram 模型

SG 模型的含义是根据当前词来预测上下文,网络结构如下图所示:

具体的步骤如下:

  • one-hot 编码的 x 向量通过 W 权重,得到相应的词嵌入。
  • 这个值也就作为隐藏层的输出向量 hi。
  • 然后生成一个得分向量 z=hi * W',然后再对 z 向量归一化,得到所有词的预测概率,选择对应多个预测词的概率与真实值进行比较,然后反向传播。

三、方法改进:Hierarchical Softmax 和 Negative Sampling

由上面的训练过程可知,不管是 CBOW 还是 SG,在输出层的时候都要输出词汇表大小的概率值。计算量太大,下面的两种分案就是针对输出层来改进。

1. Hierarchical Softmax

Hierarchical softmax 使用一个哈夫曼树来表示词表中的所有词。树中的每个叶结点都是一个单词,而且只有一条路径从根结点到叶结点。在这个模型中,没有词的输出表示。相反,图的每个节点(根节点和叶结点除外)与模型要学习的向量相关联。结构如下图所示:

w2 在 CBOW 模型中就是平均值向量,然后与每个节点内部的向量相乘后,通过 Sigmoid 函数,一直到叶子节点结束。理解这个哈夫曼树的关键在于:哈夫曼树的特点是权重最大的叶子结点,离根节点越近,所以在训练的时候,需要事先定义好哈夫曼树(按照词频大小)。

2. Negative Sampling

在讲基于 Negative Sampling 的 word2vec 模型前,先看看 Hierarchical Softmax 的的缺点。的确,使用霍夫曼树来代替传统的神经网络,可以提高模型训练的效率。但是如果我们的训练样本里的中心词w是一个很生僻的词,那么就得在霍夫曼树中辛苦的向下走很久了。

目标函数:
注意对 |V| 的求和计算量是非常大的!任何的更新或者对目标函数的评估都要花费 O(|V|) 的时间复杂度。使用负采样时,比如我们有一个训练样本,中心词是 w, 它周围上下文共有 2c 个词,记为 context(w)。由于这个中心词 w, 的确和 context(w) 相关存在,因此它是一个真实的正例。通过 Negative Sampling 采样,我们得到 neg 个和 w 不同的中心词 wi,i=1,2,..neg,这样 context(w) 和 wi 就组成了 neg 个并不真实存在的负例。

目的就在于最大化下面式子:

采样方法:

  1. 根据词频将线段分成 V 份,每份对应词汇表中的一个词,高频词对应长线段,低频词对应短线段。每个词 W 的线段长度由下式决定:
  1. 对分子和分母取 3/4 幂如下:
  1. 在采样前,我们将这段长度为 1 的线段划分成 M 等份,这里 M >> V,这样可以保证每个词对应的线段都会划分成对应的小块。而 M 份中的每一份都会落在某一个词对应的线段上。在采样的时候,只需要从 M 个位置中采样出 neg 个位置就行,此时采样到的每一个位置对应到的线段所属的词就是负例词。具体如下所示:

四:参考文章

相关文章

  • Word2Vec 理解过程记录

    以下是记录 word2vec 的详细内容,但是不包含推导公式。首先需要先去了解 NNLM 模型,这是先验知识。然后...

  • 20201024-词的向量转换之NNLM

    概述 谈到NLP不得不介绍word2vec,word2vec可以很宽泛的理解,就是词的向量化过程,而这一过程是经历...

  • 基于TensorFlow实现Skip-Gram模型

    理解 Word2Vec 之 Skip-Gram 模型 Word2Vec是从大量文本语料中以无监督的方式学习语义知识...

  • word2vec原理、推导与总结

    本篇博客主要记录一下对语言模型、Word2Vec、ELMo和BERT学习和总结,有些地方肯定理解不到位,希望小伙伴...

  • word2vec 理解

    1:word2vec 可以用于时序数据的挖掘,比如商品的浏览分析,app 下载分析,通过word2vec 可以得到...

  • 理解Word2Vec

    独热编码其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位...

  • Word2Vec原理,彻底搞懂

    References: 图解Word2vec 经典再读之Word2Vec word2vec Parameter L...

  • word2vector简介

    word2vec官网:https://code.google.com/p/word2vec/ word2vec是g...

  • 入门自然语言处理必看,图解word2vec!

    图解word2vec精翻版,加入了自己的理解,和稍微有点出入,http://jalammar.github.io/...

  • word2vec

    word2vec word2vec 构建中文词向量

网友评论

      本文标题:Word2Vec 理解过程记录

      本文链接:https://www.haomeiwen.com/subject/nrzkbctx.html