当前位置:首页 > 公司荣誉 >

Python版的Word2Vector -- gensim 学习手札 中文词语

  • 2017-09-12 16:36:05
  • 浏览:
  • 作者:admin
Python版的Word2Vector -- gensim 学习手札 中文词语相似性度量

昨天好不容易试用了一下Google自己提供的Word2Vector的源代码,花了好长时间训练数据,结果发现似乎Python并不能直接使用,于是上网找了一下Python能用的Word2Vector,这么一找,就找到了gensim

gensim(应该要翻墙):

安装

gensim有一些依赖,首先请先确保你安装了这些东西:

Python >= 2.6. Tested with versions 2.6, 2.7, 3.3, 3.4 and 3.5. Support for Python 2.5 was discontinued starting gensim 0.10.0; if you must use Python 2.5, install gensim 0.9.1. NumPy >= 1.3. Tested with version 1.9.0, 1.7.1, 1.7.0, 1.6.2, 1.6.1rc2, 1.5.0rc1, 1.4.0, 1.3.0, 1.3.0rc2. SciPy >= 0.7. Tested with version 0.14.0, 0.12.0, 0.11.0, 0.10.1, 0.9.0, 0.8.0, 0.8.0b1, 0.7.1, 0.7.0.

还有一点特别注意的是,保证你的系统有C的编译器,不然速度会很慢,其实你可以首先编译一下Google官方的C语言版的试试,然后在安装gensim,gensim的word2vector用了官方的代码

根据官网的安装指南,有两种方法可以选择:
使用easy_install 或者pip,注意这两者可能都需要sudo申请更高的权限

easy_install -U gensim 或者(这个相对于官网的,我修改过,实测我的没问题) pip install --upgrade --ignore-installed six gensim

我使用了第二种方式进行的安装,如果这些依赖没有安装的,可以安装python和相关的工具后,直接使用pip或easy_install安装。

在进行模型训练的时候,如果不安装Cython,无法进行多线程训练,速度很瘦影响,所以接着安装下Cython

pip install cython

1、训练模型:
如果所有安装配置工作都已经做好了,那么可以开始使用gensim了。这里的语料库使用我之前博客里面已经分好词的corpus-seg.txt语料库。这里在完成模型训练后,将他存到一个文件中,这样下次就可以直接使用了。

# coding:utf-8 import sys reload(sys) sys.setdefaultencoding( "utf-8" ) from gensim.models import Word2Vec import logging,gensim,os class TextLoader(object): def __init__(self): pass def __iter__(self): input = open('corpus-seg.txt','r') line = str(input.readline()) counter = 0 while line!=None and len(line) > 4: #print line segments = line.split(' ') yield segments line = str(input.readline()) sentences = TextLoader() model = gensim.models.Word2Vec(sentences, workers=8) model.save('word2vector2.model') print 'ok'

这里的文件加载用了自己的代码,当然也可以使用自带的Line Sentence,之所以贴出上面的代码是因为,如果你的文件格式比较特殊可以参照上面的代码进行处理。

# coding:utf-8 import sys reload(sys) sys.setdefaultencoding( "utf-8" ) from gensim.models import Word2Vec import logging,gensim,os #模型的加载 model = Word2Vec.load('word2vector.model') #比较两个词语的相似度,越高越好 print('"唐山" 和 "中国" 的相似度:'+ str(model.similarity('唐山','中国'))) print('"中国" 和 "祖国" 的相似度:'+ str(model.similarity('祖国','中国'))) print('"中国" 和 "中国" 的相似度:'+ str(model.similarity('中国','中国'))) #使用一些词语来限定,分为正向和负向的 result = model.most_similar(positive=['中国', '城市'], negative=['学生']) print('同"中国"与"城市"二词接近,但是与"学生"不接近的词有:') for item in result: print(' "'+item[0]+'" 相似度:'+str(item[1])) result = model.most_similar(positive=['男人','权利'], negative=['女人']) print('同"男人"和"权利"接近,但是与"女人"不接近的词有:') for item in result: print(' "'+item[0]+'" 相似度:'+str(item[1])) result = model.most_similar(positive=['女人','法律'], negative=['男人']) print('同"女人"和"法律"接近,但是与"男人"不接近的词有:') for item in result: print(' "'+item[0]+'" 相似度:'+str(item[1])) #从一堆词里面找到不匹配的 print("老师 学生 上课 校长 , 有哪个是不匹配的? word2vec结果说是:"+model.doesnt_match("老师 学生 上课 校长".split())) print("汽车 火车 单车 相机 , 有哪个是不匹配的? word2vec结果说是:"+model.doesnt_match("汽车 火车 单车 相机".split())) print("大米 白色 蓝色 绿色 红色 , 有哪个是不匹配的? word2vec结果说是:"+model.doesnt_match("大米 白色 蓝色 绿色 红色 ".split())) #直接查看某个词的向量 print('中国的特征向量是:') print(model['中国'])

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:武汉网站建设 https://www.feimao666.com

上一篇:APS.NET Cookie

下一篇:最后一页