gensim庫word2vec使用


code:https://github.com/hziwei/TensorFlow-/blob/master/python gensim使用word2vec.ipynb

下載gensim庫

pip install gensim -i https://pypi.douban.com/simple

讀取訓練數據並使用jieba分詞,可以准備自己想要訓練的語料,

import os

import jieba
# 讀取訓練數據
pos_file_list = os.listdir('data/pos')
neg_file_list = os.listdir('data/neg')
pos_file_list = [f'data/pos/{x}' for x in pos_file_list]
neg_file_list = [f'data/neg/{x}' for x in neg_file_list]
pos_neg_file_list = pos_file_list + neg_file_list
# 分詞
for file in pos_neg_file_list:
    with open(file, 'r', encoding='utf-8') as f:
        text = f.read().strip()  # 去讀文件,並去除空格
        text_cut = jieba.cut(text)  # 使用jieba進行分詞
        
        result = ' '.join(text_cut)  # 把分詞結果用空格組成字符串
        
        with open('test.txt', 'a', encoding='utf-8') as fw:
            fw.write(result)  # 把分好的詞寫入到新的文件里面
            pass
        pass
    pass

准備好分詞后的文件,在一般的NLP處理中,會需要去停用詞。由於word2vec的算法依賴於上下文文,而上下文有可能就是停用詞。因此對於word2vec,我們可以不用去停用詞

現在我們可以直接讀分詞后的文件到內存。這里使用了word2vec提供的LineSentence類來讀文件,然后套用word2vec的模型

讀取分好的詞,進行訓練

from gensim.models import word2vec
sentences = word2vec.LineSentence('test.txt')
model = word2vec.Word2Vec(sentences, hs=1, min_count=1, window=3, size=100)

保存模型

model.save('model')  # 保存模型
model = word2vec.Word2Vec.load('model')  # 加載模型

用途

  • 找出某一個詞向量最相近的詞集合
for val in model.wv.similar_by_word("酒店", topn=10):
    print(val[0], val[1])
    pass

  • 查看兩個詞的相近程度
print(model.wv.similarity('酒店', '賓館'))

  • 找出不同類的詞
word_list = ['賓館', '酒店', '飯店', '服務']
print(model.wv.doesnt_match(word_list))

參數解釋:

  • 用gensim函數庫訓練Word2Vec模型有很多配置參數

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= ,iter=5,null_word=0,trim_rule=None, sorted_vocab=1,batch_words=10000)

  • 參數:

sentences:可以是一個list,對於大語料集,建議使用BrownCorpus,Text8Corpus或LineSentence構建。

sg: 用於設置訓練算法,默認為0,對應CBOW算法;sg=1則采用skip-gram算法。

size:是指特征向量的維度,默認為100。大的size需要更多的訓練數據,但是效果會更好. 推薦值為幾十到幾百。

window:表示當前詞與預測詞在一個句子中的最大距離是多少

alpha: 是學習速率

seed:用於隨機數發生器。與初始化詞向量有關。

min_count: 可以對字典做截斷. 詞頻少於min_count次數的單詞會被丟棄掉, 默認值為5

max_vocab_size: 設置詞向量構建期間的RAM限制。如果所有獨立單詞個數超過這個,則就消除掉其中最不頻繁的一個。每一千萬個單詞需要大約1GB的RAM。設置成None則沒有限制。

sample: 高頻詞匯的隨機降采樣的配置閾值,默認為1e-3,范圍是(0,1e-5)

workers參數控制訓練的並行數。

hs: 如果為1則會采用hierarchical softmax技巧。如果設置為0(defaut),則negative sampling會被使用。

negative: 如果>0,則會采用negativesamping,用於設置多少個noise words

cbow_mean: 如果為0,則采用上下文詞向量的和,如果為1(defaut)則采用均值。只有使用CBOW的時候才起作用。

hashfxn: hash函數來初始化權重。默認使用python的hash函數

iter: 迭代次數,默認為5

trim_rule: 用於設置詞匯表的整理規則,指定那些單詞要留下,哪些要被刪除。可以設置為None(min_count會被使用)或者一個接受()並返回RU·E_DISCARD,uti·s.RU·E_KEEP或者uti·s.RU·E_DEFAU·T的函數。

sorted_vocab: 如果為1(defaut),則在分配word index 的時候會先對單詞基於頻率降序排序。

batch_words:每一批的傳遞給線程的單詞的數量,默認為10000


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM