本篇是继 极简使用︱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查询能力)相关推荐

  1. gensim将python dict字典形式的词向量导入到word2vec模型(同时适合gensim4.0+版本)

    先上代码,解释在后: 代码 注意:本代码的gensim 版本适合4.0.0及以上,低于此版本的代码请参考:https://stackoverflow.com/questions/45981305/co ...

  2. 比赛必备 ︱ 省力搞定三款词向量训练 + OOV词向量问题的可性方案

    本篇为资源汇总,一些NLP的比赛在抽取文本特征的时候会使用非常多的方式. 传统的有:TFIDF/LDA/LSI等 偏深度的有:word2vec/glove/fasttext等 还有一些预训练方式:el ...

  3. 应用 - gensim如何得到word2vec词向量

    从三个方面去说明 word2vec词向量中文语料处理(python gensim word2vec总结) python训练work2vec词向量系列函数(python gensim) python训练 ...

  4. 神经网络 和 NLP —— 语言模型和词向量

    前段时间一口气读完了 NN4NLP,很是畅快,非常喜欢作者行文讲解的口吻和逻辑.大概两周读完,每页都有收获,读完后反而担心有所疏漏,知识太多留不住,索性从头来一遍,把学习过程的知识点和思考记录下来,也 ...

  5. PyTorch在NLP任务中使用预训练词向量

    在使用pytorch或tensorflow等神经网络框架进行nlp任务的处理时,可以通过对应的Embedding层做词向量的处理,更多的时候,使用预训练好的词向量会带来更优的性能.下面分别介绍使用ge ...

  6. lstm数学推导_如何在训练LSTM的同时训练词向量?

    你本来也不用自己手动进行词向量更新啊,你搞这么一出最后收敛到0那不是必然的么? @霍华德 老师的答案已经给你推导出来了. 实际上你问的这个问题很简单--只要把Embedding层本身也当成模型参数的一 ...

  7. 【NLP】word2vec词向量模型训练——基于tensorflow

    前言   维基百科中文数据训练word2vec词向量模型--基于gensim库   上文我们使用了 gensim 库中的 Word2vec 模块训练词向量模型,本篇我们通过 tensorflow 自己 ...

  8. 基于中文维基百科的词向量构建及可视化

    你将使用Gensim和维基百科获得你的第一批中文词向量,并且感受词向量训练的基本过程. 词向量原理详解请参考: 词向量技术原理及应用详解(一) 词向量技术原理及应用详解(二) 词向量技术原理及应用详解 ...

  9. [Paddle2.0学习之第四步](下)词向量之CBOW

    [Paddle2.0学习之第四步]词向量之CBOW 项目已放在aistudio: [Paddle2.0学习之第四步](下)词向量之CBOW 文章目录 [Paddle2.0学习之第四步]词向量之CBOW ...

最新文章

  1. HttpClient basic authentication
  2. 【笔记】C++ 简化位图图像操作
  3. linux c 通过套接字获取本地远程地址信息 getsockname getpeername 简介
  4. mysql8 grant语法失效
  5. 易语言 取dns服务器,易语言自动修改内网IP地址和DNS
  6. RTSP,RTP,RTCP的区别
  7. java读流方式,下载网络上的图片
  8. 阿里 P8 员工招聘私人助理被辞退;微信上线「拍一拍」功能;FreeBSD 11.4 释出 | 极客头条...
  9. 数据库管理学习笔记(一)——实体关系建模
  10. 对多线程程序,单核cpu与多核cpu如何工作相关的探讨
  11. Spring中使用 InitializingBean
  12. 谨防病毒利用气象软件锁定浏览器主页
  13. HDU 2602 Bone Collector 0/1背包
  14. 【ANSYS命令流】模型的建立(二):其他相关命令(图形控制、节点单元选择等)
  15. npm报错Beginning October 4, 2021, all connections to the npm registry - including for package installa
  16. 1602自定义字模方法 CGRAM
  17. 如何修改项目中Git远程仓库地址?
  18. JAVA--多对多关系
  19. halo博客系统升级
  20. 模拟Android内存不足 activity回收 值保存 状态恢复

热门文章

  1. gmsv源代码c语言,一个变态网站取源码问题
  2. android 表格布局行高,表格分割线怎么设置 先把行高调整到合适高度
  3. python中函数的作用不包括_Python 列表不包含了以下哪个内置函数( )_财经法规答案_学小易找答案...
  4. DPDK mbuf引用计数出错的分析
  5. Android jetpack之Navigation
  6. 博图 Portal v16 相关资源
  7. 我的柏楚系统激光切割机锁机了
  8. 吴恩达加入医疗机器人公司Woebot,AlphaGo Zero问世,高性能完胜旧版 | 大数据24小时
  9. u盘装puppy linux,将PuppyLinux安装到U盘
  10. 张家界市4月份计算机职称,2017年4月张家界计算机应用能力考试报名时间4月10日起...