簡體   English   中英

Gensim 訓練 word2vec 和 Fasttext

[英]Gensim train word2vec and Fasttext

我需要用 word2vec 和 fasttext 訓練我自己的 model。 通過閱讀不同的來源,我發現了不同的信息。 所以我做了 model 並像這樣訓練它:

model = FastText(all_words, size=300, min_count= 3,sg=1)
model = Word2Vec(all_words, min_count=3, sg = 1, size = 300 )

所以我讀到這應該足以創建和訓練 model。 但后來我看到,有些人是分開做的:

model = FastText(size=4, window=3, min_count=1)  # instantiate
model.train(sentences=common_texts, total_examples=len(common_texts), epochs=10)  # train

現在我很困惑,不知道我所做的是否正確。 有人可以幫我說清楚嗎? 謝謝

當您實例化 model object 時,提供您的訓練語料庫 - all_words是完全可以接受的。 在這種情況下,model 將使用該數據自動執行訓練 model 所需的所有步驟。 所以你可以這樣做:

model = Word2Vec(all_words, ...)  # where '...' is your non-default params

在實例化 model 時不提供語料庫也是可以接受的 - 但是 model 非常小,只有您的初始參數。 它仍然需要發現相關的詞匯表(這需要對訓練數據進行一次遍歷),然后分配一些變化很大的內部結構來容納這些單詞,然后進行實際的訓練(這需要對訓練數據進行多次額外的遍歷)。

因此,如果您在實例化 model 時不提供語料庫,則應該進行兩個額外的方法調用:

model = Word2Vec(...)  # where '...' is your non-default params
model.build_vocab(all_words)  # discover vocabulary & allocate model
# now train, with #-of-passes & #-of-texts set by earlier steps
model.train(all_words, epochs=model.iter, total_examples=model.corpus_count)

我展示的這兩個代碼塊是等效的。 頂部為您執行通常的步驟; 底部將步驟分解為您的顯式控制。

(您在問題中摘錄的代碼顯示.train()調用,由於多種原因會出錯.build_vocab()是獲得完全分配的 model 和調用.train()必須明確 state 所需的epochs和語料庫中項目數量的准確計數total_examples 。但是,您可以並且通常應該重用已經通過前兩個步驟緩存到model中的值。)

您可以選擇使用哪種方法。 通常,如果人們想要在步驟之間進行其他輸出/記錄,或者在可能篡改 model state 的步驟之間進行一些高級操作,則通常只使用 3 個單獨的步驟過程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM