2017-04-20 85 views
0

我想知道是否可以更新Spacys默認詞彙表。我試圖做的是這樣的:對我自己的語料庫與gensim 更新spaCy詞彙表

  • 載荷向量到我的模型與nlp.vocab.load_vectors_from_bin_loc(\path)
  • 但自從我的文集很多的話大家還不

    • 運行word2vec t在spacys默認詞彙表我無法使用導入的向量。有沒有一種(簡單)的方式來添加這些缺失的類型?

      編輯:
      我意識到混合載體可能會有問題。所以我的問題是:
      如何將一個自定義詞彙導入到spacy?

    回答

    0

    這在下個版本中會更容易,這個版本應該在本週出來---我只是在完成測試。現在:

    默認情況下,spaCy會加載一個data/vocab/vec.bin文件,其中「data」目錄位於spacy.en模塊目錄中 使用spacy.vocab從bz2文件創建vec.bin文件.write_binary_vectors 將運行時替換spaCy的vec.bin文件或調用nlp.vocab.load_rep_vectors與二進制文件的路徑。 上面有點不方便,但二進制文件格式要小得多,加載速度要快,而且矢量文件相當大。請注意,GloVe以gzip格式分發,而不是bzip。

    出於興趣:您是使用GloVe矢量,還是使用您自己的數據進行訓練?如果你自己的數據,你使用Gensim?我想讓這個過程更容易,所以我會很感激你想看到什麼工作流程的建議。在運行時

    加載新的載體,任選地將他們

    import spacy.vocab 
    
        def set_spacy_vectors(nlp, binary_loc, bz2_loc=None): 
         if bz2_loc is not None: 
          spacy.vocab.write_binary_vectors(bz2_loc, binary_loc) 
         write_binary_vectors(bz2_input_loc, binary_loc) 
    
         nlp.vocab.load_rep_vectors(binary_loc) 
    

    更換vec.bin,讓您的載體將被默認加載

    from spacy.vocab import write_binary_vectors 
        import spacy.en 
    
        from os import path 
    
        def main(bz2_loc): 
         bin_loc = path.join(path.dirname(spacy.en.__file__), 'data', 'vocab', 'vec.bin') 
         write_binary_vectors(bz2_loc, bin_loc) 
    
    if __name__ == '__main__': 
        plac.call(main) 
    
    +0

    這將是冷靜輕鬆地通過gensim以可用的格式轉儲spacy.vocab矢量,在新的語料庫上用gensim重新訓練,然後在Spacy中重新加載。這目前是直截了當的? – geoffn91