安装

安装方法:pip install --upgrade gensim
安装分词:pip install jieba

中文训练预料处理

首先去网上下载一本小书,然后将其另存为utf-8格式

文本文件准备好,现在开始用python对此txt文档进行处理。

from gensim.models import word2vec
import os
import gensim
from word2vec import model_train
import jieba# 此函数作用是对初始语料进行分词处理后,作为训练模型的语料
def cut_txt(old_file):global cut_file  # 分词之后保存的文件名cut_file = old_file + '_cut.txt'try:fi = open(old_file, 'r', encoding='utf-8')except BaseException as e:  # 因BaseException是所有错误的基类,用它可以获得所有错误类型print(Exception, ":", e)  # 追踪错误详细信息text = fi.read()  # 获取文本内容new_text = jieba.cut(text, cut_all=False)  # 精确模式str_out = ' '.join(new_text).replace(',', '').replace('。', '').replace('?', '').replace('!', '') \.replace('“', '').replace('”', '').replace(':', '').replace('…', '').replace('(', '').replace(')', '') \.replace('—', '').replace('《', '').replace('》', '').replace('、', '').replace('‘', '') \.replace('’', '')  # 去掉标点符号fo = open(cut_file, 'w', encoding='utf-8')fo.write(str_out)

注意open中必须指明编码方式,否则就会报错;上面的函数若要单独运行,须要更改old_file变量为原文件名。

模型训练

准备好训练语料(注意训练语料文件越大越好,越大最后的训练效果越好),之后就开始写训练模型了,训练模型的代码如下所示:

from gensim.models import word2vec
import gensim
import loggingdef model_train(train_file_name, save_model_file):  # model_file_name为训练语料的路径,save_model为保存模型名# 模型训练,生成词向量logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)sentences = word2vec.Text8Corpus(train_file_name)  # 加载语料model = gensim.models.Word2Vec(sentences, size=200)  # 训练skip-gram模型; 默认window=5model.save(save_model_file)model.wv.save_word2vec_format(save_model_file + ".bin", binary=True)  # 以二进制类型保存模型以便重用

参数说明:

model=gensim.models.Word2Vec(sentences,sg=1,size=100,window=5,min_count=2,negative=3,sample=0.001,hs=1,workers=4)#该步骤也可分解为以下三步(但没必要):
#model=gensim.model.Word2Vec() 建立一个空的模型对象
#model.build_vocab(sentences) 遍历一次语料库建立词典
#model.train(sentences) 第二次遍历语料库建立神经网络模型#sg=1是skip—gram算法,对低频词敏感,默认sg=0为CBOW算法
#size是神经网络层数,值太大则会耗内存并使算法计算变慢,一般值取为100到200之间。
#window是句子中当前词与目标词之间的最大距离,3表示在目标词前看3-b个词,后面看b个词(b在0-3之间随机)
#min_count是对词进行过滤,频率小于min-count的单词则会被忽视,默认值为5。
#negative和sample可根据训练结果进行微调,sample表示更高频率的词被随机下采样到所设置的阈值,默认值为1e-3,
#negative: 如果>0,则会采用negativesamping,用于设置多少个noise words
#hs=1表示层级softmax将会被使用,默认hs=0且negative不为0,则负采样将会被选择使用。
#workers是线程数,此参数只有在安装了Cpython后才有效,否则只能使用单核

我们并不需要全部了解,大部分参数都可以使用其默认值(不输入),而其中比较重要的有:

# min_count,是去除小于min_count的单词
# size,神经网络层数
# sg, 算法选择
# window, 句子中当前词与目标词之间的最大距离
# workers,线程数

训练后的模型用普通方式和二进制方式进行保存,以便下次直接使用,避免每次训练耗费大量时间。

word2vec模型调用

两个功能都以函数方式实现了,现在准备编写主函数代码,在主函数中负责调用各个方法实现预处理和模型训练,以此做后面的相关计算。

# if not os.path.exists(cut_file):    # 判断文件是否存在,参考:https://www.cnblogs.com/jhao/p/7243043.html
cut_txt('倚天屠龙记.txt')  # 须注意文件必须先另存为utf-8编码格式save_model_name = '倚天屠龙记.model'
if not os.path.exists(save_model_name):  # 判断文件是否存在model_train(cut_file, save_model_name)
else:print('此训练模型已经存在,不用再次训练')# 加载已训练好的模型
model_1 = word2vec.Word2Vec.load(save_model_name)
# 计算两个词的相似度/相关程度
word_1 = "金毛狮"
word_2 = "谢逊"
y1 = model_1.similarity(word_1, word_2)
print(word_1, "和", word_2, "的相似度为:", y1)
print("-------------------------------\n")# 计算某个词的相关词列表
word_3 = "张无忌"
y2 = model_1.most_similar(word_3, topn=10)  # 10个最相关的
print(u"和", word_3, "最相关的词有:\n")
for item in y2:print(item[0], item[1])
print("-------------------------------\n")# 某个词的词向量
print(model_1['张无忌'])

