20210331

https://blog.csdn.net/sinat_26917383/article/details/83029140
glove实例
https://dumps.wikimedia.org/zhwiki/
wiki语料列表
https://blog.csdn.net/weixin_40871455/article/details/88822290
https://wiki.apertium.org/wiki/Wikipedia_Extractor
https://github.com/18106574249/WikiExtractor
python3 WikiExtractor.py --infn dump.xml.bz2 --compress
抽取命令
抽取文本代码

https://blog.csdn.net/weixin_34194702/article/details/94678723
维基百科中文语料
https://blog.csdn.net/weixin_34111819/article/details/89580318
https://zhuanlan.zhihu.com/p/40016964
使用Gensim模块训练词向量

https://blog.csdn.net/sinat_26917383/article/details/83029140
极简使用︱Glove-python词向量训练与使用
https://blog.csdn.net/weixin_40952784/article/details/100729036
glove 只有linux的安装包 资料也是基于linux 不方便

https://download.csdn.net/download/qq_36426650/11828655
glove 预训练中文词向量

word2vec在NLP领域的运用比较多,最近看了网上的例子觉得挺有意思的,就自己动手实践了一下。

简单总结:

所谓的word vector,就是指将单词向量化,将某个单词用特定的向量来表示。将单词转化成对应的向量以后,就可以将其应用于各种机器学习的算法中去。一般来讲,词向量主要有两种形式,分别是稀疏向量和密集向量。

所谓稀疏向量,又称为one-hot representation,就是用一个很长的向量来表示一个词,向量的长度为词典的大小N,向量的分量只有一个1,其他全为0,1的位置对应该词在词典中的索引[1]。举例来说,如果有一个词典[“面条”,”方便面”,”狮子”],那么“面条”对应的词向量就是[1,0,0],“方便面”对应的词向量就是[0,1,0]。这种表示方法不需要繁琐的计算,简单易得,但是缺点也不少,比如长度过长(这会引发维数灾难),以及无法体现出近义词之间的关系,比如“面条”和“方便面”显然有非常紧密的关系,但转化成向量[1,0,0]和[0,1,0]以后,就看不出两者有什么关系了,因为这两个向量相互正交。当然了,用这种稀疏向量求和来表示文档向量效果还不错,清华的长文本分类工具THUCTC使用的就是此种表示方法

至于密集向量,又称distributed representation,即分布式表示。最早由Hinton提出,可以克服one-hot representation的上述缺点,基本思路是通过训练将每个词映射成一个固定长度的短向量,所有这些向量就构成一个词向量空间,每一个向量可视为该空间上的一个点[1]。此时向量长度可以自由选择,与词典规模无关。这是非常大的优势。还是用之前的例子[“面条”,”方便面”,”狮子”],经过训练后,“面条”对应的向量可能是[1,0,1,1,0],而“方便面”对应的可能是[1,0,1,0,0],而“狮子”对应的可能是[0,1,0,0,1]。这样“面条”向量乘“方便面”=2,而“面条”向量乘“狮子”=0 。这样就体现出面条与方便面之间的关系更加紧密,而与狮子就没什么关系了。这种表示方式更精准的表现出近义词之间的关系,比之稀疏向量优势很明显。可以说这是深度学习在NLP领域的第一个运用(虽然我觉得并没深到哪里去)

回过头来看word2vec,其实word2vec做的事情很简单,大致来说,就是构建了一个多层神经网络,然后在给定文本中获取对应的输入和输出,在训练过程中不断修正神经网络中的参数,最后得到词向量。

训练模型主要步骤包括:

第一节:读取文件

