Appearance
全局向量的词嵌入(GloVe)
一、概述
上下文窗口内的词共现可以携带丰富的语义信息。例如,在一个大型语料库中,“固体”比“气体”更有可能与“冰”共现,但“气体”一词与“蒸汽”的共现频率可能比与“冰”的共现频率更高。此外,可以预先计算此类共现的全局语料库统计数据:这可以提高训练效率。
GloVe 是 “Global Vectors for Word Representation” 的缩写,也就是全局向量的词嵌入,它是为了解决 word2vec 的问题而提出的。word2vec 是用局部的上下文窗口来训练词嵌入,而 GloVe 利用了整个语料库的全局统计信息(比如两个词一起出现的次数)来训练词嵌入,这样训练更高效,而且能更好地捕捉词之间的语义关系。
二、带全局语料统计的跳元模型
首先我们回顾一下 word2vec 的跳元模型,它的思路是 “用中心词预测周围的上下文词”,损失函数是用交叉熵来衡量模型预测的条件概率和真实的条件概率的差距。
但是我们可以用全局的语料统计来重新解释这个损失函数:
- 我们可以统计整个语料库中,每个词作为中心词时,其他词作为上下文词的共现次数,用 表示词 作为上下文词和词 作为中心词在同一个上下文窗口里出现的次数。
- 真实的条件概率就是,其中是词 作为中心词时,所有上下文词的总次数。
- 跳元模型的损失函数其实就是让模型预测的条件概率尽量接近真实的,损失函数是,也就是加权的交叉熵损失。
但是原来的交叉熵损失有两个问题:
- 计算的时候需要对整个词表求和,计算量很大,尤其是词表很大的时候。
- 交叉熵损失会给罕见事件(也就是很少出现的共现对)赋予太多的权重,这样模型会过度关注这些罕见的情况,而忽略了常见的情况。
三、GloVe 模型
GloVe 针对这些问题,对跳元模型做了三个修改,用平方损失来训练:
1. 三个修改点
- 修改损失函数的形式:原来的跳元模型是用概率分布,GloVe 直接用共现次数和模型预测的,然后取它们的对数,这样平方损失项就是,这样就不用对整个词表求和了,计算量大大减少。
- 添加偏置项:给每个词添加两个偏置项,中心词偏置和上下文词偏置,这样可以让模型更好地拟合真实的共现次数。
- 使用权重函数:给每个损失项加上一个权重函数,这个函数在 0 到 1 之间递增,当很小的时候,权重也很小,这样可以减少罕见事件的权重,避免模型过度关注这些罕见的情况。
2. GloVe 的损失函数
整合起来,GloVe 的损失函数是: 其中权重函数的建议选择是:当(比如 c=100)时,(比如 α=0.75);当时,。这样可以让罕见事件的权重小一些,常见事件的权重大一些。
3. GloVe 的特点
GloVe 有一个很重要的特点:当词 出现在词 的上下文窗口里时,词 也出现在词 的上下文窗口里,所以,也就是说共现次数是对称的。所以在 GloVe 模型里,中心词向量和上下文词向量在数学上是等价的,训练的时候,同一个词的中心词向量和上下文词向量可能不一样,但是我们可以把它们相加作为最终的词向量。
四、从条件概率比值理解 GloVe 模型
我们可以从另一个角度来理解 GloVe,这个角度更直观。比如我们有两个词 “ice”(冰)和 “steam”(蒸汽),统计它们和其他词的共现概率:
- 对于和 “ice” 相关但和 “steam” 无关的词,比如 “solid”(固体),的比值很大,是 8.9,说明 “ice” 和 “solid” 的关系比 “steam” 和 “solid” 的关系更紧密。
- 对于和 “steam” 相关但和 “ice” 无关的词,比如 “gas”(气体),的比值很小,是 0.085,说明 “steam” 和 “gas” 的关系比 “ice” 和 “gas” 的关系更紧密。
- 对于和两者都相关的词,比如 “water”(水),比值接近 1,是 1.36,说明 “ice” 和 “water” 的关系和 “steam” 和 “water” 的关系差不多。
- 对于和两者都不相关的词,比如 “fashion”(时尚),比值接近 1,是 0.96,说明这两个词和 “fashion” 的关系都不大。
这个比值能很好地表达词之间的语义关系,GloVe 就是要拟合这个比值。我们可以推导出来,GloVe 的损失函数其实就是从这个比值来的,这样我们就能更直观地理解 GloVe 为什么能很好地捕捉词之间的语义关系。
五、小结
GloVe 利用全局的语料统计信息(词的共现次数)来训练词嵌入,训练更高效,效果更好。
GloVe 对跳元模型做了三个修改:用平方损失,添加偏置项,使用权重函数,解决了交叉熵损失的问题。
GloVe 的中心词向量和上下文词向量在数学上是等价的,训练的时候可以把它们相加作为最终的词向量。
我们可以从条件概率比值的角度来理解 GloVe,这个比值能很好地表达词之间的语义关系,GloVe 就是要拟合这个比值。
(注:文档部分内容可能由 AI 生成) 源地址