(二)利用Wikipedia中文语料训练词向量word2vec——分词、训练word2vec

在前一节,(一)利用Wikipedia中文语料训练词向量word2vec——获取Wikipedia简体中文语料库
我们学习到了如何下载Wiki中文语料库,并且学会了如何将繁体转换为简体。在这一节中,我们将学习如何训练word2vec,包括分词以及训练两个步骤。所有的处理过程都是在jupyter notebook中进行的。

第一步 jieba分词

import pandas as pd
import codecs
import jieba, re

其中codecs模块用于打开数据量大的文本文件。

%%time # 统计代码的运行时间

# 利用codecs模块打开大容量文本,wiki_text.txt是简体文件
f = codecs.open('wiki_text.txt', 'r', encoding='utf-8')

# 将分词后的文件存入target
target = codecs.open('wiki.zh.jianti.cut.words.txt', 'w', encoding='utf-8')
line_num = 1
line = f.readline()  # 按行读取
# 匹配中文分词
zhPattern = re.compile(u'[\u4e00-\u9fa5]+')
while line:
    print('-'*8 + 'processing ', line_num, ' article' + '-'*8)
    line_cut = ' '.join([word for word in jieba.cut(line) if zhPattern.search(word)])
    target.writelines(line_cut)
    line_num += 1
    line = f.readline()

f.close()
target.close()

运行结果如下:
在这里插入图片描述

第二步 gensim训练word2vec

导入相关包

import logging  # 打印日志
import gensim
import multiprocessing  # 多核处理

logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)

相关参数:

sg=1: 使用skip-gram; sg=0: 使用cbow.
min_count 忽略所有频率低于此值的单词。默认值为5。
window(int)是一个句子中当前单词和预测单词之间的最大距离
size表示训练的词向量维度

%%time

from gensim.models.word2vec import LineSentence, Word2Vec

# wiki.zh.jianti.cut.words.txt是分词后的文本
sentences = LineSentence("wiki.zh.jianti.cut.words.txt")

# multiprocessing.cpu_count()多核CPU进行计算
model = Word2Vec(sentences, size=300, min_count=5, sg=1, window=5, workers=multiprocessing.cpu_count())

#保存模型,供日后使用
model.save("word2vec_300.model")

运行结果:(logging模块将会输出程序运行日志)。
在这里插入图片描述
程序运行完后,将会在本地产生模型文件:
在这里插入图片描述
因为语料库太大,训练很耗时,本机训练2G左右的语料,花了接近三个小时。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章