在前面的学习中,我们忽略了词附近的上下文信息,包括每个词周围的其他词、相邻词对该词词义的影响,以及词之间的关系对句子整体语义的影响。
在本章中,我们将从少量词的邻域中创建更小的词袋,一般会少于10个词条,同时确保这些邻域的语义不会溢出到相邻的句子中。

1. 词向量

2012年,微软实习生Thomas Mikolov发现了一种用一定维度的向量表示词的含义的方法,他训练了一个神经网络来预测每个目标词附近的共现词。2013年,Mikolov和他的队友在谷歌发布了创建这些词向量的软件,成为Word2vec。
Word2vec仅仅基于大型未标记文本语料库来学习词的含义,而不需要标记Word2vec词汇表中的词。正是Word2vec这种无监督的特性使它无比强大,因为世界上充满了未标记、未分类、非结构化的自然语言文本。
教网络预测句子中目标词附近的词,而不是通过带有词含义的标签来直接学习目标词的含义。在这个意义上,也可以算是有标注:待预测的相邻词。不过这些标注来自数据集本身,不需要手工标注。
Word2vec将学习到一些大家可能认为与所有词本身并不相关的东西,例如大家是否知道其实每个词都有一定的地理位置、情感(积极性)和性别倾向性?如果语料库中有任何一个词具有某种属性,如“placeness”(平和)、“peopleness”(有人情味)、“conceptness”(概念化)或“femaleness”(女性化)等,那么其他所有的词也会在词向量的这些属性上得分。当Word2vec学习词向量时,可以认为某个词的意义“感染”了其相邻词。
为了帮助大家更直观地理解词向量,可以把词向量看作是一个权重或分数的列表,列表中的每个权重或分数都对应于这个词在某个特定维度的含义。


1.1 面向向量的推理

面向向量的推理意味着可以用词向量做数学运算,再把得到的结果向量转换成词。
例如问题:
The Timbers are to Portland as what is to Seattle?
(波特兰的伐木者队应与西雅图的什么队?)
可以用向量代数进行解答
在这里插入图片描述
Word2vec模型“知道”术语Portland(波特兰)和Portland Timbers(波特兰伐木者队)之间的距离与Seattle(西雅图)和Seattle Sounders(西雅图海湾人队)之间的距离大致相同,并且这些距离的方向(向量对之间的差异)大致相同。可以把Portland和Seattle两个向量之间的差值加到Portland Timbers的向量上,这样得到的结果应该接近术语Seattle Sounders的向量。
在进行词向量的加减运算后,得到的向量一般不会正好等于词向量表中的某个向量。不过,Word2vec词向量通常有100维,每个维度上都有连续的实值,词向量表中与运算结果最接近的向量通常就是NLP问题的答案。


1.2 如何计算Word2vec表示

词向量将词的语义表示为训练语料库中上下文中的向量。这不仅能回答类比问题,还能让大家用更为通用的向量代数去推理词的含义。训练Word2vec嵌入有两种方法:

  • skip-gram方法:基于目标词(输入词)预测上下文(输出词)
  • 连续词袋(continuous bag-of-words, CBOW)方法:基于邻近词(输入词)预测目标词(输出词)

1.2.1 skip-gram

在skip-gram训练方法中,需要预测输入词周围窗口的词。在下面例子中,"painted"是神经网络的训练输入,对应的预测词输出是其相邻词“Claude”“Monet”“the”和“Grand”。
在这里插入图片描述
skip-gram是一种包含间隙的跳跃式n-gram语法,因为我们跳过了中间词条。在这个例子中,“painted”去预测“Claude”,跳过了“Monet”。

用来预测周围词的神经网络结构如下,网络有两层权重组成,隐藏层由n个神经元组成,其中n表示词的向量维数。输入层和输出层都包含M个神经元,其中M是模型的词汇表中的词的总数。输出层激活函数是分类问题中常用的softmax函数。
在这里插入图片描述


1.2.2 什么是softmax

当神经网络的目标是学习分类问题时,经常用softmax函数作为神经网络输出层的激活函数。softmax可以将输出结构压缩为0到1之间的值,所有输出的和加起来等于1。这样,softmax函数的输出层结果就可以当作概率。
在这里插入图片描述
在Word2vec模型中,Wt表示在位置t处的词条独热向量,如果使用skip-gram窗口大小为2来训练,则需要考虑每个目标词前后的两个词。
senrence = “Claude Monet painted the Grand Canal of Venice in 1806.”

