Save 37% off PRO during our Black Friday Sale! »

継続して改善する固有表現抽出 / Continuous improvement of named entity extraction

13d936e697fe0f4fa96f926d0a712f6c?s=47 Sansan
PRO
November 05, 2021

継続して改善する固有表現抽出 / Continuous improvement of named entity extraction

■イベント

Sansan Builders Stage 2021
https://jp.corp-sansan.com/engineering/buildersstage2021/

■登壇概要

タイトル:
継続して改善する固有表現抽出
登壇者:技術本部 DSOC 研究開発部 Data Analysisグループ シニアリサーチャー 高橋 寛治

▼Sansan Engineering
https://jp.corp-sansan.com/engineering/

13d936e697fe0f4fa96f926d0a712f6c?s=128

Sansan
PRO

November 05, 2021
Tweet

Transcript

  1. STAGE 3 研究開発部 Data Analysisグループ SESSION TAG ⾼橋 寛治 ⾃然⾔語処理

    継続して改善する固有表現抽出
  2. 技術本部 DSOC 研究開発部 Data Analysisグループ シニアリサーチャー ⾃然⾔語処理に関連する研究開発に従事。 MLOpsやチームリーダとして研究開発の推進も⾏う。 @kanji250tr ⾼橋

    寛治
  3. 継続して改善するための取り組み事例を紹介する。 初期の作成者以外も取り組める状態で改善されていることをここでは「継続して改善」として紹介する。 継続して改善する固有表現抽出 ⽬次 - ⽬次 - 固有表現抽出とは - 改善するための要素

    - 学習データ - モデルの検討/学習とハイパパラメータ設定 - 前処理/後処理 - 次の改善を定める試⽤と実運⽤ - まとめ
  4. 固有表現抽出とは

  5. ⾃然⾔語で記述されたテキスト中に含まれている組織名や⼈名、⽇付表現など、 定義に従ったチャンク(かたまり)のことを固有表現と呼ぶ。 固有表現抽出とは、固有表現をテキスト中から抽出することである。 固有表現抽出 固有表現抽出とは Sansan株式会社 の ⾼橋寛治 が 2021年10⽉06⽇

    に本発表を⾏います。 組織名 ⼈名 ⽇付
  6. 固有表現かどうかを判定するために、⽂脈が必要となる。 ⼤きく分けて、ルールベース(辞書と規則)と機械学習による⽅法がある。 以下は、⽂脈を考慮する必要性を⽰す。 固有表現抽出の解き⽅ 固有表現抽出とは Sansan が提供する名刺管理サービス Sansan では、… 組織名

    組織名
  7. ⼊⼒⽂をトークン列とし、そのトークン列に対する分類問題として解く。 ⼤規模な⾔語モデルBERTによる固有表現抽出 固有表現抽出とは ⼊⼒ 名刺 管理 サービス の Sansan 株式会社

    が 出⼒ O O O O B-組織名 I-組織名 O IOB2(Inside-outside-beginning)という表現を利⽤ • B:固有表現の先頭 • I:2トークン以上で構成される固有表現の先頭以外の単語 • O:固有表現以外のトークン
  8. ⼤規模な⾔語モデルBERTによる固有表現抽出 固有表現抽出とは BERT (word_embeddings:119,547, position_embedings:512, output:768) [CLS] Sansan 株 式

    会 社 が 提 供 する 名 刺 管 理 サービス 。 [CLS] Sansan株式会社が提供する名刺管理サービス。 [CLS] Sansan 株 式 会 社 が 提 供 する 名 刺 管 理 サービス 。 [CLS] [CLS] Sansan 株 式 会 社 が 提 供 する 名 刺 管 理 サービス 。 [CLS] Dense(768×n) n=2(BかI)×固有表現タグの種類数+1(O) エンコード された表現 埋め込み表現 サブワード 固有表現タグ B-組織名 O O O O O O O O O O O O O O
  9. クラウド名刺管理サービス「Sansan」において、企業の動向をお知らせするために、ニュース記事中の 企業名を抽出しキーとしてニュース配信に活⽤する。 固有表現抽出のサービス利⽤例 固有表現抽出とは

  10. 改善するための要素

  11. 以下は誤りの例である。出⼒をいかに正解に近づけるかが、抽出精度を⾼めるという⽬標に対しての課題 となる。固有表現抽出では適合率と再現率が評価指標として⼀般的に⽤いられる。 固有表現抽出の誤り 改善するための要素 ⼊⼒ Sansan 株式会社 の ⾼橋 寛治

    が 本⽇ 出⼒ O O O B-⼈名 I-組織名 O O 正解 B-組織名 I-組織名 O B-⼈名 I-⼈名 O O データの追加や 辞書による後処理で 対処できるかもしれない 系列をより考慮する モデルにより 対処できるかもしれない
  12. 固有表現抽出の性能を構成する要素を⼤きく分けると次の要素となる。 - 学習データの作成 - 実験や前処理/後処理といった試⾏錯誤 - 次の改善を定める試⽤と実運⽤ 初期作成者以外が改善できるようにするために、各要素についてガイドラインや設計といった仕組みを 整備し、継続した改善を続けることが理想である。 改善するための要素

    改善するための要素
  13. 学習データの作成は通常、処理対象とするテキストと同様のテキスト(同じドメイン)を対象に、 固有表現タグを⼿作業で付与する。 学習データの作成には時間を要するため、効果的に作成するために実践している⼯夫を3点紹介する。 - アノテーションガイドラインの作成 - 仮のタグ付け結果の利⽤ - 能動学習の利⽤ 学習データの作成

    改善するための要素 > 学習データの作成
  14. スプレッドシートでの作業が定着しているため、スプレッドシートで扱いやすい アノテーションガイドラインを作成する。迷った場合には、仮の答えとともに備考に記⼊する。 備考については、依頼者が確認し答えることで、次回以降のアノテーションに活かす。 下にスプレッドシートに記載したガイドラインを⼀部⽰す。 アノテーションガイドラインの作成 IOB2タグの例 固有表現の説明 改善するための要素 > 学習データの作成

  15. 学習データがある程度作れたらモデルを学習 しその結果を元にアノテーションを⾏う。 具体的には、モデルの出⼒の修正作業がアノ テーション作業となる。 右図のD列に対して修正を⾏う。 モデルの仮出⼒があれば作業が楽になる*。 仮のタグ付け結果の利⽤ *固有表現抽出ではないが、分類問題において同様の⽅法を試した際に作業時間の削減を確認した ⾼橋 寛治,

    奥⽥ 裕樹, 要望分析のための投稿テキストのカテゴリ分類⽀援,第14回テキストアナリティクス・シンポジウム, 2019 改善するための要素 > 学習データの作成
  16. モデルが効率良く学習できるデータを選定する能動学習を適⽤する。BERTベースのモデルに対応するた めに、バッチ能動学習を利⽤した。BERTベースの固有表現抽出で有効なことは確認済みである*。 能動学習の利⽤ *橋本 航, ⾼橋 寛治, BERTを⽤いた固有表現抽出におけるバッチ能動学習, 第203回ICS研究発表会 ラベルあり

    学習データセットで モデル学習 ラベルなしデータに対して 能動学習アルゴリズムを適⽤し データをまとめて選択 アノテータに ラベルをつけてもら う 新たにラベル付けされたデータを学習 データに追加する バッチ能動学習のサイクル B=20 改善するための要素 > 学習データの作成
  17. 学習データをもとに、モデルの検討/学習やハイパパラメータの設定、また前処理や後処理など、 性能を向上させるために、様々な検討が必要である。 その試⾏錯誤を⾏いやすくするための⼯夫について紹介する。 - モデルの検討/学習とハイパパラメータの設定 - 前処理/後処理 試⾏錯誤を⾏いやすくする 改善するための要素

  18. . ├── Dockerfile ├── README.md ├── dataset │ └── wikipedia

    ├── models │ └── Wikipedia ├── onener … ├── __init__.py ├── cli.py ├── model ├── transformer └── utils 実験およびモデル書き換えの容易さを重視し、誰でも改善を可能とする。 実験環境(モデルの検討/学習とハイパパラメータ設定) 改善するための要素 > 試⾏錯誤を⾏いやすくする - 構成を統⼀し着⼿を容易にする - データセットやモデルのディレクトリを指定 - モデルの記述を統⼀し、読み書きのしやすさを担保する - Transformersライブラリをベースに拡張 - 学習とハイパパラメータは再現できるよう最終的に記録する - チューニングは各⾃におまかせ - 最終的な実⾏⼿順やハイパパラメータをシェルスクリプトに記述 上記の取り組みを実践し、これまでに4⼈が改善に取り組む。 また互いにコードレビュー可能な状態である。
  19. メンテナンスの例 • 事象:基本的に略称で呼ばれる企業 のニュースが届かない • 対応:略称を展開する処理を追加 実運⽤上発⽣する個別の事象に対応するための処理を⾏う。理想の対応は、データの追加とモデルの再 学習だが、早急な対応が求められるため、規則処理による対処が多い。規則処理はだんだんと複雑にな りメンテナンスが煩雑になる。それを回避するためのコーディング例を紹介する。 前処理/後処理

    コードのイメージ 前処理や後処理は、命名しオブジェクトとして注⼊する ことで、可読性を⾼める def ner_factory(): ner = NERService() ner.add_preprocessor(UnicodeNormalizer()) ner.add_postprocessor(StopOrganizationFilter()) logger.info(ner.get_steps()) # ステップが表⽰される return ner 改善するための要素 > 試⾏錯誤を⾏いやすくする
  20. 実際に試したり、使ったりすることで、出⼒に関する問題点や改善要望が出てくる。 モデルを納品して終わりではなく、運⽤し継続して改善することが求められる。 例えば、モデルを集中的に改善する段階では、評価結果と試⽤により改善したい点が出てくる。 実稼働時には、定量的な観測結果や利⽤者からの要望を元に、改善したい点が出てくる。 試⽤や実運⽤で実践している事例を紹介する。 - 試⽤のしやすさ - 実運⽤でのフィードバック 次の改善を定める試⽤と実運⽤

    改善するための要素
  21. 事例1:パッケージ化で、数⾏で試せる $ pip install “git+ssh://xxx/OneNER” $ pip install “git+ssh://xxx/OneNER#subdirectory=models/wikipedia” $

    python In [1]: from onener.transformer.ner import BertNERTagger In [2]: import onener_model_Wikipedia In [3]: tagger = BertNERTagger(onener_model_Wikipedia.model_path) In [4]: tagger.predict(“解析対象の⽂を渡す”) 評価結果に加えて、応⽤先タスクで試⽤することにより、課題が⾒えてくる。 試⽤をしやすくし、課題を集めるための試⾏回数を増やすために、試⽤のしやすい仕組みを作る。 試⽤のしやすさ 事例2:API化し、試せる 推論エンドポイントをSageMaker上で構築し、 AWS SDKから利⽤可能とする Amazon SageMaker AWS SDK 改善するための要素 > 次の改善を定める試⽤と実運⽤
  22. 利⽤者からのフィードバック例 フィードバック:サービス名のSansanしか書か れていないのに、Sansan株式会社のニュースと して配信されている。 対応:サービス名と社名が同⼀の場合は、法⼈ 格がある場合のみ抽出するようルールを追加す る。 定性的な利⽤者からのフィードバックと定量的な性能観測の実施結果をもとに、 固有表現抽出に関する課題を洗い出す。 また、改善結果はすぐにデプロイできるように、デプロイパイプラインが構築されている。

    実運⽤でのフィードバック ⽉次で⾏う性能観測 性能観測:記事をサンプリングし、抽出された 項⽬の正しさを⼈⼿で確認する。 対応:頻出する誤りを類型化し、改善に取り組 む。 改善するための要素 > 次の改善を定める試⽤と実運⽤
  23. まとめ

  24. 継続して改善するための取り組み事例について紹介した。 - 学習データの作成 - 実験や前処理/後処理といった試⾏錯誤 - 次の改善を定める試⽤と実運⽤ それぞれの要素について、初期作成者以外が改善できるようにするために、 ガイドラインや設計といった仕組みを整備した。 これらの要素は2回⽬以降もスムーズに取り組みやすい状態となっているため、継続した改善ができる。

    継続して改善する固有表現抽出 まとめ
  25. シニアリサーチャー Twitter @kanji250tr 34779592122 Eight Virtual Card ⾼橋 寛治