模型介绍
GloVe是由斯坦福大学提出于2014年在论文《GloVe:Global Vectors for Word Representation》中提出的模型,它的全称是Global Vectors,它主要将count based与direct prediction两种方法结合,即用到了语料库的全局信息,又用到了局部的上下文特征。它能做到这一点主要是依靠引入的一个共现矩阵,即co-occurrence probabilities matrix。
传统的学习词向量的模型主要分为两种类型:count based和direct prediction。其中count based method主要是构建一个global matrix,然后对该矩阵进行分解,进而得到文本与单词的相关信息,但是该矩阵是一个稀疏矩阵,进行SVD分解的代价是很大的,导致该算法的效率不高;direct prediction method主要是利用一个滑动的local context window来直接对文本进行预测,但是该方法用到的信息仅限于window内,没有用到全局信息。而Glove就是结合了这两者从而得到的一个新算法。
介绍GloVe之前,我们首先需要介绍一下它所用到的两个方法,count based和direct prediction。
count based method
顾名思义,该方法是基于count计数的,我们简要介绍一下count based的经典模型LSA(Latent Semantic Analysis),以此来了解count based的工作原理。LSA没有使用到神经网络,属于无监督学习,具有统计的韵味。
LSA实现原理主要是构造了一个单词-文本矩阵X,该矩阵的每行表示单词,每列表示文档,矩阵中的元素 x i j x_{ij} xij 表示第i个单词在第j个文档中出现的次数。将单词-文本矩阵进行SVD分解有:X=ABC(在分解时,我们选定主题k,只保留前k个最大的奇异值进行分解)。
其中A称为左奇异矩阵,它的每一行表示的是一个单词与主题的相关性,它的每一列表示每个单词出现的频繁程度;B是一个对角阵,它的对角元素是奇异值,代表了各个主题的权重;C称为右奇异矩阵,它的每一列表示的是一个文档与主题的相关性,它的每一行表示每个文档中出现词的个数的近似。
随后,我们可以将分解后的结果提取出来进行聚类,这样实现的效果,可以提取文本集合中的近义词,得到了语义级别的模型。
direct prediction
direct prediction的经典模型就是word2vec,它就是即时的利用一个滑动窗口,直接进行语言模型的预测。使用到了浅层神经网络进行训练,具体可以参考这里。
模型结构
GloVe也是训练词向量的一种方法,GloVe融合了矩阵分解Latent Semantic Analysis (LSA)的全局统计信息和local context window优势。融入全局的先验统计信息,可以加快模型的训练速度,又可以控制词的相对权重。GloVe是count-based的模型,因为没有使用神经网络。
GloVe首先基于语料库构建词的共现矩阵,然后基于共现矩阵和GloVe模型学习词向量。
共现矩阵
设共现矩阵为X,其元素为 X i j X_{ij} Xij。 X i j X_{ij} Xij的意义为:在整个语料库中,单词i和单词j共同出现在一个窗口中的次数。
设有语料库:i love you but you love him i am sad。这个小小的语料库只有1个句子,涉及到7个单词:i、love、you、but、him、am、sad。如果我们采用一个窗口宽度为5(左右长度都为2)的统计窗口,那么就有以下窗口内容:
窗口标号 | 中心词 | 窗口内容 |
---|---|---|
0 | i | i love you |
1 | love | i love you but |
2 | you | i love you but you |
3 | but | love you but you love |
4 | you | you but you love him |
5 | love | but you love him i |
6 | him | you love him i am |
7 | i | love him i am sad |
8 | am | him i am sad |
9 | sad | i am sad |
窗口0、1长度小于5是因为中心词左侧内容少于2个,同理窗口8、9长度也小于5。
以窗口5为例说明如何构造共现矩阵,中心词为love,语境词为but、you、him、i;则执行: X l o v e , b u t + = 1 , X l o v e , y o u + = 1 , X l o v e , h i m + = 1 , X l o v e , i + = 1 X_{love,but}+=1,X_{love,you}+=1,X_{love,him}+=1,X_{love,i}+=1 Xlove,but+=1,Xlove,you+=1,Xlove,him+=1,Xlove,i+=1。使用窗口将整个语料库遍历一遍,即可得到共现矩阵X。
Glove模型
模型参考
论文地址:https://aclanthology.org/D14-1162.pdf
代码地址:https://github.com/stanfordnlp/GloVe