python初步实现初步实现word2vec操作操作
一、前言一、前言
一开始看到word2vec环境的安装还挺复杂的,安了半天Cygwin也没太搞懂。后来突然发现,我为什么要去安c语言版本的呢,
我应该去用python版本的,然后就发现了gensim,安装个gensim的包就可以用word2vec了,不过gensim只实现了word2vec
里面的skip-gram模型。若要用到其他模型,就需要去研究其他语言的word2vec了。
二、语料准备二、语料准备
有了gensim包之后,看了网上很多教程都是直接传入一个txt文件,但是这个txt文件长啥样,是什么样的数据格式呢,很多博
客都没有说明,也没有提供可以下载的txt文件作为例子。进一步理解之后发现这个txt是一个包含巨多文本的分好词的文件。
如下图所示,是我自己训练的一个语料,我选取了自己之前用爬虫抓取的7000条新闻当做语料并进行分词。注意,词与词之
间一定要用空格:
这里分词使用的是结巴分词。
这部分代码如下:
import jieba
f1 =open("fenci.txt")
f2 =open("fenci_result.txt", 'a')
lines =f1.readlines() # 读取全部内容
for line in lines:
line.replace(' ', '').replace('', '').replace(' ','')
seg_list = jieba.cut(line, cut_all=False)
f2.write(" ".join(seg_list))
f1.close()
f2.close()
还要注意的一点就是语料中的文本一定要多,看网上随便一个语料都是好几个G,而且一开始我就使用了一条新闻当成语料
库,结果很不好,输出都是0。然后我就用了7000条新闻作为语料库,分词完之后得到的fenci_result.txt是20M,虽然也不
大,但是已经可以得到初步结果了。
三、使用三、使用gensim的的word2vec训练模型训练模型
相关代码如下:
from gensim.modelsimport word2vec
import logging
# 主程序
logging.basicConfig(format='%(asctime)s:%(levelname)s: %(message)s', level=logging.INFO)
sentences =word2vec.Text8Corpus(u"fenci_result.txt") # 加载语料
model =word2vec.Word2Vec(sentences, size=200) #训练skip-gram模型,默认window=5
print model
# 计算两个词的相似度/相关程度
try:
y1 = model.similarity(u"国家", u"国务院")
except KeyError:
y1 = 0
print u"【国家】和【国务院】的相似度为:", y1
print"-----\n"
#
# 计算某个词的相关词列表
y2 = model.most_similar(u"控烟", topn=20) # 20个最相关的
print u"和【控烟】最相关的词有:"
for item in y2:
print item[0], item[1] print"-----"
# 寻找对应关系
print u"书-不错,质量-"
y3 =model.most_similar([u'质量', u'不错'], [u'书'], topn=3)
for item in y3:
print item[0], item[1] print"----"
# 寻找不合群的词