调用gensim库训练word2vec词向量

首先准备符合规定输入的语料:

import jieba
raw_text = [
	"你站在桥上看风景",
	"看风景的人在楼上看你",
	"明月装饰了你的窗子",
	"你装饰了别人的梦"]
texts = [[word for word in jieba.cut(text,cut_all=True)] for text in raw_text]

经过运算,得到语料的输入格式如下所示:

[['你', '站', '在', '桥上', '看', '风景'],
 ['看', '风景', '的', '人', '在', '楼上', '看', '你'],
 ['明月', '装饰', '了', '你', '的', '窗子'],
 ['你', '装饰', '了', '别人', '的', '梦']]

每一个语料句子以列表的形式表示在一个大列表中,句子经过jieba分词后按顺序表示在列表中,如上所示。

接着调用gensim模块中的word2vec功能,对上述语料进行训练:

from gensim.models import Word2Vec as wtv
model = wtv(texts,min_count=2,window=5,sg=1,size=5,iter=10)

这里简单对word2vec模块的重要参数进行简要介绍:

  • sentences:用于训练词向量的语料,可以是一个列表,当数据量较大时也可以从文本中遍历读出;
  • size:词向量的维度,默认值为100,这里的取值一般与语料大小相关,如果语料库较大,建议适当增大维度;
  • window:即上下文窗口,默认值为5,可以根据实际的情况如训练速度要求、语料大小等进行动态调整;
  • sg:即word2vec中两个模型的选择,默认为0,表示CBOW模型,更改为1则是skip-gram模型;
  • negative:使用负采样时负样本的个数,取推荐值为5~20;
  • min_count:需要计算词向量的词的最小词频,可以去掉一些很生僻的低频词,默认为5、如果是小语料,可以调低此值;
  • iter:随机梯度下降法中迭代的最大次数,默认为5。对于大语料,可以增大这个值;
  • alpha:在随机梯度下降法中迭代的初始步长,默认为0.25;

训练好模型后,为了能够持续使用,我们可以把上面训练好的模型进行保存,也就是保存上述模型的词向量参数:

from gensim.models import Word2Vec as wtv
model = wtv(texts,min_count=2,window=5,sg=1,size=5,iter=10)  # 训练模型
model.save("C:/model/word2vec_model")  # 保存模型

如果我们要加载上面保存的模型,可以使用下面的方法:

from gensim.models import Word2Vec as wtv
word_model = wtv.load("C:/model/word2vec_model")  # 加载模型词向量参数

如果我们在训练得到word2vec模型之后,又获得更多的数据,当我们希望将新的数据放进已经训练好的模型时,可以使用下面的方法:

from gensim.models import Word2Vec as wtv
word_model = wtv.load("C:/model/word2vec_model")  # 加载模型词向量参数
word_model.train([["我","爱","你","们"]], total_examples=1, epochs=10)  #基于新语料更新词向量表示

这种方法可以对现有word2vec的词向量进行更新,在实操的时候,train函数中的训练数据如果出现新的词,并不会更新到现有的词向量矩阵中。

举个例子,已经训练好的word2vec词表有[“我”,“爱”,“你”]三个词,给定一个新语料[“我”,“喜”,“欢”,“你”],新语料只会调整原有词中的“我”“你”的词向量表示,而不会将“喜”“欢”添加到词库中。

训练得到一个word2vec词表后,如果我们想查询词表中某个词的向量表示,可以使用下面的方法:

import jieba
raw_text = [
	"你站在桥上看风景",
	"看风景的人在楼上看你",
	"明月装饰了你的窗子",
	"你装饰了别人的梦"]
texts = [[word for word in jieba.cut(text,cut_all=True)] for text in raw_text]
from gensim.models import Word2Vec as wtv
model = wtv(texts,min_count=2,window=5,sg=1,size=5,iter=10)
model["你"]  # 输入词“你”的词向量表示

通过list(model.wv.vocab)可以观看model的词有哪些:

import jieba
raw_text = [
	"你站在桥上看风景",
	"看风景的人在楼上看你",
	"明月装饰了你的窗子",
	"你装饰了别人的梦"]
texts = [[word for word in jieba.cut(text,cut_all=True)] for text in raw_text]
from gensim.models import Word2Vec as wtv
model = wtv(texts,min_count=2,window=5,sg=1,size=5,iter=10)
list(model.wv.vocab)

通过下面的方法可以将词和其对应的词向量保存为.txt文件:

import jieba
raw_text = [
	"你站在桥上看风景",
	"看风景的人在楼上看你",
	"明月装饰了你的窗子",
	"你装饰了别人的梦"]
texts = [[word for word in jieba.cut(text,cut_all=True)] for text in raw_text]
from gensim.models import Word2Vec as wtv
model = wtv(texts,min_count=2,window=5,sg=1,size=5,iter=10)
model.wv.save_word2vec_format('F:/word.txt', binary=False)

不断更新。。。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值