【IT Text 自然言語処理の基礎】第7章:事前学習済みモデルと転移学習

12K Views

December 14, 23

スライド概要

自然言語処理の基礎の輪読会第9回の発表スライドです。
2023年12月14日(木) 18:30~

profile-image

AI・機械学習を勉強したい学生たちが集まる、京都大学の自主ゼミサークルです。私たちのサークルに興味のある方はX(Twitter)をご覧ください!

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

2023年度後期輪読会#9 事前学習済みモデルと転移学習 京都大学理学部 3回生 松田拓巳 0

2.

7章:事前学習済みモデルと転移学習 目次 1. 事前学習済みモデルが便利な理由 2. 事前学習済みモデルの代表例3つ 1. GPT 2. BERT 3. BART 3. パラメータ削減手法 4. 事前学習済みモデル利用上の注意点 1

3.

7章:事前学習済みモデルと転移学習 この章で学んでほしいこと 目標1 目標2 事前学習済みモデル,転移学習とは何か?を説明できる 事前学習済みモデルの重要性を説明できる 代表的な事前学習済みモデル「GPT」「BERT」「BART」では どのように事前学習を行い,どのようにファインチューニングするか説明できる 目標3 事前学習済みモデルの容量を削減する手法を知る 目標4 事前学習済みモデルを使うときの注意点を知る 2

4.

1.事前学習済みモデルが便利な理由 1.1.事前学習,転移学習とは 従来の方法 ⚫ 事前学習,転移学習 単語埋め込みを作るモデルと, タスクを解くモデルは別で学習 Word2vecなど 単 語 埋込結果を使い タスク毎に学習 単 語 埋め込み+モデルを学習 → 丸ごと使い回し+微調整して使う 事前学習 W W ⚫ タスク 専用 モデル (文の基礎理解) 単 語 モデル (Transformerなど) 転移学習 Fine Tuning 単 語 モデル (Transformerなど) (タスクごとの微調整) この学習には 大量のラベル付きデータが必要! ラベル付きデータが少なくてもOK! 3

5.

1.事前学習済みモデルが便利な理由 1.2.埋め込みで頑張る方法① 文脈化単語埋め込み 静的な単語埋め込みの問題点 単語に多様な意味があっても一意のベクトルで表現されてしまうため,文脈を考慮できない 例文A:彼は,悪い仲間と手を切った. 例文B:彼は,包丁で手を切った. → 文全体を読み込ませ,文脈を考慮した単語ベクトルを使う ELMo (Embeddings from Language Models) ・Embedding+LSTM×2層+Linear×1層 ・forward LM と backward LM → forward LMには通常通りの語順で入力 backward LMには逆順で入力 ・隠れベクトルをconcatした (𝒙𝑘 , 𝒉𝑘,1 , 𝒉𝑘,1 ), (𝒙𝑘 , 𝒉𝑘,2 , 𝒉𝑘,2 ) をうまく配合(配合比はタスクごとに決める) ELM𝑜𝑘𝑡𝑎𝑠𝑘 = 𝛾 𝑡𝑎𝑠𝑘 (𝑠1𝑡𝑎𝑠𝑘 𝒉𝑘,1 + 𝑠2𝑡𝑎𝑠𝑘 𝒉𝑘,2 ) 𝒉𝑁,2 𝒉𝑁,2 𝒉𝑁,1 forward LM 𝒉𝑁,1 𝒙𝑁 backward LM 画像引用:”BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding” の Figure 3 4

6.

1.事前学習済みモデルが便利な理由 1.3.埋め込みで頑張る方法② 文埋め込み 単語ではなく,文を埋め込む …カテゴリ分類や言い換えでは,単語単位よりも文単位で見たほうがよさそう Skip-thoughts =入力文の次文を生成するタスクを解かせて 文埋め込みを得る Quick-thoughts =入力文の次文を識別するタスクを解かせて 文埋め込みを得る 画像引用:” An efficient framework for learning sentence representations” の Figure 1 5

7.

1.事前学習済みモデルが便利な理由 1.4.事前学習済みモデルの台頭 GPT (Generative Pretrained Transformer) ・TransformerのDecoder部分をベース ・生成が大事なタスクが得意(文章作成など) BERT (Bidirectional Encoder Representations from Transformers) ・TransformerのDecoder部分をベース ・入力文をしっかり見るのが大事なタスクが得意(文書分類,文間類似度など) ・2019年10月~Google検索にも応用(→ Googleブログ) BART (Bidirectional and Auto-Regressive Transformers) .TransformerのEncoderもDecoderも使った 画像引用:” Attention is All You Need” の Figure 1 ・生成も大事だし,入力文をしっかり見るのも大事なタスクが得意(翻訳,要約など) 6

8.

2.0. Transformerを簡単におさらい 7

9.

