今天参考网上的博客,用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

转载于:https://www.cnblogs.com/Luv-GEM/p/10615461.html

文本分布式表示(三):用gensim训练word2vec词向量相关推荐

  1. 【新闻文本分类】(task4)使用gensim训练word2vec

    学习总结 (1)学习训练Word2Vec 词向量,为后面task搭建 TextCNN 模型.BILSTM 模型训练预测作准备.Word2vec 的研究中提出的模型结构.目标函数.负采样方法.负采样中的 ...

  2. 【NLP】维基百科中文数据训练word2vec词向量模型——基于gensim库

    前言   本篇主要是基于gensim 库中的 Word2Vec 模型,使用维基百科中文数据训练word2vec 词向量模型,大体步骤如下: 数据预处理 模型的训练 模型的测试 准备条件: Window ...

  3. NLP 利器 Gensim 来训练 word2vec 词向量模型的参数设置

    使用 Gensim 来训练 word2vec 词向量模型的参数设置 文章目录 一.最小频次 min_count 二.词向量维度 size 三.并行处理核心数 workers 我们可以使用一些参数设置来 ...

  4. python训练Word2Vec词向量

    一.模型训练 1.安装gensim pip install gensim gensim中封装了包括word2vec.doc2vec等模型,word2vec采用了CBOW(Continuous Bag- ...

  5. 维基百科简体中文语料训练word2vec词向量

    步骤: 1.下载维基百科中文语料 2.使用工具从压缩包中抽取正文文本 3.将繁体字转简体字 4.分词 5.训练模型 6.测试模型 1.下载维基百科中文语料 语料下载地址:https://dumps.w ...

  6. 调用gensim库训练word2vec词向量

    首先准备符合规定输入的语料: import jieba raw_text = ["你站在桥上看风景","看风景的人在楼上看你","明月装饰了你的窗子& ...

  7. word2vec python 代码实现_python gensim使用word2vec词向量处理中文语料的方法

    word2vec介绍 word2vec是google的一个开源工具,能够根据输入的词的集合计算出词与词之间的距离. 它将term转换成向量形式,可以把对文本内容的处理简化为向量空间中的向量运算,计算出 ...

  8. 利用gensim构建word2vec词向量模型并保存词向量

    利用gensim包的word2vec模块构建CBOW或Skip-Gram模型来进行词向量化比较方便. 具体gensim.models.Word2Vec模型的参数可以看官网介绍: https://rad ...

  9. 使用wiki百科和gensim训练中文词向量

    下载wiki百科的数据 那么我是从https://dumps.wikimedia.org/zhwiki/20170520/上下载的1.4G的这个xml版本 抽取数据的内容 使用https://gith ...

最新文章

  1. 设计模式之装饰模式(Decorator)摘录
  2. SimCSE:用于句子嵌入的对比学习
  3. 给不爱洗手找个理由——皮肤共生菌可以促进伤口愈合
  4. So many interfaces!
  5. Swift团队把Swift之父气跑了,网友:Python之父的仁慈独裁者模式才是王道
  6. 【JavaScript】parseInt
  7. gcc和g++的区别[zz]
  8. CC2541对AT24CXX系列存储器的支持
  9. scala spark 埋点统计_spark—1:WordCount(Python与Scala对照)
  10. 创客更新装备 动态规划
  11. 如何在Java中转义JSON字符串-Eclipse IDE技巧
  12. 复杂网络研究:让世界变得简单
  13. 陶哲轩实分析 引理8.2.7 注
  14. Html-Css标签lable中定义宽度需要其他的支持
  15. 服务器link系统命令,可以使用命令(7)来查看网络接口的运行情况。输入该命令后,系统的输出信息如下。...
  16. 关于axios中'$router' of undefined问题
  17. 如何选择InstallShield工程类型
  18. word死机后文档恢复
  19. MySql【超简单】清空部分表的数据
  20. python:批量移动指定文件到指定文件夹(模板)

热门文章

  1. uni-app调用Native.jsAPI实现对Android原生日历的增删查操作
  2. 车辆运动学和动力学模型概述
  3. 富兰克林邓普顿向区块链初创公司Proof of Impact投资了未公开的金额
  4. 智慧社区管理系统常见功能有哪些
  5. 对象以及数据结构的区别
  6. linux系统下的ip分片程序,Linux下IP分片与重组
  7. Android纸牌游戏历程,大厂又打情怀牌,微软把经典纸牌游戏带到了 iOS 和 Android...
  8. 库迪咖啡抖音团购对接项目总结
  9. 查看Windows磁盘分区块大小的若干种办法
  10. HTML超文本(一)