Upgrade to Pro — share decks privately, control downloads, hide ads and more …

継続して改善する固有表現抽出 / Continuous improvement of name...

Sansan
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/

Sansan

November 05, 2021
Tweet

More Decks by Sansan

Other Decks in Technology

Transcript

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

    が 出⼒ O O O O B-組織名 I-組織名 O IOB2(Inside-outside-beginning)という表現を利⽤ • B:固有表現の先頭 • I:2トークン以上で構成される固有表現の先頭以外の単語 • O:固有表現以外のトークン
  2. ⼤規模な⾔語モデル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
  3. 以下は誤りの例である。出⼒をいかに正解に近づけるかが、抽出精度を⾼めるという⽬標に対しての課題 となる。固有表現抽出では適合率と再現率が評価指標として⼀般的に⽤いられる。 固有表現抽出の誤り 改善するための要素 ⼊⼒ Sansan 株式会社 の ⾼橋 寛治

    が 本⽇ 出⼒ O O O B-⼈名 I-組織名 O O 正解 B-組織名 I-組織名 O B-⼈名 I-⼈名 O O データの追加や 辞書による後処理で 対処できるかもしれない 系列をより考慮する モデルにより 対処できるかもしれない
  4. モデルが効率良く学習できるデータを選定する能動学習を適⽤する。BERTベースのモデルに対応するた めに、バッチ能動学習を利⽤した。BERTベースの固有表現抽出で有効なことは確認済みである*。 能動学習の利⽤ *橋本 航, ⾼橋 寛治, BERTを⽤いた固有表現抽出におけるバッチ能動学習, 第203回ICS研究発表会 ラベルあり

    学習データセットで モデル学習 ラベルなしデータに対して 能動学習アルゴリズムを適⽤し データをまとめて選択 アノテータに ラベルをつけてもら う 新たにラベル付けされたデータを学習 データに追加する バッチ能動学習のサイクル B=20 改善するための要素 > 学習データの作成
  5. . ├── Dockerfile ├── README.md ├── dataset │ └── wikipedia

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

    コードのイメージ 前処理や後処理は、命名しオブジェクトとして注⼊する ことで、可読性を⾼める def ner_factory(): ner = NERService() ner.add_preprocessor(UnicodeNormalizer()) ner.add_postprocessor(StopOrganizationFilter()) logger.info(ner.get_steps()) # ステップが表⽰される return ner 改善するための要素 > 試⾏錯誤を⾏いやすくする
  7. 事例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 改善するための要素 > 次の改善を定める試⽤と実運⽤