2.0.Transformer 2.0.1.Encoder部とDecoder部 Decoder Encoder Decoder部 Encoder部 Encoderから受け取ったベクトル+ モデルが生成した途中までの単語 文章をベクトルに変換する をもとに,次の単語確率を予測 8

10.

2.0.Transformer 2.0.1.入力と出力 (𝑁) テキストを入れると, 同じ個数のベクトルが出力される 𝑯1 (𝑁) 𝑯2 (𝑁) 𝑯3 Encoder この四角いブロックがN個 縦に積み重なっている 𝑿1 𝑿2 𝑿3 We are KaiRA 9

11.

2.0.Transformer 2.0.1.入力と出力 テキストを入れると, 同じ個数のベクトルが出力される. (𝑁) 𝑯1 (𝑁) 𝑯2 (𝑁) 𝑯3 Decoder (𝑁) 𝑋1 由来のベクトル𝑯1 を Linear+Softmaxに通すと次単語𝑋2 の 確率分布が分かる. Encoderからの情報→ 𝑿1 1個前にTransformerが吐き出した単語→ 𝑿2 𝑿3 We are KaiRA 10

12.

2.1. 事前学習済みモデルの代表例① GPT 11

13.

2.1.GPT 2.1.1.GPTの事前学習タスク 次単語予測 ・直前のk単語(𝑥𝑖−𝑘 , ⋯ , 𝑥𝑖−1 )から,次の単語(𝑥𝑖 )を予測する ・大規模データで学習(BooksCorpusデータセット=7000の未出版本) Point ・大量にデータつくれる(ラベル付きである必要がないため) ・単語や文法がわかってないと次単語予測はできないはず →Transformerに文章の基礎理解をさせたことになる! 12

14.

2.1.GPT 2.1.2.GPTのモデル 入力 [Start] 𝑢1 , 𝑢2 , ⋯ , 𝑢𝑛 [Extract] 中間 Transformerブロック12個 → Linear → softmax 出力 𝑝 𝑢1 , 𝑝 𝑢2 , 𝑝 𝑢3 , ⋯ , 𝑝 𝑢𝑛+1 , 𝑦 次単語予測のときはこれらを使う fine-tuningで使う 先の単語をカンニング できないようにする (p.159参照) ※ GPTではPosition Embeddingを使っている(Positional Encodingではない) 画像引用:” Improving Language Understanding by Generative Pre-Training” の Figure 1 13

15.

2.1.GPT 2.1.3.GPTのFine-Tuning 分類 含意or矛盾 or中立 文間 類似度 多肢 選択問題 画像引用:” Improving Language Understanding by Generative Pre-Training” の Figure 1 14

16.

■プロンプト ⚫ ⚫ GPTでは 𝑦 を使ってfine-tuningを行った. しかし,fine-tuningを行わずともプロンプトでタスクを解くこともできる 入力「富士山の高さは,」 出力「3776メートルです.」 ↑ 事前学習で次単語予測した成果をそのまま使っているだけ ⚫ ⚫ GPT-2では,プロンプトでタスクを解く検証をしている. GPT-3では,Few-shotによって精度が向上することが報告されている. Zero-shot 英語を日本語に翻訳してください. black pudding → Few-shot 英語を日本語に翻訳してください. sea otter → ラッコ chocolate pudding → チョコレートプリン black pudding → 15

17.

2.2. 事前学習済みモデルの代表例② BERT 16

18.

2.2.BERT 2.2.1.BERTの事前学習タスク Masked Language Model(単語穴埋め) ・[MASK]に入る単語を当てる ・入力文のおよそ15%を[MASK]にした ※ 事前学習とfine-tuningのデータ差( fine-tuningでは[MASK]は現れない)を緩和するために,たまに[MASK]にしなかったり ランダムな単語に置換したりしている. 私たち は 人工知能 [MASK] を 勉強 [MASK]. Next Sentence Prediction(次文予測) ・文Aと文Bが与えられて,両者は連続した文かどうかを判定 ・後続論文では,次文予測はあまり効果ないんじゃね説が提唱 文A「私は図書館へ行った.」文B「BERTは事前学習済みモデルである.」 17

19.

2.2.BERT 2.2.2.BERTのモデル – 単語穴埋め 入力 [CLS] how are [MASK] doing today [SEP] 出力 [MASK]由来の出力ベクトル(図の赤い所)を Linear+Softmaxに通し,[MASK]に入る単語を 当てる 画像引用:”Advancing natural language processing (NLP) applications of morphologically rich languages with bidirectional encoder representations from transformers (BERT): an empirical case study for Turkish” の Figure 4 18

20.

