嗨,好久不见啊!今天我们来完成一个word2vec模型训练,学习笔记有挺多人写的,不瞒您说,小白也是看别人的博客学习的。所以这次,小白就直接上手实例啦,一起嘛?
首先介绍一下模型参数
然后去网上找一个喜欢的文学作品,把它的txt下载下来。啊啊,其实你可以找几个拼在一起。我先是下载了一个《小王子》后来发现太小了就又下载了《时生》(顺便安利一下东野圭吾的《时生》),以utf-8编码的形式保存成xwz_ss.txt。
然后就开始导入包导入库
from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence
#通过jieba分词
import jieba
import pandas as pd
把文本文件读进来,再分词,去停用词
xwzss = open("D://xwz_ss.txt", encoding='utf-8').read().replace('\n','').replace(' ','')
#读入停用词
stopws = open('D://stopwords.txt',encoding='gb18030').read()
xs_cut = [word for word in jieba.lcut(xwzss) if word not in list(stopws)]
我还看了一下分词后的词数量,心里一个数
len(xs_cut)
#53889
然后将他们写入一个新的文件
#写入txt文件,分词后的文件
file = open('D://new_xs_cut.txt','a',encoding='utf-8')
for i in range(len(xs_cut)):
s = str(xs_cut[i]).replace('[','').replace(']','')#去除[],这两行按数据不同,可以选择
s = s.replace("'",'').replace(',','') +'\n' #去除单引号,逗号,每行末尾追加换行符
file.write(s)
file.close()
#把分词好的文件合成一个句子
sc = open('D://new_xs_cut.txt',encoding='utf-8').read().replace('\n',' ')
sc_=sc.split()
print(sc_)
结果看一下,
第一个一个什么‘/ufeff’东东,好像是我分词的时候第一个是空行,也可以删去,其实没什么大问题,它就一个不影响。大行不顾细谨嘛,何必如此苛责,我就放任它在里面了。
接下来就是训练模型了
import gensim
from gensim.models import word2vec
#训练模型
model = gensim.models.Word2Vec(sc_, size=100, iter=8, min_count=3)
前面有参数介绍,这里再多说一句min_count,是至少出现你设置的次数它才会把词留在语料库里。
然后就可以测试一下近义词了
你以为我这里顺顺利利就过来了?天真!太天真了!我前面运行的时候出现了超级多报错,到现在,有解决的也有没解决的。有个报错是word ’ XXX ’ not in the vocabulary,我百度搜狗了一下,有人说是因为语料库太小的缘故,好叭我承认我语料库小。在找近义词的时候也经常出现这个问题,所以我说,如果大噶只是想试试模型过程就先跟我一样将就试试,如果是想训练出来自己的模型保存将来好直接用的话,一定要找个超级无敌巨无霸大的!