当前位置:   article > 正文

利用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 logging

def 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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 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)  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

词向量大小为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)  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

词向量保存为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)  

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

bin.gz格式是经过压缩的二进制,大小变成8.06KB。使用gzipped / bz2输入也可以,不需要解压。

注意:

  • 使用load方式加载模型,可以进行再训练。
  • 训练后的词向量可以使用model.wv保存在一个KeyedVectors实例中。

词向量保存和加载

保存训练好的词向量。

保存

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

加载

  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
  • 2
  • 3
  • 4
  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
  • 1
  • 2
  • 3

参考:
https://blog.csdn.net/ling620/article/details/99434061
https://www.jianshu.com/p/fbce9c8f5536
https://www.unclewang.info/learn/python/481/

欢迎各位关注我的个人公众号:HsuDan,我将分享更多自己的学习心得、避坑总结、面试经验、AI最新技术资讯。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/366319
推荐阅读
相关标签
  

闽ICP备14008679号