NLP之word2vec:利用 Wikipedia Text(中文维基百科)语料+Word2vec工具来训练简体中文词向量

目录

输出结果

设计思路

1、Wikipedia Text语料来源

2、维基百科的文档解析

3、中文的简繁转换

4、将非utf-8格式字符转换为utf-8格式

5、调用word2vec

实现代码


输出结果

后期更新……

最后的model
word2vec_wiki.model.rar

设计思路

后期更新……

1、Wikipedia Text语料来源

Wikipedia Text语料来源及其下载:zhwiki dump progress on 20190120

其中zhwiki-latest-pages-articles.xml.bz2文件包含了标题、正文部分。压缩包大概是1.3G,解压后大概是5.7G。相比英文wiki中文的还是小了不少。

2、维基百科的文档解析

下载下来的wiki是XML格式,需要提取其正文内容。不过维基百科的文档解析有不少的成熟工具(例如gensim,wikipedia extractor等。其中Wikipedia Extractor 是一个简单方便的Python脚本。

T1、Wikipedia Extractor工具

Wikipedia extractor的网址: http://medialab.di.unipi.it/wiki/Wikipedia_Extractor
Wikipedia extractor的使用:下载好WikiExtractor.py后直接使用下面的命令运行即可,
                   其中,-cb 1200M表示以 1200M 为单位切分文件,-o 后面接出入文件,最后是输入文件。

WikiExtractor.py -cb 1200M -o extracted zhwiki-latest-pages-articles.xml.bz2

T2、python代码实现

    将这个XML压缩文件转换为txt文件

python process_wiki.py zhwiki-latest-pages-articles.xml.bz2 wiki.zh.text 

3、中文的简繁转换

中文wiki内容中大多数是繁体,这需要进行简繁转换。可以采用厦门大学NLP实验室开发的简繁转换工具或者opencc代码实现。

T1、厦门大学NLP实验室开发的简繁转换工具

转换工具下载网址:http://jf.cloudtranslation.cc/
转换工具的使用:下载单机版即可,在windos命令行窗口下使用下面命令行运行
                   其中file1.txt为繁体原文文件,file2.txt为输出转换结果的目标文件名,lm_s2t.txt为语言模型文件。

  jf -fj file1.txt file2.txt -lm lm_s2t.txt

T2、opencc代码实现

opencc -i wiki.zh.text -o wiki.zh.text.jian -c zht2zhs.ini, 将繁体字转换为简体字。

4、将非utf-8格式字符转换为utf-8格式

iconv -c -t UTF-8 < wiki.zh.text.jian.seg > wiki.zh.text.jian.seg.utf-8

5、调用word2vec

python train_word2vec_model.py wiki.zh.text.jian.seg.utf-8 wiki.zh.text.model wiki.zh.text.vector

实现代码

正在更新……

对下边文件代码的说明

#We create word2vec model use wiki Text like this https://dumps.wikimedia.org/zhwiki/20161001/zhwiki-20161001-pages-articles-multistream.xml.bz2##parameter:
=================================feature_size = 500content_window = 5freq_min_count = 3# threads_num = 4negative = 3   #best采样使用hierarchical softmax方法(负采样,对常见词有利),不使用negative sampling方法(对罕见词有利)。iter = 20##process.py deal with wiki*.xml##word2vec_wiki.py : create model and load model

1、process.py文件


#process.py文件
import logging
import os.path
import sys
from gensim.corpora import WikiCorpus#run python process_wiki.py ../data/zhwiki-latest-pages-articles.xml.bz2 wiki.zh.text
if __name__ == '__main__':program = os.path.basename(sys.argv[0])logger = logging.getLogger(program)logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s')logging.root.setLevel(level=logging.INFO)logger.info("running %s" % ' '.join(sys.argv))# check and process input argumentsif len(sys.argv) < 3:print(('globals()[__doc__]):', globals()['__doc__']) )print('locals:', locals())print(globals()['__doc__'] % locals())    #最初代码 print globals()['__doc__'] % locals()sys.exit(1)inp, outp = sys.argv[1:3]space = " "i = 0output = open(outp, 'w')wiki = WikiCorpus(inp, lemmatize=False, dictionary={})for text in wiki.get_texts():output.write(space.join(text) + "\n")i = i + 1if (i % 10000 == 0):logger.info("Saved " + str(i) + " articles")output.close()logger.info("Finished Saved " + str(i) + " articles")

2、word2vec_wiki.py文件

