gensim-fast2vec改造、灵活使用大规模外部词向量(具备OOV查询能力)
本篇是继 极简使用︱Gemsim-FastText 词向量训练以及OOV(out-of-word)问题有效解决 之后,让之前的一些旧的"word2vec"具备一定的词表外查询功能。
还有一个使用场景是很多开源出来的词向量很好用,但是很大,用gensim虽然可以直接用,如果能尽量节省一些内存且比较集中会更好,同时如果有一些OOV的功能就更好了,于是笔者就简单抛砖引玉的简单写了该模块。
github:https://github.com/mattzheng/gensim-fast2vec
譬如以下这些大规模词向量:
1 Embedding/Chinese-Word-Vectors
地址:https://github.com/Embedding/Chinese-Word-Vectors
2 腾讯AI Lab开源大规模高质量中文词向量数据
地址:https://ai.tencent.com/ailab/nlp/embedding.html
文章目录
- 1 Embedding/Chinese-Word-Vectors
- 2 腾讯AI Lab开源大规模高质量中文词向量数据
- 应用一:gensim - fast2vec 简单查询功能
- 应用三:拓词
- 应用二:gensim - fast2vec 抽取部分词向量
- 应用三:gensim - entity2vec 实体词抽取与查询(类item2vec用法)
应用一:gensim - fast2vec 简单查询功能
笔者自己使用的是腾讯的词向量,自己清洗过之后使用,还是很不错的。
# 初始化fv = fast2vec()# 加载模型fv.load_word2vec_format(word2vec_path = 'Tencent_AILab_ChineseEmbedding_refine.txt') # 加载.txt文件fv.model = gensim.models.KeyedVectors.load_word2vec_format(word2vec_path,binary=True) # 加载.bin文件# 求相似词 - 不带oovfv.model.most_similar(positive=[ '香味'], negative=['香'], topn=10) # 带否定词,不带OOVfv.model.most_similar(positive='香味', topn=10) # 词条求相似,不带OOV# 求相似词 - 带oovfv.most_similar('苹果', topn=10,min_n = 1, max_n = 3)# 词条求相似,带OOVfv.most_similar('苹果',negative = ['手机','水果'], topn=10,min_n = 1, max_n = 3)# 带否定词,带OOV# 词条之间求相似fv.similarity('香味','香')# 词条拆分,用在截取词向量环节fv.compute_ngrams('香')# 得到词向量fv.wordVec('香味')# 其他word2vec用法fv.model
本模块是基于gensim-word2vec使用的,那么之前的所有功能都是可以继续使用的
应用三:拓词
通过一些种子词进行相近词查找。
vocab_dict_word2vec = fv.EmbeddingFilter('香味',topn = 100,min_n = 1, max_n = 3,GotWord2vec = False)
vocab_dict_word2vec = fv.EmbeddingFilter(['香味','香气'],topn = 100,min_n = 1, max_n = 3,GotWord2vec = False)
其中主函数中TencentEmbeddingFilter
中参数分别代表:
- topn ,每个单词查找相近词的范围,一般为topn = 50;
- min_n = 1,OOV功能中,拆分词,最小n-grams
- max_n = 3,OOV功能中,拆分词,最大n-grams
- GotWord2vec ,GotWord2vec = True为可获得拓展词的词向量,可以保存;GotWord2vec = False的时候,只能返回附近的词群
该函数可以输入单词条,可以输入词语List。
其中,OOV问题如何解决的思路可参考: 极简使用︱Gemsim-FastText 词向量训练以及OOV(out-of-word)问题有效解决
应用二:gensim - fast2vec 抽取部分词向量
大规模的词向量想截取其中一部分使用,一种方式就是查询之后保存。首先就需要准备一些种子词,然后通过托词,找到相关联的一批词,然后进行保存。
seed_words = ['牛仔骨','泡椒牛蛙']
# 查询
vocab_dict_word2vec = fv.EmbeddingFilter(seed_words,topn = 100,min_n = 1, max_n = 3,GotWord2vec = True)
# 保存
fv.wordvec_save2txt(vocab_dict_word2vec,save_path = 'test_word2vec_1.txt',encoding = 'utf-8-sig')
抽取部分词向量的前提是,提供一些要截取的这个行业的种子词,然后查找这些词附近所有的词群(most_similar),同时每个词拆分开来的词条也要记录(compute_ngrams,用于OOV)。
这些词,导出,保存在.txt之中。
应用三:gensim - entity2vec 实体词抽取与查询(类item2vec用法)
这个是建立在有庞大的词向量训练基础,譬如腾讯的大规模词向量,里面有非常多的词,这些词一部分也是可以用来当作item2vec的用法。
譬如,一个简单案例,我要做针对菜谱的查询,那么我这边准备好了一些菜式名称,然后截取一部分出来,供以后不断使用。
items = ['牛仔骨','泡椒牛蛙','农家小炒肉','目鱼大烤','龙虾意面','榴莲酥','越式牛肉粒']# 拓词 + 保存
vocab_dict_word2vec = fv.EmbeddingFilter(items,GotWord2vec = True)
fv.wordvec_save2txt(vocab_dict_word2vec,save_path = 'food2vec.txt',encoding = 'utf-8-sig')# 加载新模型
fv2 = fast2vec()
fv2.load_word2vec_format(word2vec_path = 'food2vec.txt')# 查询fv2.entity_similar('牛仔骨',items,topn=500)>>> [('牛仔骨', 1.0),
>>> ('农家小炒肉', 0.7015136480331421),
>>> ('榴莲酥', 0.6885859966278076),
>>> ('泡椒牛蛙', 0.6880079507827759),
>>> ('龙虾意面', 0.6354280710220337),
>>> ('越式牛肉粒', 0.6056148409843445),
>>> ('目鱼大烤', 0.6046081185340881)]
其中,entity_similar
,就是查询的时候只能显示items
,提供的词群里面的内容,还是一个比较简单的应用。
本模块是非常有意思的一个模块,当然,虽然有OOV的功能,一些生僻菜名还是很难根据线索找到他们的词向量,如何解决这个问题,是个可以后续研究的地方。
gensim-fast2vec改造、灵活使用大规模外部词向量(具备OOV查询能力)相关推荐
- gensim将python dict字典形式的词向量导入到word2vec模型(同时适合gensim4.0+版本)
先上代码,解释在后: 代码 注意:本代码的gensim 版本适合4.0.0及以上,低于此版本的代码请参考:https://stackoverflow.com/questions/45981305/co ...
- 比赛必备 ︱ 省力搞定三款词向量训练 + OOV词向量问题的可性方案
本篇为资源汇总,一些NLP的比赛在抽取文本特征的时候会使用非常多的方式. 传统的有:TFIDF/LDA/LSI等 偏深度的有:word2vec/glove/fasttext等 还有一些预训练方式:el ...
- 应用 - gensim如何得到word2vec词向量
从三个方面去说明 word2vec词向量中文语料处理(python gensim word2vec总结) python训练work2vec词向量系列函数(python gensim) python训练 ...
- 神经网络 和 NLP —— 语言模型和词向量
前段时间一口气读完了 NN4NLP,很是畅快,非常喜欢作者行文讲解的口吻和逻辑.大概两周读完,每页都有收获,读完后反而担心有所疏漏,知识太多留不住,索性从头来一遍,把学习过程的知识点和思考记录下来,也 ...
- PyTorch在NLP任务中使用预训练词向量
在使用pytorch或tensorflow等神经网络框架进行nlp任务的处理时,可以通过对应的Embedding层做词向量的处理,更多的时候,使用预训练好的词向量会带来更优的性能.下面分别介绍使用ge ...
- lstm数学推导_如何在训练LSTM的同时训练词向量?
你本来也不用自己手动进行词向量更新啊,你搞这么一出最后收敛到0那不是必然的么? @霍华德 老师的答案已经给你推导出来了. 实际上你问的这个问题很简单--只要把Embedding层本身也当成模型参数的一 ...
- 【NLP】word2vec词向量模型训练——基于tensorflow
前言 维基百科中文数据训练word2vec词向量模型--基于gensim库 上文我们使用了 gensim 库中的 Word2vec 模块训练词向量模型,本篇我们通过 tensorflow 自己 ...
- 基于中文维基百科的词向量构建及可视化
你将使用Gensim和维基百科获得你的第一批中文词向量,并且感受词向量训练的基本过程. 词向量原理详解请参考: 词向量技术原理及应用详解(一) 词向量技术原理及应用详解(二) 词向量技术原理及应用详解 ...
- [Paddle2.0学习之第四步](下)词向量之CBOW
[Paddle2.0学习之第四步]词向量之CBOW 项目已放在aistudio: [Paddle2.0学习之第四步](下)词向量之CBOW 文章目录 [Paddle2.0学习之第四步]词向量之CBOW ...
最新文章
- HttpClient basic authentication
- 【笔记】C++ 简化位图图像操作
- linux c 通过套接字获取本地远程地址信息 getsockname getpeername 简介
- mysql8 grant语法失效
- 易语言 取dns服务器,易语言自动修改内网IP地址和DNS
- RTSP,RTP,RTCP的区别
- java读流方式,下载网络上的图片
- 阿里 P8 员工招聘私人助理被辞退;微信上线「拍一拍」功能;FreeBSD 11.4 释出 | 极客头条...
- 数据库管理学习笔记(一)——实体关系建模
- 对多线程程序,单核cpu与多核cpu如何工作相关的探讨
- Spring中使用 InitializingBean
- 谨防病毒利用气象软件锁定浏览器主页
- HDU 2602 Bone Collector 0/1背包
- 【ANSYS命令流】模型的建立(二):其他相关命令(图形控制、节点单元选择等)
- npm报错Beginning October 4, 2021, all connections to the npm registry - including for package installa
- 1602自定义字模方法 CGRAM
- 如何修改项目中Git远程仓库地址?
- JAVA--多对多关系
- halo博客系统升级
- 模拟Android内存不足 activity回收 值保存 状态恢复
热门文章
- gmsv源代码c语言,一个变态网站取源码问题
- android 表格布局行高,表格分割线怎么设置 先把行高调整到合适高度
- python中函数的作用不包括_Python 列表不包含了以下哪个内置函数( )_财经法规答案_学小易找答案...
- DPDK mbuf引用计数出错的分析
- Android jetpack之Navigation
- 博图 Portal v16 相关资源
- 我的柏楚系统激光切割机锁机了
- 吴恩达加入医疗机器人公司Woebot,AlphaGo Zero问世,高性能完胜旧版 | 大数据24小时
- u盘装puppy linux,将PuppyLinux安装到U盘
- 张家界市4月份计算机职称,2017年4月张家界计算机应用能力考试报名时间4月10日起...