始める無料で始める

既存の NER モデルを学習する

spaCy のモデルは、与えられたデータでうまく動かない場合があります。解決策のひとつは、そのデータでモデルを再学習させることです。この演習では、予測精度を高めるために NER モデルの学習を練習します。

nlp として利用できる spaCy の en_core_web_sm モデルが用意されており、test という文字列内の house を正しくエンティティとして予測できていません。

与えられた training_data を使い、データを2回反復しながらこのモデルを更新する手順を書いてください。他のパイプラインはすでに無効化されており、optimizer も使用できる状態です。エポック数は 2 に設定済みです。

この演習はコースの一部です

spaCyで学ぶNatural Language Processing

コースを見る

演習の手順

  • 各エポックで optimizer オブジェクトを使用し、random パッケージでデータセットをシャッフルしてから Example オブジェクトを作成します。
  • .update 属性で nlp モデルを更新し、sgd 引数にオプティマイザを指定してください。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

nlp = spacy.load("en_core_web_sm")
print("Before training: ", [(ent.text, ent.label_) for ent in nlp(test).ents])
other_pipes = [pipe for pipe in nlp.pipe_names if pipe != 'ner']
nlp.disable_pipes(*other_pipes)
optimizer = nlp.create_optimizer()

# Shuffle training data and the dataset using random package per epoch
for i in range(epochs):
  random.____(training_data)
  for text, ____ in training_data:
    doc = nlp.____(____)
    # Update nlp model after setting sgd argument to optimizer
    example = Example.____(____, ____)
    nlp.____([____], sgd = ____)
print("After training: ", [(ent.text, ent.label_) for ent in nlp(test).ents])
コードを編集して実行