上一篇文章词的向量化介绍了词的向量化,词向量的训练方式可以基于语言模型、基于窗口的CBOW和SKipGram的这几种方法。今天介绍的Glove也是一种训练词向量的一种方法,他是基于共现概率比的一种训练方式。
共现矩阵
首先共现二字很好理解,就是一起出现的意思。对一句话进行切分,可以分成 n n n个词,对于这 n n n个词,可以形成一个矩阵,矩阵里面的数字就代表着窗口内共同出现的次数,窗口可以选1,代表着两个词相邻出现的次数。窗口如果选2,就是相邻的3个词可以认为共同出现了。
例如语料:
今天 天气 不错
今天 天气 很 好
天气 很 好
天气 不错
可以形成以下共线矩阵
共线概率
词 j j j出现在词 i i i周围的概率,被称为词 i i i和词 j j j的共现概率 P ( X i j ∣ X j ) = X i j X j P(X_{ij}|X_j)=\frac{X_{ij}}{X_j} P(Xij∣Xj)=XjXij计算方式就是两个词共同出现的次数除于词 j j j的次数。
共线概率比
共现概率比就是两个共现概率的比值。
对于固体这个词,和冰出现的概率较大,而和蒸汽出现的概率较小,对于两者的比值就是就是一个较大的数字,而对于气体这个词是和冰的共线概率较小和蒸汽这个词的共线概率更大,他们的共线概率值就是一个较小的一个值。而对于中兴词,如水和流行两个词他们和冰与蒸汽的共线概率较为相近,共线概率比就为1。共线概率比就是能反应这样的意思,构建词向量对他们的共线概率比能接近上述的值。这种训练方式就被成为Glove的词向量训练方式。
问题转化:
给定三个词的词向量,Va, Vb, Vc三者的通过某个函数映射后,其比值应接近ABC的共现概率比
即目标为找到向量使得 f(Va, Vb, Vc) = P(A|B)/P(A|C),预测数值,属于回归问题, 损失函数使用均方差,f的设计论文中给出的是f(Va, Vb, Vc) = (Va - Vb )·Vc。
词向量训练总结
一、根据词与词之间关系的某种假设,制定训练目标。
二、设计模型,以词向量为输入。
三、随机初始化词向量,开始训练。
四、训练过程中词向量作为参数不断调整,获取一定的语义信息。
五、使用训练好的词向量做下游任务。
词向量存在的问题
- 词向量是“静态”的。每个词使用固定向量,没有考虑前后文
- 一词多义的情况。西瓜 - 苹果 - 华为,西瓜和苹果语义相近,苹果和华为语义相近,那么西瓜和华为是否语义接近呢?
- 影响效果的因素非常多:维度选择、随机初始化、skip-gram/cbow/glove、分词质量、词频截断、未登录词、窗口大小、迭代轮数、停止条件、语料质量等
- 没有好的直接评价指标。常需要用下游任务来评价