几种词嵌入方法
几种词嵌入方法
在自然语言处理中常常使用词嵌入。先来看看词嵌入是什么,以及为什么使用词嵌入。
为什么要使用词嵌入
以中文为例,词库中至少包括几千个字,几万个词,将其代入模型时,如果使用 onehot 编码,则变量有成千上万个维度,参数数量和计算量都非常庞大;且无法计算词间的近似性,无法使用“类比”方法将学到的规则泛化到近义词上,也不利于进一步的迁移学习。
词嵌入可将词的特征映射到较低的维度,比如用 200 维特征描述词库中所有的词,使用模型参数更少,训练更快。
词嵌入可视为给每个组一个 n 维的编码,能某一维度可能描述词性,另一维度描述感情色彩;用特征描述取代符号描述,类似于机器视觉中使用深度网络提取图片的基本特征。也便于对比、泛化、以及知识迁移。比如使用大量自然语言数据训练了足够好的词表征,在具体任务中使用少量实例 fine-tune 和 pretrain 训练好的词嵌入数据训练模型。模型对于 fine-tune 训练集中从未出现,但在词嵌入中出现的词也能有很好效果,从而实现知识迁移。
除了作为特征提取器,还可通过词嵌入实现运算,比如:男 - 女=国王 - 王后,因此可通过国王 - 男 + 女的运算得出王后,从而实现一些类比相关的逻辑推理功能,以及性质变换。
将 onehot 编码转换成词嵌入
通过矩阵乘法可完成 onehot 编码到词嵌入的转换,假设词库中包含 10000 个词,词嵌入 200 维,onehot 变量乘矩阵 E 可得到词嵌入,E 的大小为 10000x200,onehot 编码型如 [0,0,…1,…0],因此乘法相当于过滤出 E 矩阵中的某一列,作为该词的词向量表示。矩阵中的权重通过训练得到。可以视为用每一列描述一个具体词的特征。
训练 Embedding 层
训练深度学习模型是一种有监督学习,为了利用互联网上庞大的文本数据。一般使用前 N 个词预测第 N+1 个词,比如使用“白日依山”作为 x,通过词嵌入编码为 200x4=800 维的输入特征,预测下一个字为 y’,y’是词库中每个词是第 N+1 字的概率。通过上述算法,即可使用未人工标注的数据训练模型。像 BERT,GPT-2 等目前流行的模型都使用这种方法训练,它们不仅训练了词向量,还使用深度网络学习了语法语义等其它关系。
Word2Vec 的 skip-gram 模型
skip-gram 的原理是根据相关词同时出现的情况估计词义。它在句中随机选定一个词作为上下文 context,然后从其附近 n 个词的范围内随机选择一词作为目标 target,构建有监督学习的训练集,用上下文训练目标。模型包含词嵌入矩阵,并在最后一层加入 Softmax,以便输出概率。它只有一个词输入和一个词输出,比上面介绍的模型更加简单。训练出的模型并不用于解决具体问题,只用于训练词嵌入。上述只是基本原理,具体使用时,还涉及采样时对停用词以及低频词的处理,优化 Softmax 速度等方法。
腾讯词向量使用了 skip-gram 的改进版本,其中包括 800 多万中文词和短语,将每个词展开成 200 维向量。
Word2Vec 的 CBOW 模型
CBOW 是连续词袋模型 Continuous Bag-of-Word Model 的简称,它用上下文词来预测中间词。
如图所示,使用前两个和后两个词(共 C=4 个)预测中间的词 w,其中每个词被映射成 V 维的词向量;每个词向量乘以参数矩阵 A(VN 维矩阵),转换成 N 维数据,然后将所有词对应的 N 维的数据相加取均值,计算出 N 维的隐藏层 Hidden;再用隐藏层乘参数矩阵 B(NV 维),计算待预测的词 w 对应的 V 维词向量;最终用预测出的 w 与真实的 w 作比较计算误差函数,然后用梯度下降调整 A,B 两个参数矩阵。由此,使用简单的神经网络就完成了预测任务。
GloVe 词向量
GloVe 方法比较简单,全称是 Global vectors of word representation。它计算目标 target 有多少次出现在上下文 context 中。对于每一个句子,其中的词 a 出现时词 b 出现与 b 出现时 a 也出现的次数是一致的,因此二者具有对称性。
比如 k 是单词 orange,那么它 juice(设为单词 i)同时与它出现的概率肯定比它与 book(设为单词 j)同时出现的概率高。相比单词同时出现的概率,单词同时出现的概率的比率能够更好地区分单词。经过推导,最终得到公式:
其中 V 为词库中的所有词,X 为词汇共现矩阵,Xik 表示词 k 出现在词汇 i 上下文中的次数总和,wi,wk 分别为词 i 和 k 对应的词向量,f 是权重函数,如果 ik 未同时出现过,则 f(Xik)=0,不将其计入目标函数,f 还用于均衡高频词于低频词的影响。通过统计词库中各个词组合同时出现的概率训练模型。