gensim中的word2vec使用

news2024/11/28 16:02:43

介绍

一句话, G e n s i m Gensim Gensim中的word2vec类就是用来训练词向量的,这个类实现了词向量训练的两种基本模型 s k i p − g r a m skip-gram skipgram C B O W CBOW CBOW,可以通过后面的参数设置来选择,。但是,在Gensim这个模块中训练词向量的方法还有很多:
**gensim.models.doc2vec.Doc2Vec,gensim.models.fasttext.FastText,gensim.models.wrappers.**VarEmbed等等都能得到词向量。

Word2vec类

Word2vec初始化参数

在下面介绍参数时,可能不会列举完,完整的参数见word2vec.py源码。
注:参数表这一列,等号右边的值表示默认值

在这里插入图片描述
在这里插入图片描述

训练保存模型

# 示例1

from gensim.test.utils import common_texts
from gensim.models import Word2Vec

print(common_texts)
train_model = Word2Vec(common_texts, size=100, window=5, min_count=1, workers=4)
train_model.save('./MyModel')

train_model.wv.save_word2vec_format('./mymodel.txt', binary=False)

训练模型

只要给 w o r d 2 v e c word2vec word2vec类赋上参数,就可以直接训练了,其中common_texts是一段内置的语料如下:
在这里插入图片描述
在这里插入图片描述

保存模型

在示例1中,第8行和第10行都是用来保存训练模型的(简称 s a v e save save f o r m a t s a v e format_save formatsave),而两者之间的相同点就是:都可以复用,即载入之后可以得到对应单词的词向量;不同点是**:save保存的模型,载入之后可以继续在此基础上接着训练**(后文会介绍),而format_save保存的模型不能,但有个好处就是如果s设置binary=False则保存后的结果可以直接打开查看(一共有12个词向量,每个词向量100维)

12 100
system -0.0027418726 -0.0029260677 0.0002653271 ......
user 0.000851792 -0.004782654 0.0017041893 ......
trees 6.689873e-05 0.0027949389 -0.002869004 ......
graph -0.0038760677 -0.0021227715 0.0029032128 ......
......
......


载入模型和使用

我们只使用4个维度来表示词向量。

#示例 2  查看词表相关信息

from gensim.test.utils import common_texts
from gensim.models import Word2Vec
model = Word2Vec.load('./MyModel')
# 对于训练好的模型,我们可以通过下面这前三行代码来查看词表中的词,频度,以及索引位置, 
# 最关键的是可以通过第四行代码判断模型中是否存在这个词
for key in model.wv.vocab:
    print(key)
    print(model.wv.vocab[key])
print('human' in model.wv.vocab)
print(len(model.wv.vocab)) #获取词表中的总词数
#结果:

trees
Vocab(count:3, index:2, sample_int:463795800)
graph
Vocab(count:3, index:3, sample_int:463795800)
minors
Vocab(count:2, index:11, sample_int:579459575)

True

12

获取对应词向量维度

# 示例3  获取对应的词向量及维度
model = Word2Vec.load('./MyModel')
print(model.wv.vector_size)
print(model['human'])
print(model['good'])

# 结果
4
[-0.06076013 -0.03567408 -0.07054472 -0.10322621]

KeyError: "word 'good' not in vocabulary"
Process finished with exit code 1

# 在取词向量之前一定要先判断



计算两个词相似度,

# 示例4  常用方法

#---------------4.1  计算两个词的相似度(余弦距离)--------
model = Word2Vec.load('./MyModel')
print(model.wv.similarity('human', 'user'))
print(model.wv.similarity('human', 'survey'))

# 结果越大越相似(此处由于维度太小,所以结果好像不怎么准确)
-0.6465453
0.55347687

#---------------4.2  计算两个词的距离--------
model = Word2Vec.load('./MyModel')
print(model.wv.distance('human', 'user'))
print(model.wv.distance('human', 'survey'))

# 结果越大越不相似
1.6465452909469604
0.44652312994003296

#---------------4.3  取与给定词最相近的topn个词--------
model = Word2Vec.load('./MyModel')
print(model.wv.most_similar(['human'],topn=3))

#结果
[('computer', 0.7984297871589661), ('response', 0.6434261798858643), ('survey', 0.5534768104553223)]

#---------------4.4  找出与其他词差异最大的词
model = Word2Vec.load('./MyModel')
print(model.wv.doesnt_match(['human','user','survey']))

#结果
user

其他还有很多如:
words_closer_than(),similar_by_word(),similar_by_vector(),similarity_matrix()
参见源码keyedvectors.py

载入模型并继续训练

