2.4.Word2Vec,词向量推理

    2012年,微软实习生Thomas Mikolov发现了一种用一定维度的向量表示词的含义的方法。Mikolov训练了一个神经网络来预测每个目标词附近的共现词。2013年,Mikolov和他的队友在Google发布了创建这些词向量的软件——Word2vec。

    定义:词向量是对词语义或含义的数值向量表示,包括字面意义和银行意义。词向量可以捕捉到词的内涵,所有这些含义会结合成一个稠密(没有零值)的浮点数向量,该向量支持查询和逻辑推理。

    无监督学习和监督学习是两种截然不同的机器学习方法。

  • 监督学习中,必须对训练数据进行某种标注。如垃圾信息分类标签、点赞数量的量化。

  • 无监督学习,同样也是训练模型去执行某种任务,但是没有任何任务标注,只有原始数据。

    计算目标词附近的向量,而不是通过带有词含义的标签来直接学习目标词的含义,从这点上讲,Word2vec不需要手工标注,确实也是一个无监督学习算法。注意:通过使用低维内部表示来重新预测输入的模型称为自编码器,这种模型也是一种常见的神经网络,几乎可以应用到任何数据集。

您可以使用nlpia中提供的工具为Word2vec词汇表中的任何词或n-gram计算属性向量(nessvector)。LSA中基于整篇文档构建的主题向量很适合文档分类、语义搜索和聚类,但生成的主题-词向量精确度不够,不能用于短语或复合词的词义推理、分类和聚类。

1. 面向向量的推理

    可以用词向量做数学运算,再把得到的结果向量转换成词,这样就可以得到有意义的答案。

精确率

Word2vec

45%

LSA

11%

二者精确度有4倍差距。

    Word2Vec中的代数几何:

    进行向量加减运算后,得到的向量一般不会正好等于词向量表中的某个向量,不过,Word2vec词向量通常有100维,每个维度上都有连续的实数值,词向量表中和运算结果最接近的就是NLP问题的答案。

    研究结果:单词的单数和复数之间的差异在大小和方向上基本相同

xcoffeexcoffeesxcupxcupsxcookiexcookiesx_{coffee} - x_{coffees} \approx x_{cup} - x_{cups} \approx x_{cookie} - x_{cookies}

使用词向量原因

    词向量表示法不但对推理和类比问题有用,而且对其他所有使用自然语言向量空间模型处理的问题都有用。如词向量的计算结果和城市本身坐标类似:

2. 如何计算Word2vec表示

    训练Word2vec嵌入有两种方法:

  • Skip-Gramskip-gram方法,基于目标词(输入词)预测上下文(输出词)

  • CBOW:连续词袋(continuous bag-of-words, CBOW)方法,基于临近词(输入词)预测目标词(输出词)

注:都是词嵌入模型,只是名称为连续词袋。

2.1. Skip-Gram

    在Skip-Gram训练方法中,需要预测输入词周围窗口的词,Skip-Gram相应的训练输出示例:

    Skip-Gram是一种包含间隙的跳跃式n-gram语法,因为它跳过了中间词条,在上述例子中,基于painted去预测Claude,跳过了Monet。它的神经网络由两层权重组成,隐藏层由n个神经元组成,其中n表示词的向量维数;输入层和输出层都包含MM个神经元,MM是模型的词汇表中词的总数,输出层激活函数则是分类问题中常用的softmax函数。

2.2. Softmax

    如果神经网络的目标是学习分类问题时,经常使用softmax函数作为神经网络输出层激活函数,它可以将输出结果压缩到01之间的值,所有输出的和加起来等于1,这样它的输出结果就可以当做概率。对于KK个输出节点,softmax输出可通过归一化方程计算:

σ(z)j=ezjk=1Kezk\sigma(z)_j = \frac{e^{z_j}}{\sum_{k=1}^K e^{z_k}}

    举例说明:

[0.50.90.2],σ(v)=[0.3090.4610.229]\begin{bmatrix} 0.5 \\ 0.9 \\ 0.2 \end{bmatrix} , \sigma(v) = \begin{bmatrix} 0.309 \\ 0.461 \\ 0.229 \end{bmatrix}

    注意softmax之后的结果之和约等于1

句子:"Claude Monet painted the Grand Canal of Venice in 1806."

    参考下边表格:

中间是当前词,计算前两个和后两个。

    词向量模型训练结束后便不再需要额外的训练,因此可忽略网络的输出层,只用隐藏层的输入权重来作为词嵌入表示,换句话说,这个权重矩阵就是所需的词嵌入,输入词的独热向量表示和权重的点积代表词向量嵌入

    线性代数检索词向量:

2.3. CBOW

    连续词贷方法中,将根据周围词预测中心词,它不用创建输入和输出词条标记对,而可以创建一个多热向量(multi-hot vector)作为输入向量,多热向量是围绕中心词的所有周围词的独热向量和。

    它的神经网络模型如下:

连续词袋 vs 词袋

    连续词袋类似在句子中设定了一个滑动窗口来选择目标词的周围词,滑动窗口内的所有词将被认为是窗口中央的目标词的连续词袋的内容。

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

