Python gensim库word2vec的使用

ip install gensim安装好库后,即可导入使用:

1、训练模型定义

from gensim.models import Word2Vec  
model = Word2Vec(sentences, sg=1, size=100,  window=5,  min_count=5,  negative=3, sample=0.001, hs=1, workers=4)  

  

参数解释:

0.sentences是训练所需语料,可通过以下方式进行加载

sentences=word2vec.Text8Corpus(file)

  

此处训练集的格式为英文文本或分好词的中文文本

1.sg=1是skip-gram算法,对低频词敏感;默认sg=0为CBOW算法。

2.size是输出词向量的维数,值太小会导致词映射因为冲突而影响结果,值太大则会耗内存并使算法计算变慢,一般值取为100到200之间。

3.window是句子中当前词与目标词之间的最大距离,3表示在目标词前看3-b个词,后面看b个词(b在0-3之间随机)。

4.min_count是对词进行过滤,频率小于min-count的单词则会被忽视,默认值为5。

5.negative和sample可根据训练结果进行微调,sample表示更高频率的词被随机下采样到所设置的阈值,默认值为1e-3。

6.hs=1表示层级softmax将会被使用,默认hs=0且negative不为0,则负采样将会被选择使用。

7.workers控制训练的并行,此参数只有在安装了Cpython后才有效,否则只能使用单核。

详细参数说明可查看word2vec源代码。

2、训练后的模型保存与加载

model.save(fname)  
model = Word2Vec.load(fname)  

3、模型使用

model.most_similar(positive=[‘woman‘, ‘king‘], negative=[‘man‘])  
#输出[(‘queen‘, 0.50882536), ...]  
  
model.doesnt_match("breakfast cereal dinner lunch".split())  
#输出‘cereal‘  
  
model.similarity(‘woman‘, ‘man‘)  
#输出0.73723527  
  
model[‘computer‘]  # raw numpy vector of a word  
#输出array([-0.00449447, -0.00310097,  0.02421786, ...], dtype=float32)  

  

gensim  word2vec实战

我选择的《人民的名义》的小说原文作为语料,语料原文在这里

完整代码参见 github: https://github.com/ljpzzz/machinelearning/blob/master/natural-language-processing/word2vec.ipynb

拿到了原文,我们首先要进行分词,这里使用结巴分词完成。在中文文本挖掘预处理流程总结中,我们已经对分词的原理和实践做了总结。

加入下面的一串人名是为了结巴分词能更准确的把人名分出来。

# -*- coding: utf-8 -*-

import jieba
import jieba.analyse

jieba.suggest_freq(‘沙瑞金‘, True)
jieba.suggest_freq(‘田国富‘, True)
jieba.suggest_freq(‘高育良‘, True)
jieba.suggest_freq(‘侯亮平‘, True)
jieba.suggest_freq(‘钟小艾‘, True)
jieba.suggest_freq(‘陈岩石‘, True)
jieba.suggest_freq(‘欧阳菁‘, True)
jieba.suggest_freq(‘易学习‘, True)
jieba.suggest_freq(‘王大路‘, True)
jieba.suggest_freq(‘蔡成功‘, True)
jieba.suggest_freq(‘孙连城‘, True)
jieba.suggest_freq(‘季昌明‘, True)
jieba.suggest_freq(‘丁义珍‘, True)
jieba.suggest_freq(‘郑西坡‘, True)
jieba.suggest_freq(‘赵东来‘, True)
jieba.suggest_freq(‘高小琴‘, True)
jieba.suggest_freq(‘赵瑞龙‘, True)
jieba.suggest_freq(‘林华华‘, True)
jieba.suggest_freq(‘陆亦可‘, True)
jieba.suggest_freq(‘刘新建‘, True)
jieba.suggest_freq(‘刘庆祝‘, True)

with open(‘./in_the_name_of_people.txt‘) as f:
    document = f.read()

    #document_decode = document.decode(‘GBK‘)

    document_cut = jieba.cut(document)
    #print  ‘ ‘.join(jieba_cut)  //如果打印结果,则分词效果消失,后面的result无法显示
    result = ‘ ‘.join(document_cut)
    result = result.encode(‘utf-8‘)
    with open(‘./in_the_name_of_people_segment.txt‘, ‘w‘) as f2:
        f2.write(result)
f.close()
f2.close()

 拿到了分词后的文件,在一般的NLP处理中,会需要去停用词。由于word2vec的算法依赖于上下文,而上下文有可能就是停词。因此对于word2vec,我们可以不用去停词。

 现在我们可以直接读分词后的文件到内存。这里使用了word2vec提供的LineSentence类来读文件,然后套用word2vec的模型。

这里只是一个示例,因此省去了调参的步骤,实际使用的时候,你可能需要对我们上面提到一些参数进行调参。

# import modules & set up logging
import logging
import os
from gensim.models import word2vec

logging.basicConfig(format=‘%(asctime)s : %(levelname)s : %(message)s‘, level=logging.INFO)

sentences = word2vec.LineSentence(‘./in_the_name_of_people_segment.txt‘) 

model = word2vec.Word2Vec(sentences, hs=1,min_count=1,window=3,size=100)  

模型出来了,我们可以用来做什么呢?这里给出三个常用的应用。

第一个是最常用的,找出某一个词向量最相近的词集合,代码如下:

req_count = 5
for key in model.wv.similar_by_word(‘沙瑞金‘.decode(‘utf-8‘), topn =100):
    if len(key[0])==3:
        req_count -= 1
        print key[0], key[1]
        if req_count == 0:
            break;

