簡體   English   中英

如何使用預訓練的gensim skipgram模型嵌入?

[英]How can I use a pretrained embedding to gensim skipgram model?

我想先訓練部分語料庫,然后再基於對整個語料庫的嵌入訓練。 我可以用gensim skipgram實現嗎?

我還沒有找到可以傳遞初始嵌入的API。

我想要的是像

from gensim.models import Word2Vec
sentences = [["cat", "say", "meow"], ["dog", "say", "woof"],
             ["cat2", "say2", "meow"], ["dog2", "say", "woof"]]
model = Word2Vec(sentences[:2], min_count=1)
X = #construct a new one
model = Word2Vec(sentences, min_count=1, initial_embedding=X)

我不確定為什么要這樣做:如果您擁有整個語料庫,並且可以在整個語料庫上進行訓練,那么您很可能會從整體語料庫訓練中獲得最佳效果。

而且,如果第二語料庫缺少任何內容,則第二語料庫訓練將趨向於將仍然訓練的單詞的向量拉離不再在語料庫中的單詞,從而導致語料庫中向量的可比性衰減。 (只是示例之間的交錯拔河,包括所有單詞,將它們推到彼此有意義的位置。)

但是,請記住這一點:您可以繼續使用新數據train()模型。 那是:

# initialize & do all default training
model = Word2Vec(sentences[:2], min_count=1)
# now train again even more with a slightly different mix
model.train(sentences, total_examples = len(sentences), epochs=model.epochs)

請注意,在這種情況下,模型的發現詞匯表僅基於原始初始化。 如果sentences[0]僅包含單詞,則當將這些句子提交給模型時,在初始化過程中沒有看到這些單詞,它們將被忽略-永遠不會得到向量。 (如果以這種方式使用微小的示例語料庫,那么“貓”一詞將不會得到向量。同樣,您真的想在最大的語料庫上進行訓練,或者至少要使用最大的語料庫,該詞庫帶有單詞的超集,第一個)

另外,將記錄一條警告,因為第二次訓練將再次以較大的起始值開始內部alpha學習速率,然后將其逐漸減小為最終的min_alpha值。 像這樣的值不是標准的SGD,通常表示用戶錯誤。 但是,根據您的目標,這可能是可以容忍的–您只需要知道當您在執行這樣的非常規訓練序列時,您就處於實驗/高級領域,必須通過自己的理解來應對可能的副作用。

暫無
暫無

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

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