#word2vec_wiki.py文件# -*- coding:utf-8 -*-
from __future__ import print_function
import numpy as np
import os
import sys
import jieba
import time
import jieba.posseg as pseg
import codecs
import multiprocessing
import json
# from gensim.models import Word2Vec,Phrases
from gensim import models,corpora
import logging
# auto_brand = codecs.open("Automotive_Brand.txt", encoding='utf-8').read()sys.path.append("../../")
sys.path.append("../../langconv/")
sys.path.append("../../parser/")
# import xmlparser
# from xmlparser import *
# from langconv import *# logger = logging.getLogger(program)
logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s')
logging.root.setLevel(level=logging.INFO)
# logger.info("running %s" % ' '.join(sys.argv))def json_dict_from_file(json_file,fieldnames=None,isdelwords=True):"""load json file and generate a new object instance whose __name__ filedwill be 'inst':param json_file:"""obj_s = []with open(json_file) as f:for line in f:object_dict = json.loads(line)if fieldnames==None:obj_s.append(object_dict)else:# for fieldname in fieldname:if set(fieldnames).issubset(set(object_dict.keys())):one = []for fieldname in fieldnames:if isdelwords and fieldname == 'content':one.append(delNOTNeedWords(object_dict[fieldname])[1])else:one.append(object_dict[fieldname])obj_s.append(one)return obj_sdef delNOTNeedWords(content,customstopwords=None):# words = jieba.lcut(content)if customstopwords == None:customstopwords = "stopwords.txt"import osif os.path.exists(customstopwords):stop_words = codecs.open(customstopwords, encoding='UTF-8').read().split(u'\n')customstopwords = stop_wordsresult=''return_words = []# for w in words:#     if w not in stopwords:#         result += w.encode('utf-8')  # +"/"+str(w.flag)+" "  #去停用词words = pseg.lcut(content)for word, flag in words:# print word.encode('utf-8')tempword = word.encode('utf-8').strip(' ')if (word not in customstopwords and len(tempword)>0 and flag in [u'n',u'nr',u'ns',u'nt',u'nz',u'ng',u't',u'tg',u'f',u'v',u'vd',u'vn',u'vf',u'vx',u'vi',u'vl',u'vg', u'a',u'an',u'ag',u'al',u'm',u'mq',u'o',u'x']):# and flag[0] in [u'n', u'f', u'a', u'z']):# ["/x","/zg","/uj","/ul","/e","/d","/uz","/y"]): #去停用词和其他词性,比如非名词动词等result += tempword # +"/"+str(w.flag)+" "  #去停用词return_words.append(tempword)return result,return_wordsdef get_save_wikitext(wiki_filename,text_filename):output = open(text_filename, 'w')wiki = corpora.WikiCorpus(text_filename, lemmatize=False, dictionary={})for text in wiki.get_texts():# text = delNOTNeedWords(text,"../../stopwords.txt")[1]output.write(" ".join(text) + "\n")i = i + 1if (i % 10000 == 0):logging.info("Saved " + str(i) + " articles")output.close()def load_save_word2vec_model(line_words, model_filename):# 模型参数feature_size = 500content_window = 5freq_min_count = 3# threads_num = 4negative = 3   #best采样使用hierarchical softmax方法(负采样,对常见词有利),不使用negative sampling方法(对罕见词有利)。iter = 20print("word2vec...")tic = time.time()if os.path.isfile(model_filename):model = models.Word2Vec.load(model_filename)print(model.vocab)print("Loaded word2vec model")else:bigram_transformer = models.Phrases(line_words)model = models.Word2Vec(bigram_transformer[line_words], size=feature_size, window=content_window, iter=iter, min_count=freq_min_count,negative=negative, workers=multiprocessing.cpu_count())toc = time.time()print("Word2vec completed! Elapsed time is %s." % (toc-tic))model.save(model_filename)# model.save_word2vec_format(save_model2, binary=False)print("Word2vec Saved!")return modelif __name__ == '__main__':limit = -1 #该属性决定取wiki文件text tag前多少条,-1为所有wiki_filename = '/home/wac/data/zhwiki-20160203-pages-articles-multistream.xml'wiki_text = './wiki_text.txt'wikimodel_filename = './word2vec_wiki.model's_list = []# if you want get wiki text ,uncomment lines# get_save_wikitext(wiki_filename,wiki_text)# for i,text in enumerate(open(wiki_text, 'r')):#     s_list.append(delNOTNeedWords(text,"../../stopwords.txt")[1])#     print(i)##     if i==limit: #取前limit条,-1为所有#         break##计算模型model = load_save_word2vec_model(s_list, wikimodel_filename)#计算相似单词,命令行输入while 1:print("请输入想测试的单词: ", end='\b')t_word = sys.stdin.readline()if "quit" in t_word:breaktry:results = model.most_similar(t_word.decode('utf-8').strip('\n').strip('\r').strip(' ').split(' '), topn=30)except:continuefor t_w, t_sim in results:print(t_w, " ", t_sim)

参考文章(贴上源址表示感谢)
使用维基百科训练简体中文词向量
中文Wiki语料获取
Wiki语料处理
中文维基语料训练获取
Windows3.5下对维基百科语料用word2vec进行训练寻找同义词相似度

