word2vec概述

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了word2vec概述相关的知识,希望对你有一定的参考价值。

参考技术A

文本表示是自然语言处理中的基础工作,文本表示的好坏直接影响到整个自然语言处理系统的性能。文本向量化是文本表示的一种重要方式。文本向量化就是讲文本表示成一系列能够表达文本语义的向量。

当前阶段,对文本向量化的大部分研究都是通过词向量化来实现的。与此同时,也有相当一部分研究者将文章或者句子作为文本基本处理单元,提出了doc2vec和ste2vec技术。

基于embedding的词表示,其核心思想是: 上下文相似的词,其语义也相似。 这就是著名的 词空间模型(word space model) ,词向量通常使用神经网络模型训练得到,神经网络模型就是根据上下文与目标词之间的关系进行建模。

Word2vec主要有CBOW和Skip-gram两种模式,其中CBOW是从原始语句推测目标字词,而Skip-gram是从目标字词推测出原始语句(滑动窗口范围内),其中CBOW对小型数据比较合适,Skip-fram在大型语料中表现得更好。

接下来介绍两种优化方法
在木有进行优化前,word2vec的隐藏层有 V*N 个参数,其中V是全局词的数量,比如10W个,N是预设的词嵌入向量维度,如300,那么这个计算量太大了,因此要进行优化。

先复习一下 霍夫曼树 ,这里我图省事,直接把 刘建平 老师的博客贴上来。

回顾下传统的神经网络词向量语言模型,里面一般有三层,输入层(词向量),隐藏层和输出层(softmax层)。里面最大的问题在于从隐藏层到输出的softmax层的计算量很大,因为要计算所有词的softmax概率,再去找概率最大的值。这个模型如下图所示。其中V是词汇表的大小。

 由于我们把之前所有都要计算的从输出softmax层的概率计算变成了一颗二叉霍夫曼树,那么我们的softmax概率计算只需要沿着树形结构进行就可以了。如下图所示,我们可以沿着霍夫曼树从根节点一直走到我们的叶子节点的词 w2

 如何“沿着霍夫曼树一步步完成”呢?在word2vec中,我们采用了二元逻辑回归的方法,即规定沿着左子树走,那么就是负类(霍夫曼树编码1),沿着右子树走,那么就是正类(霍夫曼树编码0)。判别正类和负类的方法是使用sigmoid函数,即:
      
 其中 xw 是当前内部节点的词向量,而θ则是我们需要从训练样本求出的逻辑回归的模型参数。
 使用霍夫曼树有什么好处呢?首先,由于是二叉树,之前计算量为V,现在变成了log2V。第二,由于使用霍夫曼树是高频的词靠近树根,这样高频词需要更少的时间会被找到,这符合我们的贪心优化思想。
 容易理解,被划分为左子树而成为负类的概率为 P(−)=1−P(+) 。在某一个内部节点,要判断是沿左子树还是右子树走的标准就是看 P(−),P(+) 谁的概率值大。而控制 P(−),P(+) 谁的概率值大的因素一个是当前节点的词向量,另一个是当前节点的模型参数 θ
 对于上图中的 w2 ,如果它是一个训练样本的输出,那么我们期望对于里面的隐藏节点 n(w2,1) P(−) 概率大, n(w2,2) P(−) 概率大, n(w2,3) P(+) 概率大。
 回到基于Hierarchical Softmax的word2vec本身,我们的目标就是找到合适的所有节点的词向量和所有内部节点 θ , 使训练样本达到最大似然。那么如何达到最大似然呢?

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

Negative Sampling就是这么一种求解word2vec模型的方法,它摒弃了霍夫曼树,采用了Negative Sampling(负采样)的方法来求解,下面我们就来看看Negative Sampling的求解思路。

既然名字叫Negative Sampling(负采样),那么肯定使用了采样的方法。采样的方法有很多种,比如之前讲到的大名鼎鼎的MCMC。我们这里的Negative Sampling采样方法并没有MCMC那么复杂。

比如我们有一个训练样本,中心词是 w ,它周围上下文共有 2c 个词,记为 context(w) 。由于这个中心词 w ,的确和 context(w) 相关存在,因此它是一个真实的正例。通过 Negative Sampling 采样,我们得到 neg 个和 w 不同的中心词 wi,i=1,2,..neg ,这样 context(w) wi 就组成了 neg 个并不真实存在的负例。利用这一个正例和 neg 个负例,我们进行二元逻辑回归,得到负采样对应每个词 wi 对应的模型参数 θi ,和每个词的词向量。

从上面的描述可以看出, Negative Sampling 由于没有采用霍夫曼树,每次只是通过采样 neg 个不同的中心词做负例,就可以训练模型,因此整个过程要比 Hierarchical Softmax 简单。

不过有两个问题还需要弄明白:1)如何通过一个正例和neg个负例进行二元逻辑回归呢? 2) 如何进行负采样呢?

一些细节:

在skip gram和CBOW中,中心词词向量在迭代过程中是不会更新的,只更新窗口词向量,这个中心词对应的词向量需要下一次在作为非中心词的时候才能进行迭代更新。

参考文章
1.刘建平老师的博客园, 地址
2. bitcarmanlee的CSDN博客

蓝牙核心技术概述

蓝牙核心技术概述(一):蓝牙概述
蓝牙核心技术概述(二):蓝牙使用场景
蓝牙核心技术概述(三): 蓝牙协议规范(射频、基带链路控制、链路管理)
蓝牙核心技术概述(四):蓝牙协议规范(HCI、L2CAP、SDP、RFOCMM)
蓝牙核心技术概述(五):蓝牙协议规范(irOBEX、BNEP、AVDTP、AVCTP)

 

以上是关于word2vec概述的主要内容,如果未能解决你的问题,请参考以下文章

用gensim学习word2vec

word2vec

word2vec是如何得到词向量的?

文本分类实战—— word2vec预训练词向量

word2vec

基于spark和sparkstreaming的word2vec