gensim
2024-09-08 19:36:03
官方文档: 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()
最新文章
- Python监控网站接口值
- Visual Studio 2015 Bowser Link的功能不停的向服务端发送请求
- Linux下使用fdisk发现磁盘空间和使用mount挂载文件系统
- Android Camera 使用小结
- HDU 4461 The Power of Xiangqi (水题)
- 敏捷开发的价值观(转自MBAlib)
- 获取表空间的语句 以及 建表和索引的ddl
- 51nod1138(math)
- java的运算符和表达式
- 继收购Magento十个月,Adobe推出Commerce Cloud商务云服务
- 在SAS数据步中执行过程步的简单示例
- CSS3动画属性:变形(transform)
- CentOS7 yum 安装 PHP 5.6.24
- 连接远程数据库时出现 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
- XXX银行项目部署
- Android-Java-解决(多线程存钱案例)的安全隐患-synchronized
- 计数dp
- unity5, custom PBS shader
- VS2015 Git 源代码管理工具使用记录
- BZOJP1096[ZJOI2007]仓库建设——solution
热门文章
- ABAP 指定字符替换为空格
- MySQL的架构与历史1.5MySQL的存储引擎
- centos8修改更新迁徙到Stream方法
- 如何让一个 div 左右各空一定距离然后 div 占满剩下的宽度?
- Flink Application Development DataStream API Execution Mode (Batch/Streaming)- Flink应用程序开发DataStream API执行模式(批/流)
- 像这个TSC打印机售后维修服务平台网站,是如何做到复制不到网站里面的内容的?
- 当FTP不能满足大文件、海量文件传输时,有没有好的替代方案?
- MongoDB 4.0 dump备份脚本
- JS数组的交集与差集
- 2022-3-15内部群每日三题-清辉PMP