一、模型训练

1、安装gensim

pip install gensim
gensim中封装了包括word2vecdoc2vec等模型,word2vec采用了CBOW(Continuous Bag-Of-Words,连续词袋模型)Skip-Gram两种模型。

2、模型训练

from gensim.models import Word2Vecmodel = Word2Vec(sentences,sg=1,size=100,window=5,min_count=5,negative=3,sample=0.001,hs=1,workers=4)

gensim参数解释

1、sentences 第一个参数是预处理后的训练语料库,是可迭代列表,但是对于较大的语料库,可以直接从磁盘/网络传输句子迭代。
2、sg=1是skip-gram算法,对于低频词敏感;默认sg=0为CBOW算法
3、size(int) 是输出词向量的维数默认值是100,。这个维度的取值和我们的语料库大小有关,比如小于100M的文本语料库,则使用默认值就可以。如果是超大语料库,建议增大维度。值太小会导致词映射因为冲突而导致影响结果,值太大则会耗内存并使计算变慢,一般取值为100到200之间,不过见的比较多的也有300的维度
4、window(int) 是一个句子中当前单词和预测单词之间的最大距离,window越大,则和某一较远的词也会产生上下文关系。默认值为5。window值越大所需要枚举的预测词越多,计算时间越长。
5、min_count 忽略所有频率低于此值的但单词,默认值是5.
6、workers表示训练词向量时使用的进程数,默认是但当前运行机器的处理器核数。
* 还有关于采样和学习率的,一般不常设置。
1、negative和sample可根据训练结果进行微调,sample表示更高频率的词被随机下采样到所设置的阈值,默认值是 1e-3。
2、hs=1 表示层级softmax将会被使用,默认hs=0且negative不为0,则负采样将会被使用。
from gensim.models import Word2Vec
sentences = [["cat", "say", "meow"], ["dog", "say", "woof"]]
# 数据也可以是分好词的文档,按行进项读取
# sentences = word2vec.Text8Corpus('xxx.txt')
model = Word2Vec(sentences,min_count=1

3、模型的保存

模型保存有两种方式:

model = Word2Vec(common_texts,size=100,windows=5,min_count=1,workers=4)
model.save(path)
#或者
model.wv.save(path)
3.1模型训练保存与加载(模型可继续训练)
from gensim.test.utils import common_texts,get_tmpfile
from gensim.models import Word2Vecpath = get_tmpfile("word2vec.model") # 创建临时文件
model = Word2Vec(sentences,size=100,window=5,min_count=1,workers=4)
model.save("word2vec.model")
# 加载模型
model = Word2Vec.load("word2vec.model")

模型的继续训练
训练是流式的,这意味着句子可以是一个生成器,动态的从磁盘读取数据,而无需将整个语料库加载到RAM中。这也意味着你可以在以后继续训练模型

from gensim.test.utils import commom_texts,get_tmpfile
from gensim.models import Word2Vecpath = get_tmpfile("word2vec.model")
model = Word2Vec(sentences,size=100,window=5,min_count=1,workers=4)
model.save("word2vec.model")
# 加载模型
model = Word2Vec.load("word2vec.model")#继续训练
model.train([['hello','world']],total_examples=1,epochs=1)
#(0,2)#调用模型
vector= model['computer']
#如果已经完成模型的训练(即不再进项更新,只进行查询),可以切换到KeyedVectors实例
word_vectors = model.wv
def model
3.2模型训练保存与加载2(模型不可继续训练)

如要继续训练,需要save()存储完整的Word2Vec对象状态,而不仅仅是Keyedvector。如果不需要继续训练模型,在加载时设置参数model.wv.save(path)以及KeyedVectots.load("model.wv",mmap='r')分离训练向量到KeyedVectots,得到更小、更快的模型对象。

from gensim.models import KeyedVectorspath = get_tmpfile("model.wv")
model = Word2Vec(common_texts,size=100,window=5,min_count=1,workers=4)
model.wv.save(apth)
wv=KeyedVectors.load("model.wv",mmap='r')
vector = wv['computer']

如果从文件加载训练好的模型(人民日报词向量):

from gensim.models import KeyedVectors
from gensim.test.utils import datapathmodel = KeyedVectors.load_word2vec_format(datapath('E:\Mypython3\wenshu_my\data_my\sgns.renmin.bigram-char'),binary=False)for key in model.similar_by_word('人民',topn=10):
print(key)
------------------------------------------------
('各族人民', 0.6978535652160645)
('人民大众', 0.6294125318527222)
('亿万人民', 0.6256287097930908)
('群众', 0.5972658395767212)
('民众', 0.567489504814148)
('城乡人民', 0.5603191256523132)
('广大群众', 0.5412135124206543)
('新疆各族人民', 0.5377484560012817)
('百姓', 0.5321395993232727)
('劳苦大众', 0.530288577079773)

gensim官网例子,训练一个完成的模型,然后访问它的模型。wv属性,它包含独立键控向量。例如,使用Word2Vec算法训练向量

from gensim.test.utils import common_texts
from gensim.models import Word2Vecmodel = Word2Vec(common_texts,size=100,window=5,min_count=1,workers=4)
word_vectors = model.wv

将vector保存到磁盘

from gensim.test.utils import get_tmpfile
from gensim.models import KeyedVectorsfname = get_tmpfile("vectors.kv")
word_vectors.save(fname)
word_vectors = KeyedVectors.load(fname,mmap='r')

这些向量还可以从磁盘上的现有文件实例化,以原始谷歌word2vec C格式作为KeyedVectors实例。

from gensim.test.utils import datapathwv_from_text = KeyedVectors.load_word2vec_format(datapath("word2vec_pre_kv_c"),binary=False)
wv_from_bin = KeyedVectors.load_word2vec_format(datapath("euclidean_vectors.bin"),binary=True)

Word2Vec词向量使用汇总(词语相似性、集合相似度、词向量计算等)

在已经获取模型的前提下可以进行

1.获取每个词的词向量

model['computer']

2.支持词语的加减运算(实际例子可能只要少数例子比价符合)

model.most_similar(postive=['woman','king'],negative=['man'])
3.计算两个词之间的余弦距离
model.similarity('好','还行')

4.计算余弦距离最接近"word"的10个词,或topn个词

model.most_similar("word")
model.similar_by_word('贪污',topn=100) # 最接近的100个词

5.计算两个集合之间的余弦相似度

当出现某个词语不再这个训练集合中的时候,会报错。

list_sim1 = model.n_similarity(list1,list2)

6.选出集合中不同类的词语

model.doesnt_match("breakfast cereal dinner lunch".split())
#使用以下命令初始化模型
from gensim.test.utils import common_texts, get_tmpfile
from gensim.models import Word2Vecpath = get_tmpfile("word2vec.model") #创建临时文件model = Word2Vec(common_texts, size=100, window=5, min_count=1, workers=4)
model.save("word2vec.model")
#加载模型
model = Word2Vec.load("word2vec.model")
---------------------
#获取每个词的词向量
model['computer']  # raw numpy vector of a word
#输出array([-0.00449447, -0.00310097,  0.02421786, ...], dtype=float32)
---------------------
# 支持词语的加减运算。(实际中可能只有少数例子比较符合)
model.most_similar(positive=['woman', 'king'], negative=['man'])
#输出[('queen', 0.50882536), ...]
---------------------
#计算两个词之间的余弦距离
model.similarity("好", "还行")
model.most_similar("人民")#计算余弦距离最接近“滋润”的10个词
for i in model.most_similar("人民"):print i[0],i[1]
---------------------
#model.similar_by_word('人民',topn=100) 输出与“人民”相似的前100个词
for key in model.similar_by_word('人民',topn=10):print(key)
for key in model.wv.similar_by_word('人民', topn =10):print(key)
---------------------
#计算两个集合之间的余弦似度,当出现某个词语不在这个训练集合中的时候,会报错
list1 = [u'今天', u'我', u'很', u'开心']
list2 = [u'空气',u'清新', u'善良', u'开心']
list3 = [u'国家电网', u'再次', u'宣告', u'破产', u'重新']
list_sim1 =  model.n_similarity(list1, list2)
print (list_sim1)
list_sim2 = model.n_similarity(list1, list3)
print( list_sim2)
0.541874230659
0.13056320154
---------------------
#选出集合中不同类的词语
model.doesnt_match("breakfast cereal dinner lunch".split())
#输出'cereal'
list = ['纽约', '北京', '上海', '西安']
print( model.doesnt_match(list))
list = ['纽约', '北京', '上海', '西瓜']
print(model.doesnt_match(list))
纽约
西瓜

python训练Word2Vec词向量相关推荐

  1. 【NLP】维基百科中文数据训练word2vec词向量模型——基于gensim库

    前言   本篇主要是基于gensim 库中的 Word2Vec 模型,使用维基百科中文数据训练word2vec 词向量模型,大体步骤如下: 数据预处理 模型的训练 模型的测试 准备条件: Window ...

  2. NLP 利器 Gensim 来训练 word2vec 词向量模型的参数设置

    使用 Gensim 来训练 word2vec 词向量模型的参数设置 文章目录 一.最小频次 min_count 二.词向量维度 size 三.并行处理核心数 workers 我们可以使用一些参数设置来 ...

  3. 文本分布式表示(三):用gensim训练word2vec词向量

    今天参考网上的博客,用gensim训练了word2vec词向量.训练的语料是著名科幻小说<三体>,这部小说我一直没有看,所以这次拿来折腾一下. <三体>这本小说里有不少人名和一 ...

  4. 维基百科简体中文语料训练word2vec词向量

    步骤: 1.下载维基百科中文语料 2.使用工具从压缩包中抽取正文文本 3.将繁体字转简体字 4.分词 5.训练模型 6.测试模型 1.下载维基百科中文语料 语料下载地址:https://dumps.w ...

  5. 机器学习之路: python 实践 word2vec 词向量技术

    git: https://github.com/linyi0604/MachineLearning 词向量技术 Word2Vec 每个连续词汇片段都会对后面有一定制约 称为上下文context找到句子 ...

  6. 调用gensim库训练word2vec词向量

    首先准备符合规定输入的语料: import jieba raw_text = ["你站在桥上看风景","看风景的人在楼上看你","明月装饰了你的窗子& ...

  7. 【NLP】word2vec词向量模型训练——基于tensorflow

    前言   维基百科中文数据训练word2vec词向量模型--基于gensim库   上文我们使用了 gensim 库中的 Word2vec 模块训练词向量模型,本篇我们通过 tensorflow 自己 ...

  8. 应用 - gensim如何得到word2vec词向量

    从三个方面去说明 word2vec词向量中文语料处理(python gensim word2vec总结) python训练work2vec词向量系列函数(python gensim) python训练 ...

  9. word2vec实例详解python_在python下实现word2vec词向量训练与加载实例

    项目中要对短文本进行相似度估计,word2vec是一个很火的工具.本文就word2vec的训练以及加载进行了总结. word2vec的原理就不描述了,word2vec词向量工具是由google开发的, ...

最新文章

  1. oracle调用存储过程
  2. 【Java系列】从JVM角度解析Java核心类String的不可变特性
  3. Win32 堆内存分配示例
  4. C#中将字符串内容写入到txt文件中
  5. c char*转int_C语言中的char类型也有signed和unsigned?字符也有正负之分吗?
  6. VR创业公司Pico被字节跳动收购
  7. asa清空配置_Cisco ASA 管理配置文件
  8. Visitor模式学习
  9. c# winform 打印 窗体 及 窗体控件内容 的 初级尝试
  10. ASP.NET MVC4 使用UEditor富文本
  11. Java中的几种设计模式:行为型模式
  12. windows/Linux/Mac下安装maven
  13. 【好文翻译】10个免费的压力测试工具(Web)
  14. 百度网盘不限速下载百度文科文档免会员下载
  15. 用计算机谈我还是从前那个少年,我还是从前那个少年是什么歌-我还是从前那个少年抖音歌曲介绍...
  16. 2017全国一线城市二线三线四线五线城市名单【最新完整榜单】
  17. Navicat 15 premium手动备份数据库步骤
  18. calib matlab,toolbox_calib 图片处理,各种用于 的.M文件,非常适 初学者。 matlab 242万源代码下载- www.pudn.com...
  19. Thinkphp6 baiy/think-async redis 异步代码执行/异步延迟执行/异步事件订阅
  20. Excel中输入身份证号后三位变成0的情况处理如下

热门文章

  1. cesium地图添加坐标点
  2. 高频交易(二)浅谈高频交易中比较成熟的一些交易策略
  3. 6 Transport
  4. 资深摄影师眼中,青岛值得一游的景点有哪些?
  5. 域控制器是什么及其功能
  6. 直接数字下变频(2):贝塞尔插值法
  7. sql 语句 将查询结果中数字等标示转成汉字
  8. qq邮箱发送邮件到163邮箱
  9. 介绍DOTA2 AI的开发基础——调试
  10. CentOS报错make: *** [fuzz-commit-graph.o] Error 1