NLP之word2vec:利用 Wikipedia Text(中文维基百科)语料+Word2vec工具来训练简体中文词向量相关推荐

  1. 预训练词向量中文维基百科,英文斯坦福glove预训练的词向量下载

    中文预训练词向量--基于中文维基百科语料训练 英文预训练词向量--斯坦福glove预训练的词向量 百度云分享:https://pan.baidu.com/s/1UpZeuqlNMl6XtTB5la53 ...

  2. 中文维基百科语料上的Word2Vec实验

    说明:此文主要参考52nlp-中英文维基百科语料上的Word2Vec实验,按照上面的步骤来做的,略有改动,因此不完全是转载的.这里,为了方便大家可以更快地运行gensim中的word2vec模型,我提 ...

  3. Windows下基于python3使用word2vec训练中文维基百科语料资料汇总

    Windows下基于python3使用word2vec训练中文维基百科语料(一):https://www.cnblogs.com/gaofighting/p/9055674.html Windows下 ...

  4. 使用中文维基百科进行Word2Vec实验

    1. 环境及语料 1.1 环境 Homebrew Python jieba分词库 gensim库 1.2 下载维基百科语料 从这个链接下载http://download.wikipedia.com/z ...

  5. Windows下基于python3使用word2vec训练中文维基百科语料(一)

    在进行自然语言处理之前,首先需要一个语料,这里选择维基百科中文语料,由于维基百科是 .xml.bz2文件,所以要将其转换成.txt文件,下面就是相关步骤: 步骤一:下载维基百科中文语料 https:/ ...

  6. Windows下基于python3使用word2vec训练中文维基百科语料(三)

    对前两篇获取到的词向量模型进行使用: 代码如下: 1 import gensim 2 model = gensim.models.Word2Vec.load('wiki.zh.text.model') ...

  7. 中英文维基百科语料上的Word2Vec实验

    本文网址为:http://www.52nlp.cn/%E4%B8%AD%E8%8B%B1%E6%96%87%E7%BB%B4%E5%9F%BA%E7%99%BE%E7%A7%91%E8%AF%AD%E ...

  8. 利用Gensim训练关于英文维基百科的Word2Vec模型(Training Word2Vec Model on English Wikipedia by Gensim)

    Training Word2Vec Model on English Wikipedia by Gensim 更新:发现另一篇译文:中英文维基百科语料上的Word2Vec实验,该译文还提供了中文维基百 ...

  9. 使用中文维基百科语料库训练一个word2vec模型

    本篇文章主要介绍如何通过中文维基百科语料库来训练一个word2vec模型. 相关资料下载: 中文维基百科下载地址:https://dumps.wikimedia.org/zhwiki/20180720 ...

最新文章

  1. AI新基建哪家强?百度“秀肌肉”,意在C位
  2. Azure PowerShell (16) 并行开关机Azure ARM VM
  3. [html] 切页面时,每次都动手刷新看效果很麻烦,如果要让你写一个实时刷新预览的工具你该怎么写?
  4. 蓝桥杯 ADV-201 算法提高 我们的征途是星辰大海
  5. 自制VBS自动刷屏器,再也不怕刷屏刷不过别人了
  6. 学习PS2无线手柄解码通讯手册
  7. 最小二乘法原理-线性回归
  8. 图像转PDF的问题、方法及题外话
  9. linux中wine文件夹在哪,linux下wine的使用
  10. 移动方块java,技术编辑教你解决Java移动方块触碰边界反弹
  11. sql 取最近一周的周几_我最近的几周摘要
  12. 我问自己代言,甄嬛篇
  13. (已上传源码)最近开发的一款应用,我选择了哪些框架 第三方库
  14. XMind教程详解之畅通使用
  15. python计算矩阵对角线之和_Python练习实例38 | 求3*3矩阵主对角线元素之和
  16. SAP Commerce Cloud 的 Simple Responsive Banner Component
  17. C#实现自定义打印文字和图片
  18. 技术/研发经理介绍和创业的一些感想
  19. 中文技术文档写作规范【转载】
  20. java二重循环_java二重循环

热门文章

  1. 定位插件_微创新 | 开发PL/SQL插件,快速定位所需字段
  2. c100f3网站服务器,0201N100F250LT
  3. px、em、rem、fr等前端单位介绍
  4. 电脑不能安装虚拟机--解决办法
  5. 课程第七天内容《基础交换七》
  6. QTP整合QC自动化测试--目录结构搭建
  7. Button实现图文混排
  8. 十分钟成为 TiDB Contributor,还送限量版马克杯
  9. 安装node-sass运行报错 Module build failed: TypeError: this.getResolve is not a function at Object.loader
  10. Tomcat 架构原理到架构设计,写得非常好!