赞
踩
Glove模型的目的:求出能表示出词与词之间的关系的词向量
Glove的整体思想:词 k 在词 i 和词 j 中的的出现概率 有着特殊规律
模型出自论文: Glove: Global Vectors for Word Representation
模型实现:
以窗口的大小,出现在同一个窗口中的词计数
例:
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 |
将共现矩阵转换成三角矩阵 Σ Σ Σ,目的为了降维和减少计算量
A = U Σ V T A=UΣV^T A=UΣVT
通过设计的函数,将词向量和共现概率比值进行计算,使loss函数越小
Glove 模型主要是利用了共现频率比值,这个特殊的规律,以这个规律来设计 loss 函数进行训练,得到的效果比部分模型的效果好
sentense = [['I', 'love', 'you', '.'],
['you', 'love', 'me','.'],
['you', 'like', 'me','?']]
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进度
# 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 :
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。