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

bert_introduction_with_python

 bert_introduction_with_python

36e1fb3501914495b3d3366729d7a787?s=128

payanotty

March 17, 2022
Tweet

More Decks by payanotty

Other Decks in Technology

Transcript

  1. PythonでBERTに入門しよう
 
 早野康太


  2. 自己紹介
 • 名前
 ◦ 早野 康太
 • お仕事
 ◦ 自然言語モデルの改善


    • 趣味
 ◦ 猫、犬
 ◦ ゲーム
 ▪ ELDEN RING
 ▪ ウマ娘
 ◦ アニメ
 ▪ 進撃, 明日ちゃんヤバE

  3. アジェンダ
 • BERT紹介
 ◦ どんなモデル?
 ◦ fine-tuneとは?
 
 • BERTモデルのfine-tune


    ◦ 実行例 (なろう風タイトル生成モデル)
 ◦ Pythonライブラリ(Transformers)の使い方
 

  4. BERT紹介


  5. 深層学習による自然言語処理
 • 翻訳
 ◦ Google翻訳
 ◦ DeepL
 • 質問応答
 ◦

    Alexa
 • 文章生成
 ◦ AIのべりすと
 BERT紹介

  6. 最近のAIはすごい
 • AIのべりすと
 ◦ 入力した文章の続きをAIが
 書いてくれる
 出典: https://ai-novel.com 
 吾輩は猫である。名前はまだない。

    BERT紹介

  7. 最近のAIはすごい
 • AIのべりすと
 ◦ 入力した文章の続きをAIが
 書いてくれる
 
 出典: https://ai-novel.com 


    吾輩は猫である。名前はまだない。 そんな冗談が脳裏をよぎるほど、その日、俺の 気分は沈んでいた。 「……」 時刻は午前十一時。場所は近所の公園だ。休 日なだけあってそれなりに人通りもあるが、遊 具で遊ぶ子供の姿はない。皆一様にベンチに 腰掛けて、何やら物思いに耽っているようだ。 BERT紹介

  8. • Attention Is All You Need (Łukasz Kaiser et al.,

    2017)
 ◦ 文章の単語同士の関連度を測る (Attention) 機構を組み込むことで
 自然言語処理モデルの性能が大きく向上
 チノ
 ちゃん
 かわいい
 推し
 は
 誰
 ?
 入 力 文
 参考情報
 チノ
 ちゃん
 以外
 ありえん
 Transformer 
 BERT紹介
 Query
 Target

  9. • Attention Is All You Need (Łukasz Kaiser et al.,

    2017)
 ◦ 文章の単語同士の関連度を測る (Attention) 機構を組み込むことで
 自然言語処理モデルの性能が大きく向上
 チノ
 ちゃん
 かわいい
 推し
 は
 誰
 ?
 入 力 文
 参考情報
 チノ
 ちゃん
 以外
 ありえん
 Transformer 
 BERT紹介
 Query
 Target
 BERTを含めて
 深層自然言語モデルの多くが
 このTransformerから派生

  10. • Bidirectional Encoder Representations from Transformers
 ◦ BERT: Pre-training of

    Deep Bidirectional Transformers for Language Understanding
 ◦ Transformerによる双方向のエンコード表現
 ▪ Transformerモデルの一部分を利用したモデル
 ◦ Googleが2018年に発表
 • 当時の自然言語処理タスクの最高記録を軒並み塗り替えた
 • fine-tuningにより 
 あらゆる自然言語処理タスクに応用可能な汎用性の高さ
 
 BERTモデル
 BERT紹介

  11. BERTのアーキテクチャ
 BERT紹介
 Embedding
 Attention
 Attention
 Output
 Sentence
 トークナイズされた文章
 固定長のベクトルに埋め込み
 ×12層のSelf-Attention


    固定長のベクトル

  12. BERTのアーキテクチャ
 BERT紹介
 Embedding
 Attention
 Attention
 Output
 Sentence
 トークナイズされた文章
 固定長のベクトルに埋め込み
 ×12層のSelf-Attention


    固定長のベクトル
 ご注文はうさぎですか?
 ご, 注文, は, うさぎ, ですか, ?
 0, 1, 2, 3, 4, 5
 形態素解析
 トークンID化
 E 0 , E 1 , E 2 , E 3 , E 4 , E 5 
 ベクトル化

  13. BERTのアーキテクチャ
 BERT紹介
 Embedding
 Attention
 Attention
 Output
 Sentence
 トークナイズされた文章
 固定長のベクトルに埋め込み
 ×12層のSelf-Attention


    固定長のベクトル
 ご注文はうさぎですか?
 ご, 注文, は, うさぎ, ですか, ?
 0, 1, 2, 3, 4, 5
 形態素解析
 トークンID化
 E 0 , E 1 , E 2 , E 3 , E 4 , E 5 
 ベクトル化
 トークナイズ
  14. BERTのアーキテクチャ
 BERT紹介
 Embedding
 Attention
 Attention
 Output
 Sentence
 トークナイズされた文章
 固定長のベクトルに埋め込み
 ×12層のSelf-Attention


    固定長のベクトル
 • クエリ(Q)とキー(K)の
 類似度を測る
 • Self-Attention
 → クエリとキーの文章が同一

  15. • 事前学習モデルを、解きたいタスクに合わせてチューニング
 BERTのfine-tune
 Pretrained
 BERT Model
 Question
 Answering
 Named
 Entity


    Recognition
 Sentiment
 Analysis
 Text
 Summarization
 BERT紹介

  16. • 事前学習モデルを、解きたいタスクに合わせてチューニング
 BERTのfine-tune
 BERT紹介
 BERT
 全結合層
 大量の文章(Wikipedia全文など)で
 事前に学習されたモデル
 タスクに合った形式で
 結果を出力する


    出力

  17. BERTのfine-tune実践例
 ~なろう風タイトル生成モデル~


  18. • 文章を入力したら
 なろう風のタイトルを生成してみたい
 ◦ BERTを転移学習(fine-tuning)して文章生成モデルを作ってみる
 
 
 やりたいこと
 BERTで
 あそんでみた


  19. • 「小説家になろう」にありがちなタイトル
 ◦ 異世界転生しがち
 ▪ 無職転生~異世界行ったら本気出す
 
 ◦ 魔王とか勇者とか入りがち
 ▪

    盾の勇者の成り上がり
 ▪ 魔王様、リトライ!
 
 ◦ めっちゃ説明してくれるじゃん
 ▪ (この世界はもう俺が救って富と権力を手に入れたし、女騎士や女 魔王と城で楽しく暮らしてるから、俺以外の勇者は)もう異世界に 来ないでください。
 なろう風とは?
 BERTで
 あそんでみた

  20. タイトル生成してみる
 BERTで
 あそんでみた
 あらすじ
 時は大正。竈門炭治郎は、家族とともに山でつつましくも幸せな日々をおくって いた。ある日、町で炭を売りに出かけた炭治郎が山に戻ると、家族は鬼に襲わ れ血だまりの中で絶命していた。
 
 
 生成されたタイトル


    炭治郎の異世界血風録(三十と一夜短編第60回)
 ※Wikipediaより引用
  21. タイトル生成してみる
 BERTで
 あそんでみた
 タイトル
 名探偵コナン
 生成されたタイトル
 名探偵コナン 第36話「あたらしいバレンタイン」
 ~推理小説を投稿していたらいつのまにか美少女に一目惚れされた件~


  22. タイトル生成してみる
 BERTで
 あそんでみた
 タイトル
 ウマ娘 プリティーダービー
 生成されたタイトル
 ウマ娘 プリティーダービー
 優勝馬に転生したので、とりあえず競馬で勝つことを目指します!


  23. fine-tuneの実装
 ~Transformersライブラリを使って~


  24. Transformers
 • huggingfaceが提供しているライブラリ
 ◦ アルゴリズムのTransformerが名前の元(たぶん)
 ◦ 自然言語系の深層学習モデルの実装では定番
 ◦ https://github.com/huggingface/transformers
 


    • Transformersは事前学習済みモデルをすばやくダウンロードし
 あなたが持っているデータセットでfine-tuneするためのAPIを提供します
 
 • TransformersはJax, PyTorch, TensorFlowといった
 ポピュラーなライブラリによる実行をサポートしています

  25. Transformers
 • 主なクラス
 ◦ Tokenizer
 ▪ テキストの前処理
 ◦ Model
 ▪

    Transformer系統の自然言語モデル
 ▪ PyTorchまたはTensorFlow
 ◦ Trainer
 ▪ モデルの学習や保存

  26. Transformers
 • 主なクラス
 ◦ Tokenizer
 ▪ テキストの前処理
 ◦ Model
 ▪

    Transformer系統の自然言語モデル
 ▪ PyTorchまたはTensorFlow
 ◦ Trainer
 ▪ モデルの学習や保存

  27. • 「小説家になろう」からAPIで取得したタイトルとあらすじのペア
 ◦ 合計約10万件
 • あらすじを入力として、タイトルをラベルとして使用した
 
 
 
 学習データ


    Input
 女の子たちの
 日常を描く
 Model
 Output
 きんいろ
 モザイク
 ご注文は
 うさぎですか?
 Label
 Loss

  28. テキストの処理
 • Tokenizer
 ◦ 文章を形態素解析し、トークンIDの系列に変換する
 


  29. テキストの処理
 
 • Tokenizer
 ◦ 文章を形態素解析し、トークンIDの系列に変換する
 
 数あわなくね?


  30. テキストの処理
 
 • Tokenizer
 ◦ 文章を形態素解析し、トークンIDの系列に変換する
 
 ご注文はうさぎですか?
 [CLS]ご注文はうさぎですか?[SEP]
 特別なトークンを追加してからトークナイズしている

    • [CLS]: 文の始まりを表すトークン • [SEP]: 文と文の区切りを表すトークン
  31. テキストの処理
 
 • スペシャルトークン
 ◦ [UNK]
 ▪ トークナイザーの辞書に登録されてない単語を表す
 ◦ [CLS]


    ▪ 文の始まりを表す
 ◦ [SEP]
 ▪ 文と文の区切りを表す
 ◦ [PAD]
 ▪ 文の長さを揃えるために足されるトークン
 ◦ [MASK]
 ▪ MLMの学習時にトークンの予測箇所を表す

  32. テキストの処理
 
 • パディング
 ◦ データセット内の文章の長さを揃えるために[PAD]を足す
 ご
 注文
 は
 うさぎ


    です
 か
 ?
 [PAD]
 ゆ
 ゆ
 式
 [PAD]
 [PAD]
 [PAD]

  33. テキストの処理
 
 • パディング
 ◦ データセット内の文章の長さを揃えるために[PAD]を足す


  34. Transformers
 • 主なクラス
 ◦ Tokenizer
 ▪ テキストの前処理
 ◦ Model
 ▪

    Transformer系統の自然言語モデル
 ▪ PyTorchまたはTensorFlow
 ◦ Trainer
 ▪ モデルの学習や保存

  35. モデルの利用
 
 • Models - Hugging Face
 ◦ Transformersで利用可能なモデルたち
 ▪

    BERT
 ▪ RoBERTa
 ▪ Longformer
 ▪ ELECTRA
 ▪ etc…
 

  36. モデルの利用
 
 • タスクに応じてモデルクラスが用意されている
 ◦ BertForMaskedLM
 ◦ BertForNextSentencePrediction
 ◦ BertForSequenceClassification


    ◦ BertForQuestionAnswering
 

  37. モデルの利用
 
 • タスクに応じてモデルクラスが用意されている
 ◦ BertForMaskedLM.from_pretrained(model_name_or_path)
 ◦ BertForNextSentencePrediction.from_pretrained(model_name_or_path)
 ◦ BertForSequenceClassification.from_pretrained(model_name_or_path)


    ◦ BertForQuestionAnswering.from_pretrained(model_name_or_path)
 

  38. モデルの利用
 
 • BertForSequenceClassification
 BERT
 全結合層


  39. モデルの利用
 
 • BertForSequenceClassification.from_pretrained(model_name_or_path)
 
 BERT
 事前学習済みの
 モデル
 重みをロード
 全結合層


    出力

  40. モデルの利用
 
 • BertForSequenceClassification.from_pretrained(model_name_or_path)
 
 BERT
 事前学習済みの
 モデル
 重みをロード
 全結合層


    ランダムに重みを初期化
 出力

  41. • モデルクラス
 ◦ EncoderDecoderModel
 • from_pretrained 
 ◦ 東北大の乾研究室が公開している事前学習済みモデル
 ▪

    日本語Wikipediaの約1700万テキストで学習したもの
 ▪ https://huggingface.co/cl-tohoku
 
 
 
 モデルの利用
 Encoder
 BERT
 Input
 ご注文は
 うさぎですか?
 Decoder
 BERT
 Output
 うさぎを注文したら
 異世界に
 転生した件について

  42. • Trainer
 ◦ 学習の実行をよしなにしてくれるクラス
 ◦ ハイパーパラメータを設定して、実行するだけ
 ◦ 公式のチュートリアル
 
 


    fine-tuneの実行

  43. • 実行環境
 ◦ Windows(WSL2)
 ◦ CPU:
 ▪ AMD Ryzen9 3900


    ▪ メモリ: 32GB
 ◦ GPU:
 ▪ NVIDIA GeForce RTX 3070
 ▪ メモリ: 8GB
 • 16GB以上あった方がいい 
 • 学習時間
 ◦ 50 hour (/13エポック)
 
 実行環境や学習パラメータなど
 BERTで
 あそんでみた
 ハイパーパラメータ
 値
 Epochs
 13
 Learning rate
 5e-5
 Batch size
 4
 Gradient Accumulation Steps
 16
 Scheduler
 Linear
 Warmup fraction
 0.06

  44. モデル保存
 • 保存される情報
 ◦ モデル
 ▪ モデル実体
 ▪ 設定ファイル(json)
 ◦

    トークナイザー
 ▪ 設定ファイル(json)
 ◦ 学習情報
 ▪ optimizer
 ▪ scheduler
 ▪ 設定ファイル(json)

  45. 学習したモデルを使って推論する


  46. まとめ
 • BERT
 ◦ 汎用的なタスクに応用可能な事前学習済みモデル
 • Pythonを使ったBERTのfine-tune
 ◦ Transformersを使った実装 (https://gitlab.com/payanotty/narou_title_generator)


    ▪ 事前学習済みモデルを簡単にダウンロードして利用できる
 ▪ タスクに応じたモデルクラスが用意されている
 ▪ トークナイザーを使った文章処理
 ▪ Trainerクラスを使えばfine-tuneをよしなに実行できる
 • (今回は紹介していないが)
 • 自作callbackで細かい学習の挙動を制御することも可能
 • MLflowやTensorboardとの連携も◦