始める無料で始める

spaCyでカスタム固有表現を作成する

spaCy に組み込まれている固有表現だけでは足りない場合、spaCy の entity_ruler パイプラインコンポーネントを使って独自のエンティティを作成できます。

entity_ruler コンポーネントを使うと、独自のエンティティを作成して spaCy パイプラインに追加できます。

まず nlp.add_pipe() で既存のパイプラインにこのコンポーネントを追加します。このとき "ner" コンポーネントより before(前)に配置することで、自分のルールが先に適用されるようにします。add_pipe() は追加したコンポーネントを返します。

次に、そのコンポーネントに対して add_patterns() を呼び出し、エンティティとしてラベル付けしたいテキストの pattern を辞書形式で渡します。

Acme はテクノロジー企業なので、パターン "smartphone" に "PRODUCT" というエンティティタグを付けることにします。

spaCy はすでにインポート済みで、nlp には学習済みの en_core_web_sm モデルが格納されています。パイプラインを変更しても既存の doc には反映されないため、新しいコンポーネントを組み込んだ後、call_4_channel_2.wav ファイル から書き起こされたテキストをもとに doc を作り直します。

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

Pythonで学ぶ音声言語処理

コースを見る

演習の手順

  • "entity_ruler" コンポーネントを nlp パイプラインの "ner" コンポーネントより前に追加し、ruler に保存しましょう。
  • "pattern" キーの値として "smartphone" を追加しましょう。
  • doc に含まれるエンティティの属性を出力しましょう。

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

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

# Add an entity_ruler component to the pipeline, before ner
ruler = nlp.add_pipe(____, before=____)

# Define pattern for new entity
ruler.add_patterns([{"label": "PRODUCT", "pattern": ____}])

# Recreate the doc so it uses the updated pipeline
doc = nlp(call_4_channel_2_text)

# Test new entity
for entity in doc.____:
  print(entity.text, entity.label_)
コードを編集して実行