(二)利用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左右的語料,花了接近三個小時。

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