利用gensim构建word2vec词向量模型并保存词向量
利用gensim包的word2vec模块构建CBOW或Skip-Gram模型来进行词向量化比较方便。
具体gensim.models.Word2Vec模型的参数可以看官网介绍:
https://radimrehurek.com/gensim/models/word2vec.html#gensim.models.word2vec.Word2Vec
''' 根据训练语料库,自己训练语言模型得到词向量 '''
# 对分词后的文本训练Word2vec模型
from gensim.models import word2vec
import loggingdef get_wordvec(corpus_path, model_name, vec_path, binary=False):# 获取日志信息logging.basicConfig(foramt='%(asctime)s: %(levelname)s: %(message)s', level=logging.INFO)# 加载分词后的文本sentences = word2vec.Text8Corpus(corpus_path)# 训练模型model = word2vec.Word2Vec(sentences, size=300, hs=1, min_count=1, window=3)model.save(model_name)model.wv.save_word2vec_format(vec_path, binary=False)
model.save()
不能利用文本编辑器查看,但是保存了训练的全部信息,可以在读取后追加训练来更新模型。模型更新后,即模型包含的wv,vocabulary,parameters,trainables内置神经网络等都更新了。model.wv.save_word2vec_format()
保存为word2vec文本格式,但是保存时丢失了词汇树等部分信息,不能追加训练。
模型构建很简便,但是遇到几个小问题:一个是词向量保存的格式有好几种,大小会不同嘛,哪个速度快,选哪个呢?另外保存时使用二进制和非二进制,在读取词向量时可能带来编码问题。
这里是针对中文的一个简单的分词后的语料数据。
我尝试了几种模型词向量的保存方法:
- 将词向量保存为txt格式,即非二进制:
from gensim.models import KeyedVctors, Word2Vec
corpus_path = os.path.join(main, 'data\\corpus.txt')
w2v_model_name = os.path.join(main, 'model\\train_word2vec_model.model')
vec_path = os.path.join(main,'model\\token_vec_300.txt')
# save model, word_vectors
get_wordvec(corpus_path, model_name, vec_path, binary=False)
# load model
model = Word2Vec(w2v_model_name)
# load word_vectors
wv_from_text = KeyedVectors.load_word2vec_format(vec_path, binary=False)
词向量大小为19.7KB,保存比较快。
- 将词向量保存为bin格式,即二进制格式:
from gensim.models import KeyedVctors, Word2Vec
corpus_path = os.path.join(main, 'data\\corpus.txt')
w2v_model_name = os.path.join(main, 'model\\train_word2vec_model.model')
vec_path = os.path.join(main,'model\\token_vec_300.bin')
# save model, word_vectors
get_wordvec(corpus_path, model_name, vec_path, binary=True)
# load model
model = Word2Vec(w2v_model_name)
# load word_vectors
wv_from_bin = KeyedVectors.load_word2vec_format(vec_path, binary=True)
词向量保存为bin格式,大小和txt格式一样,也能正常读取。
- 将词向量保存为bin.gz格式,经过压缩的二进制:
from gensim.models import Word2Vec, KeyedVectors
corpus_path = os.path.join(main, 'data\\corpus.txt')
w2v_model_name = os.path.join(main, 'model\\train_word2vec_model.model')
vec_path = os.path.join(main,'model\\token_vec_300.bin.gz')
# save model, word_vectors
get_wordvec(corpus_path, model_name, vec_path, binary=True)
# load model
model = Word2Vec.load(w2v_model_name)
# load word_vectors
wv_from_bin_gz = KeyedVectors.load_word2vec_format(vec_path, binary=True)
bin.gz格式是经过压缩的二进制,大小变成8.06KB。使用gzipped / bz2输入也可以,不需要解压。
注意:
- 使用load方式加载模型,可以进行再训练。
- 训练后的词向量可以使用model.wv保存在一个KeyedVectors实例中。
词向量保存和加载
保存训练好的词向量。
保存
- 使用
mdoel.wv.save()
以KededVectors实例的形式保存词向量文件,以该方式保存的模型丢失了完整的模型状态,无法再训练,但是保存的对象更小更快。
model.wv.save("model.kv")
- 使用
model.wv.save_word2vec_format()
保存词向量文件(之前是model.save_word2vec_format(),已弃用),可以选择二进制或非二进制,即.txt和.bin格式。
model.wv.save_word2vec_format("model.bin", binary=True)
加载
- 使用KeyedVectors.load加载词向量文件,保存在KeyedVectors实例中(适用于不需要完整的模型状态,不再进行训练)。
from gensim.models import KeyedVectors
wv = KeyedVectors.load("model.wv", mmap='r')
vector = wv['computer'] # numpy vector of a word
- 以word2vec C format加载词向量,保存在KeyedVectors实例中
使用KeyedVector.load_word2vec_format()可以加载两种格式的词向量文件:C 文本格式和C bin格式(二进制)
from gensim.models import KeyedVectors
wv_from_text = KeyedVectors.load_word2vec_format("model_kv_c", binary=False) # C text format
wv_from_bin = KeyedVectors.load_word2vec_format("model_kv.bin", binary=True) # C bin format
参考:
https://blog.csdn.net/ling620/article/details/99434061
https://www.jianshu.com/p/fbce9c8f5536
https://www.unclewang.info/learn/python/481/
欢迎各位关注我的个人公众号:HsuDan,我将分享更多自己的学习心得、避坑总结、面试经验、AI最新技术资讯。
![](/assets/blank.gif)
利用gensim构建word2vec词向量模型并保存词向量相关推荐
- 使用gensim框架及Word2Vec词向量模型获取相似词
使用gensim框架及Word2Vec词向量模型获取相似词 预备知识 Word2Vec模型下载 加载词向量模型 预备知识 gensim框架 gensim是基于Python的一个框架,它不但将Pytho ...
- wiki中文数据语料抽取-gensim构建word2vec模型
阅读目录: 1. WikiCorpus提取xml数据集语料 2. opencc繁转简 3. jieba中文分词 4. word2vec词向量转化 5. 模型测试(相似度) wiki数据集获取途径:点此 ...
- 利用gensim里word2vec训练实例——分析三国里人物关系
前言 万物皆可Embedding 入坑cs224N后看完第二周和相关论文.觉得word2vec非常有意思,将一段具有上下文关系的短文(实体)词语学习嵌入到语义空间成为一个向量,然后判断两个词语(实体) ...
- 【Python自然语言处理】文本向量化的六种常见模型讲解(独热编码、词袋模型、词频-逆文档频率模型、N元模型、单词-向量模型、文档-向量模型)
觉得有帮助请点赞关注收藏~~~ 一.文本向量化 文本向量化:将文本信息表示成能够表达文本语义的向量,是用数值向量来表示文本的语义. 词嵌入(Word Embedding):一种将文本中的词转换成数字向 ...
- 学习笔记(06):自然语言处理Word2Vec视频学习教程-使用gensim构建word2vec词向量
立即学习:https://edu.csdn.net/course/play/5226/106444?utm_source=blogtoedu word2vec size 50 300 特征向量维度
- GENSIM官方教程(4.0.0beta最新版)-Word2Vec词向量模型
GENSIM官方教程(4.0.0beta最新版)-词向量模型 译文目录 回顾:词袋模型 简介:词向量模型 词向量模型训练实例 训练一个你自己的模型 储存和加载模型 训练参数 内存相关的细节 模型评估 ...
- word2vec原理(一): 词向量、CBOW与Skip-Gram模型基础
word2vec原理(一): CBOW与Skip-Gram模型基础 word2vec原理(二):基于Hierarchical Softmax的模型 word2vec原理(三): 基于Negative ...
- 利用Gensim在英文Wikipedia训练词向量
最近在SemEval 2010 Task 8上做关系分类的实验,主要是实现了一下这篇论文的模型:A neural network framework for relation extraction: ...
- 词袋模型(BOW,bag of words)和词向量模型(Word Embedding)概念介绍
一.词袋模型 例句: Jane wants to go to Shenzhen. Bob wants to go to Shanghai. 将所有词语装进一个袋子里,不考虑其词法和语序的问题,即每个词 ...
最新文章
- 计算机桌面颜色如何设置标准,电脑调整桌面颜色设置_电脑桌面颜色设置
- ubuntu php 源,Ubuntu18.04更换国内源
- 基础 - jQuery选项卡
- 修改mysql编码方式centos_CentOS下修改mysql数据库编码为UTF-8(附mysql开启远程链接和开放3306端口)...
- 1.9 编程基础之顺序查找 03 不高兴的津津 scratch
- Head First设计模式一:策略模式
- 升级xcode7.0 第三方库不能用的解决方法(bitcode是什么鬼?)
- 渗透理解Animation时间插值Interpolator类
- DAS-DVS分布式光纤振动传感-发展现状与未来趋势分析(华为光纤传感新产品Huawei OptiXsense EF3000)
- 稳定性测试怎么测_药物稳定性试验的细枝末节该如何处理?
- 脾胃湿热吃什么药.体内湿气重有何表示 怎样去除
- SAP管理软件系统框架合同业务的实现及相关注意事项解析
- python处理金融数据_Python金融大数据分析-数据获取与简单处理
- Direct3D初始化失败的原因
- 计算机反复几次才能启动,电脑连续开机几次才能启动怎么办?
- Hyper-V相关Powershell cmdlets
- SpringBoot2.0学习笔记 使用Actualor监控项目运行状态
- 一键百度 一键翻译 云脉CC慧眼百度搜索版
- VW ware安装Ubuntu虚拟机及环境配置
- 分析:新零售时代下的智慧供应链 阿里供应链布局揭秘?