Slide 1

Slide 1 text

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


Slide 2

Slide 2 text

自己紹介
 ● 名前
 ○ 早野 康太
 ● お仕事
 ○ 自然言語モデルの改善
 ● 趣味
 ○ 猫、犬
 ○ ゲーム
 ■ ELDEN RING
 ■ ウマ娘
 ○ アニメ
 ■ 進撃, 明日ちゃんヤバE


Slide 3

Slide 3 text

アジェンダ
 ● BERT紹介
 ○ どんなモデル?
 ○ fine-tuneとは?
 
 ● BERTモデルのfine-tune
 ○ 実行例 (なろう風タイトル生成モデル)
 ○ Pythonライブラリ(Transformers)の使い方
 


Slide 4

Slide 4 text

BERT紹介


Slide 5

Slide 5 text

深層学習による自然言語処理
 ● 翻訳
 ○ Google翻訳
 ○ DeepL
 ● 質問応答
 ○ Alexa
 ● 文章生成
 ○ AIのべりすと
 BERT紹介


Slide 6

Slide 6 text

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


Slide 7

Slide 7 text

最近のAIはすごい
 ● AIのべりすと
 ○ 入力した文章の続きをAIが
 書いてくれる
 
 出典: https://ai-novel.com 
 吾輩は猫である。名前はまだない。 そんな冗談が脳裏をよぎるほど、その日、俺の 気分は沈んでいた。 「……」 時刻は午前十一時。場所は近所の公園だ。休 日なだけあってそれなりに人通りもあるが、遊 具で遊ぶ子供の姿はない。皆一様にベンチに 腰掛けて、何やら物思いに耽っているようだ。 BERT紹介


Slide 8

Slide 8 text

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


Slide 9

Slide 9 text

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


Slide 10

Slide 10 text

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


Slide 11

Slide 11 text

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


Slide 12

Slide 12 text

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 
 ベクトル化


Slide 13

Slide 13 text

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 
 ベクトル化
 トークナイズ

Slide 14

Slide 14 text

BERTのアーキテクチャ
 BERT紹介
 Embedding
 Attention
 Attention
 Output
 Sentence
 トークナイズされた文章
 固定長のベクトルに埋め込み
 ×12層のSelf-Attention
 固定長のベクトル
 ● クエリ(Q)とキー(K)の
 類似度を測る
 ● Self-Attention
 → クエリとキーの文章が同一


Slide 15

Slide 15 text

● 事前学習モデルを、解きたいタスクに合わせてチューニング
 BERTのfine-tune
 Pretrained
 BERT Model
 Question
 Answering
 Named
 Entity
 Recognition
 Sentiment
 Analysis
 Text
 Summarization
 BERT紹介


Slide 16

Slide 16 text

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


Slide 17

Slide 17 text

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


Slide 18

Slide 18 text

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


Slide 19

Slide 19 text

● 「小説家になろう」にありがちなタイトル
 ○ 異世界転生しがち
 ■ 無職転生~異世界行ったら本気出す
 
 ○ 魔王とか勇者とか入りがち
 ■ 盾の勇者の成り上がり
 ■ 魔王様、リトライ!
 
 ○ めっちゃ説明してくれるじゃん
 ■ (この世界はもう俺が救って富と権力を手に入れたし、女騎士や女 魔王と城で楽しく暮らしてるから、俺以外の勇者は)もう異世界に 来ないでください。
 なろう風とは?
 BERTで
 あそんでみた


Slide 20

Slide 20 text

タイトル生成してみる
 BERTで
 あそんでみた
 あらすじ
 時は大正。竈門炭治郎は、家族とともに山でつつましくも幸せな日々をおくって いた。ある日、町で炭を売りに出かけた炭治郎が山に戻ると、家族は鬼に襲わ れ血だまりの中で絶命していた。
 
 
 生成されたタイトル
 炭治郎の異世界血風録(三十と一夜短編第60回)
 ※Wikipediaより引用

Slide 21

Slide 21 text

タイトル生成してみる
 BERTで
 あそんでみた
 タイトル
 名探偵コナン
 生成されたタイトル
 名探偵コナン 第36話「あたらしいバレンタイン」
 ~推理小説を投稿していたらいつのまにか美少女に一目惚れされた件~


Slide 22

Slide 22 text

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


Slide 23

Slide 23 text

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


Slide 24

Slide 24 text

Transformers
 ● huggingfaceが提供しているライブラリ
 ○ アルゴリズムのTransformerが名前の元(たぶん)
 ○ 自然言語系の深層学習モデルの実装では定番
 ○ https://github.com/huggingface/transformers
 
 ● Transformersは事前学習済みモデルをすばやくダウンロードし
 あなたが持っているデータセットでfine-tuneするためのAPIを提供します
 
 ● TransformersはJax, PyTorch, TensorFlowといった
 ポピュラーなライブラリによる実行をサポートしています


Slide 25

Slide 25 text

Transformers
 ● 主なクラス
 ○ Tokenizer
 ■ テキストの前処理
 ○ Model
 ■ Transformer系統の自然言語モデル
 ■ PyTorchまたはTensorFlow
 ○ Trainer
 ■ モデルの学習や保存