输入词Wt 期望输出Wt-2 期望输出Wt-1 期望输出Wt+1 期望输出Wt+2
Claud Monet painted
Monet Claud painted the
painted Claud Monet the Grand
the Monet painted Grand Canal
Grand painted the Canal of
Canal the Grand of Venice
of Grand Canal Venice in
Venice Canal of in 1908
in of Venice 1908
1908 Venice in

由输入词和周围词(输出词)组成的训练集构成了这个神经网络训练的基础数据。在周围词数量为4的情况下,将使用4次迭代训练网络,每次迭代都是基于输入词项预测其中一个输出词。
每个词在进入网络前被表示为一个独热向量。神经网络做词嵌入的输出向量也类似于一个独热向量。通过输出层节点(输出层上每个节点对应于词汇表中的一个词条)的softmax激活函数来计算输出词是输入词的周围词的概率。然后将最大概率的词转换为1,其余所有词转换为0,从而将输出词的概率向量转换为一个独热向量,这样处理可以减小损失函数的计算复杂度。
当完成神经网络训练后,经过训练后的网络权重可以用来表示语义。经过词条独热向量的转换,权重矩阵中的一行表示语料库词汇表中的一个词。语义相似的词被训练为预测相似的周围词,因此经过训练之后也会有相似的向量。
词向量模型训练结束后便不再进行额外的训练,因此可以忽略网络的输出层,只用隐藏层的输入权重来作为词嵌入表示。换句话说,这个权重矩阵就是大家所需要的词嵌入。输入词项的独热向量表示与权重的点积代表词向量嵌入。
在这里插入图片描述


1.2.3 连续词袋方法

在连续词袋(CBOW)方法中,将根据周围词去预测中心词。这里不用创建输入和输出词条标记对,而可以创建一个多热向量作为输入向量。

输入词Wt-2 输入词Wt-1 输入词Wt+1 输入词Wt+2 期望输出Wt
Monet painted Claud
Claud painted the Monet
Claud Monet the Grand painted
Monet painted Grand Canal the
painted the Canal of Grand
the Grand of Venice Canal
Grand Canal Venice in of
Canal of in 1908 Venice
of Venice 1908 in
Venice in 1908

在这里插入图片描述


1.2.4 skip-gram和CBOW:什么时候用哪种方法

skip-gram方法对于小型语料库和一些罕见的词项比较适用,由于网络结构的原因,将会产生更多的训练样本。CBOW在常用词上有更高的精确性,并且训练速度会快很多。


1.2.5 Word2vec计算技巧

  1. 高频2-gram:
    为了提高Word2vec嵌入的精确率,在词汇表中加入了一些2-gram和3-gram作为词项。它们使用共现频率来区分应该被认为是单个词项的2-gram、3-gram,公式如下:
    在这里插入图片描述
    如果wi和wj经计算得到的分数高于阈值δ,则这两个词应当作为词项对被包含在Word2vec词汇表中。Word2vec将频繁出现的2-gram的两个词用一个字符(常用下划线“_”)连接起来,这样处理后,这些2-gram就可以表示为单个独热向量,而不再是两个单独的向量。

  2. 高频词条降采样:
    为了减少像停用词这样的高频词的影响,可以在训练过程中对词进行与其出现频率成反比的采样。其效果类似于IDF对TF-IDF向量的影响。相比于罕见词,高频词被赋以对向量更小的影响力。用下面的公式来确定给定词的采样概率,这个概率决定了在训练过程中是否将该词包含在skip-gram中:
    在这里插入图片描述
    f(wi)表示一个词在语料库中的出现频率,t表示频率阈值,超出这个阈值的才会进行降采样。阈值取决于语料库规模、平均文档长度和文档中词的多样性。

3.负采样:
当一个训练样本(一对词)输入网络后,会引起网络中所有权重的更新。这样会改变词汇表中所有词的向量值。如果词汇表规模达到十亿级,为一个大型的独热向量更新所有权重将会变得极其低效。
于是只在输出向量中选取少量的负样本进行权重更新,而不用去更新词窗口以外所有其他词的权重。选取n个负样本词对(目标输出词之外的词),根据其对输出的贡献来更新对应的权重。通过这种方法,可以极大地减小计算量,而且对训练网络性能不会有明显影响。
注意:如果是在一个小型语料库上来训练词向量,那么可以使用5 ~ 10个样本的负采样率。对于较大型的语料库和词汇表,可以将负采样率降低到2 ~ 5个 样本。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