import jieba,re,os
from gensim.models import word2vec
import logging
#jieba.load_userdict("data\\userdict.txt")  logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO,filename='test_01.log')
filename = 'test_01.txt'   #测试文本
pre,ext = os.path.splitext(filename)   #输入文件分开前缀,后缀   pre=test_01   ext=.txt
corpus = pre + '_seg' + ext    #训练语料为按行分词后的文本文件    corpus=test_01_seg.txt
fin = open(filename,encoding='utf8').read().strip(' ').strip('\n').replace('\n\n','\n')   #strip()取出首位空格,和换行符,用\n替换\n\n
stopwords = set(open('test_01停用词.txt',encoding='utf8').read().strip('\n').split('\n'))   #读入停用词对日志处理,logging.basiConfig函数的各个参数可以参考:logging.basicConfig函数各参数:
filename: 指定日志文件名
filemode: 和file函数意义相同,指定日志文件的打开模式,'w'或'a'
format: 指定输出的格式和内容,format可以输出很多有用信息,如上例所示:  %(levelno)s: 打印日志级别的数值  %(levelname)s: 打印日志级别名称  %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]  %(filename)s: 打印当前执行程序名  %(funcName)s: 打印日志的当前函数  %(lineno)d: 打印日志的当前行号  %(asctime)s: 打印日志的时间  %(thread)d: 打印线程ID  %(threadName)s: 打印线程名称  %(process)d: 打印进程ID  %(message)s: 打印日志信息
datefmt: 指定时间格式,同time.strftime()
level: 设置日志级别,默认为logging.WARNING
stream: 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略 第二:分词,将训练文本中的词做处理,不能包含停用词中的词,以及长度少于等于1的词,去标点,
所谓停用词,就是出现频率太高的词,如逗号,句号等等,以至于没有区分度。text = ' '.join([x for x in jieba.lcut(fin) if x not in stopwords and len(x)>1 and x != '\n'])  #去掉停用词中的词,去掉长度小于等于1的词
print(text)
results = re.sub('[()::?“”《》,。!·、\d ]+',' ',text)  #去标点
open(corpus,'w+',encoding='utf8').write(results)   #按行分词后存为训练语料
第三:用预处理好的语料 训练模型#3.训练模型
sentences = word2vec.LineSentence(corpus)  # 加载语料,LineSentence用于处理分行分词语料
#sentences1 = word2vec.Text8Corpus(corpus)  #用来处理按文本分词语料
#print('=--=-=-=-=-=',sentences)
model = word2vec.Word2Vec(sentences, size=12,window=25,min_count=2,workers=5,sg=1,hs=1)  #训练模型就这一句话  去掉出现频率小于2的词
# http://blog.csdn.net/szlcw1/article/details/52751314 训练skip-gram模型; 第一个参数是训练预料,min_count是小于该数的单词会被踢出,默认值为5,size是神经网络的隐藏层单元数,在保存的model.txt中会显示size维的向量值。默认是100。默认window=5第四:保存模型# 4保存模型,以便重用
model.save("test_01.model")   #保存模型
model.wv.save_word2vec_format('test_01.model.txt','test_01.vocab.txt',binary=False) # 将模型保存成文本,model.wv.save_word2vec_format()来进行模型的保存的话,会生成一个模型文件。里边存放着模型中所有词的词向量。这个文件中有多少行模型中就有多少个词向量。第五:加载模型,验证模型
#5词向量验证
#加载训练好的模型
model = word2vec.Word2Vec.load("test_01.model")  #加载训练好的语料模型
# 计算两个词的相似度/相关程度
# role1 = ['大圣','悟空','齐天大圣','师兄','老孙','行者','孙行者','孙悟空']
# role2 = ['天蓬','猪悟能','老猪','八戒','猪八戒','呆子']
role1 = ['天地','万物','一元']
role2 = ['天地','百岁']
pairs = [(x,y) for x in role1 for y in role2]print(pairs)  #[('天地', '天地'), ('天地', '百岁'), ('万物', '天地'), ('万物', '百岁'), ('一元', '天地'), ('一元', '百岁')]#pairs = [('观音','猪悟能'),('观音','天蓬'),('观音','八戒'),('呆子','八戒'),('天蓬','嫦娥'),('天蓬','大圣'),('天蓬','卷帘'),('八戒','姐姐')]
for pair in pairs:print("> [%s]和[%s]的相似度为:" % (pair[0],pair[1]), model.similarity(pair[0], pair[1]))   # 预测相似性# 计算某个词的相关词列表
figures = ['如来','西天','观音','老君','师父','老孙','八戒','沙和尚','南天门','王母','天王']
for figure in figures:print("> 和[%s]最相关的词有:\n" % figure, '\n'.join([x[0].ljust(4,' ')+str(x[1]) for x in model.most_similar(figure, topn=10)]),sep='')  # 默认10个最相关  结果:

