Share
Embed
自然言語処理の基礎と実践
以下イベントの登壇資料です。
https://rikeinavi.com/24/event_detail/?id=4d78f4186ead2cbc58d0092218cc1bff
自然言語処理(特に深層学習を用いた技術)について取り扱います。
[1] BERTをはじめとした自然言語処理技術については、既に多くの書籍やwebサイト等の情報がありますので、本発表では軽く触れる程度と致します。
[2] 実践編として、主に、データ分析コンペティション(Kaggle)で過去に開催された自然言語処理をテーマとした課題について触れていきたいと思います。
AITC - DENTSU SOKEN
September 28, 2022
Transcript
48 slides
-
アジェンダ 1. はじめに 2. BERTについて 3. 研究開発の取組み(ISID-BERTの紹介) 4. 自然言語処理の実践(Kaggleでの実践) •
Kaggleとは • コンペ① • コンペ② 5. まとめ -
4 自己紹介 阿田木 勇八 所属: 電通国際情報サービス クロスイノベーション本部 AIトランスフォーメーションセンター 経歴: 2019年3月:千葉大学大学院融合理工学府修了(基幹工学/機械工学専攻)
2019年4月:新卒で医療機器メーカーへ入社し、 現場で製造業のいろはを学ぶ 現場課題を解決するAIを開発したいと思い転職 2021年9月:ISIDへ中途入社 現在は、AIモデル構築や顧客支援と並行してAIを使った自社サービス開発に尽力中 業務: 機械学習システム開発・導入・支援、自社のAIソフトウェアの開発 趣味: Kaggle等のデータ分析コンペティションへの参加 -
はじめに • 本発表では、自然言語処理(特に深層学習を用いた技術)について取り扱います。 • BERTをはじめとした自然言語処理技術については、既に多くの書籍やwebサイ ト等の情報がありますので、本発表では軽く触れる程度と致します。 • 実践編として、主に、データ分析コンペティション(Kaggle)で過去に開催さ れた自然言語処理をテーマとした課題について触れていきたいと思います。 •
様々なデータ分析手法を組み合わせた応用的な内容のため、難しいと感じる部分 があるかもしれませんが、少しでもお楽しみいただけますと幸いです。 5 -
そもそもコンピュータが言語を理解することはどういうことなのか? • 違う表現で同じ意味を表す(=同義) • 東京大学 = 東大、購入 = 買う、渡米 =
アメリカに行く • 同じ表現がさまざまな意味を表す(=多義) • マック: マックドナルド or マッキントッシュ • かける: (橋を)かける or (ソースを)かける ... • 階層的な系列をどのように扱うかを考える必要がある • 文字 → 単語 → 文 → 文書 自然言語処理の難しさ -
BERT(Bidirectional Encoder Representations from Transformers) Transformerと呼ばれるAttentionを利用した深層学習モデルがベース - 文脈を考慮した単語のベクトル表現が可能 - 大規模な事前学習済みモデルから小規模なコーパスでの転移学習が可能
14 BERT 文章1:昨日、マックに行った。 文章2:マックのパソコンを買った。 文章1では飲食店として「マック」、 文章2ではガジェットとして「マック」 のベクトル表現を得られる -
• BERTモデルはパラメータ数が多く、 モデルサイズが大きいので、限られた計算リソース (GPU/CPU)では学習が不可能 • 推論時間が遅い • ディスク使用量が多い → そのため、ISIDではBERTモデルを小さくして推論速度
を速くする方法を研究開発し、ISID-BERTを構築しました。 BERTにおける課題 ISIDではBERTを用いた製品開発にも取り組んでいます。 しかし、実際にBERTを運用するには以下のような課題があり ます。 16 -
ニュース分類タスクにより性能評価 ※記事タイトルを使用しない モデル 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 -
文書活用AIソリューション:TexAIntelligence 1. ISID-BERTを組み込んだISID独自 の製品であり、実運用に耐えうる精 度と推論速度を備えています。 2. 文書の類似検索・自動分類・要約の 3つの機能を持っています。 ・類似検索: 検索サービスと同様の操作で文章を丸ごと検索し、類似度順に表示
・自動分類: 過去文書を教師データとして自動で他分類のラベルを付与 ・要約: 文章群を自由な条件でクラスタリングすることで素早く文章群の意味を把握 19 -
• ここまで、「BERTについて」と「ISID-BERTを研究開発し製品に実装した話」をしまし た。 • 以上で、見てきたように、自然言語処理技術を製品に実装するためには、 既存の技術でできることできないことを把握し、効果的な手法を選択する必要があります。 • 実際に効果のある様々なAI技術について学ぶことができる場として、 Kaggleなどのデータ分析コンペに参加することが方法の1つです。 •
そこで、ここからは、私が最新のAI技術をキャッチアップするために参加している Kaggleの話をしたいと思います。 ここまでのまとめ 20 -
• Kaggleとは、世界中のAIエンジニアが腕を競い合うプラットフォームです。 AIエンジニア界の『天下一武道会』と呼ばれたりします。 • Kaggleの参加者にはTiersと呼ばれるランクが設けられており、コンペなどで メダルを獲得していくことで昇格することができます。ランクは下から、 Novice、Contributor、Expert、Master、Grandmasterとなっております。 Kaggleとは ×2 ×1
×2 ×5(内1枚はsolo) 24 昇格条件 Kaggle Master は世界で約1600人/770 万人中 (0.021%) 、日本には200人程 -
個人的に、Kaggleの利点は、競争ゆえの楽しさと、様々な課題に実際に触れて知見を獲得でき るという点だと思います。 自分に合った動機で始めることが大事であると思いますが、Kaggleを長く続けていきたいと 思っている方は、「楽しむ」という気持ちを持っておくことがとても大切であると思います。 参加の動機については以下のようなものがあると思いますが、いずれもKaggleを続けていく中 で満たすことができるものです。 • データ分析の勉強をしたい。 • 実力を試したい。
• 自身のスキルアップ、キャリアアップしたい。 • 最新の解析手法などについて学びたい。 • 順位を競うことを楽しみたい。 Kaggleに参加して得られるもの 25 -
Kaggle Competitionに参加するにはKaggleアカウントが必要になります。 Kaggleには、「タイタニックコンペ」という練習用のコンペがあります。 Active Competitionsの右下にある「Titanic - Machine Learning from Disaster」を選
択してみましょう。 Kaggleの始め方 次に、とりあえず現行コンペに参加してみましょう! 適切なコンペの選び方 詳しく知りたい方は、AITCサイトへ https://isid-ai.jp/column/column19.html 26 AITC Kaggleコンペの始め方 -
• タスク:アメリカの学生6年生~12年生までのレポートの文章を7つの談話ラベルに分類する • ラベル:Lead, Position, Claim, Counterclaim, Rebuttal, Evidence, Concludingの7つ
• 評価指標: macro-F1(各クラスのF1値の平均) コンペ① 概要 31 談話ラベルの位置 -
• id-エッセイ応答のIDコード • discourse_id-談話ラベルのIDコード • discourse_start-談話が始まる文字の位置 • discourse_end-談話が終了する文字位置 • discourse_text-談話ラベルのテキスト
• discourse_type-談話ラベルの分類 • discourse_type_num-談話ラベルの列挙された クラスラベル • predictionstring-談話ラベルの位置 コンペ① データについて #1 与えられたデータ 提出データ サンプル • どういうデータが与えられているか確認します。 • どういう出力にすればいいか確認します。 なるほど。 ラベル分類だけでなく、文 書中での該当箇所まで予測 しないといけないのか。 32 -
文章とラベルの例 コンペ① データについて #2 ふむふむ、 Positionラベルか。 文章が長いな。Evidenceラベルの文章は長め? また、Evidenceラベルだ。 Evidenceラベルは多め? •
まずは、ざっくり定性的にデータを確認します。 • データを見て疑問をもつことが大事です。 33 -
コンペ① データについて #3 ◼ 各ラベル ごとの文章の長さの平均 Evidenceに長い文章が多い。 ◼ 各ラベル のカウント数
Claimが多い。 非常に不均衡なデータセットである。 不均衡なデータセットでも、学習・推論 が上手くいくように工夫が必要かも。 →バリデーションはStratifiedKFoldを用 いよう! • データをもう少し定量的に確認して、対策を考えます。 ラベルごとに文章長さに傾向がある。 推論時に、ラベルごとの文章長さに 閾値を設けてみよう! 34 -
• 結果: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ごとの予測文章の長さによる閾値設定 学習用データの分布をもとに設定 -
• BERTの改良版であるDeBERTaが、最も精度良いモデルでした。 • DeBERTaなどのモデルはバッチサイズや学習率によってモデルの精度に影響がありました。 →実験すべきパラメータであることを学べました。 • AWPやFGMなどのAdversarial Trainingがモデルの改善に効果的でした。 • 面白い手法として、マルチサンプルドロップアウトを試すことができました。
この手法は学習の高速化と汎化性能の向上が可能です。 高速化はあまり実感できなかったですが、単一のドロップアウトよりも精度は向上しました。 参考 https://arxiv.org/abs/1905.09788 コンペ① 学び 36 実際に研究開発 でも使えそう -
• タスク:患者メモ(カルテ等)から、症状の特徴を表すキーワード(臨床概念)を抽出 します。 • 臨床概念の例:(例:「食欲不振」)と、医学生が書いた臨床患者のメモにある様々な 表現方法(例:「食事量が少ない」「服がゆったり着られる」)を自動的に対応付けた い • データセット:ラベルありとラベルなしの患者メモデータがあり、 症例ごとに14種程度の臨床概念がありました。
• ラベルあり:1,000件の患者メモに対する特徴量注釈(10症状ごとに100件のメモ) • ラベルなし:41,146件の患者メモ • 評価指標: micro-F1(全予測のうち正しく予測できたものの割合) コンペ② 概要 38 臨床概念の位置(間隔) -
コンペ② データについて #1 患者メモ データ 症状の特徴データ 患者メモの注釈データ 提出データ サンプル ・id:各患者メモ/特徴のペアのID
・pn_num:患者メモID ・feature_num:注釈が付けられた症状の特徴 ・case_num:患者メモが属する症状 ・annotation:注釈 ・location:メモ内の各注釈の位置を示す文字間隔 • どういうデータが与えられているか確認します。 • どういう出力にすればいいか確認します。 同じ患者メモIDに対して、複数のラベルがあるぞ。 バリデーションはGroupKFoldを使った方がよさそう。 39 -
思考回路 コンペ② データについて #4 事前学習(Mask language model)に用いてみる? 疑似ラベリング*して学習に用いよう。 まずはラベルのあるデータで精度のいいモデルを作りこむぞ。 ラベルがないデータがたくさんあるぞ。
• 整備されていないデータも活用しましょう • Kaggleにはそのままでは学習に使えないデータが与えられている場合があります ※ 疑似ラベリングとは、学習時にラベルにないデータの 一部を予測したものを含めて学習し、このモデルを使っ て再度データ全体を学習することです。 42 -
• 結果: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割程度しか使用できず) -
①勾配蓄積( gradient_accumulation_steps ) ②グラジエントチェックポイント ③下位層の凍結 ④ 8bit adam • 今回もDeBERTaが強かったです。コンペ①のV1以外のモデルも試しましたが、特にV2
モデルが強力でした。V1やV3とのアンサンブルも精度改善に効きました。 • タスクの専門性がある場合はMLMを事前学習として実施すると精度向上につながる場合 があります。特に、コンペ②の方は、医療用語が多いため、専門用語の多いデータでは 事前学習が大事そうです。 • 今回参加したコンペで使用したモデルDeBEATaは非常に強力ながら、学習に膨大なメモ リリソースを必要としました。そのため、メモリ節約手法として以下の方法があること が分かりました。 コンペ② 学び 44 実際に研究開発 でも使えそう -
コンペ② メモリ節約手法の補足 ①勾配蓄積( gradient_accumulation_steps ): Optimizer.stepを実行する前に実行する学習ステップ数です。こちらの値を大きくすることで、学習時間を犠牲にして メモリ消費量を削減できます。 ②グラジエントチェックポイント: 学習時間が少し伸びますが、メモリの使用を節約できます。 ③下位層の凍結:
BERTモデルは入力に近い下位層で一般的な言語知識を保持する傾向にあります。一方で、出力に近い上位層ほど、知識 はよりタスク固有になります。下位層を凍結しても、一般的な言語知識が依然として有用であり、特定のタスクに適応す るために上位層を変更する必要があることが想定されます。 そして、下位層を凍結することで、メモリの使用を抑えることができます。以上を利用することで、モデルの大きさを小 さくすることができ、効率よく学習することができました。 ④8bit adam : 8bitのadam最適化を使用することで、使用メモリを抑制することができます。ただ、私の実験では精度が下がってし まいました。MLMを実施したモデルでは、影響はなかったという報告もあるので、ある程度学習が進んでいる場合や簡単 なタスクでは利用できるかもしれません。 45 -
• BERTについて • 文脈を考慮した単語のベクトル表現が可能であることを紹介しました。 • 大規模な事前学習済みモデルから小規模なコーパスでの転移学習が可能であることを紹介しました。 • 研究開発の取組み( ISID-BERTの紹介 )
• 研究開発の成果を製品に実装した例を紹介しました。 • 自然言語処理の実践(Kaggleでの実践) • 自然言語処理の実践としてKaggleの例を紹介しました。 • 実際に、コンペに参加することで、研究開発にも活かせる手法を得ることができました。 まとめ 47