深度学习-nlp系列(4):Word2Vec 字词向量的训练和使用
前言
word2vec 是静态词向量构建方法的一种,与 Embedding 词向量相似。本文将介绍 word2vec 词向量是如何训练的,训练好的 word2vec 词向量如何使用。由于不同的 gensim 的版本不同,在调用一些函数时会有差异。隐藏本文的 gensim 的版本为 4.2.0 ,以下代码都依此版本为准。
数据
本文使用的数据是 THUCNews 中train.txt、dev.txt、test.txt 中所有的中文数据,一共用20000条。
图1 训练数据
字向量
处理数据
# 得到每一行的数据 []datas = open('data/word.txt', 'r', encoding='gbk').read().split("\n")# 得到一行的单个字 [[],...,[]]word_datas = [[i for i in data if i != " "] for data in datas]
图2 将数据处理成字
训练
model = Word2Vec(word_datas, # 需要训练的文本vector_size=10, # 词向量的维度window=2, # 句子中当前单词和预测单词之间的最大距离min_count=1, # 忽略总频率低于此的所有单词 出现的频率小于 min_count 不用作词向量workers=8, # 使用这些工作线程来训练模型(使用多核机器进行更快的训练)sg=0, # 训练方法 1:skip-gram 0;CBOW。epochs=10 # 语料库上的迭代次数)
图3 模型结构内容1
训练好字向量后,我们使用最多的是 index_to_key 、 key_to_index 、字向量,根据前面两个,就可以对文字进行编码与解码。
图4 模型结构内容2
注:模型中的 index_to_key 、 key_to_index 、字向量 都可以单独保存
pkl.dump([model.wv.index_to_key, model.wv.key_to_index, model.wv.vectors], open("PartialWeight.pkl", "wb"))
保存模型
# 字向量保存model.wv.save_word2vec_format('word_data.vector', # 保存路径binary=False # 如果为 True,则数据将以二进制 word2vec 格式保存,否则将以纯文本格式保存)# 模型保存model.save('word.model')
通过保存字向量(word_data.vector),第一行第一个数字表示一共有多少字,第二个数字表示一个字用10的数字表示。
比如:0 --> [0.99632174 2.0563052 -0.72112525 3.789005 -4.6471505 -2.838667 -4.621025 4.180826 3.625088 3.2602801]
图6 字向量部分内容
使用
加载模型
# 1 通过模型加载词向量(recommend)model = gensim.models.Word2Vec.load('word.model')# 2 通过字向量加载vector = KeyedVectors.load_word2vec_format('word_data.vector')
查看
model.wv.index_to_key
图7 查看 index_to_key 的部分内容
model.wv['提'] --》通过模型进行查看
图8 通过模型进行查看字 “提” 的向量
vector['提'] --》通过字向量进行查看
图9 通过字向量进行查看字 “提” 的向量
可以发现两种方法得到的结果都是一样的
词向量
处理数据
datas = open("data/word.txt", "r", encoding="gbk").read().split("\n")words_datas = [[i for i in (jieba.cut(data))] for data in datas]
图10 将数据处理成词
训练与保存模型
model = Word2Vec(words_datas, vector_size=10, window=2, min_count=1, workers=8, sg=0, epochs=10)model.wv.save_word2vec_format('words_data.vector', binary=False)model.save('words.model')
源码获取
Word2Vec 字&词向量
深度学习-nlp系列(4):Word2Vec 字词向量的训练和使用相关推荐
- 深度学习-nlp系列(2)文本分类(Bert)pytorch
对于 Bert 来说,用于文本分类是最常见的,并且准确率也很高.本文将会对 bert 用于文本分类来做详细的介绍. 预训练模型 对于不同的数据,需要导入不同的预训练模型. 预训练模型下载地址:Mode ...
- 深度学习入门系列21:项目:用LSTM+CNN对电影评论分类
大家好,我技术人Howzit,这是深度学习入门系列第二十一篇,欢迎大家一起交流! 深度学习入门系列1:多层感知器概述 深度学习入门系列2:用TensorFlow构建你的第一个神经网络 深度学习入门系列 ...
- 深度学习入门系列1:多层感知器概述
本人正在学习<deep learning with python>–Jason Brownlee,有兴趣的可以一起学习. 仅供学习参考,不做商用! 大家好,我技术人Howzit,这是深度学 ...
- 深度学习入门系列23:项目:用爱丽丝梦游仙境生成文本
大家好,我技术人Howzit,这是深度学习入门系列第二十三篇,欢迎大家一起交流! 深度学习入门系列1:多层感知器概述 深度学习入门系列2:用TensorFlow构建你的第一个神经网络 深度学习入门系列 ...
- 深度学习入门系列6项目实战:声纳回声识别
大家好,我技术人Howzit,这是深度学习入门系列第六篇,欢迎大家一起交流! 深度学习入门系列1:多层感知器概述 深度学习入门系列2:用TensorFlow构建你的第一个神经网络 深度学习入门系列3: ...
- Python深度学习-NLP实战:字向量的训练与生成
系列文章目录 Python深度学习-NLP实战:深度学习系列培训教程 Linux服务器软件的简单使用 Linux命令的简单使用 训练集.测试集.验证集的介绍及制作 字向量的训练与生成 文本分类之SVM ...
- 一文概述2017年深度学习NLP重大进展与趋势
本文,我将概述 2017 年深度学习技术在 NLP 领域带来的进步.可能会有遗漏,毕竟涵盖所有论文.框架和工具难度太大.我想和大家分享这一年我最喜欢的一些研究.我认为 2017 年是 NLP 领域的重 ...
- 深度学习(1)---2017年深度学习NLP重大进展与趋势
深度学习(DL)架构和算法在图像识别.语音处理等领域实现了很大的进展.而深度学习在自然语言处理方面的表现最初并没有那么起眼,不过现在我们可以看到深度学习对 NLP 的贡献,在很多常见的 NLP 任务中 ...
- 【自然语言处理】一文概述2017年深度学习NLP重大进展与趋势
选自 tryolabs 机器之心编译 参与:路雪.黄小天.蒋思源 作者通过本文概述了 2017 年深度学习技术在 NLP 领域带来的进步,以及未来的发展趋势,并与大家分享了这一年中作者最喜欢的研究.2 ...
最新文章
- php redis search,php redis类
- Ubuntu 14.04上使用CMake编译MXNet源码操作步骤(Python)
- [NOIP 2015]运输计划-[树上差分+二分答案]-解题报告
- 一分钟了解阿里云产品:对象存储OSS概述
- Shader中颜色混合的算法
- mysql内连接的自连接_mysql 内连接、外连接、自连接
- 解决:Docker 启动的容器内部时间比服务器时间晚 8 小时,容器内部时间与宿主机时间不一致
- 找出数组中只出现一次的数
- python在线发音-Python如何实现文本转语音
- 嵌入式C语言(入门必看)
- 北京计算机专业考研录取分数线,2018北京航空航天大学计算机考研复试分数线_计算机考研分数线...
- 基于机器学习的文本情感分类
- Navicat Premium 15 的下载及其安装
- ArcGIS批量裁剪栅格数据
- nginx+uWSGI+django+virtualenv+supervisor发布web服务器流程
- LeetCode 506 Relative Ranks
- 计算机应用基础心得体会300字,网络远程学习的心得体会
- Matlab对图像进行裁剪。seam carving
- 设计UI的语言——XAML
- 【阿里云IoT+YF3300】15.阿里云物联网小程序构建