word2vec 系列

1 word2vec概述

广义上指能将词语文本转化为向量的一类技术,也称词嵌入(word embedding)

狭义上指借助神经网络模型为基础构建词向量的过程,其中最经典的两类word2vec技术分别为skip-gram和CBOW

最终获取的词向量,可看作表示单词意义的向量,也可以看作是词的特征向量

2 word2vec前置知识

2.1 one-hot(独热)编码

one-hot(独热)编码过程:

  • 用$N$维仅包含0、1值的向量去唯一地表示$N$种词
  • 每个词编码后的向量包含$N-1$个0和1个1

算法分析:

  • one-hot 编码简单实用,是很多进阶编码方法的基础
  • one-hot 编码结果过于稀疏,最好用特殊的存储方式降低内存消耗
  • one-hot 编码结果无法评估不同词之间的相似度

3 word2vec经典实现

3.1 skip-gram

给定中心词的情况下生成周围上下文词

算法细节和分析:

#待补充

3.2 CBOW

给定周围上下文词生成中心词

算法细节和分析:

#待补充

4 word2vec拓展模型

4.1 Glove

Glove(Global Vectors for Word Representation)主要基于全局词频统计构建词向量

Glove的计算与理解过程:

(1)根据语料库(corpus)构建共现矩阵(Co-ocurrence Matrix)$X$

  • 其中元素$X_{ij}$表示词元$i$上下文中出现词元$j$的次数
  • 共现概率$P_{ij}=X_{ij}/\Sigma_kX_{ik}$表示词元$j$出现在词元$i$上下文中的概率
  • 共现概率越高,两词元间的相关性就越高

(2)理解模型的拟合目标:使用词向量尽可能还原共现矩阵

  • 假设单词$i$的理想词向量为$w_i$,对应偏置项为$b_i$
  • 假设单词$j$的理想词向量为$w_j$,对应偏置项为$b_j$
  • 模型追求$w_i^Tw_j+b_i+b_j$的结果尽可能接近$log(X_{ij})$

(3)构建模型的损失函数: $$J=\Sigma_{i,j=1}^Vf(X_{ij})(w_i^Tw_j+b_i+b_j-log(X_{ij}))^2$$

  • 其中$f(X_{ij})$表示权重函数(在一定范围内,共现概率越高,权重越大)
  • 损失函数的右侧为典型的平方损失RMSE,所以模型可看作针对共现次数的回归问题
  • 通过减少词向量还原共现矩阵的误差,促使最终词向量尽可能地蕴含语义语法信息

Glove模型分析:

  • 相比于 word2vec,Golve 模型一般训练速度比较快,适合并行计算
  • Golve 需要基于全局预料构建共现矩阵,不适合在线学习或语料不完整的情况

其他补充:

4.2 fasText

fastText 模型在 skip-gram 模型的基础上提出了子词(subword)嵌入的方法:

fastText 模型计算过程

  • 在每一个词的首位添加特殊字符<>,以单词where为例:<where>
  • 每一个词都拆分出长度在3-6之间的所有子词(原始词也会保留),单词where最终可以拆分为以下子词集合:<wh,whe,her,ere,re>(只考虑长度为3的情况)
  • 最终单词的词向量会是对应子词集合中所有子词向量的求和结果
  • 其他部分(模型结构,损失函数等)与skip-gram模型相同

fastText 模型分析:

  • 能捕捉到文本中的形态信息,对未收录词、罕见词的泛化能力好
  • 词表更大,计算复杂度更高(实际速度还好),对中文效果一般

4.3 ELMo

以上的模型都默认假设语义(词向量)与上下文无关,这种简化与实际情况相悖。因此ELMo(2018)针对此问题进行了改进。

ELMo 模型计算过程

  • 在传统词向量模型结构的后面添加双层双向LSTM网络,用于捕捉上下文信息
  • 通过词向量结构输出捕捉单词信息后,传递给第一层双向LSTM网络
  • 第一层双向LSTM捕捉句法信息后,传递至下一层双向LSTM用于捕捉语义信息
  • 最终应用到下游任务时,会将单词信息、句法信息、语义信息进行加权融合

ELMo 模型分析:

  • 能根据上下文调整最终的词向量输出,适应一词多义的复杂语境
  • 基于LSTM的双向特征拼接效果比Transformer结构的一体化特征融合弱

在ELMo之前,也有其他上下文敏感的词向量,比如TagLM(2017)和CoVe(2017)

往年同期文章