目录
1 目的和思想
Glove模型的目的:求出能表示出词与词之间的关系的词向量
Glove的整体思想:词 k 在词 i 和词 j 中的的出现概率 有着特殊规律
模型出自论文: Glove: Global Vectors for Word Representation
2 模型原理
模型实现:
- 共现矩阵(对称矩阵)
- SVD处理成三角矩阵
- 拟合计算词向量
2.1 共现矩阵
以窗口的大小,出现在同一个窗口中的词计数
例:
- I love you.
- you love me.
- you like me?
I | love | you | me | like | . | ? | |
---|---|---|---|---|---|---|---|
I | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
love | 1 | 0 | 2 | 1 | 0 | 2 | 0 |
you | 1 | 1 | 0 | 2 | 1 | 2 | 1 |
me | 0 | 1 | 2 | 0 | 1 | 1 | 1 |
like | 0 | 0 | 1 | 1 | 0 | 0 | 1 |
. | 1 | 2 | 2 | 1 | 0 | 0 | 0 |
? | 0 | 0 | 1 | 1 | 1 | 0 | 0 |
2.2 SVD奇异值分解
将共现矩阵转换成三角矩阵 Σ Σ Σ,目的为了降维和减少计算量
A = U Σ V T A=UΣV^T A=UΣVT
2.3 拟合
通过设计的函数,将词向量和共现概率比值进行计算,使loss函数越小
- 设计的函数如下,是通过共现词频率比值的规律来设计的:
f(x):权重,为了不让相关度太高,保持相对高就行
3 Glove 总结
Glove 模型主要是利用了共现频率比值,这个特殊的规律,以这个规律来设计 loss 函数进行训练,得到的效果比部分模型的效果好
3.1 Glove 优缺点
3.1.1 优点
- 和 word2vec 相比,word2vec 是周围范围内的词训练,glove 是以统计的词,更全面
4 Glove 函数使用
4.1 输入
sentense = [['I', 'love', 'you', '.'],
['you', 'love', 'me','.'],
['you', 'like', 'me','?']]
4.2 函数及参数
from glove import Glove
from glove import Corpus # 语料库
# 生成共现矩阵,再SVD降维
corpus_model = Corpus()
corpus_model.fit(sentense,
window=10) # 窗口大小 (用于统计同一窗口的词,生成共现矩阵)
得到三角矩阵
Σ
Σ
Σ 作为 glove 输入 :
glove = Glove(no_components=10, # 词向量维度
learning_rate=0.05) # 学习率
glove.fit(corpus_model.matrix,
epochs=10, # 迭代次数
no_threads=1, # 计算线程数
verbose=False) # 打印epochs进度
4.3 输出及应用
# most_similar函数需要使用dictionary
glove.add_dictionary(corpus_model.dictionary)
print(glove.dictionary)
print(glove.word_vectors)
print(glove.most_similar('love', number=4))
词向量有 7 种词,每个词的维度为 10:
和 love 相近的词 top3 :