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根据两个单词在上下文窗口的距离,提出了一个衰减函数, d e c a y = 1 d decay=\frac{1}{d} decay=d1 用于计算权重,也就是说距离越远的两个单词所占总计数的权重越小。
Step2:
构建词向量(Word Vector)和共现矩阵(Co-ocurrence Matrix)之间的近似关系,作者用了下面的公式:
W i T W j + b i + b j = l o g ( X i j ) W_{i}^{T}W_{j}+b_{i}+b_{j} = log(X_{ij}) WiTWj+b