Successfully reported this slideshow.
Your SlideShare is downloading. ×

[DL Hacks]Pretraining-Based Natural Language Generation for Text Summarization ~BERTから考える要約のこれまでとこれから

Ad

!1
Pretraining-Based Natural Language Generation for Text Summarization
~BERTから考える要約のこれまでとこれから~[DL Hacks]
東京大学 鶴岡研 B4 中村 朝陽

Ad

BERTを用いたAbstractiveな要約モデルの紹介と解説
• 2019年、BERTを要約タスクに応用したモデルが発表、SOTAを塗り替えた。
• 要約の前提となる背景や関連研究について時系列的に整理
• 加えて、BERTがテキスト生成モデ...

Ad

1. Introduction

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Check these out next

1 of 49 Ad
1 of 49 Ad
Advertisement

More Related Content

Similar to [DL Hacks]Pretraining-Based Natural Language Generation for Text Summarization ~BERTから考える要約のこれまでとこれから (20)

More from Deep Learning JP (20)

Advertisement

[DL Hacks]Pretraining-Based Natural Language Generation for Text Summarization ~BERTから考える要約のこれまでとこれから

  1. 1. !1 Pretraining-Based Natural Language Generation for Text Summarization ~BERTから考える要約のこれまでとこれから~[DL Hacks] 東京大学 鶴岡研 B4 中村 朝陽
  2. 2. BERTを用いたAbstractiveな要約モデルの紹介と解説 • 2019年、BERTを要約タスクに応用したモデルが発表、SOTAを塗り替えた。 • 要約の前提となる背景や関連研究について時系列的に整理 • 加えて、BERTがテキスト生成モデルにどのような影響を与えたかを紹介 • 右側にお品書き 0. Abstract
  3. 3. 1. Introduction
  4. 4. 要約 = 与えられた長い文をの要点をまとめ短い文として出力する • 入力:長い文章 • 出力:短い文章 • 目的:要点をまとめる • 入力形式 / 出力の内容 / 目的 のそれぞれにおいて以下の分類をすることがある • 入力: 単一の文書 / 複数の文書 • 出力: ネタバレあり(Informative) / ネタバレなし(Indicative) • 目的: 指示なしで要約させる / どういう観点の情報を抽出するかを指定する 1.1 タスク 1. Introduction
  5. 5. Extractive / Abstractive の2種類のアプローチ • Extractive • 入力文の中から重要なn文をピックアップして並べる (n ≈ 3) • Abstractive • 新しく要約文を生成する 1.2 手法の分類 1. Introduction
  6. 6. N-gram ベースのヒューリスティックが存在するが、問題点も多い • ROUGE-N (Recall-Oriented Understudy of Gisting Evaluation) • N-gram単位でどれくらい一致しているか • Ex) Rouge-1, Rouge-2など • ROUGE-L • 最長で一致する単語列の長さの和を元に評価 • ROUGE-SU • Skip-bigram と Unigram の一致率を元に評価 • Skip-bigram:【wordA + 任意の間隔 + wordB】 • 他にも Pyramid や BLEU などの評価指標もある 1.3 評価指標 1. Introduction
  7. 7. 代表的なデータセットは CNN/Daily Mail と NYT50 • Anonymized / Non-anonymized の2種 • Anonymized:固有名詞を置換 • Ex) The United Nations → @entity5 1.4 データセット 1. Introduction CNN/Daily Mail NYT50 データ数 およそ 300,000 セット およそ 25,000 セット ソース文章の平均単語数 781 tokens 1152 tokens 要約に含まれる平均単語数 56 tokens 75 tokens
  8. 8. 2. Related works
  9. 9. 要約手法の発展を時系列順に説明していく • 2.1 従来的なテキスト生成モデル • Seq2Seq + Attention • 2.2 要約モデル (BERT前) • Pointer-Generator Networks • 2.3 BERTショック • 要約などのテキスト生成タスクはしていないが、分類などのNLPタスクにおける革命児 • 2.4 要約モデル (BERT後) • BERTが要約に応用され、Extractive / Abstractiveの両アプローチにてそれぞれSOTA 2. Related works 2. Related works 2014 2017 2018 2019
  10. 10. Seq2Seqの登場により、要約にディープラーニングが適用可能に • 入力:テキスト + 出力:テキスト • 条件付きのテキスト生成、という観点からは機械翻訳などとも同じようなモデルが構成可能 • ベースラインとして使われていた 2.1 一般的なテキスト生成モデル 2. Related works
  11. 11. RNN+Attentionによりencode, RNNによりdecode する 2.1.1 一般的なテキスト生成モデルの手法 2. Related works
  12. 12. 不正確 / 未知語 / 冗長 の3つの課題 • 事実と異なる記述 → 致命的 • 未知語(OOV: Out Of Vocabulary)に対応不可能 • 要約したい文はニュースなどで、固有名詞も多い • 同じ内容を繰り返してしまう → “要約”できていない 2.1.2 一般的なテキスト生成モデルの結果と課題 2. Related works 入力 出力
  13. 13. 先の3つの問題を解決できるような要約特化のSeq2Seqモデル Get To The Point: Summarization with Pointer-Generator Networks • 2017年、CNN/Daily Mail Dataset において SOTA • ソフトに「コピペ」することで 正確かつ未知語にも対応 (Pointer-Generator) • Coverage mechanism を導入し、まだ触れていない単語を出力しやすくし、冗長さを改善 • ExtractiveとAbstractiveの中間的なモデル 2.2 要約モデル (BERT前) 2. Related works
  14. 14. Encoderの出力であるAttentionをGatingして足し合わせて予測する • “2-0”などの未知語もそのまま コピーできる • 学習初期はコピペしやすく(p_gen≈0.3)、終盤はよりAbstractiveな出力に(p_gen≈0.53) • 追加のパラメータ数も少なく、高コスパ 2.2.1.1 要約モデル(BERT前)の手法, Pointer-Generator 2. Related works
  15. 15. Attentionの合計をとっておき、まだAttentionがかかってない箇所を参照 • 冗長性の削減に貢献 2.2.1.2 要約モデル(BERT前)の手法, Coverage vector 2. Related works
  16. 16. 不正確 / 未知語 / 冗長 の3つの課題を改善, しかしモデルが浅すぎる? • 定量的なスコアでSOTA • 下の例にあるように定性的な評価も大きく改善 (cf. Seq2Seq) • (個人的な感想) • EncoderもDecoderも1層のLSTM • 文の内容を理解しているのではなく、”受験英語的な要約”をしている可能性もあるのでは? • ex) But の後は重要! 引用は無視しとけ!など 2.2.2 要約モデル(BERT前)の結果と課題 2. Related works
  17. 17. 2018年に公開された汎用的で超高性能な事前学習済みモデル • BERT + FC層などの単純な変換 で様々なタスクで圧倒的なSOTA • 「入出力」「タスク」「要約」の3つの観点から整理 2.3 BERTショック 2. Related works (参照: Ryobotさん)
  18. 18. 入力:1~2種類の文章, 出力:それぞれの単語の文脈を加味したベクトル • 入力と出力の系列長は同じ • WordPieceによるToken化, 質問文/選択肢などの文章の種類を表すSegment, 位置情報が埋め込まれる 2.3.1 「入出力」から見たBERT 2. Related works
  19. 19. BERTがencodeしたベクトルを簡単なモデルに接続してタスクを解く • 事前学習として「マスクされた単語の予想」「文A, Bが隣接しているか当てる」タスクを行った • BERTは高性能なEncoderであると言え、様々な分類問題などに応用される • 分類問題などは、[CLS]ラベルの出力ベクトルを簡単なモデルに接続 • NERや範囲を答えるタスクなら、該当する入力文に対応する特徴ベクトルを用いればよい 2.3.2 「タスク」から見たBERT 2. Related works
  20. 20. BERTを要約に利用したい、だけど一工夫必要 • 従来は `受験英語的に` (?) 解いていたかもしれないが、きちんと言語や論理を理解した要約が出来そう • Extractiveな要約から見て • 入出力がNERや範囲指定と似ているので、簡単に応用できそう • 文同士の関係性を見たいので、Segmentラベルが2個じゃ足りない気もする • Abstractiveな要約から見て • BERTは高性能なEncoder • じゃあ、Decoderは? 2.3.3 「要約」から見たBERT 2. Related works
  21. 21. 2019年, ExtractiveとAbstractive両者で応用モデルが発表、 共にSOTA • BERT × Extractive summarization • Fine-tune BERT for Extractive Summarization • 2019/03/25 (2週間前!) • 要約タスクにおいて、圧倒的にスコアを向上させた。 • シンプルなモデル • BERT × Abstractive summarization • Pretraining-Based Natural Language Generation for Text Summarization (2019/02/25) • Abstractiveな要約において若干スコアを塗り替えSOTA • 巨大なモデル • 今回実装した論文 2.4 要約モデル (BERT後) 2. Related works
  22. 22. “用法”を守ったBERTの利用 • BERTでencodeされたベクトルを fc層/ 2層のTransformer / 1層のLSTM などに入れるだけ • 工夫として、1文毎に異なるセグメントを用いることで、セグメント2種類しかない問題に対処 • コードも公開 2.4.1 BERT × Extractive summarization 2. Related works
  23. 23. この手法の紹介は次章にて • コードは公開されていない (大学の研究者 + Microsoftの研究チーム) このやり方の気持ちは下のよう(だと思われる) • BERTを要約に使いたいが、Decodeを上手く行う方法がない… • マスクされた単語の予測を応用してDecode出来ないか、と考える • 要約の草案を用意しそれにマスクして予測すれば、BERTを利用してDecodeできる!? • しかし、BERTは条件付きで予測することができない • このアイデアだと要約の草案としソース文章で条件付けしたいが、BERTの入力形式ではない • もちろん、草案も作らないといけない • → Transformer製のDecoderを用いて、「草案作り」と「条件の加味」をしてもらう 2.4.2 BERT × Abstractive summarization 2. Related works
  24. 24. 要約手法の発展を時系列順に説明していった • 2.1 従来的なテキスト生成モデル → 不正確 / 未知語 / 冗長さの課題 • Seq2Seq + Attention • 2.2 要約モデル (BERT前) → 良くなったが、本当に内容を理解しているのか? • Pointer-Generator Networks • 2.3 BERTショック → BERTはすごい、だけどどうやってテキスト生成たる要約をするか? • 要約などのテキスト生成タスクはしていないが、分類などのNLPタスクにおける革命児 • 2.4 要約モデル (BERT後) → BERTを工夫して要約に取り入れることでSOTA • BERTが要約に応用され、Extractive / Abstractiveの両アプローチにてそれぞれSOTA 2. Related works 2. Related works 2014 2017 2018 2019
  25. 25. 3. Architecture
  26. 26. Encoder(BERT) + Draft Decoder + Refine Decoder の3つからなる 3. Architecture 3. Architecture Draft Decoder Refine DecoderEncoder
  27. 27. ソース文章を普通にBERTに入力し、特徴ベクトルを得る • 使ったBERTはbaseモデル(largeじゃない方) • 先に述べたように、BERTに入力できる系列長は最大で512 • 問題:CNN/Daily Mail Dataset の 平均的な単語数はいくつだったでしょう? • 入力に入りきらない、じゃあどうするか • 先頭の512tokenを切り取る • この方法は妥当? • (要約においてしばしば用いられる手法) • このデータセットはニュース、ニュースの大事な情報は前の方にあるから大きな支障はきたさない • むしろ先頭を切り取ってモデルに与える方がスコアが向上した、ということをいう論文もある • どちらにしろ、Data-specific な事柄 3.1 Encoder 3. Architecture
  28. 28. 入力: Encoderの出力 + 時刻t-1まで出力した文, 出力: 時刻tでの単語の確率 3.2 Draft Decoder 3. Architecture
  29. 29. TransformerのDecoderをそのまま利用 • Transformerは翻訳タスクでSOTAだった手法で要約タスクと入出力が似ている 3.2.1 Transformer Decoder 3. Architecture Encoderの出力 Decoderの途中までの出力 Decoderの次の出力
  30. 30. Pointer-Generatorの機構と同様、ソフトにコピペする手法 • 入力:Encoderの出力(Attention)とDecoderの出力(Attention) • 出力:単語の出現確率 • (未知語についての問題は、BERTのWordPiece embeddingsによるトークン化で解消してはいる) • 未知語への対策というよりコピペした方が要約の精度上がるから、という意味合いかも 3.2.2 Copy Mechanism 3. Architecture
  31. 31. 1単語ずつ[MASK]して予測しなおすことで、BERTをテキスト出力に活用 3.3 Refine Decoder 3. Architecture
  32. 32. 基本はDraft Decoder, Refine Decoder それぞれ尤度を最大に • 先ほどの図にあったようにラベルと単語の確率を比較するLoss関数 • Label smoothing を利用 • Label smoothing:エントロピーをとる際に、正解なら1, 不正解なら0で計算するのではなく
 正解なら0.9, 不正解なら0.1 で計算することで正則化ができる • Draft Decoderの学習にはTeacher Forcingを利用 • 更に著者らはROUGEスコアを報酬にした強化学習的なアプローチも目的関数に入れている • Beam Search(幅4)を用いた推測をDraft Decoderで行う 3.4 学習の流れ 3. Architecture
  33. 33. Encoder(BERT) + Draft Decoder + Refine Decoder の3つからなる 3. Architecture 3. Architecture Draft Decoder Refine DecoderEncoder
  34. 34. 4. Experiment
  35. 35. CopyMechanismの実装、未知語対応が無しならtorch.scatter 4.1 コーディング ~ Copy Mechanism ~ 4. Experiment
  36. 36. Pytorch間違い探し 4.1 コーディング ~ torch.scatter, torch.scatter_ ~ 4. Experiment
  37. 37. 一行で複数GPUに対応できるが、モデルの自作メソッドは使えなくなる 4.1 コーディング ~ Multi GPU とモジュール ~ 4. Experiment Summarizerクラスは • BertModel, DraftDecoder, RefineDecoder の3つのモジュールからなり、独自メソッド summarize()をもつ この時、summarizer = DataParallel(summarizer)をすると summarizer.summarize()は使えなくなる ↓ self.bert = DataPrallel(self.bert)
 self.draft_decoder = DataPrallel(self.draft_decoder)などとすればOK
  38. 38. 4.2 動かしてみる ~Draft Decoder~ 4. Experiment 初期パラのDraft Decoder, CopyMechanismが働いていることが分かる
  39. 39. 初期パラのRefine Decoder, 1単語ずつRefineしていっている 4.2 動かしてみる ~Refine Decoder~ 4. Experiment
  40. 40. メモリとの戦い • もともとのモデルは超巨大(BERT 12層, Transformer Decoder 12層) • 1バッチの要約生成につき1単語ずつauto-regressiveに学習するので、100×2回 ほど回す • →通過するレイヤー数:3000以上。完全にミルフィーユ • 頑張ってbatch_sizeを4から24にした • retain_graph をオフにして、適宜 再計算+グラフをフリー (最終的にはこの手法は使わなかった。) • BERTの重みを固定する • モデルを小さくする(12 layer → 6 layer) • 演算の境目でメモリ使用が重なってメモリオーバーになっていた • → 基本的にretain_graph=True, for文の最後だけretain_graph=Falseとしてグラフをフリー • 部分的にグラフをフリーする (https://stackoverflow.com/questions/50741344/pytorch-when-using-backward-how-can-i-retain-only-part-of-the-graph) 4.3 学習させてみた 4. Experiment
  41. 41. 1回目、とりあえず[PAD]と予測するようになってしまった 4.3 学習させてみた 4. Experiment
  42. 42. 正解が[PAD]の時のミスをロスに加算しないようにした 4.3 学習させてみた 4. Experiment • これである程度きちんと学習できるはず…!
  43. 43. コードを変えた。なんか下がっている。これは…!! 4.3 学習させてみた 4. Experiment
  44. 44. 「とりあえずピリオドって予測しとこw」 4.3 学習させてみた 4. Experiment
  45. 45. そもそも学習は始まったばかり(というか進まなすぎる) 4.3 学習させてみた 4. Experiment 今のペースだと25日/epoch (僕のコードが悪いかも)
  46. 46. 5. Conclusion
  47. 47. 今後は「タスク設定」や「どのような入出力が汎用的か」が重要そう • 汎用的で高性能な“Decoder”が望まれる • 大量の教師無しデータでPre-training • 少量の教師ありデータでFinetuning • BERTが上手くいった理由 • 問題設定を見直し[MASK]の予測とすることで、双方向からEncodeすることが出来るようになった • Teacher-Forcingとは異なり、Pre-train時の入力データとFinetuning時の入力データの分布が近い • データの分布 = ソフトな意味での「型」 • 「言語を話せる」を「タスクXXが出来る」に言い換える • Pre-training時とFinetuning時の入出力の分布を揃えることで事前学習が効果的に効いてくる • 加えて、Auto-regressiveではないテキスト出力にも期待される Conclusion / Comments 5. Conclusion
  48. 48. 6. References
  49. 49. 参考文献 • https://qiita.com/icoxfog417/items/d06651db10e27220c819#31-rouge-nカバー率の評価 • https://qiita.com/icoxfog417/items/65faecbbe27d3c53d212 • “A Survey on Neural Network-Based Summarization Methods”, 2018 • BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding , 2018 • Pretraining-Based Natural Language Generation for Text Summarization , 2019 • Attention Is All You Need , 2017 • Get To The Point: Summarization with Pointer-Generator Networks, 2017 • Fine-tune BERT for Extractive Summarization, 2019 6. References 6. References

×