在前面几讲中笔者对 word2vec 词向量进行了相对详细的介绍,并在上一讲给出了 skip-gram 模型的训练示例。除了 word2vec 之外,常用的通过训练神经网络的方法得到词向量的方法还包括 Glove(Global Vectors for Word Representation)词向量、fasttext 词向量等等。本节笔者将对 GloVe 词向量进行简单的介绍,并在此基础上对基于 GloVe 模型训练好的词向量计算预先相似度和语义近似与类比等分析。
GloVe 词向量
GloVe 词向量直译为全局的词向量表示,跟 word2vec 词向量一样本质上是基于词共现矩阵来进行处理的。GloVe 词向量模型基本步骤如下:
基于词共现矩阵收集词共现信息。假设 Xij 表示词汇 i 出现在词汇 j 上下文的概率。首先对语料库进行扫描,对于每个词汇,我们定义一个 window_size ,即每个单词向两边能够联系到的距离,在一句话中如果一个词距离中心词越远,我们给予这个词的权重越低。
对于每一组词对,都有:
其中 wi 表示中心词向量,wj 表示上下文词向量,bi 和 bj 均表示上下文词的常数偏倚。
定义 GloVe 模型损失函数:
其中加权函数 f 可以帮助我们避免只学习到一个常见词的词向量模型,f 函数的选择原则在于既不给常见词(this/of/and)以过分的权重,也不会给一些不常见词(durion)太小的权重。参考形式如下:
GloVe 词向量在语义类别的准确率上与 word2vec 词向量的准确率对比:
计算余弦相似度
笔者基于 Andrew NG 在 deeplearningai 序列模型课程上给出的 Glove 词向量,示例如下:
导入相关的 package 并读入 Glove 词向量:
为了衡量两个单词在语义上的相近性,我们采用余弦相似度来进行度量。余弦相似度的计算公式如下:
基于余弦相似度的词汇语义相似性度量:
定义余弦相似度计算公式:
计算示例如下:
根据计算结果,我们可以看到,father 和 mother 之间有非常高的相似度,而 ball 和 crocodile 之间相似度较低。
语义类比
有了词汇之间的相似性度量之后,我们便可基于此做进一步分析,比如要解决 a is to b as c is to_这样的语义填空题。我们可以利用词汇之间的余弦相似性计算空格处到底填什么单词。
完整的函数定义如下:
计算示例如下:
通过计算我们可以看到:
italy is to italian as spain is to spanish.
small is to smaller as large is to larger.
基本上能较好的契合语义。
参考资料:
deeplearningai.com
https://cndocr.github.io/text2vec-doc-cn/glove.html
https://nlp.stanford.edu/pubs/glove.pdf
领取专属 10元无门槛券
私享最新 技术干货