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

自然言語処理の基礎と実践

AITC - DENTSU SOKEN
September 28, 2022
1.8k

 自然言語処理の基礎と実践

以下イベントの登壇資料です。
https://rikeinavi.com/24/event_detail/?id=4d78f4186ead2cbc58d0092218cc1bff

自然言語処理(特に深層学習を用いた技術)について取り扱います。
[1] BERTをはじめとした自然言語処理技術については、既に多くの書籍やwebサイト等の情報がありますので、本発表では軽く触れる程度と致します。
[2] 実践編として、主に、データ分析コンペティション(Kaggle)で過去に開催された自然言語処理をテーマとした課題について触れていきたいと思います。

AITC - DENTSU SOKEN

September 28, 2022
Tweet

More Decks by AITC - DENTSU SOKEN

Transcript

  1. 4 自己紹介 阿田木 勇八 所属: 電通国際情報サービス クロスイノベーション本部 AIトランスフォーメーションセンター 経歴: 2019年3月:千葉大学大学院融合理工学府修了(基幹工学/機械工学専攻)

    2019年4月:新卒で医療機器メーカーへ入社し、 現場で製造業のいろはを学ぶ 現場課題を解決するAIを開発したいと思い転職 2021年9月:ISIDへ中途入社 現在は、AIモデル構築や顧客支援と並行してAIを使った自社サービス開発に尽力中 業務: 機械学習システム開発・導入・支援、自社のAIソフトウェアの開発 趣味: Kaggle等のデータ分析コンペティションへの参加
  2. そもそもコンピュータが言語を理解することはどういうことなのか? • 違う表現で同じ意味を表す(=同義) • 東京大学 = 東大、購入 = 買う、渡米 =

    アメリカに行く • 同じ表現がさまざまな意味を表す(=多義) • マック: マックドナルド or マッキントッシュ • かける: (橋を)かける or (ソースを)かける ... • 階層的な系列をどのように扱うかを考える必要がある • 文字 → 単語 → 文 → 文書 自然言語処理の難しさ
  3. BERT(Bidirectional Encoder Representations from Transformers) Transformerと呼ばれるAttentionを利用した深層学習モデルがベース - 文脈を考慮した単語のベクトル表現が可能 - 大規模な事前学習済みモデルから小規模なコーパスでの転移学習が可能

    14 BERT 文章1:昨日、マックに行った。 文章2:マックのパソコンを買った。 文章1では飲食店として「マック」、 文章2ではガジェットとして「マック」 のベクトル表現を得られる
  4. • BERTモデルはパラメータ数が多く、 モデルサイズが大きいので、限られた計算リソース (GPU/CPU)では学習が不可能 • 推論時間が遅い • ディスク使用量が多い → そのため、ISIDではBERTモデルを小さくして推論速度

    を速くする方法を研究開発し、ISID-BERTを構築しました。 BERTにおける課題 ISIDではBERTを用いた製品開発にも取り組んでいます。 しかし、実際にBERTを運用するには以下のような課題があり ます。 16
  5. ニュース分類タスクにより性能評価 ※記事タイトルを使用しない モデル accuracy 学習時間 (1枚K80) 推論時間 (1500件) alinear-corp/albert-japanese 89.27%​

    57分 3分50秒 yoheikikuta/bert-japanese 94.16%​ 1時間20分 4分10秒 cl-tohoku/bert-base-japanese-whole- word-masking 93.21%​ 1時間20分 4分15秒 albert-sudachi(ISIDオリジナル) 94.30% 1時間5分 4分3秒 ISID-BERT • Livedoorニュースの分類タスクに対してモデルをファ インチューニングしました。 18
  6. Kaggle Competitionに参加するにはKaggleアカウントが必要になります。 Kaggleには、「タイタニックコンペ」という練習用のコンペがあります。 Active Competitionsの右下にある「Titanic - Machine Learning from Disaster」を選

    択してみましょう。 Kaggleの始め方 次に、とりあえず現行コンペに参加してみましょう! 適切なコンペの選び方 詳しく知りたい方は、AITCサイトへ https://isid-ai.jp/column/column19.html 26 AITC Kaggleコンペの始め方
  7. • id-エッセイ応答のIDコード • discourse_id-談話ラベルのIDコード • discourse_start-談話が始まる文字の位置 • discourse_end-談話が終了する文字位置 • discourse_text-談話ラベルのテキスト

    • discourse_type-談話ラベルの分類 • discourse_type_num-談話ラベルの列挙された クラスラベル • predictionstring-談話ラベルの位置 コンペ① データについて #1 与えられたデータ 提出データ サンプル • どういうデータが与えられているか確認します。 • どういう出力にすればいいか確認します。 なるほど。 ラベル分類だけでなく、文 書中での該当箇所まで予測 しないといけないのか。 32
  8. コンペ① データについて #3 ◼ 各ラベル ごとの文章の長さの平均 Evidenceに長い文章が多い。 ◼ 各ラベル のカウント数

    Claimが多い。 非常に不均衡なデータセットである。 不均衡なデータセットでも、学習・推論 が上手くいくように工夫が必要かも。 →バリデーションはStratifiedKFoldを用 いよう! • データをもう少し定量的に確認して、対策を考えます。 ラベルごとに文章長さに傾向がある。 推論時に、ラベルごとの文章長さに 閾値を設けてみよう! 34
  9. • 結果:Pubricスコア 0.701、Privateスコア 0.712 全体2000人中83位で銀メダルを獲得 できました。 コンペ① ソリューション 35 項目

    内容 モデル DeBERTa large 、Funnel Transformer 、Longformer largeのアンサンブルモデル 損失関数 Cross Entropy 最適化 AdamW クロスバリデー ション MultilabelStratifiedKFold (n_splits:5、colums:[“discourse_type” 、"discourse_type_num“]) 入力サイズ 1600 トークン (これより長い文章がテストにないことが分かっていたため) 正則化 マルチサンプルドロップアウト 後処理1 確信度の閾値変更。予測しやすいdiscourse_typeは高く、難しいものは低く設定 後処理2 discourse_typeごとの予測文章の長さによる閾値設定 学習用データの分布をもとに設定
  10. コンペ② データについて #1 患者メモ データ 症状の特徴データ 患者メモの注釈データ 提出データ サンプル ・id:各患者メモ/特徴のペアのID

    ・pn_num:患者メモID ・feature_num:注釈が付けられた症状の特徴 ・case_num:患者メモが属する症状 ・annotation:注釈 ・location:メモ内の各注釈の位置を示す文字間隔 • どういうデータが与えられているか確認します。 • どういう出力にすればいいか確認します。 同じ患者メモIDに対して、複数のラベルがあるぞ。 バリデーションはGroupKFoldを使った方がよさそう。 39
  11. 思考回路 コンペ② データについて #4 事前学習(Mask language model)に用いてみる? 疑似ラベリング*して学習に用いよう。 まずはラベルのあるデータで精度のいいモデルを作りこむぞ。 ラベルがないデータがたくさんあるぞ。

    • 整備されていないデータも活用しましょう • Kaggleにはそのままでは学習に使えないデータが与えられている場合があります ※ 疑似ラベリングとは、学習時にラベルにないデータの 一部を予測したものを含めて学習し、このモデルを使っ て再度データ全体を学習することです。 42
  12. • 結果:Pubricスコア 0.88921、Privateスコア 0.88994 全体1471人中87位で銅メダルを 獲得できました コンペ② ソリューション 43 項目

    内容 モデル DeBERTa-v1-large 、DeBERTa-v2-large 、DeBERTa-v3-largeのアンサンブルモデル 損失関数 BCEWithLogitsLoss 最適化 AdamW クロスバリデー ション GroupKFold(n_splits:5、Groups :pn_num(患者メモID )) 入力サイズ 354 (DeBERTa-v2、 v3) 、466(DeBERTa-v1) トークン 疑似ラベリング ラベルなしのデータが非常に多いため、疑似ラベルで半教師あり学習を実施。確信度が 高い予測のみ選択 前処理 疑似ラベル付けしたデータについては、症例ラベルごとの分布に偏りがあったため、均 等になるようダウンサンプリングを実施 (※データが多すぎるため全体の1割程度しか使用できず)
  13. ①勾配蓄積( gradient_accumulation_steps ) ②グラジエントチェックポイント ③下位層の凍結 ④ 8bit adam • 今回もDeBERTaが強かったです。コンペ①のV1以外のモデルも試しましたが、特にV2

    モデルが強力でした。V1やV3とのアンサンブルも精度改善に効きました。 • タスクの専門性がある場合はMLMを事前学習として実施すると精度向上につながる場合 があります。特に、コンペ②の方は、医療用語が多いため、専門用語の多いデータでは 事前学習が大事そうです。 • 今回参加したコンペで使用したモデルDeBEATaは非常に強力ながら、学習に膨大なメモ リリソースを必要としました。そのため、メモリ節約手法として以下の方法があること が分かりました。 コンペ② 学び 44 実際に研究開発 でも使えそう
  14. コンペ② メモリ節約手法の補足 ①勾配蓄積( gradient_accumulation_steps ): Optimizer.stepを実行する前に実行する学習ステップ数です。こちらの値を大きくすることで、学習時間を犠牲にして メモリ消費量を削減できます。 ②グラジエントチェックポイント: 学習時間が少し伸びますが、メモリの使用を節約できます。 ③下位層の凍結:

    BERTモデルは入力に近い下位層で一般的な言語知識を保持する傾向にあります。一方で、出力に近い上位層ほど、知識 はよりタスク固有になります。下位層を凍結しても、一般的な言語知識が依然として有用であり、特定のタスクに適応す るために上位層を変更する必要があることが想定されます。 そして、下位層を凍結することで、メモリの使用を抑えることができます。以上を利用することで、モデルの大きさを小 さくすることができ、効率よく学習することができました。 ④8bit adam : 8bitのadam最適化を使用することで、使用メモリを抑制することができます。ただ、私の実験では精度が下がってし まいました。MLMを実施したモデルでは、影響はなかったという報告もあるので、ある程度学習が進んでいる場合や簡単 なタスクでは利用できるかもしれません。 45
  15. • BERTについて • 文脈を考慮した単語のベクトル表現が可能であることを紹介しました。 • 大規模な事前学習済みモデルから小規模なコーパスでの転移学習が可能であることを紹介しました。 • 研究開発の取組み( ISID-BERTの紹介 )

    • 研究開発の成果を製品に実装した例を紹介しました。 • 自然言語処理の実践(Kaggleでの実践) • 自然言語処理の実践としてKaggleの例を紹介しました。 • 実際に、コンペに参加することで、研究開発にも活かせる手法を得ることができました。 まとめ 47