Advertisement

Glove词向量核心内容介绍--NLP

阅读量:

Glove

尽管现在基于transformer的巨型模型也可以得到词向量。但是在一些基础的计算文本相似的任务中传统的静态词向量依然是非常好用的。Glove就是其中的一个代表。

2014年, Empirical Methods in Natural Language Processing (EMNLP)的论文:GloVe: Global Vectors for Word Representation 介绍了这种词向量。

正如论文的名字一样,GloVe是一个基于全局词频统计(count-based & overall statistics)的词表征(word representation)工具,它和word2vec一样,把一个单词表达成一个低维稠密向量, 可以通过余弦相似度等计算单词之间的相似性。

怎样训练Glove?

Glove 的训练过程比较简单,可以分为3步:

step1:
根据语料库(corpus)构建一个共现矩阵(Co-ocurrence Matrix)X,矩阵中的每一个元素代表单词和上下文单词在特定大小的上下文窗口内共同出现的次数。

通常来说,次数最小是1,但是GloVe根据两个单词在上下文窗口的距离,提出了一个衰减函数,decay=\frac{1}{d} 用于计算权重,也就是说距离越远的两个单词所占总计数的权重越小。
在这里插入图片描述

Step2:

构建词向量(Word Vector)和共现矩阵(Co-ocurrence Matrix)之间的近似关系,作者用了下面的公式:

W_{i}^{T}W_{j}+b_{i}+b_{j} = log(X_{ij})

Wi, Wj 分别代表两个随机初始化的矩阵, 训练结束后就是我们要的词向量, 为什么要用两个矩阵呢? 一个是单词作为中心词时的矩阵, 一个是作为上下文词的矩阵。

step3:
目标函数:
glove的目标函数就是一个带权重的平方损失函数。

J = \sum_{i,j=1}^{V}f(X_{ij})(W_{i^{T}}W_{J}+b_{i}+b_{j}-log(X_{ij})))^{2}

log(X_{ij}) 代表真实值(相当于标签)
W_{i^{T}}W_{J}+b_{i}+b_{j} 相当于预测值

f(X_{ij})的功能是使得经常共现的单词权重大于很少共现的, 但是也不可以特别大,达到一定程度就停止,如果没有共现,则f(0)=0, 所以定义了这样一个函数:

f(x)=(\frac{x}{x_{max}})^{\alpha }; if x<xmax
f(x)=1; otherwise
在这里插入图片描述

训练

采用AdaGrad的梯度下降算法,对矩阵中的所有非零元素进行随机采样,学习曲率(learning rate)设为0.05,在vector size小于300的情况下迭代了50次,其他大小的vectors上迭代了100次,直至收敛。

最终选择两个矩阵加和作为最终词向量。

全部评论 (0)

还没有任何评论哟~