Windows下维基百科中文语料库词向量训练

Garbage in,garbage out.

​ 自然语言处理中,词向量的处理尤为重要。而生成词向量的好坏往往取决于语料库的训练,所以,语料库的选择十分重要。本文主要介绍维基百科中文语料库的训练过程。

文章目录

  • Windows下维基百科中文语料库词向量训练
    • 下载
    • 抽取内容
    • 繁简转换
    • 去除标点符号
    • 分词
    • 训练词向量
    • 测试

下载

​ 维基百科中文语料库下载链接:https://dumps.wikimedia.org/zhwiki/latest/。这里使用的是最新的zhwiki-latest-pages-articles.xml.bz2,其中内容是标题、正文部分。

抽取内容

​ 抽取内容使用Wikipedia Extractor,安装方法如下:

PS git clone https://github.com/attardi/wikiextractor.git wikiextractor
PS wikiextractor/WikiExtractor.py  -b 2000M -o zhwiki_extracted zhwiki-latest-pages-articles.xml.bz2

​ 由于这个工具就是一个python脚本,因此无需安装,-b 参数指对提取出来的内容进行切片后每个文件的大小,如果要将所有内容保存在同一个文件,那么就需要把这个参数设得大一下,-o 的参数指提取出来的文件放置的目录。

​ 抽取出来的文件的路径为zhwiki_extracted/AA/wiki_00

​ 抽取后的内容格式为每篇文章被一对*包起来,而中的包含了属性有文章的idurltitle属性,如*。

繁简转换

​ 中文维基百科语料库是繁体的,需要转换为简体中文。使用OpenCC来转换,网上很多OpenCC安装失败的情况,这里给出处理办法。

​ 下载OpenCC,百度网盘链接: 链接:https://pan.baidu.com/s/1ms0ckZMbKalNaXS6W8ppOA 提取码:kmvx ,解压之后,将bin添加到系统环境变量即可。

​ 接下来繁简转换,Powershell执行即可,其中**-i是输入文件目录,-o输出文件目录,-c是配置信息(转换模式,配置文件为json文件,存放在opencc下的share文件夹中),其中s2t.json**为简体转繁体,t2s.json为繁体转简体,其他配置可以查看OpenCC的主页。

PS opencc -i zhwiki_extract/AA/wiki_00 -o zhwiki_extract/zhs_wiki -c /home/nlp/OpenCC/data/config/t2s.json

去除标点符号

​ 我们需要把文本中的标点去除,使用以下代码:

import re
def removePun(inputFileName,outputFileName):i = 0punctuation = re.compile("[-~!@#$%^&*()_+`=\[\]\\\{\}\"|;':,./<>?·!@#¥%……&*()——+【】、;‘:“”,。、《》?「『」』]")output = open(outputFileName,'w',encoding='utf8')with open(inputFileName,'r',encoding='utf8') as source:line = source.readline()count = 0while line:if line != '':line = punctuation.sub('', line)count += 1if count == 10000:i += 1print('第',str(i),'次')count = 0line = source.readline()output.write(line)
removePun('zhs_wiki','zhs_wiki_no')

​ 调用脚本并输入输入文件名,代码中可以修改一下文件输出名字。

分词

​ 有了纯净的文本,下面要做的就是分词了,这里使用jieba分词,安装jieba分词使用pip install jieba即可。

​ 紧接着,执行分词脚本:

import jiebadef cutIt(inputFileName,outputFileName):output = open(outputFileName,'w',encoding='utf8')i = 0with open(inputFileName,'r',encoding='utf8') as source:line = source.readline()count = 0while line:sentence = ''count += 1for w in jieba.cut(line):sentence += (w+' ')output.write(sentence)if count == 10000:i += 1print('第',str(i),'次')count = 0line = source.readline()cutIt('zhs_wiki_no','zhs_wiki_cut')

​ 可以修改代码中输入、输出文件名。

训练词向量

​ Word2Vector有两种训练词向量的方式:CBOW和skip-gram,其中,CBOW是通过上下文来预测中心词的概率,skip-gram则相反,使用中心词来预测上下文的概。

​ 首先安装gensimpip install gensim,简单的训练代码如下:

import gensimdef word2vec_train(inputFileName,outputFileName):sentences = gensim.models.word2vec.Text8Corpus(inputFileName)model = gensim.models.word2vec.Word2Vec()model.build_vocab(sentences)model.train(sentences,total_examples=model.corpus_count,epochs=model.epochs)model.wv.save_word2vec_format(outputFileName+'.model',binary = True)word2vec_train('zhs_wiki_cut','zhs_wiki')

