首先准备符合规定输入的语料:
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)
不断更新。。。