2.2.BERT 2.2.3.BERTのモデル – 次文予測 入力 [CLS] …文A… [SEP] …文B… [SEP] 出力 [CLS]由来の出力ベクトル(左端)を Linear+Softmaxに通し,文Bは文Aに続くか の確率を出力 画像引用:”Advancing natural language processing (NLP) applications of morphologically rich languages with bidirectional encoder representations from transformers (BERT): an empirical case study for Turkish” の Figure 5 19

21.

2.2.BERT 2.2.4.BERTのFine-Tuning 文単位のタスク(分類など) 入力:[CLS] …文… [SEP] [SEP] 出力:[CLS]由来のベクトルを使用 ↑このベクトルには文全体の意味や 文脈っぽい情報が入っているはず 単語単位のタスク(単語ラベリングなど) 入力:[CLS] …文… [SEP][SEP] 出力:各単語由来のベクトルを使用 画像引用:”Advancing natural language processing (NLP) applications of morphologically rich languages with bidirectional encoder representations from transformers (BERT): an empirical case study for Turkish” の Figure 5 20

22.

■符号化器としてのBERT ⚫ 単語の埋め込みにBERTを使う • ⚫ 文の埋め込みにBERTを使う • • ⚫ BERTの入力はsubword単位であることに注意! → 単語を構成するsubwordベクトルの平均や和,最大値を単語ベクトルとする. 方法①:[CLS]由来のベクトルを文ベクトルとする(fine-tuningしないと有用でない) 方法②:単語由来のベクトルの平均や和,最大値を文ベクトルとする 翻訳の評価などにBERTを使う 画像引用:” BERTSCORE: EVALUATING TEXT GENERATION WITH BERT” の Figure 1 21

23.

■補足|Segment Embedding ⚫ ⚫ ⚫ 1文目と2文目を区別できるようにするためのEmbeddingを加算する. [CLS]~[SEP]までは𝐸𝐴 を,それより後は𝐸𝐵 を加えるようにする. GPTと同様,Positional Embeddingを使っている. 22

24.

■補足|BERTの改良版:RoBERTa(Facebook AI) ⚫ ⚫ モデル構造はBERTのまま変えず,事前学習を頑張った いくつかの工夫 • 動的マスク • • • • • BERTでは[MASK]位置を決めたらそのまま動かさなかった. RoBERTaでは[MASK]位置を色々変えている. • • 次文予測タスクなくしても精度落ちず,むしろちょっと上がった. ちなみに軽量版BERT「ALBERT」では,難易度をUPした「文順序予測」として再登場する • 256→2000 • 3万→5万 次文予測タスクの廃止 バッチサイズ増大 サブワード語彙増大 23

25.

2.3. 事前学習済みモデルの代表例③ BART 24

26.

2.3.BART 2.3.1.BARTの事前学習タスク 元文復元タスク ・Token Masking:トークンの一部を[MASK]にする(BERTと同じ) ・Token Deletion:トークンの一部を消去する ・Text Infilling:N個のトークンをまとめて1つの[MASK]にする(𝑁 ∼ 𝑃𝑜(3)) ・Sentence Permutation:文の順序を入れ替える ・Document Rotation:トークンをランダムに選び,そのトークンから文が始まるように 画像引用:” BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension” の Figure 2 25

27.

■補足|事前学習タスクによる精度の比較 ⚫ データやタスクによるが,Text Infillingが最も効果が高かった 画像引用:” BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension” の Table 1 26

28.

2.3.BART 2.3.2.BARTのモデル Encoderへの入力 ノイズを加えた文(前ページ参照) Decoderへの入力 Decoderが前時刻までに出力したトークン 出力 復元された文 画像引用:” BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension” の Figure 1 27

29.

2.3.BART 2.3.3.BARTのFine-Tuning 分類タスク EncoderとDecoderに文を入力 Decoderの最後尾のベクトルを使用 翻訳タスク(例:日→英翻訳) Encoder入力:日本語文を別Encoderに通したベクトル …日本語文をBARTが理解しやすいように変換する Decoder入力:1つ前までにDecoderが出したトークン ① BART本体は固定,New Encoderのみを学習 ② BARTとNew Encoderの両方をfine-tuning 画像引用:” BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension” の Figure 3 28

30.

■補足|T5(Text-to-Text Transfer Transformer) ⚫ 様々なタスクの入出力がともにテキストになるようにした ⚫ 事前学習タスクは穴埋め問題だが,Maskした単語のみを出力するようにしているらしい タスクの種類をテキストで指示している 出力もすべてテキスト (数字も!) 画像引用:”Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer” の Figure 1 29

31.

3. パラメータ削減手法 30

32.