​ 首先将输入的文件转为 gensim 内部的 LineSentence 对象,要求输入的文件的格式为每行一篇文章,每篇文章的词语以空格隔开。gensim.models.Word2Vec会初始化一个Word2Vector模型,size表示训练出来向量的维度;window为共现窗口大小;min_count表示要忽略词语出现次数的阈值,一般取值(0~100);workers表示开多少进程进行训练;sg表示采用何种算法训练,取0表示使用CBOW模型,取1使用skip-gram模型。使用**save()或着是save_word2vec_format()保存,加载时使用相应的load()或者load_word2vec_format()**即可。

测试

​ 训练完成,可以进行简单的测试:

import gensimmodel = gensim.models.KeyedVectors.load_word2vec_format('zhs_wiki_test_out.model',binary = True)
print(len(model['数学']))
print(model['数学'])
print(model.similarity('数学','文学'))words = model.most_similar('数学')
print(words)print(model.doesnt_match("数学 文学 电视剧 汉语".split()))

参考:

https://wulc.me/2016/10/12/中文维基百科的词向量的训练/

https://blog.csdn.net/sinat_29957455/article/details/81290356

Windows下维基百科中文语料库词向量训练相关推荐

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

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

  2. word2vec词向量训练及中文文本类似度计算

    本文是讲述怎样使用word2vec的基础教程.文章比較基础,希望对你有所帮助! 官网C语言下载地址:http://word2vec.googlecode.com/svn/trunk/ 官网Python ...

  3. word2vec实例详解python_在python下实现word2vec词向量训练与加载实例

    项目中要对短文本进行相似度估计,word2vec是一个很火的工具.本文就word2vec的训练以及加载进行了总结. word2vec的原理就不描述了,word2vec词向量工具是由google开发的, ...

  4. 基于word2vec的中文词向量训练

    基于word2vec的中文词向量训练 使用katex解析的数学公式,csdn好像不支持 word2vec来源 Google开源 可以在百万数量级的词典和上亿的数据集上进行高效地训练 该工具得到的训练结 ...

  5. 十四、中文词向量训练一

    1.Word2vec介绍 1.1 Word Embedding介绍 WordEmbedding将「不可计算」「非结构化」的词转化为「可计算」「结构化」的向量. 1.2 Word2vec 基本内容 Wo ...

  6. python 词向量_利用python实现词向量训练----

    python的一堆工具包 https://www.lfd.uci.edu/~gohlke/pythonlibs/ ------------------------------------------- ...

  7. 【Pytorch基础教程37】Glove词向量训练及TSNE可视化

    note Glove模型目标:词的向量化表示,使得向量之间尽可能多蕴含语义和语法信息.首先基于语料库构建词的共现矩阵,然后基于共现矩阵和GloVe模型学习词向量. 对词向量计算相似度可以用cos相似度 ...

  8. 极简使用︱Gensim-FastText 词向量训练以及OOV(out-of-word)问题有效解决

    glove/word2vec/fasttext目前词向量比较通用的三种方式,之前三款词向量的原始训练过程还是挺繁琐的,这边笔者列举一下再自己使用过程中快速训练的方式. 其中,word2vec可见:py ...

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

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

最新文章

  1. (转)让你受益终身的10个Word实用技巧
  2. Linux下Tomcat启动报错:port already in use
  3. React 点击按钮显示div与隐藏div
  4. 预算1000以内,可以买哪些手机?
  5. weblogic集群集群说明
  6. 图像处理:透镜畸变及校正模型
  7. 第十二章_网络搭建及训练
  8. 索爱确认2月13日发布Xperia Play
  9. 中南大学 科学计算和MATLAB 初级语言学习
  10. JAVA调用 TSC 打印机 打印中文问题/JNA中文乱码
  11. EXCEL中的定位条件(含快速删除空行,定位图片、文本框等对象)
  12. 为什么很多人公司都在招测试开发?
  13. Android如何配置init.rc中的开机启动进程(service)【转】
  14. java 嵌入ppt_Java 插入图片到PPT幻灯片
  15. 基于蜻蜓优化算法的配电网重构求解(Python代码实现)【IEEE123节点算例】
  16. Linux常用基本命令大全
  17. 使用系统导航栏,设置成全透明的方法
  18. OpenGL二 - 画一个五角星 pentagram
  19. 苹果屏蔽更新描述文件_苹果推送 iOS 13 首个公测版更新 | 附描述文件获取方法...
  20. Java实现 蓝桥杯 算法训练 大小写转换

热门文章

  1. 投资合伙人股份分配_创业者必看的合伙人股权分配细则
  2. 图片服务架构演进及云存储的优势
  3. webpack性能优化全方案
  4. 手把手教你用WOS数据库解决英文文献
  5. java调用打印机没反应_java调用打印机问题
  6. RAID 独立冗余磁盘阵列详解(RAID 0、RAID 1、RAID 5、RAID 10)
  7. 【论文精读】Deep Rectangling for Image Stitching: A Learning Baseline
  8. 润乾报表数据集中参数和宏的使用方法
  9. 问题记录-笔记本HDMI外接2k显示器如何调2k分辨率
  10. 使用vmdk文件创建虚拟机