2017-04-20 26 views
0

spacysのデフォルトボキャブラリを更新することが可能かどうか疑問に思っていました。私は何をやってしようとしていることはこれです:私のモデルに spaCy語彙を更新する

  • gensim負荷と自分のコーパス上

    • 実行word2vecベクトルnlp.vocab.load_vectors_from_bin_loc(\path)

    しかし、私のコーパス内の単語の多くは「AREN以来と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はbzipではなくgzip形式で配布されることに注意してください。

    興味のあるもの:GloVeベクターを使用していますか、自分のデータで訓練したものはありますか?自分のデータであれば、Gensimを使いましたか?私はこれをもっと簡単にしたいので、あなたが見たいと思っているワークフローの提案を感謝します。あなたのベクトルがデフォルトでロードされますので、実行時に

    ロード新しいベクトル、必要に応じて

    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

    それはクールになる、vec.binを交換し、彼らに

    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) 

    を変換しますspacy.vocabベクトルをgensimで使用可能な形式で簡単にダンプし、新しいコーパスでgensimを使用して再学習し、Spacyでリロードします。これは現在のところ簡単ですか? – geoffn91

    関連する問題