【NLP】如何实现快速加载gensim word2vec的预训练的词向量模型

1 问题

通过以下代码,实现加载word2vec词向量,每次加载都是几分钟,效率特别低。

from gensim.models import Word2Vec,KeyedVectors# 读取中文词向量模型(需要提前下载对应的词向量模型文件)
word2vec_model = KeyedVectors.load_word2vec_format('hy-tmp/word2vec.bz2', binary=False)

2 解决方案

(1)方案一
第一次加载后保存为能够快速加载的文件,第二次加载就能快读读取。

file_path = "word2vec/train_bio_word"
if os.path.exists(file_path):word2vec_model = KeyedVectors.load(file_path,mmap='r')
else:# 读取中文词向量模型(需要提前下载对应的词向量模型文件)word2vec_model = KeyedVectors.load_word2vec_format('hy-tmp/word2vec.bz2', binary=False)word2vec_model.init_sims(replace=True)word2vec_model.save(file_path)

(2)方案二
第一次加载后,只将使用到的词向量以表格的形式保存到本地,第二次读取就不需要加载全部word2vec的,只加载表格中的词向量。

file_path = "word2vec/train_vocabulary_vector.csv"
if os.path.exists(file_path):# 读取词汇-向量字典,csv转字典vocabulary_vector = dict(pd.read_csv(file_path))# 此时需要将字典中的词向量np.array型数据还原为原始类型,方便以后使用for key,value in vocabulary_vector.items():vocabulary_vector[key] = np.array(value)else:# 所有文本构建词汇表,words_cut 为分词后的list,每个元素为以空格分隔的str.vocabulary = list(set([word for item in text_data1 for word in item]))# 构建词汇-向量字典vocabulary_vector = {}for word in vocabulary:if word in word2vec_model:vocabulary_vector[word] = word2vec_model[word]# 储存词汇-向量字典,由于json文件不能很好的保存numpy词向量,故使用csv保存pd.DataFrame(vocabulary_vector).to_csv(file_path)

(3)方案三
不使用word2vec的原训练权重,使用Embedding工具库。自动下载权重文件后,高效使用。
参考:https://github.com/vzhong/embeddings
安装库

pip install embeddings  # from pypi
pip install git+https://github.com/vzhong/embeddings.git  # from github
from embeddings import GloveEmbedding, FastTextEmbedding, KazumaCharEmbedding, ConcatEmbeddingg = GloveEmbedding('common_crawl_840', d_emb=300, show_progress=True)
f = FastTextEmbedding()
k = KazumaCharEmbedding()
c = ConcatEmbedding([g, f, k])
for w in ['canada', 'vancouver', 'toronto']:print('embedding {}'.format(w))print(g.emb(w))print(f.emb(w))print(k.emb(w))print(c.emb(w))

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

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

相关文章

Unity URP 如何写基础的曲面细分着色器

左边是默认Cube在网格模式下经过曲面细分的结果,右边是原状态。 曲面细分着色器在顶点着色器、几何着色器之后,像素着色器之前。 它的作用时根据配置信息生成额外的顶点以切割原本的面片。 关于这部分有一个详细的英文教程,感兴趣可以看一…

AtomoVideo:AIGC赋能下的电商视频动效生成

✍🏻 本文作者:凌潼、依竹、桅桔、逾溪 1. 概述 当今电商领域,内容营销的形式正日趋多样化,视频内容以其生动鲜明的视觉体验和迅捷高效的信息传播能力,为商家创造了新的机遇。消费者对视频内容的偏好驱动了视频创意供给…

Redis部署方式(三)主从模式

在前面单机版的基础上,41为主,30为从。 一、主从搭建 1、主Redis安装 41机器redis主要配置 requirepass redis#!_41 bind 0.0.0.0 port 6379 daemonize yes 2、从redis安装 30机器redis主要配置 requirepass redis#!_30 bind 0.0.0.0 port 6380 da…

python 如何使用 NLPchina 开源sql插件,提供代码

分享一段使用python,通过使用发送post请求的方式,来从es集群中获取数据。不用使用 elasticsearh,仅需要导入request和json包即可。 开源sql插件官方 文档 GitHub - NLPchina/elasticsearch-sql: Use SQL to query Elasticsearch 示例代码 调…

Rust语言之交互

文章目录 一、获取用户输入1.读取单行数据2.读取多行数据 二、一个猜数字的游戏1.创建一个新项目2.生成一个随机目标3.进行一次猜测4.多次猜测 三、CTF自测工具1.整理资料2.写一个检查函数3.整合代码4.增加回答次数 四、编译程序 一、获取用户输入 在Rust语言中,你可…

【设计模式】Java 设计模式之建造者模式(Builder Pattern)

