文章目錄
- 概述
- 使用示例
- 模型的保存與使用
- 訓練參數詳解([原鏈接](https://blog.csdn.net/weixin_44852067/article/details/130221655))
- 語料庫訓練
概述
word2vec
是按句子來處理的Sentences(句子們)
使用示例
from gensim.models import Word2Vec
#sentences 是二維的向量,這個就是要用的語料庫(龐大的語料庫文件在第四節說明使用方法)
sentences = [["cat", "say", "meow"], ["dog", "say", "woof"]]#進行模型訓練
model = Word2Vec(sentences,vector_size = 20, window = 2 , min_count = 1, epochs=7, negative=10,sg=1)
print("cat的詞向量:\n",model.wv.get_vector('cat'))
print("\n和“cat”相關性最高的前20個詞語:")
print(model.wv.most_similar('cat', topn = 5))# 與孔明最相關的前20個詞語
模型的保存與使用
在上一步使用示例之后,對模型進行保存和使用:
# 模型的保存與加載
model.save("word2vec.model")
#這種情況存儲下來可以繼續訓練
model = Word2Vec.load("word2vec.model")
#只存儲詞向量,是key:vector的形式,無法繼續訓練.binary表示是否是二進制文件
model.wv.save_word2vec_format("dic_model.model",binary = False)
# 如果需要添加新的語料,則需要進行更新詞庫==>model.build_vocab(LineSentence(sentence_file(新的語料)),update=True)
# 但是注意,如果新增的詞的數量少于訓練時的min_count,就查不到對應的向量
model.build_vocab([["hello", "world"]],update=True)
# 模型繼續增加語料進行訓練,total_examples:句子數;epochs:迭代次數
model.train([["hello", "world"]], total_examples=1, epochs=1)
print("cat的詞向量:\n",model.wv.get_vector('cat'))
訓練參數詳解(原鏈接)
classgensim.models.word2vec.Word2Vec(sentences=None, corpus_file=None, vector_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, ns_exponent=0.75, cbow_mean=1, hashfxn=<built-in function hash>, epochs=5, null_word=0, trim_rule=None, sorted_vocab=1, batch_words=10000, compute_loss=False, callbacks=(), comment=None, max_final_vocab=None, shrink_windows=True)
- sentences 可以是一個list,對于大語料集,建議使用BrownCorpus,Text8Corpus或lineSentence構建。
- vector_size word向量的維度,默認為100。大的size需要更多的訓練數據,但是效果會更好。推薦值為幾十到幾百。
- alpha 學習率
- window 表示當前詞與預測詞在一個句子中的最大距離是多少。
- min_count 可以對字典做截斷。詞頻少于min_count次數的單詞會被丟棄掉,默認值為5。
- max_vocab_size 設置詞向量構建期間的RAM限制。如果所有獨立單詞個數超過這個,則就消除掉其中最不頻繁的一個。每一千萬個單詞需要大約1GB的RAM。設置成None則沒有限制。
- sample 高頻詞匯的隨機降采樣的配置閾值,默認為1e-3,范圍是(0,1e-5) seed 用于隨機數發生器。與初始化詞向量有關。
- workers 參數控制訓練的并行數。 sg 用于設置訓練算法,默認為0,對應CBOW算法;sg=1則采用skip-gram算法。
- hs 如果為1則會采用hierarchica·softmax技巧。如果設置為0(default),則negative
- sampling會被使用。 negative 如果>0,則會采用negative samping,用于設置多少個noise words。
- cbow_mean 如果為0,則采用上下文詞向量的和,如果為1(default)則采用均值。只有使用CBOW的時候才起作用。
- hashfxn hash函數來初始化權重。默認使用python的hash函數。 epochs 迭代次數,默認為5。
- trim_rule 用于設置詞匯表的整理規則,指定那些單詞要留下,哪些要被刪除。可以設置為None(min_count會被使用)或者一個接受()并返回RULE_DISCARD,utils。RULE_KEEP或者utils。RULE_DEFAULT的函數。
- sorted_vocab 如果為1(default),則在分配word index 的時候會先對單詞基于頻率降序排序。
- batch_words 每一批的傳遞給線程的單詞的數量,默認為10000
- min_alpha 隨著訓練的進行,學習率線性下降到min_alpha
語料庫訓練
- 使用自建語料庫進行訓練時,代碼示例如下:
model = Word2Vec(LineSentence(open('corpus.txt', 'r',encoding = 'utf8')),vector_size = 20, window = 2 , min_count = 2, epochs=7, negative=10,sg=1)
其中,corput.txt
是自己制作的預料庫,LinSentence
函數在使用之前需要對待處理的文本數據進行分詞(使用jieba庫,使用可參考鏈接),并以空格分隔;函數在運行時,按行讀取已經以空格分隔的文檔。文檔格式如圖:
- 使用已有語料庫可以是:
BrownCorpus
和Test8Corpus