NLP工具——Gensim 模型及詞向量文件的保存與加載

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 詞向量文件的加載與保存

保存訓練好的詞向量文件

保存

  1. 使用mdoel.wv.saveKededVectors實例的形式保存詞向量文件,以該方式保存的模型丟失了完整的模型狀態,無法再訓練,保存的對象更小更快。
    model.wv.save("model.wv")
    
  2. 使用wv.save_word2vec_format保存詞向量文件(之前是model.save_word2vec_format(),已棄用)
    model.wv.save_word2vec_format("model.bin", binary=True)
    

加載

  1. 使用KeyedVectors.load加載詞向量文件,保存在KeyedVectors實例中(適用於不需要完整的模型狀態,不再進行訓練)
    from gensim.models import KeyedVectors
    wv = KeyedVectors.load("model.wv", mmap='r')
    vector = wv['computer'] # numpy vector of a word
    
  2. 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格式加載的向量繼續訓練。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章