訓練 word2vec 詞向量時,內存不足如何解決?
最近在學習自己訓練詞向量,整理了13GB的小說語料,昨晚設置好從分詞做到詞向量訓練,結果今天早上看了一下內存溢出。僅僅只完成了130M的分詞,連詞向量的訓練都沒開始就宕機了。請問是我代碼有問題還是正常現象? 下圖為執行代碼 分詞工具使用的是北大的pkuseg如果是代碼問題請問如何應如何修改?
sentences = []
rules = u"[u4e00-u9fa5]+"
pattern = re.compile(rules)
f_writer = open("data/分詞後的1s1lCN13G.txt", "w", encoding="utf-8")
with open("data/1s1lCN13G.txt", "r" , encoding="utf-8") as f_reader:
for line in f_reader:
# line = line.replace("
","").replace("
","").strip()if line == "" or line is None:
continue
line = " ".join(seg.cut(line))
seg_list = pattern.findall(line)
word_list = []
for word in seg_list:
if word not in stop_words:
word_list.append(word)
if len(word_list) &> 0:
sentences.append(word_list)
line = " ".join(word_list)
f_writer.write(line + "
")f_writer.flush()
f_writer.close()
#模型訓練
model = word2vec.Word2Vec(sentences,sg=1,hs=1,window=10,min_count=20,iter=10,size=256,workers=16)
model.save("data/13G")
一次性讀入文件太傷了,用生成器讀一個batch或者用tensorflow或pytorch寫代碼,都好些。
可以使用生成器,一點一點的從文檔中拿出數據做訓練,就算你訓練文本再多,也OK的。
謝邀。
可以把向量長度調小一些,先跑通流程;然後再把參數調大,復現問題,進而再定位問題。
另外文本一次性讀入,也有點傷內存
這麼點數據,我建議你不要使用python這種訓練,Google最原始版本的c語言版本那個性能最高。
可以嘗試採用這種方式,看你ok不?