1. 程式人生 > >gensim 中文語料訓練 word2vec

gensim 中文語料訓練 word2vec

1 word2vec api

看下api:

 gensim.models.word2vec.Word2Vec(sentences=None, size=100, alpha=0.025, window=5, 
 min_count=5, max_vocab_size=None, sample=0.001, seed=1, workers=3, min_alpha=0.0001,  
 sg=0, hs=0, negative=5, cbow_mean=1, hashfxn=<built-in function hash>, iter=5, null_word=0,  
 trim_rule=None, sorted_vocab=1
, batch_words=10000)
  1. 其中的sentences是句子列表,而每個句子又是詞語的列表,即list[list]型別。 切記!!
  2. size是embedding緯度,即每個詞的向量緯度
  3. window是視窗大小
  4. min_count用來做篩選,去除總的詞頻小於該值的詞語
  5. 其他引數見上面的連結

2 中文語料的csv檔案

採用的是csv格式的中文語料:

chnl,nid,doc
體育,18711252,大衛 李髕骨 韌帶 撕裂 等待 MRI 籃球 521日 NBA 記者 MichaelC.Wright RamonaShelburne 聯合 報道 訊息 人士 透露 馬刺 大衛 診斷 膝蓋 韌帶 撕裂 當地 時間 週日 接受 核磁共振 檢查 確認 傷勢 馬刺 今天 主場 勇士 系列賽 比分 落後 李本場 比賽 進攻 落地 不幸 膝蓋 提前 退出 比賽 今年 季後賽 李場 出戰 4.1
分 籃板 來源 Twitter 體育,18711231,尤文 雙冠 劍指 歐冠 決賽 皇馬 北京 時間 521日 尤文圖斯 主場 血虐克 羅託 提前 奪得 意甲 冠軍 史無前例 蟬聯 意甲 518日 義大利杯 實現 盃賽 三連冠 目前 尤文 賽季 展現 強大 實力 目標 13年 拜仁 賽季 劍指 尤文 上一場 聯賽 比賽 羅馬 尤文 義大利杯 決賽 前景 擔憂 斑馬軍團 完美 打消 擁躉 疑慮 順利 奪得 賽季 冠軍 頭銜 尤文 處於 皮亞尼奇 赫迪拉 中場 主力 無法 出場 情況 完成 衛冕 賽季 尤文 想起 拜仁慕尼黑 當時 擁有 強大 羅貝里 組合 穆勒 拉姆 施魏 施泰格 進攻 防守 兩端 強硬 會師 歐冠 決賽 羅本 一錘定音 拜仁 球迷 夜晚 流下 熱淚 布馮 能夠 年齡 耳朵杯 職業 生涯 集齊 世界盃 體育,18711230
,花式 吐餅 看看 奈及利亞 老鄉 北京 時間 521日 中超 繼續 展開 較量 長春 亞泰 坐鎮 經開 體育場 迎來 天津 泰達 挑戰 。本場 比賽 陷入 保級 泥潭 試圖 上半場 主場 作戰 亞泰 發難 胡斯蒂 主罰 前場 任意球 亞泰 中衛 孫捷 力壓 防守 球員 頭槌 破門 主隊 紀錄 下半場 惠家康 精彩 邊路 突破 助攻 德耶 閃電 扳平 比分 雙方 起跑線 比賽 雙方 製造 破門 機會 亞泰 獲得 點球 良機 皮球 直接 送入 對方 門將 懷中 未能 破門 戰罷 雙方 握手言和 相比 平和 比分 雙方 外援 浪費 進球 機會 唏噓不已 亞泰 隊長 ......

chnl, nid, doc分別是頻道,新聞id,文字

3 實現

# -*- coding: utf-8 -*-

import pandas as pd
from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence

df = pd.read_csv('體育.csv')
sentences = df['doc']
line_sent = []
for s in sentences:
    line_sent.append(s.split())  #句子組成list

model = Word2Vec(line_sent, 
                 size=300, 
                 window=5
                 min_count=1, 
                 workers=2)
model.save('./word2vec.model')
for i in model.vocab.keys(): #vocab是dict
    print type(i)
    print i
#model = Word2Vec.load('word2vec_model')
print model.wv['球員']

如果語料檔案不是csv,而直接是訓練的txt檔案,可以使用LineSentence直接把檔案讀成正確的格式

#model = Word2Vec(LineSentence('體育.txt'), 
                  size=300, 
                  window=5
                  min_count=1, 
                  workers=2)

4 注意編碼

訓練用的編碼格式要與使用model時的編碼格式一致。
例如,如果檔案是utf-8的檔案,讀取時沒有轉成unicode,則model使用時也要使用utf-8格式,例如model.wv[‘球隊’]; 訓練是用unicode,則使用model.wv[u’球隊’]