介绍了Word2Vec、Glove和FastText生成词向量的原理以及各种方法的局限性
本文参考以上链接
1、Word2Vec
(1)CBOW:用上下文预测目标词汇
Input layer:上下文单词的onehot,其中C为输入上下文单词的个数,V为每个单词的dim
则其输入的(X1, X2, ... , Xc)的shape为C*V
Hidden layer:所有输入的onehot乘以W,进行相加求平均值,此时h为1*N
Output layer:然后h乘以W‘得到一个V-dim概率分布,概率最大的index对应的单词为预测值
其中:定义loss function(一般采用交叉熵,用来衡量真实标记和预测标记的相似度),采用梯度下降的方法更新W和W’,训练完成后,输入层的单词乘以W就是所需要的词向量
对于词库非常庞大的时候,则隐层矩阵的维度也会相当大,在反向传递中计算会很大,可以将多个单词当成一个word来进行处理
(2)skip-gram:用目标词汇来预测上下文
相比传统的one-hot词向量的优势:
-
低维稠密:one-hot类型词向量是一种高维稀疏的表示方法,计算效率低
-
蕴涵语义:one-hot类型词映射到高维空间中是相互正交的,词与词之间没有任何关联,word2Vec的思想:具有相同上下文的词语包含相似的语义
自身缺点:
-
使用唯一词向量,对于一词多义的情况,无法正确处理
-
只能利用一定窗长的上下文环境,即利用局部信息,没法利用整个语料库的全局信息
2、FastText
FastText = CBOW(Word2Vec) + h-softmax
FastText的三个组成部分:模型架构、层次softmax和N-gram特征
模型架构:类似于CBOW
Input layer:输入是不仅是文本中单词还有其n-gram特征,这些特征用来表示单个文档
Hidden layer:输入特征向量通过线性变换映射到中间层(即对Input layer中的输入向量进行累加后取均值)
Output layer:预测文本所属于的标签
层次softmax:
解决在标准的softmax分类中,分类标签过多而导致计算复杂度高的问题
在哈夫曼编码的基础上,对标签进行编码
N-gram特征:
传统的词袋模型无法考虑到词之间的顺序,因此引入N-gram特征
例:”我看你“ 传统的词袋模型特征为”我“ ”看“ ”你“ 与”你看我“的特征是一样的无法进行区分
引入N-gram:对于2-gram特征为”我看“ ”看你“ ”你看我“特征为”你看“ ”看我“ 可以进行区分
-
缺点:
因为Hidden layer是通过简单的求和取平均值得到的,这种方式会丢失词的顺序信息,因此引入了N-gram特征
3、GloVe
Glove本质是加权最小二乘回归模型,引入共现概率矩阵。
目标获取每个词的向量表示,且词向量中包含了共现矩阵中信息,体现出词之间的关系
共现矩阵:统计单词-单词之间共现次数
例如:I like deep learning. I like NLP. I enjoy flying.
当前窗口为1,根据预料所生成的共现矩阵
好处:能够很好的表达词语与词语之间的关系、对整个语料库进行统计
共现概率:
词i和词j的共现概率(即词出现在词环境下的概率)= (词出现在词环境的次数) / (任意词出现在的环境的次数)
-
Glove训练过程:
统计共现矩阵,初始化W和W‘以及偏置向量B和B’,构建损失函数,使用梯度下降算法更新参数
-
优点:相比较word2Vec结构简单,速度更快,采用有监督学习,Label为log Xij