3.パラメータ削減手法 3.1.事前学習済みモデルの問題点 とにかくモデルがデカい! 画像引用:” Language Models are Few-Shot Learners” の Table 2.1 学習面 莫大な計算資源が必要.しかもデータも大量. (例) RoBERTaの355Mモデル:GPU(32GB)1024個・1日 実用面 メモリに乗り切らない → モデルを動かせない,fine-tuningできない 計算が重い → サービス運用上問題になる 𝑛params :学習可能なパラメータの総数 𝑛layers :層の総数(Transformerブロックの数) 𝑑model :隠れベクトルの次元(= 𝑛heads × 𝑑head ) 𝑛heads :Multi-Head Attentionのhead数 𝑑head :1headの次元 ➡ BERTの軽量版「ALBERT」では2つの工夫でパラメータ削減 31

33.

3.パラメータ削減手法 3.2.行列分解(Factorized Embedding Parameterization) V=語彙数,E=埋め込みベクトルの次元,H=隠れ層のサイズ BERTでは:トークンをE(=H)次元に埋め込みそのままTransformerへ ALBERTでは:トークンをE(≪H)次元に埋め込み,E次元からH次元に広げてからTransformerへ H=1024 2倍 H=2048 30,000×1,024 =30,720,000 30,000×2,048 =61,440,000 30,000×128 + 128×1,024 =3,971,072 30,000×128 + 128×2,048 =4,102,144 画像引用:https://velog.velcdn.com/images%2Fnaem1023%2Fpost%2F0dee7a07-9347-4262-be6c-1ce1985b6109%2Fimage.png 32

34.

3.パラメータ削減手法 3.3.層間パラメータ共有(Cross-Layer Parameter Sharing) 全Transformerブロックで同じパラメータを使う ・BERTでは12 or 24個のTransformerブロックを積んでいた → sharingによってパラメータ数が 1/12 or 1/24 に! ・全ブロックで同じパラメータを使っても精度は落ちなかったということは… → 情報の質が変わっても*,注意の仕方は変えなくてもよい → 何か汎用的な注意の当て方がある? *下層ほど語彙的な情報を,上層ほど文脈を反映したベクトルが獲得されていると言われている(テキスト:p.179, 論文:Probing Pretrained Language Models for Lexical Semantics). 33

35.

3.パラメータ削減手法 3.4.知識蒸留(knowledge distillation) 大規模モデルの出力をマネするような,小規模モデルを学習させる 通常はone-hotラベルのところを教師モデルの出力値に変えているだけ 𝐽distil = − ෍ 𝑃𝑡 𝑥𝑖 log 𝑃𝑠 (𝑥𝑖 ) ← クロスエントロピー 𝑥𝑖 教師モデルの出力 (teacher) 生徒モデルの出力 (student) 34

36.

■補足|知識蒸留はパラメータ削減だけじゃない ⚫ 多言語モデルの改善にも知識蒸留は有効 ⚫ 同じ意味を持つ単語でも,ベクトルが違う方向を向いていることがある → この問題を改善すれば,精度も上がるのでは? 画像引用:” Making Monolingual Sentence Embeddings Multilingual using Knowledge Distillation” の Figure 1 35

37.

4. 事前学習済みモデル使用上の注意点 36

38.

4.事前学習済みモデル使用上の注意点 4.1.入力のテキストに対する敏感性 人間にとっては些細な違いでも,モデルにとっては大きな違い ■補足|「AIへの入力」に関するキーワード ・敵対的事例(Intriguing properties of neural networks) ・プロンプトインジェクション(Not what you've signed up for: Compromising Real-World LLM-Integrated Applications with Indirect Prompt Injection) 画像引用:”How Can We Know What Language Models Know?” の Figure 1 37

39.

4.事前学習済みモデル使用上の注意点 4.2.ハルシネーション(幻覚) デタラメな内容を生成することがある 例① 要約タスク 入力:”… 800 thousand customers …” (80万人の顧客) 出力:”… millions of customers …”(何百万人の顧客) 例② 質問応答 右はGPT-4の回答. 「富士見学園」は誤りで, 「トモエ学園」が正しい. トモエ学園 38

40.

4.事前学習済みモデル使用上の注意点 4.3.乱数シードによる精度への影響 Fine-tuning時の乱数シードによって性能が変動 ・例えば,ミニバッチの構成や順番は乱数シードによって変わる. ・特に,fine-tuningのデータが少ないと変動が顕著になる傾向がある 対策 ・乱数シードを色々変えて性能評価を行い,平均&信頼区間を見る 39

41.

7章:事前学習済みモデルと転移学習 この章で学んだこと まとめ1 まとめ2 事前学習済みモデルのおかげで,ラベル付きデータセットが大量になくとも 色々なタスクを解けるようになった 代表的な事前学習済みモデルには「GPT」「BERT」「BART」があり, それぞれに得意不得意がある まとめ3 事前学習では,穴埋め問題などのタスクを通して言語の基礎理解をさせている まとめ4 モデルサイズを削減する手法として,行列分解やパラメータ共有,知識蒸留がある 40