python实现glove,gensim.word2vec模型训练实例相关推荐

  1. [书蕴笔记-1]word2vec模型训练

    word2vec模型训练 前言 整体索引在此 书蕴--基于书评的人工智能推荐系统 上次把文本进行了预处理,主要是使用正则去除标签以及对文本去除停用词以及结巴分词. 后续还会加入tf-idf来动态选取停 ...

  2. YOLOV3目标检测模型训练实例

    YOLOV3目标检测 从零开始学习使用keras-yolov3进行图片的目标检测,比较详细地记录了准备以及训练过程,提供一个信号灯的目标检测模型训练实例,并提供相关代码与训练集. DEMO测试 YOL ...

  3. word2vec模型训练保存加载及简单使用

    目录 word2vec模型训练保存加载及简单使用 一 word2vec简介 二.模型训练和保存及加载 模型训练 模型保存和加载 模型的增量训练 三.模型常用API 四.文本相似度计算--文档级别 wo ...

  4. NLP分词数据准备及模型训练实例

    NLP分词数据准备及模型训练实例 目录 NLP分词数据准备及模型训练实例 方案分析及梳理 示例代码

  5. NLP词性标注数据准备及模型训练实例

    NLP词性标注数据准备及模型训练实例 目录 NLP词性标注数据准备及模型训练实例 第一套方案: 第二套方案

  6. NLP命名实体识别NER数据准备及模型训练实例

    NLP命名实体识别NER数据准备及模型训练实例 目录 NLP命名实体识别NER数据准备及模型训练实例 ​ 方案一

  7. Spark下的word2vec模型训练

    一.引言 前边一节介绍了Word2Vec模型训练同义词,那么在大数据量的情况下,我们自然想到了用spark来进行训练.下面就介绍我们是如何实现spark上的模型训练. 二.分词 模型训练的输入是分好词 ...

  8. 【机器学习】太香啦!只需一行Python代码就可以自动完成模型训练!

    自动化机器学习(Auto-ML)是指数据科学模型开发的管道组件自动化.AutoML 减少了数据科学家的工作量并加快了工作流程.AutoML 可用于自动化各种管道组件,包括数据理解,EDA,数据处理,模 ...

  9. python训练模型、如何得到模型训练总时长_模型训练时间的估算

    模型训练时间的估算 昨天群里一个朋友训练一个BERT句子对模型,使用的是CPU来进行训练,由于代码是BERT官方代码,并没有显示训练需要的总时间,所以训练的时候只能等待.他截图发了基本的信息,想知道训 ...

最新文章

  1. C# http 性能优化500毫秒到 60 毫秒
  2. @import注解使用
  3. bt服务器搭建 linux_Linux 搭建 我的世界(MC) 基岩版服务器
  4. 快速开发mina(翻译)
  5. UGUI_UGUI事件系统简述及使用方法总结
  6. JavaWeb第一讲 Servlet的工作原理及生命周期
  7. C++:05---命名空间
  8. eureka上的微服务不能通过服务名调用_掌门教育微服务体系 Solar | 阿里巴巴 Nacos 企业级落地上篇...
  9. 2021年中国充油散热器市场趋势报告、技术动态创新及2027年市场预测
  10. mysql not in null_MySQL中NOTIN语句对NULL值的处理
  11. 自动驾驶 2-5 自动驾驶汽车的未来 The Future of Autonomous Vehicles
  12. C#判断PC是否支持触摸屏
  13. JS 利用CNZZ进行站长统计
  14. web网站中常见攻击手法与原理
  15. 电位计,电子尺0-5欧姆或0-50欧姆转换成电流电压0-10MA/0-10V转换器,隔离器
  16. Android UI 显示工具——HierarchyViewer工具
  17. 普通类,抽象类和接口之间的区别
  18. [大话设计模式]UML类图基本图示法,以及PowerDesigner的工具板介绍
  19. 为什么1024是程序员节
  20. 老乡鸡上市获反馈:毛利率持续下降,多次被罚,食品安全隐患凸显

热门文章

  1. java 手编线程池_死磕 java线程系列之自己动手写一个线程池
  2. 2022-2028年中国交通建设PPP模式深度分析及发展战略研究报告(全卷)
  3. VS Code 配置调试参数、launch.json 配置文件属性、task.json 变量替换、自动保存并格式化、空格和制表符、函数调用关系、文件搜索和全局搜索、
  4. Docker 入门系列(4)- Docker 数据管理(挂载目录、挂载文件、数据卷挂载、数据卷共享、数据卷删除、数据卷容器备份和恢复)
  5. debian10 chrony简单配置
  6. 矩阵的卷积核运算(一个简单小例子的讲解)深度学习
  7. Docker入门之 - 如何安装Docker CE
  8. 英伟达TRTTorch
  9. 人脸标记检测:ICCV2019论文解析
  10. 2021年大数据Spark(五十一):Structured Streaming 物联网设备数据分析