文本分布式表示(三):用gensim训练word2vec词向量
今天参考网上的博客,用gensim训练了word2vec词向量。训练的语料是著名科幻小说《三体》,这部小说我一直没有看,所以这次拿来折腾一下。
《三体》这本小说里有不少人名和一些特殊名词,我从网上搜了一些,作为字典,加入到jieba里,以提高分词的准确性。
一、gensim中关于word2vec的参数说明
这一部分其他博客整理的比较清楚了,我也就不抄过来了。看这个链接:
https://www.cnblogs.com/pinard/p/7278324.html
二、gensim训练word2vec词向量
(一)第一步:jieba加载自定义词典
词典是每个词单独一行,然后加入的时候,要注意把换行符去掉:word.strip(),不然你会惊奇地发现我的词典加进去了怎么没效果呢?
#encoding=utf8
import jieba
from gensim.models import word2vec
import gensim # 第一步:加入字典
def add_dict():
f = open('./text/special_nouns.txt','r', encoding='utf-8')
for word in f:
jieba.suggest_freq(word.strip(),tune=True)
f.close() add_dict()
(二)第二步:读取小说文本,进行分词,并保存分词结果
一般小说下载下来,文档的原始编码格式不是 UTF-8,而是 GBK,所以要进行编码转换。看其他博客转来转去比较麻烦,我是没转成功。。。然后我就直接把文档另存为 UTF-8 格式了。
jieba分完词后,要把结果用空格 ' ' 符号连接起来:' '.join(jieba.cut(document)), 词语之间用空格隔开,这才是正确的输入格式。
# 第二步:读取三体小说的文本,并进行分词
def document_segment(filename):
f = open(filename, 'r',encoding='utf-8')
document = f.read()
document_cut = ' '.join(jieba.cut(document))
with open('./text/The_three_body_problem_segment.txt','w',encoding='utf-8') as f2:
f2.write(document_cut) #
f.close()
f2.close() document_segment('./text/The_three_body_problem.txt')
(三)第三步:用CBOW模型训练词向量
LineSentence这个方法把传入的文件转化为一个迭代器,这个文件需要是每一行就是一个句子,每个句子中的词之间用空格隔开。
word2vec 相关的参数都在包word2vec.Word2Vec中,sg=0表示用CBOW模型来训练,hs=1表示加速方法为层次softmax,min_count=1表示词的词频低于1就会被丢弃,实际上没丢弃任何词语。
windows=3 表示滑动窗口为3,上下文词各取1个。size=100表示词向量维度是100。
之所以这么设置是因为这个语料比较小。
def train_w2v(filename):
text = word2vec.LineSentence(filename)
model = word2vec.Word2Vec(text, sg=0,hs=1,min_count=1,window=3,size=100)
model.save('./my_model')
train_w2v('./text/The_three_body_problem_segment.txt')
(四)第四步:导入模型,简单应用
导入保存好的模型后,一个是根据词把相应的词向量取出来,可以看到,取了三个词的词向量,所以词向量矩阵为3*100维。
然后是计算两个词之间的相似度。再就是得到和某个词比较相关的词的列表。
# 导入保存好的模型
model = word2vec.Word2Vec.load('./my_model') # 取出词语对应的词向量。
vec = model[['红岸','水滴','思想钢印']]
print('三个词的词向量矩阵的维度是:', vec.shape,'。')
print('-------------------------------我是分隔符------------------------')
# 计算两个词的相似程度。
print('叶文洁和红岸的余弦相似度是:', model.similarity('叶文洁', '红岸'),'。')
print('-------------------------------我是分隔符------------------------')
# 得到和某个词比较相关的词的列表
sim1 = model.most_similar('叶文洁',topn=10)
for key in sim1:
print('和叶文洁比较相关的词有',key[0],',余弦距离是:',key[1])
三个词的词向量矩阵的维度是: (3, 100) 。
-------------------------------我是分隔符------------------------
叶文洁和红岸的余弦相似度是: 0.27795327 。
-------------------------------我是分隔符------------------------
和叶文洁比较相关的词有 章北海 ,余弦距离是: 0.9233694672584534
和叶文洁比较相关的词有 他 ,余弦距离是: 0.9116515517234802
和叶文洁比较相关的词有 罗辑 ,余弦距离是: 0.9056273698806763
和叶文洁比较相关的词有 汪淼 ,余弦距离是: 0.8981802463531494
和叶文洁比较相关的词有 吴岳 ,余弦距离是: 0.8976055979728699
和叶文洁比较相关的词有 她 ,余弦距离是: 0.893031895160675
和叶文洁比较相关的词有 程心 ,余弦距离是: 0.8800253868103027
和叶文洁比较相关的词有 丁仪 ,余弦距离是: 0.8800160884857178
和叶文洁比较相关的词有 云天明 ,余弦距离是: 0.8763566613197327
和叶文洁比较相关的词有 她们 ,余弦距离是: 0.875525712966919
文本分布式表示(三):用gensim训练word2vec词向量的更多相关文章
- word2vec词向量训练及中文文本类似度计算
本文是讲述怎样使用word2vec的基础教程.文章比較基础,希望对你有所帮助! 官网C语言下载地址:http://word2vec.googlecode.com/svn/trunk/ 官网Python ...
- 在Keras模型中one-hot编码,Embedding层,使用预训练的词向量/处理图片
最近看了吴恩达老师的深度学习课程,又看了python深度学习这本书,对深度学习有了大概的了解,但是在实战的时候, 还是会有一些细枝末节没有完全弄懂,这篇文章就用来总结一下用keras实现深度学习算法的 ...
- word2vec词向量处理中文语料
word2vec介绍 word2vec官网:https://code.google.com/p/word2vec/ word2vec是google的一个开源工具,能够根据输入的词的集合计算出词与词之间 ...
- 使用 DL4J 训练中文词向量
目录 使用 DL4J 训练中文词向量 1 预处理 2 训练 3 调用 附录 - maven 依赖 使用 DL4J 训练中文词向量 1 预处理 对中文语料的预处理,主要包括:分词.去停用词以及一些根据实 ...
- 文本主题抽取:用gensim训练LDA模型
得知李航老师的<统计学习方法>出了第二版,我第一时间就买了.看了这本书的目录,非常高兴,好家伙,居然把主题模型都写了,还有pagerank.一路看到了马尔科夫蒙特卡罗方法和LDA主题模型这 ...
- 文本分布式表示(一):word2vec理论
Word2vec是Google的Mikolov等人提出来的一种文本分布式表示的方法,这种方法是对神经网络语言模型的“瘦身”, 巧妙地运用层次softmax(hierarchical softmax ) ...
- 使用word2vec训练中文词向量
https://www.jianshu.com/p/87798bccee48 一.文本处理流程 通常我们文本处理流程如下: 1 对文本数据进行预处理:数据预处理,包括简繁体转换,去除xml符号,将单词 ...
- word2vec词向量处理英文语料
word2vec介绍 word2vec官网:https://code.google.com/p/word2vec/ word2vec是google的一个开源工具,能够根据输入的词的集 ...
- 机器学习之路: python 实践 word2vec 词向量技术
git: https://github.com/linyi0604/MachineLearning 词向量技术 Word2Vec 每个连续词汇片段都会对后面有一定制约 称为上下文context 找到句 ...
随机推荐
- 33.APP后端处理视频的方案
在当前的app应用中,到处都能看到视频的身影,例如,在社交类的app上,用户可以拍摄属于自己的小视频,并发布到相应得栏目,增加和好友们互动的机会. 后台常见的视频处理有以下几种: · ...
- 关于 行高lineheight的概念及与Vertical-align、内容框、基线等的关系
1.关于行高 行高:顾名思意指一行文字的高度.具体来说是指两行文字间基线之间的距离,他也是底线和顶线之间距离 (1)内容区
- python3:操作excel文件
前提:自动化接口测试中,可以将用例放在excel中管理.结合实际情况讲解如何操作excel文件 1.安装xlrd:pip install xlrd 2.导入模块:import xlrd 3.打开Exc ...
- Django—models相关操作
一.在django后台admin管理页面添加自己增加的表结构 通过终端命令:python3 manage.py makemigrations, python3 manage.py migrate 我们 ...
- 打开office时提示错误窗口“向程序发送命令时出现问题”的解决方案
今天同事问了我一件很怪异的事情,说她的office打不开了,如打开word或excel时,突然出现错误提示错误窗口"向程序发送命令时出现问题",分析原因才知道她安装了 AVG pc ...
- 【源码】otter工程结构
最近在搞数据同步相关的内容,需要对otter的代码进行扩展,所以需要先熟悉一下otter的源码.首先我们整体来看下otter的工程结构.otter的工程结构比较复杂,需要花费一定的时间来理解各个部分的 ...
- WebService-----Xfire
Xfire相对Axis2 个人感觉相对简单一点,因为myEclipse上可以自动生成.而且在目前来讲,Xfire也是更受欢迎一点. 首先说明Xfire所用jar包:http://download.cs ...
- ES 19 - Elasticsearch的检索语法(_search API的使用)
目录 1 Search API的基本用法 1.1 查询所有数据 1.2 响应信息说明 1.3 timeout超时机制 1.4 查询多索引和多类型中的数据 2 URI Search的用法 2.1 GET ...
- eShopOnContainers 知多少[5]:EventBus With RabbitMQ
1. 引言 事件总线这个概念对你来说可能很陌生,但提到观察者(发布-订阅)模式,你也许就很熟悉.事件总线是对发布-订阅模式的一种实现.它是一种集中式事件处理机制,允许不同的组件之间进行彼此通信而又不需 ...
- C语言sprintf和sscanf函数用法
以前刚用C语言的时候,觉得字符串很难处理,后来用多了,发现其实并非如此,C语言也提供了许多函数给程序员使用.今天记录一下两个常用的两个字符串处理函数:sprintf和sscanf 1. sprintf ...