Gensim加载Glove以及词向量可视化

glove官网
glove的github
gensim帮助文档

将glove模型转换成gensim方便加载的格式(gensim支持word2vec格式的预训练模型格式)

from gensim.scripts.glove2word2vec import glove2word2vec

glove_input_file = 'F:\\dl-data\\vector\\glove.840B.300d.txt'
word2vec_output_file = 'F:\\dl-data\\vector\\glove.840B.300d.word2vec.txt'
(count, dimensions) = glove2word2vec(glove_input_file, word2vec_output_file)
print(count, '\n', dimensions)

运行后,等一段时间,得到glove.840B.300d.word2vec.txt文件。
打印输出结果为:词数为2196017 ,向量维度为300。

测试代码时可以用维度低的glove向量,这样速度快一些,比如glove.twitter.27B.25d.txt得到的结果为:词数为1193514,向量维度为25。

获得一个词的向量,以及得到与某个词最接近的几个词

注意这两个操作会占用大量内存,需要处理很长时间。

from gensim.models import KeyedVectors

# 加载模型
glove_model = KeyedVectors.load_word2vec_format(word2vec_output_file, binary=False)
# 如果希望直接获取某个单词的向量表示,直接以下标方式访问即可
cat_vec = glove_model['cat']
print(cat_vec)
# 获得单词frog的最相似向量的词汇
print(glove_model.most_similar('frog'))

打印输出为cat的300维向量,以及最接近的几个词

[('frogs', 0.7867065072059631), ('toad', 0.7364183068275452), 
('turtle', 0.6883987188339233), ('monkey', 0.6711267232894897),
 ('lizard', 0.6548661589622498), ('Frog', 0.6517729759216309), 
 ('snake', 0.6297693252563477), ('ladybug', 0.6290067434310913), 
 ('squirrel', 0.6220200657844543), ('elephant', 0.614372968673706)]

更多用法,参考gensim关于这部分的示例,比如:

result = word_vectors.most_similar(positive=['woman', 'king'], negative=['man'])
print(result)

词向量可视化

按照上文的gensim得到glove的300维向量后,需要降低维度,在二维或三维的图上显示。
根据找到的资料,选择用SVD分解,它把词向量变成三个矩阵的乘积,具体的原理不懂。
在numpy.linalg中有svd函数,输出为三个矩阵U,S,VH。
U矩阵便是经过降维后的词向量矩阵,最后将U的前两个值表示这个词的位置,用matplotlib绘制。

U, s, Vh = la.svd(X, full_matrices=False)

绘制部分为

for i in range(matrix.shape[0]):   # word
    plt.text(U[i, 0], U[i, 1], words[i])

coord = U[:, 0:2]
plt.xlim((np.min(coord[:, 0]) - 0.1, np.max(coord[:, 0]) + 0.1))
plt.ylim((np.min(coord[:, 1]) - 0.1, np.max(coord[:, 1]) + 0.1))

结果图展示
在这里插入图片描述

参考资料:
词向量可视化
GloVe学习之Python中简单的词向量SVD分解

  • 0
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值