来自非专业小白的NLP学习之路——word2vec初体验
NLP之word2vec
现在各行各业感觉都要懂点编程了但是作为非计算机专业学编程我真的好艰难
word2vec好像是用的比较多的训练模型了,我也是从理解word2vec开始学吧
这里有很多细节我没有照顾到,先从理解框架开始吧
分词
对一个文本做NLP要先进行分词,中文分词的话用jieba,所以就要先导入jieba
import jieba;
然后这里以金庸的倚天屠龙记为例下一个txt(其实用任何你想用的都可以),然后用jieba进行分词
with open('倚天屠龙记.txt','r',encoding='utf-8') as fin:
line = fin.read()
#这里先read倚天屠龙记的每一条line
with open('yttlj.txt','w',encoding='utf-8') as fou:
#再对给的倚天屠龙记进行分词,它会自己生成一个新的txt
while line:
str_out= ' '.join(jieba.cut(line,cut_all=False))
#对每一句进行jieba分词,再用''里的空格把每个分出来的词隔开
#newline = jieba.cut(line,cut_all=False)
#str_out=' '.join(newline)
print(str_out)
fou.write(str_out)
line = fin.read()
fin.close()
fou.close()
这里的with语句在打开文件之后就会自动关闭,所以我的第二个with缩进放在了第一个with里面,不然就没办法用那个文件跑了,会出错(吃过亏挠过头)
训练word2vec模型
同样首先要导入Word2vec,我是从gensim里面导的
from gensim.models import word2vec as w2v
要提一下之前我用pip install那种不怎么习惯,下一个软件较叫 Anaconda 安装各种包像jieba这种都会方便很多
然后就开始训练模型
model_file_name = 'yttlj_model.txt'
#这个是系统自己会生成的不是原来就有的文件
sentences = w2v.LineSentence('yttlj.txt')
#然后从分好词的文件里抽取每一句话
model = w2v.Word2Vec(sentences, size=100, window=5, min_count=5, workers=4)
#然后就可以开始训练,这些size,window的参数都可以修改
model.save(model_file_name)
#保存分词模型
利用模型做一些简单的事
我现在也搞不透那些语义分析啥的怎么做,这里就简单验证一下分词模型的效果
model=w2v.Word2Vec.load('yttlj_model.txt')
#加载刚刚的分词模型
print('Nearest 张无忌:',model.most_similar('张无忌'))
#展示跟张无忌最相近的词
最后的结果会出来最相近的默认前10个:
Nearest 张无忌: [(‘周芷若’, 0.9552356600761414), (‘赵敏’, 0.942385733127594), (‘张翠山’, 0.9344732165336609), (‘殷素素’, 0.8955713510513306), (‘一眼’, 0.8662198185920715), (‘谢逊’, 0.8635857105255127), (‘灭绝师太’, 0.8606492280960083), (‘忙’, 0.8538033962249756), (‘金花婆婆’, 0.8518029451370239), (‘鹿杖客’, 0.8502967357635498)]
以上
不过这个word2vec的使用还是很粗浅的,只是为了帮我理解这个模型训练的基本流程的。比如中间分词可以更精细一点。模型训练好之后有很多用途的可以拓展,我也在学习中(希望来这里获得大神们的加持)