建造者模式(Builder Pattern)是设计模式中非常实用的一种,它提供了一种创建对象的最佳方式。下面我将结合实际应用场景,深入分析并讲解建造者模式。 一、建造者模式概述 建造者模式是一种对象构建的设计模式,它将一个…

JavaScript中的事件模型(详细案例代码)

文章目录 一、事件与事件流二、事件模型原始事件模型特性 标准事件模型特性 IE事件模型 一、事件与事件流 javascript中的事件,可以理解就是在HTML文档或者浏览器中发生的一种交互操作,使得网页具备互动性, 常见的有加载事件、鼠标事件、自定…

js实现扫描线填色算法使用canvas展示

算法原理 扫描线填色算法的基本思想是:用水平扫描线从上到下扫描由点线段构成的多段构成的多边形。每根扫描线与多边形各边产生一系列交点。将这些交点按照x坐标进行分类,将分类后的交点成对取出,作为两个端点,以所填的色彩画水平…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《适应分布式资源渗透率提高的配电网网元规划方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

笔记:《NCT全国青少年编程能力等级测试教程Python语言编程三级》

NCT全国青少年编程能力等级测试教程Python语言编程三级 ISBN:9787302574859 绪论 专题1 序列和元组 考查方向 考点清单 考点1 组合数据类型 序列类型(字符串、列表、元组);集合类型;映射类型。 考点2 元组类型 (一)元组类型…

【QT 5 +Linux下qt软件点击.sh脚本运行+Dconf编辑器+学习他人文章+番外篇:点击脚本运行软件】

【QT 5 Linux下qt软件点击.sh脚本运行Dconf编辑器学习他人文章番外篇:点击脚本运行软件】 1、前言2、实验环境3、自我学习总结-本篇总结1、说明:代替qt的快捷方式2、适用性更广3、了解工具:Dconf编辑器注意事项: 4、参考链接-感谢…

PCM和I2S区别

I2S和PCM接口都是数字音频接口,而所见的蓝牙到cpu以及codec的音频接口都是用PCM接口,是不是两个接口有各自不同的应用呢?先来看下概念。 PCM(PCM-clock、PCM-sync、PCM-in、PCM-out)脉冲编码调制,模拟语音信…

Python列表详解

文章目录 索引和逆转增删元素和查找元素排序 刷完这60个标准库模块,成为Python骨灰级玩家 索引和逆转 列表几乎是Python中使用频率最高的数据结构了,一般来说,只需用逗号分隔,并用方括号括起来,便是列表。 x [1,2,3…

C++面试100问(八)

C中栈溢出的解决办法有哪些? 1)、增加栈内存的数目;如果是不超过栈大小但是分配值小的,就增大分配的大小 2)、使用堆内存;具体实现由很多种方法可以直接把数组定义改成指针,然后动态申请内存;也可以把局部变…

C++/CLI使用VS创建 CLR 控制台应用程序

你可以使用“创建新项目”对话框中的“CLR 控制台应用 (.NET Framework)”模板创建已具有基本项目引用和文件的控制台应用项目。 安装 Visual Studio C++ 工作负载时,默认情况下不安装 C++/CLI 支持。 如果没有在“创建新项目”对话框中看到 CLR 项目模板,你可能需要安装 C+…

基础:TCP是什么?

1. TCP 是什么? TCP(Transmission Control Protocol 传输控制协议) 是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 [1]定义。 TCP旨在适应支持多网络应用的分层协议层次结构。连接到不同但互连的计算机…

集成 Spring Data JPA

文章目录 集成 Spring Data JPA1. 添加依赖2. 配置数据源3. 配置 JPA 属性4. 创建实体类5. 创建仓库接口6. 配置事务管理(可选)7. 使用仓库8. 处理异常和日志(可选)9. 自定义仓库方法(可选)10. 使用 Spring…

如何成为一名优秀的硬件工程师

求知若饥,大智如愚,这是乔布斯说的,很多工程师把这句话作为工程师的最基本的职业素养。 “工程师是科学家;工程师是艺术家;工程师也是思想家。”实际上,工程师是利用自然科学来创造工程的人。工程既是物质…

zabbix配置详解

zabbix-server 主要参数及其作用如下所示: 1、DBHost 数据库主机地址 2、DBName 数据库名称 3、DBUser、DBPassword 数据库用户名和数据库密码 4、DBPort 数据库连接端口 5、AlertScriptPath 告警脚本存放路径 6、CacheSize 缓存大小 7、CacheUpdateFrequency 缓存…

Docker容器化技术(使用Dockerfile制作镜像)

Docker中的镜像分层 Docker 支持通过扩展现有镜像,创建新的镜像。实际上,Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的。 1、Docker 镜像为什么分层 镜像分层最大的一个好处就是共享资源。 比如说有多个镜像都从相…