官方文档: https://radimrehurek.com/gensim/models/word2vec.html

1、训练模型定义

from gensim.models import word2vec

sentences = word2vec.Text8Corpus(r'user.txt')
word2vec = gensim.models.word2vec.Word2Vec(sentences, size=100, hs=1, min_count=1, window=3)
word2vec.save('word2vec_te')

参数解释:

1.sg=1是skip-gram算法,对低频词敏感;默认sg=0为CBOW算法。

2.size是输出词向量的维数,值太小会导致词映射因为冲突而影响结果,值太大则会耗内存并使算法计算变慢,一般值取为100到200之间。

3.window是句子中当前词与目标词之间的最大距离,3表示在目标词前看3-b个词,后面看b个词(b在0-3之间随机)。

4.min_count是对词进行过滤,频率小于min-count的单词则会被忽视,默认值为5。

5.negative和sample可根据训练结果进行微调,sample表示更高频率的词被随机下采样到所设置的阈值,默认值为1e-3。

6.hs=1表示层级softmax将会被使用,默认hs=0且negative不为0,则负采样将会被选择使用。

7.workers控制训练的并行,此参数只有在安装了Cpython后才有效,否则只能使用单核。

模型导出

word2vec = gensim.models.word2vec.Word2Vec(sentences(), size=256, window=10, min_count=64, sg=1, hs=1, iter=10, workers=25)
word2vec.save('word2vec_wx')


模型导入

model = gensim.models.Word2Vec.load('xxx/word2vec_wx')
pd.Series(model.most_similar(u'微信',topn = 360000))


gensim.models.Word2Vec.load的办法导入

其中的Numpy,可以用numpy.load:

import numpy
word_2x = numpy.load('xxx/word2vec_wx.wv.syn0.npy')

还有其他的导入方式:

from gensim.models.keyedvectors import KeyedVectors
word_vectors = KeyedVectors.load_word2vec_format('/tmp/vectors.txt', binary=False) # C text format
word_vectors = KeyedVectors.load_word2vec_format('/tmp/vectors.bin', binary=True) # C binary format

增量训练

model = gensim.models.Word2Vec.load('/tmp/mymodel')
model.train(more_sentences)

gensim训练好的word2vec使用

1、相似性

持数种单词相似度任务: 
相似词+相似系数(model.most_similar)、model.doesnt_match、model.similarity(两两相似)

model.most_similar(positive=['woman', 'king'], negative=['man'], topn=1)
[('queen', 0.50882536)] model.doesnt_match("breakfast cereal dinner lunch".split())
'cereal' model.similarity('woman', 'man')
.73723527


词向量

通过以下方式来得到单词的向量:

model['computer']  # raw NumPy vector of a word
array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32)

可视化展示

import gensim
import numpy
from gensim.models import word2vec
from sklearn.decomposition import PCA
from matplotlib import pyplot
# import pandas as pd
pyplot.rcParams['font.sans-serif'] = ['SimHei'] # model = gensim.models.Word2Vec.load('word2vec_wx')
model = gensim.models.Word2Vec.load('word2vec_te')
# model.train(more_sentences)
# pd.Series(model.most_similar(u'微信'),topn=360000)
# for i in model.most_similar(u'教育'):
# print(i)
# for i in model['教育']:
# print(i) # 基于2d PCA拟合数据
X = model[model.wv.vocab]
pca = PCA(n_components=2)
result = pca.fit_transform(X)
# 可视化展示
pyplot.scatter(result[:, 0], result[:, 1])
words = list(model.wv.vocab)
for i, word in enumerate(words):
pyplot.annotate(word, xy=(result[i, 0], result[i, 1]))
pyplot.show()

  

 

最新文章

  1. Python监控网站接口值
  2. Visual Studio 2015 Bowser Link的功能不停的向服务端发送请求
  3. Linux下使用fdisk发现磁盘空间和使用mount挂载文件系统
  4. Android Camera 使用小结
  5. HDU 4461 The Power of Xiangqi (水题)
  6. 敏捷开发的价值观(转自MBAlib)
  7. 获取表空间的语句 以及 建表和索引的ddl
  8. 51nod1138(math)
  9. java的运算符和表达式
  10. 继收购Magento十个月,Adobe推出Commerce Cloud商务云服务
  11. 在SAS数据步中执行过程步的简单示例
  12. CSS3动画属性:变形(transform)
  13. CentOS7 yum 安装 PHP 5.6.24
  14. 连接远程数据库时出现 SSH: expected key exchange group packet from server / 2003 - Can't connect to MySQL server on 'XXX' (10038) / 1130 - Host 'XXX' is not allowed to connect to this MySQL server
  15. XXX银行项目部署
  16. Android-Java-解决(多线程存钱案例)的安全隐患-synchronized
  17. 计数dp
  18. unity5, custom PBS shader
  19. VS2015 Git 源代码管理工具使用记录
  20. BZOJP1096[ZJOI2007]仓库建设——solution

热门文章

  1. ABAP 指定字符替换为空格
  2. MySQL的架构与历史1.5MySQL的存储引擎
  3. centos8修改更新迁徙到Stream方法
  4. 如何让一个 div 左右各空一定距离然后 div 占满剩下的宽度?
  5. Flink Application Development DataStream API Execution Mode (Batch/Streaming)- Flink应用程序开发DataStream API执行模式(批/流)
  6. 像这个TSC打印机售后维修服务平台网站,是如何做到复制不到网站里面的内容的?
  7. 当FTP不能满足大文件、海量文件传输时,有没有好的替代方案?
  8. MongoDB 4.0 dump备份脚本
  9. JS数组的交集与差集
  10. 2022-3-15内部群每日三题-清辉PMP