close

在找出文字相關詞(包含上下文、共同常出現的詞或同義詞)的時候,過往都是用人工編撰的詞典,想當然爾,精確度肯定很高,不過需要耗費大量人力,並且無法自動化。

Mikolov et al. (2013)2013提出兩種模型架構來呈現字詞的向量,分別是skip-gramcontinuous bag of words (CBOW),實驗結果顯示這兩個模型所訓練出來的300維度向量,均可有效找出語意相似與句型用法相似的詞彙。

 

步驟一: 安裝 Gensim

安裝 Gensim

pip install gensim

看是安裝哪套套件管理系統,如果是pip3,指令就是 pip3 install gensim

 

安裝畫面如下:

1.png

 

上面的錯誤訊息不用理它,因為我有裝 tensorflow 2.3.0,這與 gensim無關。

 

步驟二: 輸入訓練資料

資料需要的格式是txt,並且是斷詞後的結果,斷詞方法請參考(斷詞教學請點我),內文如下範例:

2.png

 

它是把所有文字先串起來,然後開始斷詞,斷詞教學請點我,再把斷詞結果串起來當成輸入。

 

步驟三: gensim word2vector 訓練

#使用 Gensim 訓練模型
from gensim.models import word2vec
def w2vTrain():
   
# Settings
   
seed = 666
   
sg = 0
   
window_size = 10
   
vector_size = 100
   
min_count = 1
   
workers = 8
   
epochs = 5
   
batch_words = 10000

   
train_data = word2vec.LineSentence('wiki_text_seg.txt')
    model = word2vec.Word2Vec(
        train_data,
       
min_count=min_count,
       
vector_size=vector_size,
       
workers=workers,
       
epochs=epochs,
       
window=window_size,
       
sg=sg,
       
seed=seed,
       
batch_words=batch_words
    )
    model.save(
'word2vec.model')

 

if __name__ == '__main__':
    w2vTrain()

 

參數說明

參數

說明

seed

亂數種子

sg

0: CBOW, 1: skip-gram, CBOWskip-gram

window_size

周圍詞彙要看的範圍

vector_size

轉成向量的維度

min_count

詞頻少於 min_count 之詞彙不會參與訓練

workers

同時訓練的數量

epochs

訓練的迭代次數

batch_words

每次給多少數量的詞彙進行訓練

 

步驟四: 測試模型效果

#測試模型效果
from gensim.models import word2vec
def test():
    model = word2vec.Word2Vec.load(
'word2vec.model')
   
for item in model.wv.most_similar('高雄'):
       
print(item)

if __name__ == '__main__':
    test()

 

結果如下:

3.png

從結果可看出,高雄的相似詞找到了其他地區的名稱。

最後,我是使用wiki 小的資料集進行訓練,要去哪裡抓,抓到要怎麼用,我會再撰文介紹。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 葛瑞斯肯 的頭像
    葛瑞斯肯

    葛瑞斯肯樂活筆記

    葛瑞斯肯 發表在 痞客邦 留言(0) 人氣()