在python下实现word2vec词向量训练与加载实例


Posted in Python onJune 09, 2020

项目中要对短文本进行相似度估计,word2vec是一个很火的工具。本文就word2vec的训练以及加载进行了总结。

word2vec的原理就不描述了,word2vec词向量工具是由google开发的,输入为文本文档,输出为基于这个文本文档的语料库训练得到的词向量模型。

通过该模型可以对单词的相似度进行量化分析。

word2vec的训练方法有2种,一种是通过word2vec的官方手段,在linux环境下编译并执行。

在github上下载word2vec的安装包,然后make编译。查看demo-word.sh脚本,得到word2vec的执行命令:

./word2vec -train text8 -output vectors.bin -cbow 1 -size 200 -window 8 -negative 25 -hs 0 -sample 1e-4 -threads 20 -binary 1 -iter 15

参数解释:

1)-train:需要训练的语料库,text8为语料库文件名

2)-output:输出的词向量文件,vectors.bin为输出词向量文件名,.bin后缀为二进制文件。若要以文档的形式查看词向量文件,需要将-binary参数的值由1改为0

3)-cbow:是否使用cbow模型进行训练。参数为1表示使用cbow,为0表示不使用cbow

4)-size:词向量的维数,默认为200维。

5)-window:训练过程中截取上下文的窗口大小,默认为8,即考虑一个词前8个和后8个词

6)-negative:若参数非0,表明采样随机负采样的方法,负样本子集的规模默认为25。若参数值为0,表示不使用随机负采样模型。使用随机负采样比Hierarchical Softmax模型效率更高。

7)-hs:是否采用基于Hierarchical Softmax的模型。参数为1表示使用,0表示不使用

8)-sample:语料库中的词频阈值参数,词频大于该阈值的词,越容易被采样。默认为e^-4.

9)-threads:开启的线程数目,默认为20.

10)-binary:词向量文件的输出形式。1表示输出二进制文件,0表示输出文本文件

11)-iter:训练的迭代次数。一定范围内,次数越高,训练得到的参数会更准确。默认值为15次.

./word2vec -train mytext.txt -output vectors.txt -cbow 1 -size 200 -window 5 -negative 25 -hs 0 -sample 1e-4 -threads 20 -binary 0 -iter 30

示例为训练一个名mytext.txt的文档。设置输出词向量的格式为.txt文本文档,所以还需要将-binary参数设置为0.

训练模型采用基于随机负采样的cbow模型。由于短文本字数极为有限,所以-window参数设置为5,设置词向量的维数

为200,为了使得到的参数更准确,将迭代次数增加至30.其他参数使用默认值。

训练以后得到一个txt文本,该文本的内容为:每行一个单词,单词后面是对应的词向量。

gensim加载词向量:

保存词向量模型到pkl中(注意:这里是对词向量模型进行构建)

from gensim.models import KeyedVectors
if not os.path.exists(pkl_path): # 如果pickle模型不存在,则构建一个

    print '词向量模型不存在,开始构建词向量模型...'
    Word2Vec = KeyedVectors.load_word2vec_format(vecs_path, binary=False) # 加载词向量模型
    f = file(pkl_path, 'wb')
    pickle.dump(Word2Vec, f, True)
    f.close()
    print '词向量模型构建完毕...'

f= file(pkl_path, 'rb')# 打开pkl文件
word2vec=pickle.load(f)# 载入pkl

第二种方法是使用gensim模块训练词向量:

from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence

try:
  import cPickle as pickle
except ImportError:
  import pickle

sentences = LineSentence(path)# path为要训练的txt的路径
# 对sentences表示的语料库进行训练,训练200维的词向量,窗口大小设置为5,最小词频设置为5
model = Word2Vec(sentences, size=200, window=5, min_count=5)
model.save(model_path)#model_path为模型路径。保存模型,通常采用pkl形式保存,以便下次直接加载即可

# 加载模型
model = Word2Vec.load(model_path)

完整的训练,加载通常采用如下方式:

if not os.path.exists(model_path):
    sentences = LineSentence(path)
    model = Word2Vec(sentences, size=200, window=5, min_count=5)
    model.save(model_path)
