2017-09-26 20 views
1

私は、ユニークなサブジェクトドメインの英語のテキストに対してNLPタスクにSpaCyを使用しています。私はSpaCyの現存する英語モデル(具体的には私は'en_core_web_md'から始まっています)を段階的に改善し、同僚が簡単に再利用できるようにパッケージ化したいと思います。ドメイン固有のルールでSpaCy Englishモデルを拡張するには?

私の最初の変更は、トークナイザの簡単な変更です。私は、カスタムクラスを定義することによって開始しました:

class DomainSpecificEnglish(English.Defaults): 
    lang = 'en_mydomain' 

    class Defaults(English.Defaults): 
     # my custom changes the tokenizer here 


spacy.util.set_lang_class(DomainSpecificEnglish.lang, DomainSpecificEnglish) 

今のところ、私はen_core_web_mdの語彙と単語ベクトルを使い続けるでしょう(後、私はあまりにもこれらを再訓練します)。しかし、SpaCyはlang文字列を介してこれらのモデルファイルを探しますが、これはもはや"en"ではありません。

既に構築されたモデルに依存するドメイン固有の「言語」サブクラスを構築するにはどうすればよいですか? en_core_web_mdファイルをen_mydomainというディスク上の新しいフォルダに明示的にコピーする必要がありますか?

これがうまくいけば、私は同僚がインストールできるPythonの卵としてこの小さなプロジェクト(1クラス)をパッケージ化したいと考えています。理想的には、ディスク上のファイルを移動するために、追加のインストール後のコマンドも実行する必要はありません。

答えて

0

docsから、あなたはそうのようなリンクを作成することができます。

python -m spacy link en_core_web_md en_mydomain 

これは単なるシンボリックリンクを作成しますので、何のファイルがコピーされていないと、それはすぐに完了します。

+1

これはモデルを正常にロードしますが、 'spacy.load'も中断します。私はこれをhttps://github.com/explosion/spaCy/issues/1366で報告しました あなたの回答はおそらく正解ですが、私はそのGH問題のフォローアップを待って、彼らがそれをすることを推奨していないことを確認します異なっている。 –

+0

'spacy package'でカスタム言語を作成し、新しい言語名を参照するために' meta.json'を明示的にオーバーライドすることをお勧めします。 –

関連する問題