载入模型并继续训练意思是,之前训练好了一个词向量模型,可能训练时间不足,或者又有了新的数据,那么此时就可以在原来的基础上接着训练而不用从头再来。

#示例 5
    model = Word2Vec(sentences=pos,size=50,min_count=5)
    model.save('./vec.model_pos')
    print('语料数:', model.corpus_count)
    print('词表长度:', len(model.wv.vocab)) 

# 结果
语料数: 5000
词表长度: 6699
    
#-------------增量训练
    model = Word2Vec.load('./vec.model_pos ')
    model.build_vocab(sentences=neg, update=True)
    model.train(sentences=neg, total_examples=model.corpus_count, epochs=model.iter)
    model.save('./vec.model')

    print('语料数:', model.corpus_count)
    print('词表长度:', len(model.wv.vocab))
# 结果
语料数: 5001
词表长度: 8296

可以看到,第一次训练时用了5000个语料,训练完成后词表中一共有6699个词;在追加训练时,用了5001个语料,此时词表中一共就有了8296个词

载入模型和使用

我们用之前训练好的模型来演示

# 示例 6

model = Word2Vec.load('./vec.model')
    print('词表长度:', len(model.wv.vocab))
    print('爱    对应的词向量为:',model['爱'])
    print('喜欢  对应的词向量为:',model['喜欢'])
    print('爱  和  喜欢的距离(余弦距离)',model.wv.similarity('爱','喜欢'))
    print('爱  和  喜欢的距离(欧式距离)',model.wv.distance('爱','喜欢'))
    print('与 爱 最相近的3个词:',model.wv.similar_by_word('爱',topn=3))
    print('与 喜欢 最相近的3个词:',model.wv.similar_by_word('喜欢',topn=3))
    print('爱,喜欢,恨 中最与众不同的是:',model.wv.doesnt_match(['爱','喜欢','恨']))