2.4. Word2vec计算技巧

    三个改进方案。

高频 2-gram

    在Word2vec词汇表中加入了一些2-gram3-gram作词项,它们使用共现频率来区分应该被认为是单个词项的2-gram, 3-gram,如下边公式:

score(wi,wj)=count(wi,wj)δcount(wi)×count(wj)score(w_i, w_j) = \frac{count(w_i, w_j) - \delta}{count(w_i) \times count(w_j)}

    如果wiw_iwjw_j计算得到的分数高于阈值δ\delta,则这两个词应当作为词项对被包含在Word2vec词汇表中。

高频词条降采样

    另一个改进原算法是高频词条降采样,像thea这样的常用词通常不包含重要信息,语料库中the和许多名词都共现;为了减少像停用词这样的高频词的影响,可以在迅联过程中对词进行与其出现频率成反比的采样,原理类似IDFTF-IDF的影响。

    最早的采样概率公式如:

P(wi)=1tf(wi)P(w_i) = 1 - \sqrt{\frac{t}{f(w_i)}}

    C++版本中Word2vec则使用下边公式(二者效果一致):

P(wi)=f(wi)tf(wi)tf(wi)P(w_i) = \frac{f(w_i) - t}{f(w_i)} - \sqrt{\frac{t}{f(w_i)}}

  • f(wi)f(w_i)表示一个词在语料库中出现的概率

  • tt表示频率阈值,超出该阈值就会进行降采样(该词取决于语料库规模、平均文档长度、词的多样性)。

负采样

    最后一个技巧是负采样,当一个训练样本(一对词)输入网络后,会引起网络中所有的权重更新而影响所有词的向量词,如果规模很大,这个过程将会特别低效,为了加快训练速度,可以采用负采样。

    只在输出向量中选取少量的负样本进行权重更新,而不更新词窗口以外所有其他词的权重,如选取n个负样本词对,根据其对输出的贡献来更新对应权重。

如果是一个小型语料库上训练词向量,则可以使用5 ~ 20个样本的负采样率,而对较大的语料库,则推荐降低到2 ~ 5个样本。

3. 生成定制化词向量表示

    某些情况下,您需要创建面向特定领域的词向量模型,此时可通过定制化词向量来提高模型的精确率。

3.1. 预处理阶段

    将文档拆分成句子,将句子拆分成词条。gensim.word2vec模型接收的输入是一个句子列表,其中每个句子都已经切分成了词条,这样确保向量模型不会学习到相邻句子中出现的无关词。

NLTK, gensim中可以用经过精度优化的莫尔斯检测器。

3.2. 训练面向特定领域的Word2vec模型

    代码如:

    Word2vec模型开销大,但只有隐藏层的权重矩阵有意义,使用下边命令可丢掉神经网络中不需要的输出权重:

4. Word2Vec和GloVe

    Word2Vec是一个巨大突破,但它依赖必须经反向传播来训练的神经网络模型,反向传播在效率上通常不如使用梯度下降法直接优化的代价函数。

    GloVe是根据Word2Vec的工作原理而来,它可以产生相当于Word2Vec输入权重矩阵和输出权重矩阵的矩阵,其生成的语言模型具有和Word2Vec相同的精确率,且花费时间更少,更高效。

  • Word2Vec依赖反向传播来更新表示词嵌入的权重

  • GloVe使用SVD的优化算法

    GloVe优点如:

  • 训练过程更快

  • 更有效利用CPU、内存(可处理大规模的文档)

  • 更有效地利用数据(对小型语料库有帮助)

  • 在相同训练次数的情况下精确率更高

5. fastText

    Facebook研究人员将Word2vec概念又向前推进一步,在模型训练中加入了一个新规则:该算法预测周围的n个字符,而不是词,如:whisper生成的2-gram3-gram如:

    这种方法为每个n字符的gram训练一个向量标识,包括:词、拼错的词、此片段、单个字符,这种方式更容易处理罕见词。

6. Word2Vec和LSA

    LSA的优点是:

  • 训练速度快

  • 长文本的区分度更好

    Word2Vec和GloVe的优点是:

  • 对大型语料库的利用更有效

  • 在回答类比问题等用词推理的领域更精确

7. 词关系可视化

    语义词之间的关系非常有用,通过可视化可以得到一些有趣的发现。

7.1. 词向量偏见

    词向量根据训练语料库来学习词之间的关系,如果语料库是关于金融的,那么bank的词向量将主要与存款业务相关,如果语料库是关于地质学的,那么bank的词向量将被训练为与河流和消息有关。于是可使用主成分分析:

    低语义距离(接近零的距离值)表示词相似度高;语义距离——即“意义”距离,是由训练文档中相邻出现的词决定的。如果两个词经常用于相似上下文中,则它们的Word2vec词向量在词向量空间中也比较接近。

8. 文档相似度Doc2vec

    Word2vec的概念可以扩展到句子、段落或整个文档。

Doc2vec训练使用额外的文档向量作为输入

最后更新于