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

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

Garbage in,garbage out.

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

下载

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

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

分词

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

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

import jieba

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

cutIt('zhs_wiki_no','zhs_wiki_cut')

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

训练词向量

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

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

import gensim

def 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 gensim

model = 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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值