最后的运行结果如下所示:

最终的结果一定程序上还是取决于分词的准确率,使用jieba分词时可以针对性的加入用户自定义词典(jieba.load_userdict(“userDict.txt”) # 加载用户自定义词典),可以提高对人名,地名等未登陆词的识别效果,提高分词性能。

【转】python-word2vec模块使用详解相关推荐

  1. python——pickle模块的详解

    python--pickle模块的详解 介绍 pickle模块实现了用于序列化和反序列化Python对象结构的二进制协议 "Pickling"是将Python对象层次结构转换为字节 ...

  2. Python re模块用法详解

    Python re模块用法详解 在 Python 爬虫过程中,实现网页元素解析的方法有很多,正则解析只是其中之一,常见的还有 BeautifulSoup 和 lxml,它们都支持网页 HTML 元素的 ...

  3. python时间模块time详解

    python时间模块time详解 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块 ...

  4. python middleware模块_详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击...

    一.在django后台处理 1.将django的setting中的加入django.contrib.messages.middleware.MessageMiddleware,一般新建的django项 ...

  5. python flask-caching模块缓存详解

    python 模块 flask-caching 缓存 文章目录 python 模块 flask-caching 缓存 1. 介绍 2. 安装 3. 配置参数 4. cache方法 5. 显示缓存存储 ...

  6. python ssl模块用法详解_一看就懂,Python 日志模块详解及应用!

    日志概述 百度百科的日志概述: Windows网络操作系统都设计有各种各样的日志文件,如应用程序日志,安全日志.系统日志.Scheduler服务日志.FTP日志.WWW日志.DNS服务器日志等等,这些 ...

  7. python json模块 超级详解

    JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.JSON的数据格式其实就是python里面的字典格式,里面可以包含方括号括起来的数组,也 ...

  8. linux datetime,Python datetime模块示例详解

    一.datetime模块介绍 (一).datetime模块中包含如下类: 类名功能说明 date 日期对象,常用的属性有year, month, day time 时间对象 datetime 日期时间 ...

  9. python伪随机数模块random详解

    本文已整合到这里:Python内置数学模块全整理,易查易阅 文章目录 基本原理 整数和字节 分布函数 用于序列的随机函数 基本原理 用于生成伪随机数,之所以有个伪字,是因为计算机没法生成真正的随机数. ...

  10. python 日历模块_详解Python日历模块的使用

    calendar模块的函数都是日历相关的,提供了对日期的一些操作方法,和生成日历的方法. calendar模块中提供了三大类: 一.calendar.Calendar(firstweekday=0) ...

最新文章

  1. Ubuntu 16.04 命令行 关机 or 重启
  2. 如何删除/删除Python不为空的文件夹?
  3. python测试代码怎么写_Python 单元测试
  4. Arduino--DS3231实时时钟模块
  5. python字符子串_子字符串和子序列(Python),子串,python
  6. 一、Arcgis api js -- 基本概念
  7. vscode运行vue时,显示loader. js SyntaxError: Unexpected identifier
  8. windows oracle增量备份脚本,oracle 增量备份脚本
  9. jquery cookie 本地不能工作的原因
  10. (2)Spring框架----IOC基础快速入门
  11. AD637 有效值检测
  12. 国家级非遗传承人高清旺《四大美人》皮影数字藏品惊艳亮相!
  13. 【CVPR 2021】搜索网络宽度:BCNet: Searching for Network Width with Bilaterally Coupled Network
  14. 【面试】计算机操作系统
  15. 中兴B863AV3.2-M、B863AV3.1-M2、E900V22C免拆机通刷救砖包【安卓9.0】
  16. unity ECS简介
  17. 某博数据挖掘:使用Scrapy构建自定义数据采集提取洞察信息
  18. 面试干货!21个必知数据科学面试题和答案
  19. 用vue搭建组件库的流程
  20. 个人单干也能实现年入百万(玩转私域流量)

热门文章

  1. Java 基础 - 面向对象(不错N多教程集合)
  2. python列表按照批次分配数据(亲测)
  3. Laravel新建对象的方法:make resolve 辅助函数app()
  4. Linux之Vim的搜索与替换
  5. PHP算法用redis crontab 进行异步邮件队列发送
  6. Mysql用navicat操作导出查询结果
  7. python系统关键字_python基础之常用关键字总结
  8. RMEB运行环境要求
  9. 删除vue打包大小限制_压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)...
  10. springmvc重定向到另一个项目_SpringMVC——redirect重定向跳转传值