4

spaCy バージョン 3 を使用して、カスタム タグの Named Entity Recognition (NER) モデルをトレーニングしようとしています。彼らの Web サイトですべてのドキュメントを確認しましたが、パイプライン モデルを作成する適切な方法を理解できません。を使用しようとするとen_core_web_trf、最終的な出力スコアがすべてゼロになるため、独自のタグを追加できないようです。しかし、それは正しく機能しen_core_web_smます。

en_core_web_trfただし、English の空のモデルを作成してから、Transformer モデルと ner モデルを とは別に手動で追加するという、その場しのぎの方法を試してみると、うまくいきen_core_web_smます。

私の質問は、この間に合わせの方法以外に、モデルとパイプライン メソッドを初期化するためのより良い方法はありますか? LOCATION などの事前トレーニング済みのエンティティは気にしません。データセットで定義したカスタム エンティティに基づいて (トランスフォーマー ベースのアプローチを使用して) モデルをトレーニングしたいだけです。

def load_spacy():
    spacy.require_gpu()

    # 1) 'Makeshift' method
    source_nlp = spacy.load("en_core_web_sm")
    source_nlp_trf = spacy.load("en_core_web_trf")
    nlp = spacy.blank("en")
    nlp.add_pipe("transformer", source=source_nlp_trf)
    nlp.add_pipe("ner", source=source_nlp)
    
    # 2) trf only method
    nlp = spacy.load("en_core_web_trf")
    
    # Getting the pipeline component
    ner = nlp.get_pipe("ner")
    return ner, nlp

編集:私が使用した正確なトレーニング方法論は、定義されたクラスの関数のこのpython スクリプトで説明されています。fit()NerModel

スクリプト (行番号 16) では小さなモデルを使用load_spacy()していますが、私は変圧器モデルを試していてload_spacy()、この質問の冒頭で定義した定義を使用しました。

PS: GPU をトランスフォーマーに利用するために、Google Colab (別名ノートブック) で実験を行っていますが、ソース コードと方法論はほとんど同じです。

4

0 に答える 0