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)