#结果
词表长度: 8296
爱    对应的词向量为: [-1.0453074  -2.5688617   1.2240907  ...
喜欢  对应的词向量为: [-0.5997423  -1.8003637   1.2935492  ...
爱  和  喜欢的距离(余弦距离) 0.89702404
爱  和  喜欢的距离(欧式距离) 0.10297596454620361
与 爱 最相近的3个词: [('喜欢', 0.89702), ('伤害', 0.88481), ('情感', 0.883626)]
与 喜欢 最相近的3个词: [('青梅竹马', 0.91182), ('轻浮', 0.91145), ('爱', 0.89702)]
爱,喜欢,恨 中最与众不同的是: 恨


自己训练词向量特征时候,会结合本篇文章来使用word2vec库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/180164.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是盒子模型?

什么是盒子模型? 盒子模型组成有 4 部分,分别为:内容 内边距 外边距(一般不计入盒子实际宽度) 边框 盒子模型有 2 种:标准盒子模型与怪异盒子模型 标准盒子模型content(内容)border(边框)padding(内边距) 怪异盒子模型content(内容)(已经包含了 padding 和 border) …

随手查——Lumerical

Lumerical小白学习的一些记录,以防自己忘记,持续更。。。 快速导航1、如何设置网格2、关于窗口的一些操作(1)窗口的最大化与复原(2)窗口的关闭与开启1、如何设置网格 【View】→【Drawing grid】→【Edit …

ctfshow代码审计篇

文章目录web301-SQL注入web302- sql写shellweb303- insertweb304- 报错注入web305- 反序列化蚁剑连接数据库web306- 反序列化web307- shell_exce()web308- ssrf打mysqlweb309- ssrf打fastcgiweb310- ssrffastcfgi写shellweb301-SQL注入 check.php $username$_POST[userid]; $u…

php实现短链接系统

依据第二种算法,URL长连接转短连接实现方法如下: 语言:PHP5.6 服务器环境:LNMP 假设:长连接地址:http://www.test.com/index.php 短连接地址:http://t.test.com/六位code码 第一步&#xff…

Ubuntu18上安装搜狗输入法

一、说明 在ubuntu上安装中文输入法会经常遇到问题。本文是作者经过历次艰苦卓绝的努力后,安装成功的总结。这里稍作记录,以便日后安装时查询。 二、版本选择 注意:目前的搜狗和ubuntu版本是有个配套问题,如下表所列: …

【Typescript学习】使用 React 和 TypeScript 构建web应用(一)预览成品、初始化react项目、常见类型

教程来自freecodeCamp:【英字】使用 React 和 TypeScript 构建应用程序 跟做,仅记录用 其他资料:https://www.freecodecamp.org/chinese/news/learn-typescript-beginners-guide/ 第一天 1 学习目标(我个人的) 入门 …

开启前端CSS学习之路-css001

😊博主页面:鱿年年 👉博主推荐专栏:《WEB前端》👈 ​💓博主格言:追风赶月莫停留,平芜尽处是春山❤️ 目录 前言 一、CSS简介 1.HTML的局限性 2.CSS-网页美容师 3.CSS语法规范…

ccflow 代码

java 工作流的开发框架目录概述需求:设计思路实现思路分析1.工作流参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge S…

十大常见排序算法(java编写)

日升时奋斗,日落时自省 目录 1、插入排序 2、希尔排序 3、选择排序 4、堆排序 5、冒泡排序 6、快速排序 6.1、Hoare法找基准值 6.2、挖坑法找基准值 6.3、快慢指针找中间值 6.4、优化 6.5、非递归排序 7、归并排序 7.1、递归实现 7.2、非递归实现 7.…

车载通信协议-列车实时数据协议(TRDP)

TCNOPEN是一个铁路行业相关的合作伙伴创建的开源的倡议,其目的是建立一些新的或即将出台的铁路标准的关键部分,通常以TCN命名。TCN(列车通信网络)是IEC(国际电工委员会)第43工作组制定的一系列国际标准&…

C++学习/温习:新型源码学编程(一)

写在前面 本文约15页,如觉得文章过长请通过左侧边栏或知识点概览目录浏览食用面向初学者撰写专栏,个人原创的学习C/C笔记(干货)编程练习所作源代码输出内容为中文,便于理解如有错误之处请各位读者指正请读者评论回复、…

Go语言基础突破(一)——基础语法快速上手

文章目录一、本次学习重点内容:二、详细知识点介绍:1、什么是Go语言特点:2、为什么字节跳动全面使用go语言:3、开发环境——安装Golang:4、推荐编辑器:VScode、Goland5、基础语法1、HolleWorld2、基础语法——变量声明…

Ubuntu 玩机笔记

键盘Fn无法切换功能键与多媒体键 终端输入: echo 2 | sudo tee /sys/module/hid_apple/parameters/fnmode然后再长按 FnXL 约四秒即可成功使用Fn切换功能键与多媒体键。 永久生效 以上方法只是输入命令后生效,想要永久生效,可以进行如下操…

深度学习-吴恩达(C5)训练词向量

2.1 词汇表征 上周我们学习了RNN、GRU单元和LSTM单元。本周你会看到我们如何把这些知识用到NLP上,用于自然语言处理,深度学习已经给这一领域带来了革命性的变革。其中一个很关键的概念就是词嵌入(word embeddings),这…

手机提供GMS支持(适用安卓和鸿蒙系统)

手机提供GMS支持 - 适用安卓和鸿蒙系统前言方式1:安装GMS套件(不推荐)方式2:安装OurPlay(推荐)方式3:安装Gspace(推荐)前言 本文提供多种为手机(安卓和鸿蒙系…

数据库系统概论①——数据库系统基本概念

文章目录1、数据库的相关术语1.1 数据(Data)1.2 数据库(Database,简称DB)1.2.1 数据库的定义:数据库是长期储存在计算机内、有组织的、可共享的数据集合。1.2.2 数据库的特征1.3 数据库管理系统(DBMS)1.3.1 DBMS的主要功能1.4 数据库系统&…

自己动手写一个操作系统——MBR(4)_调试_elf_bin

文章目录前言elf 文件指定代码入口地址添加调试信息代码检验调试小结前言 通过 GDB 我们可以跟踪程序的执行, 并且能够看到寄存器的状态, 但是,上面这种调试方式,没有和代码对应起来,以致于我们无法直观地知道 CP…

CodeSYS之一EtherNET驱动禾川电机

硬件:HCFA Q0-1100系列CPU X3EB 驱动器, SV-X2MHO40A伺服电机,24V开关电源。 硬件连接: 电机三相线和编码器线接X3EB驱动器,24V电源接X3EB驱动器,驱动器IN网口接 CPUPort2,CPU接24V电源,Port1 接电脑。 这部分有问题可以直接进禾川官网 一、驱动器调试 接好先后,按驱动…

边缘检测、Padding、stride、三维卷积

目录1.边缘检测(edge detection)当我们做物体识别的时候,一般神经网络的前几层会进行边缘检测,然后检测到物体的一部分,最后检测到整个物体。边缘检测例子:垂直边缘检测器:中间的一个3x3的矩阵,我们称之为过…

力扣sql简单篇练习(六)

力扣sql简单篇练习(六) 1 变更性别 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # set子句中也是可以使用if函数的 UPDATE Salary SET sexif(sexf,m,f)1.3 运行截图 2 销售员 2.1 题目内容 2.1.1 基本题目信息1 2.1.2 基本题目信息2 2.1.3 示例…