簡體   English   中英

gensim doc2vec 從預訓練模型中訓練更多文檔

[英]gensim doc2vec train more documents from pre-trained model

我正在嘗試使用預先訓練的模型使用新的標記文檔(TaggedDocument)進行訓練。

預訓練模型是訓練好的模型,文檔的唯一id為label1_index,例如Good_0, Good_1 to Good_999 並且訓練數據的總大小約為7000

現在,我想用帶有 label2_index 的唯一 id 的新文檔訓練預訓練模型,例如 Bad_0, Bad_1... to Bad_1211 訓練數據的總大小約為 1211

火車本身是成功的,沒有任何錯誤,但問題是,每當我嘗試使用“most_similar”時,它只會建議標有 Good_... 的類似文檔,我希望標有 Bad_ 的類似文檔。

如果我從一開始就完全訓練,它會給出我預期的答案——它推斷出一個新給定的文檔,類似於標有“好”或“壞”的標簽。

但是,上述練習不會像從一開始就完全訓練的那樣奏效。

是繼續訓練不能正常工作還是我犯了一些錯誤?

gensim Doc2Vec類總是可以通過train()提供額外的例子,但它只在初始build_vocab()步驟期間發現單詞標記和文檔標簽的工作詞匯。 因此,除非單詞/標簽在build_vocab()期間可用,否則它們將被忽略為未知。 (單詞從文本中悄悄地刪除;標簽在模型中沒有經過訓練或記住。)

Word2Vec Doc2Vec借用了很多功能的Word2Vec超類在其build_vocab()上有一個更新的、更具實驗性的參數,稱為update 如果設置為 true,則對build_vocab()調用將添加而不是替換任何先前的詞匯表。 但是,截至 2018 年 2 月,此選項尚不適用於Doc2Vec ,並且確實經常導致內存故障崩潰。

但即使/何時可以實現,提供增量訓練示例也不一定是一個好主意。 通過只更新模型的一部分——那些由新例子練習的部分——整個模型可能會變得更糟,或者它的向量相互之間的自洽性降低。 (這些密集嵌入模型的本質是對所有不同示例的優化會產生普遍有用的向量。僅對某些子集進行訓練會導致模型僅在該子集上趨於良好,這可能會以早期示例為代價。)

如果您需要新示例也成為most_similar()的結果的一部分,您可能希望在Doc2Vec之外創建自己的單獨的向量Doc2Vec 當您為新文本推斷新向量時,您可以將它們添加到該外部集合中,然后實現您自己的most_similar() (使用 gensim 代碼作為模型)來搜索這個擴展的向量集合,而不僅僅是固定集合這是由初始批量Doc2Vec培訓創建的。

暫無
暫無

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

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