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 (別名ノートブック) で実験を行っていますが、ソース コードと方法論はほとんど同じです。