赞
踩
利用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)
model.save()
不能利用文本编辑器查看,但是保存了训练的全部信息,可以在读取后追加训练来更新模型。模型更新后,即模型包含的wv,vocabulary,parameters,trainables内置神经网络等都更新了。model.wv.save_word2vec_format()
保存为word2vec文本格式,但是保存时丢失了词汇树等部分信息,不能追加训练。模型构建很简便,但是遇到几个小问题:一个是词向量保存的格式有好几种,大小会不同嘛,哪个速度快,选哪个呢?另外保存时使用二进制和非二进制,在读取词向量时可能带来编码问题。
这里是针对中文的一个简单的分词后的语料数据。
我尝试了几种模型词向量的保存方法:
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,保存比较快。
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格式一样,也能正常读取。
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输入也可以,不需要解压。
注意:
保存训练好的词向量。
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)
from gensim.models import KeyedVectors
wv = KeyedVectors.load("model.wv", mmap='r')
vector = wv['computer'] # numpy vector of a word
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最新技术资讯。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。