Word2vec的学习笔记

简述

百度百科:Word2vec,是一群用来产生词向量的相关模型。这些模型为浅而双层的神经网络,用来训练以重新建构语言学之词文本。网络以词表现,并且需猜测相邻位置的输入词,在word2vec中词袋模型假设下,词的顺序是不重要的。训练完成之后,word2vec模型可用来映射每个词到一个向量,可用来表示词对词之间的关系,该向量为神经网络之隐藏层。

Word2vec 是 Word Embedding 的方法之一,属于 NLP 领域。
Word Embedding是将不可计算、非结构化的词转化为可计算、结构化的向量——词向量。
Word2vec 在整个 NLP 里的位置可以用下图表示:

Word2vec的学习笔记_第1张图片

One-Hot Encoder: 自然语言处理经常把字词转为离散的单独的符号。
对于词袋模型,文本的语序特征丧失,也就丧失了语义的信息。分布式假说 的提出解决了语义信息的问题。该方法的思想是:上下文相似的词,其语义也相似,随后就有了基于上下文分布表示词义的方法,这就是“词空间模型“。Word2Vec可以将One-Hot Encoder转化为低维度的连续值,也就是稠密向量,并且其中意思相近的词将被映射到向量空间中相近的位置。而使用神经网络可以灵活的对上下文进行建模,也因此成为用的比较多的方法。

模型介绍

One-Hot向量作为word2vec的输入,通过word2vec训练低维词向量(word embedding)

Word2vec的学习笔记_第2张图片
  • 输入层:One-Hot Vector
  • 隐藏层:没有激活函数,也就是线性的单元。
  • 输出层:维度跟输入层的维度一样,用的是Softmax回归。

我们要获取的dense vector其实就是Hidden Layer的输出单元。有的地方定为Input Layer和Hidden Layer之间的权重,其实说的是一回事。

词袋模型(Bag-of-words model) 是最早的以词语为基本处理单元的文本向量化算法,即借助于词典把文本转化为一组向量。
基于词袋的文本向量是根据词出现的次数构建的。但是此向量与文本中单词出现的顺序没有关系,只是一种频率的表示,该方法易实现,但存在很大的问题:

  • 维数灾难:假如词典包含10000个单词,那么每个文本需要使用10000维的向量表示,那么向量的很多位置必定是0,如此稀疏的高维向量会严重影响计算速度。
  • 这样构成的向量无法保存词序信息,而词序对于自然语言处理又是那么的重要。
  • 存在语义鸿沟

最近词袋模型也被应用在计算机视觉领域。词袋模型被广泛应用在文件分类,词出现的频率可以用来当作训练分类器的特征。

两种训练模式

CBOW(Continuous Bag-of-Words Model)

通过上下文来预测当前值。相当于一句话中扣掉一个词,来猜这个词是什么。CBOW对小型数据库比较合适。

Word2vec的学习笔记_第3张图片
  • 输入层:上下文单词的one-hot向量。(假设单词向量空间dim为V,也就是词典的大小。上下文单词个数为C。)
  • 所有one-hot分别乘以共享的输入权重矩阵W (V*N矩阵,N为自己设定的数,N也是隐藏层的神经元个数,初始化权重矩阵W)。
  • 隐藏层:所得的向量 (one-hot为向量)相加求平均作为隐层向量, size为1*N。
  • 乘以输出权重矩阵W′ (N*V)。
  • 输出层:得到向量 (1*V) ,激活函数处理得到V-dim概率分布,概率最大的index所指示的单词为预测出的中间词(target word)。
  • 与true label的one-hot做比较,误差越小越好。

所以,需要定义loss function(一般为交叉熵代价函数),采用梯度下降算法更新W和W′。训练完毕后,输入层的每个单词的one-hot向量与矩阵W相乘就得到自身的词向量(word embedding),矩阵W(所有单词的word embedding)也叫做look up table。有了look up table就可以免去训练过程直接查表得到单词的词向量了。

Skip-gram(Continuous Skip-gram Model)

用当前词来预测上下文。相当于给出一个词,来猜前面和后面可能出现什么词。Skip-Gram在大型语料中表现更好。

Word2vec的学习笔记_第4张图片

n元模型中,因为窗口大小的限制,导致超出窗口范围的词语与当前词之间的关系不能被正确地反映到模型之中,如果单纯扩大窗口大小又会增加训练的复杂度。Skip-gram 模型的提出很好地解决了这些问题。顾名思义,Skip-gram 就是“跳过某些符号”。

例:句子“中国足球踢得真是太烂了”有4个3元词组,分别是“中国足球踢得”、“足球踢得真是”、“踢得真是太烂”、“真是太烂了”,可是我们发现,这个句子的本意就是“中国足球太烂”可是上述 4个3元词组并不能反映出这个信息。Skip-gram 模型却允许某些词被跳过,因此可以组成“中国足球太烂”这个3元词组。 如果允许跳过2个词,即 2-Skip-gram 。

训练步骤:

  • 首先选句子中间的一个词作为输入词;
  • 有了input word以后,再定义一个叫做skip_window的参数,它代表着从当前input word的一侧(左边或右边)选取词的数量。skip_window=2代表着选取input word左侧2个词和右侧2个词进入窗口,所以整个窗口大小span=2x2=4。
  • 另一个参数叫num_skips,它代表着从整个窗口中选取多少个不同的词作为output word,当skip_window=2,num_skips=2时,将会得到两组 (input word, output word) 形式的训练数据。
  • 神经网络基于这些训练数据将会输出一个概率分布,这个概率代表着词典中的每个词是output word的可能性。模型的输出概率代表着到词典中每个词有多大可能性跟input word同时出现。
Word2vec的学习笔记_第5张图片

提醒:最终我们需要的是训练出来的权重矩阵。

优缺点

说明:Word2vec 是上一代的产物(18 年之前), 18 年之后想要得到最好的效果,已经不使用 Word Embedding 的方法了,所以也不会用到 Word2vec。
优点:

  • 由于 Word2vec 会考虑上下文,跟之前的 Embedding 方法相比,效果要更好(但不如 18 年之后的方法);
  • 比之前的 Embedding方法维度更少,所以速度更快;
  • 通用性很强,可以用在各种 NLP 任务中。

缺点:

  • 由于词和向量是一对一的关系,所以多义词的问题无法解决;
  • Word2vec 是一种静态的方式,虽然通用性强,但是无法针对特定任务做动态优化。

优化方法

为提高速度,Word2vec 经常采用 2 种加速方式:

  • Negative Sample(负采样)
  • Hierarchical Softmax

参考

http://easyai.tech/ai-definition/word2vec/
https://blog.csdn.net/lilong117194/article/details/81979522

你可能感兴趣的:(Word2vec的学习笔记)