我们看看沙书记最相近的一些3个字的词(主要是人名)如下:

高育良 0.967257142067
李达康 0.959131598473
田国富 0.953414440155
易学习 0.943500876427
祁同伟 0.942932963371

第二个应用是看两个词向量的相近程度,这里给出了书中两组人的相似程度:

print model.wv.similarity(‘沙瑞金‘.decode(‘utf-8‘), ‘高育良‘.decode(‘utf-8‘))
print model.wv.similarity(‘李达康‘.decode(‘utf-8‘), ‘王大路‘.decode(‘utf-8‘))

输出如下:

0.961137455325
0.935589365706

第三个应用是找出不同类的词,这里给出了人物分类题:

print model.wv.doesnt_match(u"沙瑞金 高育良 李达康 刘庆祝".split())

word2vec也完成的很好,输出为"刘庆祝"。

gensim word2vec :https://www.cnblogs.com/pinard/p/7278324.html

word2vec原理:http://www.cnblogs.com/pinard/p/7160330.html

原文:https://blog.csdn.net/angus_monroe/article/details/76999920

原文地址:https://www.cnblogs.com/Allen-rg/p/10589035.html

时间: 2024-07-31 02:37:10

Python gensim库word2vec的使用的相关文章

【python gensim使用】word2vec词向量处理中文语料

word2vec介绍 word2vec官网:https://code.google.com/p/word2vec/ word2vec是google的一个开源工具,能够根据输入的词的集合计算出词与词之间的距离. 它将term转换成向量形式,可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相似度. word2vec计算的是余弦值,距离范围为0-1之间,值越大代表两个词关联度越高. 词向量:用Distributed Representation表示词,通常

Python与自然语言处理(二)基于Gensim的Word2Vec

继续学习摸索,看到很多博客都在研究Word2Vec,感觉挺有意思,我也来尝试一下. 实验环境:Python3,Java8 Word2Vec的输入是句子序列,而每个句子又是一个单词列表,由于没有这样结构的现成输入,所以决定自己动手对原始语料进行预处理. NLPIR是一个汉语分词系统,挺感谢张华平博士,便利了我们的文本处理工作.下载地址:http://ictclas.nlpir.org/newsdownloads?DocId=389 这里还有一个自然语言处理与信息检索共享平台(感觉挺好的,有资料,还

NLP:Gensim库之word2vec

Gensim是一款开源的第三方Python工具包,用于从原始的非结构化的文本中,无监督地学习到文本隐层的主题向量表达.它支持包括TF-IDF,LSA,LDA,和word2vec在内的多种主题模型算法,支持流式训练,并提供了诸如相似度计算,信息检索等一些常用任务的API接口. 1.实现类 class gensim.models.Word2Vec(sentences=None, size=100, alpha=0.025, window=5, min_count=5, max_vocab_size=

gensim的word2vec如何得出词向量(python)

首先需要具备gensim包,然后需要一个语料库用来训练,这里用到的是skip-gram或CBOW方法,具体细节可以去查查相关资料,这两种方法大致上就是把意思相近的词映射到词空间中相近的位置. 语料库test8下载地址: http://mattmahoney.net/dc/text8.zip 这个语料库是从http://blog.csdn.net/m0_37681914/article/details/73861441这篇文章中找到的. 检查语料是否需要做预处理:将数据下载好了解压出来,在做词向量

常用python机器学习库总结

开始学习Python,之后渐渐成为我学习工作中的第一辅助脚本语言,虽然开发语言是Java,但平时的很多文本数据处理任务都交给了Python.这些年来,接触和使用了很多Python工具包,特别是在文本处理,科学计算,机器学习和数据挖掘领域,有很多很多优秀的Python工具包可供使用,所以作为Pythoner,也是相当幸福的.如果仔细留意微博和论坛,你会发现很多这方面的分享,自己也Google了一下,发现也有同学总结了"Python机器学习库",不过总感觉缺少点什么.最近流行一个词,全栈工

用gensim学习word2vec

在word2vec原理篇中,我们对word2vec的两种模型CBOW和Skip-Gram,以及两种解法Hierarchical Softmax和Negative Sampling做了总结.这里我们就从实践的角度,使用gensim来学习word2vec. 1. gensim安装与概述 gensim是一个很好用的Python NLP的包,不光可以用于使用word2vec,还有很多其他的API可以用.它封装了google的C语言版的word2vec.当然我们可以可以直接使用C语言版的word2vec来

Python常用库大全,看看有没有你需要的

作者:史豹链接:https://www.zhihu.com/question/20501628/answer/223340838来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. virtualenv – 创建独立 Python 环境的工具. virtualenvwrapp

Python常用库大全

环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. virtualenv – 创建独立 Python 环境的工具. virtualenvwrapper- virtualenv 的一组扩展. 包管理 管理包和依赖的工具. pip – Python 包和依赖关系管理工具. pip-tools – 保证 Python 包依赖关系更新的一组工具. conda

【Python基础】下载python第三方库文件.wheel安装python第三方库

python常见第三方库在Windows安装报错解决方案 最近在Windows下开发,发现很多第三方库在Windows上的兼容性都不是很好,通过谷哥度娘后,发现一个非官方的临时解决方案, 先贴上地址:Unofficial Windows Binaries for Python Extension Packages 1.安装方法 找到库后下载对应使用的Python版本的文件下载,进入轮子文件夹下 打开cmd命令行,使用 pip install xxx.whl 安装. 2.附支持的第三库 1 pen