model = Word2Vec.load(model_path)

这样一来,就可以通过pkl化的词向量模型进行读取了。pkl的目的是为了保存程序中变量的状态,以便下次直接访问,

不必重新训练模型。

详细内容间gensim官方库

https://radimrehurek.com/gensim/models/word2vec.html

以上这篇在python下实现word2vec词向量训练与加载实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python的几种开发工具介绍
Mar 07 Python
Python列表list数组array用法实例解析
Oct 28 Python
Python中的特殊语法:filter、map、reduce、lambda介绍
Apr 14 Python
用Python实现斐波那契(Fibonacci)函数
Mar 25 Python
详解Python命令行解析工具Argparse
Apr 20 Python
python实现淘宝秒杀聚划算抢购自动提醒源码
Jun 23 Python
使用Python控制摄像头拍照并发邮件
Apr 23 Python
Django 拆分model和view的实现方法
Aug 16 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
Feb 10 Python
pandas读取csv文件提示不存在的解决方法及原因分析
Apr 21 Python
快速创建python 虚拟环境
Nov 28 Python
用Python的绘图库(matplotlib)绘制小波能量谱
Apr 17 Python
Python实现寻找回文数字过程解析
Jun 09 #Python
pycharm 关掉syntax检查操作
Jun 09 #Python
Python控制台实现交互式环境执行
Jun 09 #Python
使用pycharm和pylint检查python代码规范操作
Jun 09 #Python
Python基于数列实现购物车程序过程详解
Jun 09 #Python
pycharm 对代码做静态检查操作
Jun 09 #Python
Python3读取和写入excel表格数据的示例代码
Jun 09 #Python
You might like
解析php安全性问题中的:Null 字符问题
2013/06/21 PHP
Yii实现简单分页的方法
2016/04/29 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
JavaScript 变量基础知识
2009/11/07 Javascript
js 禁用只读文本框获得焦点时的退格键
2010/04/25 Javascript
jqGrid jQuery 表格插件测试代码
2011/08/23 Javascript
JS小游戏之象棋暗棋源码详解
2014/09/25 Javascript
JavaScript实现常用二级省市级联下拉列表的方法
2015/03/25 Javascript
JavaScript数据绑定实现一个简单的 MVVM 库
2016/04/08 Javascript
jQuery悬停文字提示框插件jquery.tooltipster.js用法示例【附demo源码下载】
2016/07/19 Javascript
jQuery Ajax请求后台数据并在前台接收
2016/12/10 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
jquery对象与DOM对象转化
2017/02/08 Javascript
JSONP跨域请求
2017/03/02 Javascript
深入探究node之Transform
2017/07/20 Javascript
JavaScript取得gridview中获取checkbox选中的值
2017/07/24 Javascript
AngularJS实现图片上传和预览功能的方法分析
2017/11/08 Javascript
JavaScript模块详解
2017/12/18 Javascript
微信小程序实现自上而下字幕滚动
2018/07/14 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
2018/08/25 Javascript
node.js使用yargs处理命令行参数操作示例
2020/02/11 Javascript
[03:00]DOTA2-DPC中国联赛1月18日Recap集锦
2021/03/11 DOTA
python获取本地计算机名字的方法
2015/04/29 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
2017/08/08 Python
Python实现自定义顺序、排列写入数据到Excel的方法
2018/04/23 Python
Python延时操作实现方法示例
2018/08/14 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
2019/04/29 Python
Python中xml和dict格式转换的示例代码
2019/11/07 Python
Python csv文件记录流程代码解析
2020/07/16 Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
2021/01/28 Python
Canvas 文字碰撞检测并抽稀的方法
2019/05/27 HTML / CSS
Omio意大利:全欧洲低价大巴、火车和航班搜索和比价
2017/12/02 全球购物
美国羽绒床上用品第一品牌:Pacific Coast
2018/08/25 全球购物
亚洲最大的运动鞋寄售店:KicksCrew
2020/11/26 全球购物
汽车维修与检测专业应届生求职信
2013/11/12 职场文书
教育学专业实习生的自我鉴定
2013/11/26 职场文书