Slide 26

Slide 26 text

Transformers
 ● 主なクラス
 ○ Tokenizer
 ■ テキストの前処理
 ○ Model
 ■ Transformer系統の自然言語モデル
 ■ PyTorchまたはTensorFlow
 ○ Trainer
 ■ モデルの学習や保存


Slide 27

Slide 27 text

● 「小説家になろう」からAPIで取得したタイトルとあらすじのペア
 ○ 合計約10万件
 ● あらすじを入力として、タイトルをラベルとして使用した
 
 
 
 学習データ
 Input
 女の子たちの
 日常を描く
 Model
 Output
 きんいろ
 モザイク
 ご注文は
 うさぎですか?
 Label
 Loss


Slide 28

Slide 28 text

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


Slide 29

Slide 29 text

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


Slide 30

Slide 30 text

テキストの処理
 
 ● Tokenizer
 ○ 文章を形態素解析し、トークンIDの系列に変換する
 
 ご注文はうさぎですか?
 [CLS]ご注文はうさぎですか?[SEP]
 特別なトークンを追加してからトークナイズしている ● [CLS]: 文の始まりを表すトークン ● [SEP]: 文と文の区切りを表すトークン

Slide 31

Slide 31 text

テキストの処理
 
 ● スペシャルトークン
 ○ [UNK]
 ■ トークナイザーの辞書に登録されてない単語を表す
 ○ [CLS]
 ■ 文の始まりを表す
 ○ [SEP]
 ■ 文と文の区切りを表す
 ○ [PAD]
 ■ 文の長さを揃えるために足されるトークン
 ○ [MASK]
 ■ MLMの学習時にトークンの予測箇所を表す


Slide 32

Slide 32 text

テキストの処理
 
 ● パディング
 ○ データセット内の文章の長さを揃えるために[PAD]を足す
 ご
 注文
 は
 うさぎ
 です
 か
 ?
 [PAD]
 ゆ
 ゆ
 式
 [PAD]
 [PAD]
 [PAD]


Slide 33

Slide 33 text

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


Slide 34

Slide 34 text

Transformers
 ● 主なクラス
 ○ Tokenizer
 ■ テキストの前処理
 ○ Model
 ■ Transformer系統の自然言語モデル
 ■ PyTorchまたはTensorFlow
 ○ Trainer
 ■ モデルの学習や保存


Slide 35

Slide 35 text

モデルの利用
 
 ● Models - Hugging Face
 ○ Transformersで利用可能なモデルたち
 ■ BERT
 ■ RoBERTa
 ■ Longformer
 ■ ELECTRA
 ■ etc…
 


Slide 36

Slide 36 text

モデルの利用
 
 ● タスクに応じてモデルクラスが用意されている
 ○ BertForMaskedLM
 ○ BertForNextSentencePrediction
 ○ BertForSequenceClassification
 ○ BertForQuestionAnswering
 


Slide 37

Slide 37 text

モデルの利用
 
 ● タスクに応じてモデルクラスが用意されている
 ○ 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)
 


Slide 38

Slide 38 text

モデルの利用
 
 ● BertForSequenceClassification
 BERT
 全結合層


Slide 39

Slide 39 text

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


Slide 40

Slide 40 text

モデルの利用
 
 ● BertForSequenceClassification.from_pretrained(model_name_or_path)
 
 BERT
 事前学習済みの
 モデル
 重みをロード
 全結合層
 ランダムに重みを初期化
 出力


Slide 41

Slide 41 text

● モデルクラス
 ○ EncoderDecoderModel
 ● from_pretrained 
 ○ 東北大の乾研究室が公開している事前学習済みモデル
 ■ 日本語Wikipediaの約1700万テキストで学習したもの
 ■ https://huggingface.co/cl-tohoku
 
 
 
 モデルの利用
 Encoder
 BERT
 Input
 ご注文は
 うさぎですか?
 Decoder
 BERT
 Output
 うさぎを注文したら
 異世界に
 転生した件について


Slide 42

Slide 42 text

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


Slide 43

Slide 43 text

● 実行環境
 ○ 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


Slide 44

Slide 44 text

モデル保存
 ● 保存される情報
 ○ モデル
 ■ モデル実体
 ■ 設定ファイル(json)
 ○ トークナイザー
 ■ 設定ファイル(json)
 ○ 学習情報
 ■ optimizer
 ■ scheduler
 ■ 設定ファイル(json)


Slide 45

Slide 45 text

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


Slide 46

Slide 46 text

まとめ
 ● BERT
 ○ 汎用的なタスクに応用可能な事前学習済みモデル
 ● Pythonを使ったBERTのfine-tune
 ○ Transformersを使った実装 (https://gitlab.com/payanotty/narou_title_generator)
 ■ 事前学習済みモデルを簡単にダウンロードして利用できる
 ■ タスクに応じたモデルクラスが用意されている
 ■ トークナイザーを使った文章処理
 ■ Trainerクラスを使えばfine-tuneをよしなに実行できる
 ● (今回は紹介していないが)
 ● 自作callbackで細かい学習の挙動を制御することも可能
 ● MLflowやTensorboardとの連携も○