1、Gensim
官網: gensim: Topic modelling for humans
Gensim
是一款開源的第三方Python工具包,用於從原始的非結構化的文本中,無監督地學習到文本隱層的主題向量表達。支持包括TF-IDF
, LSA
, LDA
, Word2Vec
在內的多種主題模型算法,支持分佈式訓練,提供了相似度計算、信息檢索等一些常用的API接口。
上述算法是無監督的,意味着不需要人工輸入,只需要一個純文本語料庫。
特點
- 內存獨立性:任務時候都不需要整個訓練語料庫全部在RAM中(可以處理大型的WEB級語料庫)
- 內存共享:經過訓練的模型可以保存到硬盤並通過mmap加載回來。多個進程可以共享相同的數據,從而減少RAM佔用空間。
- 包含幾種流行的向量空間算法的實現,如
Word2Vec
,Doc2Vec
,FastText
,TF-IDF
,潛在語義分析(LSI
,LSA
等),LDA
等。 - 幾種流程的數據格式的I/O 包裝器和讀取器。
- 對文檔進行文本語義的相似性查詢。
設計目標
- 簡單的接口和API
- 內存獨立性,所有中間步驟和算法以流式方式運行,一次訪問一個文檔。
2、保存與加載
注意區分:保存與加載模型,還是保存與加載詞向量文件
- 模型的保存與加載:保留了模型訓練的所有狀態信息,如權重文件,二叉樹和詞彙頻率等,加載後可以進行
再/追加訓練
- 詞向量文件的保存與加載:丟棄了模型訓練的狀態信息,加載後不可以進行
再/追加訓練
具體的API可參考:gensim: API Reference
2.1 模型的保存與加載
保存模型
使用model.save()
方法, 以該方式保存的模型可以在讀取後進行再訓練(追加訓練),因爲保存了訓練的全部信息
from gensim.models import Word2Vec
# 訓練Word2Vec向量
model = Word2Vec(texts, size=100, window=5, min_count=1, workers=4)
# 保存模型
model.save("word2vec.model")
如果需要繼續訓練,需要完整的Word2Vec
對象狀態,由save()
存儲,而不僅僅是KeyedVectors
。
加載模型
使用load
方式加載模型,可以進行再訓練
from gensim.models import Word2Vec
model = Word2Vec.load("word2vec.model")
model.train([["hello", "world"]], total_examples=1, epochs=1)
訓練後的詞向量可以使用model.wv
保存在一個KeyedVectors
實例中,如下:
vector = model.wv['computer'] # numpy vector of a word
如果已經完成模型的訓練(即不再進行模型的更新,僅僅是查詢),則可切換到KeyedVectors
實例:
word_vectors = model.wv
del model
2.2 詞向量文件的加載與保存
保存訓練好的詞向量文件
保存
- 使用
mdoel.wv.save
以KededVectors
實例的形式保存詞向量文件,以該方式保存的模型丟失了完整的模型狀態,無法再訓練,保存的對象更小更快。model.wv.save("model.wv")
- 使用
wv.save_word2vec_format
保存詞向量文件(之前是model.save_word2vec_format()
,已棄用)model.wv.save_word2vec_format("model.bin", binary=True)
加載
- 使用
KeyedVectors.load
加載詞向量文件,保存在KeyedVectors
實例中(適用於不需要完整的模型狀態,不再進行訓練)from gensim.models import KeyedVectors wv = KeyedVectors.load("model.wv", mmap='r') vector = wv['computer'] # numpy vector of a word
- 以
word2vec C format
加載詞向量,保存在KeyedVectors
實例中
使用KeyedVector.load_word2vec_format()
可以加載兩種格式的詞向量文件:C 文本格式和C bin格式(二進制)from gensim.models import KeyedVectors wv_from_text = KeyedVectors.load_word2vec_format("model_kv_c", binary=False) # C text format wv_from_bin = KeyedVectors.load_word2vec_format("model_kv.bin", binary=True) # C bin format
由於權重文件,二叉樹和詞彙頻率的缺失,無法從C格式加載的向量繼續訓練。