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_)