利用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文本格式,但是保存时丢失了词汇树等部分信息,不能追加训练。

模型构建很简便,但是遇到几个小问题:一个是词向量保存的格式有好几种,大小会不同嘛,哪个速度快,选哪个呢?另外保存时使用二进制和非二进制,在读取词向量时可能带来编码问题。
这里是针对中文的一个简单的分词后的语料数据。
我尝试了几种模型词向量的保存方法:

  1. 将词向量保存为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,保存比较快。

  1. 将词向量保存为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格式一样,也能正常读取。

  1. 将词向量保存为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实例中。

词向量保存和加载

保存训练好的词向量。

保存

  1. 使用mdoel.wv.save()以KededVectors实例的形式保存词向量文件,以该方式保存的模型丢失了完整的模型状态,无法再训练,但是保存的对象更小更快。
model.wv.save("model.kv")
  1. 使用model.wv.save_word2vec_format()保存词向量文件(之前是model.save_word2vec_format(),已弃用),可以选择二进制或非二进制,即.txt和.bin格式。
model.wv.save_word2vec_format("model.bin", binary=True)

加载

  1. 使用KeyedVectors.load加载词向量文件,保存在KeyedVectors实例中(适用于不需要完整的模型状态,不再进行训练)。
from gensim.models import KeyedVectors
wv = KeyedVectors.load("model.wv", mmap='r')
vector = wv['computer'] # numpy vector of a word
  1. 以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最新技术资讯。

利用gensim构建word2vec词向量模型并保存词向量相关推荐

  1. 使用gensim框架及Word2Vec词向量模型获取相似词

    使用gensim框架及Word2Vec词向量模型获取相似词 预备知识 Word2Vec模型下载 加载词向量模型 预备知识 gensim框架 gensim是基于Python的一个框架,它不但将Pytho ...

  2. wiki中文数据语料抽取-gensim构建word2vec模型

    阅读目录: 1. WikiCorpus提取xml数据集语料 2. opencc繁转简 3. jieba中文分词 4. word2vec词向量转化 5. 模型测试(相似度) wiki数据集获取途径:点此 ...

  3. 利用gensim里word2vec训练实例——分析三国里人物关系

    前言 万物皆可Embedding 入坑cs224N后看完第二周和相关论文.觉得word2vec非常有意思,将一段具有上下文关系的短文(实体)词语学习嵌入到语义空间成为一个向量,然后判断两个词语(实体) ...

  4. 【Python自然语言处理】文本向量化的六种常见模型讲解(独热编码、词袋模型、词频-逆文档频率模型、N元模型、单词-向量模型、文档-向量模型)

    觉得有帮助请点赞关注收藏~~~ 一.文本向量化 文本向量化:将文本信息表示成能够表达文本语义的向量,是用数值向量来表示文本的语义. 词嵌入(Word Embedding):一种将文本中的词转换成数字向 ...

  5. 学习笔记(06):自然语言处理Word2Vec视频学习教程-使用gensim构建word2vec词向量

    立即学习:https://edu.csdn.net/course/play/5226/106444?utm_source=blogtoedu word2vec size 50 300 特征向量维度

  6. GENSIM官方教程(4.0.0beta最新版)-Word2Vec词向量模型

    GENSIM官方教程(4.0.0beta最新版)-词向量模型 译文目录 回顾:词袋模型 简介:词向量模型 词向量模型训练实例 训练一个你自己的模型 储存和加载模型 训练参数 内存相关的细节 模型评估 ...

  7. word2vec原理(一): 词向量、CBOW与Skip-Gram模型基础

    word2vec原理(一): CBOW与Skip-Gram模型基础 word2vec原理(二):基于Hierarchical Softmax的模型 word2vec原理(三): 基于Negative ...

  8. 利用Gensim在英文Wikipedia训练词向量

    最近在SemEval 2010 Task 8上做关系分类的实验,主要是实现了一下这篇论文的模型:A neural network framework for relation extraction: ...

  9. 词袋模型(BOW,bag of words)和词向量模型(Word Embedding)概念介绍

    一.词袋模型 例句: Jane wants to go to Shenzhen. Bob wants to go to Shanghai. 将所有词语装进一个袋子里,不考虑其词法和语序的问题,即每个词 ...

最新文章

  1. 计算机桌面颜色如何设置标准,电脑调整桌面颜色设置_电脑桌面颜色设置
  2. ubuntu php 源,Ubuntu18.04更换国内源
  3. 基础 - jQuery选项卡
  4. 修改mysql编码方式centos_CentOS下修改mysql数据库编码为UTF-8(附mysql开启远程链接和开放3306端口)...
  5. 1.9 编程基础之顺序查找 03 不高兴的津津 scratch
  6. Head First设计模式一:策略模式
  7. 升级xcode7.0 第三方库不能用的解决方法(bitcode是什么鬼?)
  8. 渗透理解Animation时间插值Interpolator类
  9. DAS-DVS分布式光纤振动传感-发展现状与未来趋势分析(华为光纤传感新产品Huawei OptiXsense EF3000)
  10. 稳定性测试怎么测_药物稳定性试验的细枝末节该如何处理?
  11. 脾胃湿热吃什么药.体内湿气重有何表示 怎样去除
  12. SAP管理软件系统框架合同业务的实现及相关注意事项解析
  13. python处理金融数据_Python金融大数据分析-数据获取与简单处理
  14. Direct3D初始化失败的原因
  15. 计算机反复几次才能启动,电脑连续开机几次才能启动怎么办?
  16. Hyper-V相关Powershell cmdlets
  17. SpringBoot2.0学习笔记 使用Actualor监控项目运行状态
  18. 一键百度 一键翻译 云脉CC慧眼百度搜索版
  19. VW ware安装Ubuntu虚拟机及环境配置
  20. 分析:新零售时代下的智慧供应链 阿里供应链布局揭秘?

热门文章

  1. Oracle--“ORA-28007: the password cannot be reused”解决
  2. 一个实用的实时毛发渲染及着色方法
  3. 对已有apk进行重新签名
  4. 【PyTorch】nn.Conv2d函数详解
  5. BP神经网络逼近函数项目(含matlab代码)
  6. 教会你ECshop安装百度分享按钮教程
  7. 实现高德地图签到签退(uniapp)
  8. 手机被DNS劫持后的更改方案
  9. 算法总结 — 并查集
  10. 最新UE下载地址和可使用注册码(公布)