亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

玄牟字2vc的訓練時間

玄牟字2vc的訓練時間

慕勒3428872 2022-09-13 17:44:01
我正在34 GB預處理MS_MARCO語料庫(22 GB)上從頭開始訓練word2vec。(預處理語料庫被發送標記化,因此其大小更大)我正在使用以下代碼訓練我的word2vec模型:from gensim.test.utils import common_texts, get_tmpfilefrom gensim.models import Word2Vecclass Corpus():    """Iterate over sentences from the corpus."""    def __init__(self):        self.files = [            "sp_cor1.txt",            "sp_cor2.txt",            "sp_cor3.txt",            "sp_cor4.txt",            "sp_cor5.txt",            "sp_cor6.txt",            "sp_cor7.txt",            "sp_cor8.txt"        ]    def __iter__(self):        for fname in self.files:            for line in open(fname):                words = line.split()                yield wordssentences = Corpus()model = Word2Vec(sentences, size=300, window=5, min_count=1, workers=8, sg=1, hs=1, negative=10)model.save("word2vec.model")我的模型現在運行了大約30多個小時。這是值得懷疑的,因為在我的i5筆記本電腦上有8個內核,我每時每刻都在100%使用所有8個內核。另外,我的程序現在似乎已經從磁盤中讀取了超過100 GB的數據。我不知道這里是否有任何問題,但是我對培訓產生懷疑的主要原因是因為從磁盤讀取100 GB。整個語料庫是34 GB,那么為什么我的代碼從磁盤中讀取了100 GB的數據?有誰知道在34 GB的文本上訓練word2vec需要多少時間,8個內核的i5 CPU并行運行?謝謝。有關更多信息,我還從系統監視器附加了我的進程照片。我想知道為什么我的模型從內存中讀取了 112 GB,即使我的語料庫總共為 34 GB?我的訓練會完成嗎?此外,我有點擔心我的筆記本電腦的健康狀況,因為它自過去30小時以來一直以峰值容量運行?,F在真的很熱。我是否應該添加任何附加參數,以便更快地進行訓練而不會造成太大的性能損失?Word2Vec
查看完整描述

1 回答

?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

完成模型需要對所有數據進行一次傳遞以發現詞匯,然后多次傳遞(默認值為 5)以執行向量訓練。因此,您應該期望在磁盤讀取中看到大約6倍的數據大小,僅從模型訓練中即可。

(如果您的機器在此過程中最終需要使用虛擬內存交換,則可能會有更多的磁盤活動 - 但您絕對不希望發生這種情況,因為word2vec訓練的隨機訪問模式幾乎是虛擬內存使用的最壞情況,這將大大減慢訓練速度。

如果您想了解代碼的進度,并能夠估計其完成時間,則應至少將Python日志記錄啟用到該級別。該過程的各個步驟將報告中期結果(例如發現和幸存的詞匯量)和估計的進度。您通??梢酝ㄟ^研究合理值的日志記錄輸出來判斷運行結束之前是否出現問題,并且一旦“訓練”階段開始,完成時間將是到目前為止完成的訓練的簡單預測。INFO

我相信大多數筆記本電腦應該限制自己的CPU,如果它變得如此之熱以至于變得不安全或冒著CPU /組件極度磨損的風險,但是你的筆記本電腦是否這樣做,我不能說,并且絕對確保其風扇工作&通風口暢通無阻。

我建議你選擇一些小的隨機數據子集 - 也許是1GB?– 在嘗試在完整數據集上運行之前,能夠運行所有步驟以完成,熟悉日志記錄輸出,資源使用情況和結果,并修補設置以觀察更改,這可能需要數天的訓練時間。Word2Vec

顯示的某些參數對于快速訓練不是最佳的。特別:

  • min_count=1保留語料庫調查中看到的每個單詞,包括僅出現一次的單詞。這會導致一個非常大得多的模型 - 可能會冒著模型不適合RAM的風險,迫使災難性的交換。但是,只有幾個用法示例的單詞不可能獲得好的單詞向量,因為該過程需要看到許多微妙不同的替代用法。盡管如此,通過典型的“Zipfian”詞頻,只有少數用法的此類單詞的數量可能總共非常大,因此保留所有這些單詞需要大量的訓練時間/精力,甚至有點像“噪音”,使得其他單詞的訓練,大量的使用示例,效果較差。因此,對于模型大小、訓練速度和剩余向量的質量,需要更大的向量。默認值對于更多的項目來說更好 - 這是一個參數,只有在您確定知道效果時才應該真正更改。而且,當您擁有大量數據時 - 就像您的34GB一樣 - 可以做得更高,以保持模型大小易于管理。min_countmin_count=5min_count=1min_count

  • hs=1僅當您要使用“分層-softmax”訓練模式而不是“負采樣”時,才應啟用該模式 - 在這種情況下,還應將其設置為禁用“負采樣”。您可能不想使用分層軟最大:它不是默認值是有原因的,并且它不能擴展到更大的數據集。但是,除了負采樣之外,您在這里還啟用了,可能將所需的訓練時間增加了一倍以上。negative=0

  • 您選擇是因為您在默認方面遇到問題嗎?因為這種非默認選擇會明顯減慢訓練速度。(但是,同樣,這里的非默認選擇對于較小的數據集更為常見,而像您這樣的較大數據集更有可能嘗試較小的值。negative=10negative=5negative

上述觀察的主題是:“只有當你已經有一些工作,并且你有一個很好的理論(或測試方法)時,才改變默認值,這種改變可能會有所幫助”。

對于足夠大的數據集,還有另一個默認參數可以考慮更改以加快訓練速度(通常也提高單詞向量質量):,該參數控制如何積極地使用高度頻繁的單詞(具有許多冗余的用法示例)可能會被縮減采樣(隨機跳過)。sample

默認值(又名 )非常保守。較小的值(如 )將丟棄更多最常用單詞的冗余用法示例,從而大大加快整體訓練速度。(而且,對于您大小的語料庫,您最終可以嘗試更小,更具侵略性的值。sample=0.0011e-03sample=1e-05

最后,如果所有數據(對于完整運行或子集運行)都可以位于已以空格分隔的文本文件中,則可以使用指定語料庫的替代方法。然后,該類將使用優化的多線程 IO 方法將文件的各個部分分配給備用工作線程 - 如果您以前沒有看到所有線程/CPU 內核的完全飽和,則可以增加我們的吞吐量。(我會把它推遲到嘗試其他事情之后,然后檢查你最好的設置是否仍然讓你的8個線程中的一些經常閑置。corpus_fileWord2Vec


查看完整回答
反對 回復 2022-09-13
  • 1 回答
  • 0 關注
  • 91 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號