Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
bert_introduction_with_python
Search
payanotty
March 17, 2022
Technology
0
800
bert_introduction_with_python
payanotty
March 17, 2022
Tweet
Share
More Decks by payanotty
See All by payanotty
トークナイザー入門
payanotty
4
2k
LLM_Prompt_Recovery
payanotty
3
990
Embeddingモデルを使ったベクトル化のしくみ、fine-tuning手法を解説
payanotty
15
5.9k
Transformerによるテキストベクトル化を解説
payanotty
5
3.8k
Kaggle_LLMコンペの攻略法を解説.pdf
payanotty
1
1.5k
ManimMLでイケてるアニメーションを作ろう
payanotty
0
770
Lets Finetune LLM
payanotty
3
1.3k
Stable Diffusion Web UI, Let Your Fave Eat Ramen
payanotty
1
1.1k
Lets Finetune Stable Diffusion
payanotty
0
1.3k
Other Decks in Technology
See All in Technology
“それなりに”安全なWebアプリケーションの作り方
xryuseix
0
340
仕様駆動 x Codex で 超効率開発
ismk
2
1.4k
從裝潢設計圖到 Home Assistant:打造智慧家庭的實戰與踩坑筆記
kewang
0
160
手を動かしながら学ぶデータモデリング - 論理設計から物理設計まで / Data modeling
soudai
PRO
22
4.8k
Redux → Recoil → Zustand → useSyncExternalStore: 状態管理の10年とReact本来の姿
zozotech
PRO
12
6.2k
これからアウトプットする人たちへ - アウトプットを支える技術 / that support output
soudai
PRO
18
5.4k
内部品質・フロー効率・コミュニケーションコストを悪化させ現場を苦しめかねない16の組織設計アンチパターン[超簡易版] / 16 Organization Design Anti-Patterns for Software Development
mtx2s
2
210
クレジットカードの不正を防止する技術
yutadayo
16
7.2k
AIでテストプロセスを自動化しよう251113.pdf
sakatakazunori
0
130
Master Dataグループ紹介資料
sansan33
PRO
1
3.9k
CDKの魔法を少し解いてみる ― synth・build・diffで覗くIaCの裏側 ―
takahumi27
1
140
お試しで oxlint を導入してみる #vuefes_aftertalk
bengo4com
2
1.4k
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
A Modern Web Designer's Workflow
chriscoyier
697
190k
How to train your dragon (web standard)
notwaldorf
97
6.4k
Building an army of robots
kneath
306
46k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
660
Stop Working from a Prison Cell
hatefulcrawdad
272
21k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
970
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.5k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
2.9k
Bash Introduction
62gerente
615
210k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.3k
Transcript
PythonでBERTに入門しよう 早野康太
自己紹介 • 名前 ◦ 早野 康太 • お仕事 ◦ 自然言語モデルの改善
• 趣味 ◦ 猫、犬 ◦ ゲーム ▪ ELDEN RING ▪ ウマ娘 ◦ アニメ ▪ 進撃, 明日ちゃんヤバE
アジェンダ • BERT紹介 ◦ どんなモデル? ◦ fine-tuneとは? • BERTモデルのfine-tune
◦ 実行例 (なろう風タイトル生成モデル) ◦ Pythonライブラリ(Transformers)の使い方
BERT紹介
深層学習による自然言語処理 • 翻訳 ◦ Google翻訳 ◦ DeepL • 質問応答 ◦
Alexa • 文章生成 ◦ AIのべりすと BERT紹介
最近のAIはすごい • AIのべりすと ◦ 入力した文章の続きをAIが 書いてくれる 出典: https://ai-novel.com 吾輩は猫である。名前はまだない。
BERT紹介
最近のAIはすごい • AIのべりすと ◦ 入力した文章の続きをAIが 書いてくれる 出典: https://ai-novel.com
吾輩は猫である。名前はまだない。 そんな冗談が脳裏をよぎるほど、その日、俺の 気分は沈んでいた。 「……」 時刻は午前十一時。場所は近所の公園だ。休 日なだけあってそれなりに人通りもあるが、遊 具で遊ぶ子供の姿はない。皆一様にベンチに 腰掛けて、何やら物思いに耽っているようだ。 BERT紹介
• Attention Is All You Need (Łukasz Kaiser et al.,
2017) ◦ 文章の単語同士の関連度を測る (Attention) 機構を組み込むことで 自然言語処理モデルの性能が大きく向上 チノ ちゃん かわいい 推し は 誰 ? 入 力 文 参考情報 チノ ちゃん 以外 ありえん Transformer BERT紹介 Query Target
• Attention Is All You Need (Łukasz Kaiser et al.,
2017) ◦ 文章の単語同士の関連度を測る (Attention) 機構を組み込むことで 自然言語処理モデルの性能が大きく向上 チノ ちゃん かわいい 推し は 誰 ? 入 力 文 参考情報 チノ ちゃん 以外 ありえん Transformer BERT紹介 Query Target BERTを含めて 深層自然言語モデルの多くが このTransformerから派生
• Bidirectional Encoder Representations from Transformers ◦ BERT: Pre-training of
Deep Bidirectional Transformers for Language Understanding ◦ Transformerによる双方向のエンコード表現 ▪ Transformerモデルの一部分を利用したモデル ◦ Googleが2018年に発表 • 当時の自然言語処理タスクの最高記録を軒並み塗り替えた • fine-tuningにより あらゆる自然言語処理タスクに応用可能な汎用性の高さ BERTモデル BERT紹介
BERTのアーキテクチャ BERT紹介 Embedding Attention Attention Output Sentence トークナイズされた文章 固定長のベクトルに埋め込み ×12層のSelf-Attention
固定長のベクトル
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 ベクトル化
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 ベクトル化 トークナイズ
BERTのアーキテクチャ BERT紹介 Embedding Attention Attention Output Sentence トークナイズされた文章 固定長のベクトルに埋め込み ×12層のSelf-Attention
固定長のベクトル • クエリ(Q)とキー(K)の 類似度を測る • Self-Attention → クエリとキーの文章が同一
• 事前学習モデルを、解きたいタスクに合わせてチューニング BERTのfine-tune Pretrained BERT Model Question Answering Named Entity
Recognition Sentiment Analysis Text Summarization BERT紹介
• 事前学習モデルを、解きたいタスクに合わせてチューニング BERTのfine-tune BERT紹介 BERT 全結合層 大量の文章(Wikipedia全文など)で 事前に学習されたモデル タスクに合った形式で 結果を出力する
出力
BERTのfine-tune実践例 ~なろう風タイトル生成モデル~
• 文章を入力したら なろう風のタイトルを生成してみたい ◦ BERTを転移学習(fine-tuning)して文章生成モデルを作ってみる やりたいこと BERTで あそんでみた
• 「小説家になろう」にありがちなタイトル ◦ 異世界転生しがち ▪ 無職転生~異世界行ったら本気出す ◦ 魔王とか勇者とか入りがち ▪
盾の勇者の成り上がり ▪ 魔王様、リトライ! ◦ めっちゃ説明してくれるじゃん ▪ (この世界はもう俺が救って富と権力を手に入れたし、女騎士や女 魔王と城で楽しく暮らしてるから、俺以外の勇者は)もう異世界に 来ないでください。 なろう風とは? BERTで あそんでみた
タイトル生成してみる BERTで あそんでみた あらすじ 時は大正。竈門炭治郎は、家族とともに山でつつましくも幸せな日々をおくって いた。ある日、町で炭を売りに出かけた炭治郎が山に戻ると、家族は鬼に襲わ れ血だまりの中で絶命していた。 生成されたタイトル
炭治郎の異世界血風録(三十と一夜短編第60回) ※Wikipediaより引用
タイトル生成してみる BERTで あそんでみた タイトル 名探偵コナン 生成されたタイトル 名探偵コナン 第36話「あたらしいバレンタイン」 ~推理小説を投稿していたらいつのまにか美少女に一目惚れされた件~
タイトル生成してみる BERTで あそんでみた タイトル ウマ娘 プリティーダービー 生成されたタイトル ウマ娘 プリティーダービー 優勝馬に転生したので、とりあえず競馬で勝つことを目指します!
fine-tuneの実装 ~Transformersライブラリを使って~
Transformers • huggingfaceが提供しているライブラリ ◦ アルゴリズムのTransformerが名前の元(たぶん) ◦ 自然言語系の深層学習モデルの実装では定番 ◦ https://github.com/huggingface/transformers
• Transformersは事前学習済みモデルをすばやくダウンロードし あなたが持っているデータセットでfine-tuneするためのAPIを提供します • TransformersはJax, PyTorch, TensorFlowといった ポピュラーなライブラリによる実行をサポートしています
Transformers • 主なクラス ◦ Tokenizer ▪ テキストの前処理 ◦ Model ▪
Transformer系統の自然言語モデル ▪ PyTorchまたはTensorFlow ◦ Trainer ▪ モデルの学習や保存
Transformers • 主なクラス ◦ Tokenizer ▪ テキストの前処理 ◦ Model ▪
Transformer系統の自然言語モデル ▪ PyTorchまたはTensorFlow ◦ Trainer ▪ モデルの学習や保存
• 「小説家になろう」からAPIで取得したタイトルとあらすじのペア ◦ 合計約10万件 • あらすじを入力として、タイトルをラベルとして使用した 学習データ
Input 女の子たちの 日常を描く Model Output きんいろ モザイク ご注文は うさぎですか? Label Loss
テキストの処理 • Tokenizer ◦ 文章を形態素解析し、トークンIDの系列に変換する
テキストの処理 • Tokenizer ◦ 文章を形態素解析し、トークンIDの系列に変換する 数あわなくね?
テキストの処理 • Tokenizer ◦ 文章を形態素解析し、トークンIDの系列に変換する ご注文はうさぎですか? [CLS]ご注文はうさぎですか?[SEP] 特別なトークンを追加してからトークナイズしている
• [CLS]: 文の始まりを表すトークン • [SEP]: 文と文の区切りを表すトークン
テキストの処理 • スペシャルトークン ◦ [UNK] ▪ トークナイザーの辞書に登録されてない単語を表す ◦ [CLS]
▪ 文の始まりを表す ◦ [SEP] ▪ 文と文の区切りを表す ◦ [PAD] ▪ 文の長さを揃えるために足されるトークン ◦ [MASK] ▪ MLMの学習時にトークンの予測箇所を表す
テキストの処理 • パディング ◦ データセット内の文章の長さを揃えるために[PAD]を足す ご 注文 は うさぎ
です か ? [PAD] ゆ ゆ 式 [PAD] [PAD] [PAD]
テキストの処理 • パディング ◦ データセット内の文章の長さを揃えるために[PAD]を足す
Transformers • 主なクラス ◦ Tokenizer ▪ テキストの前処理 ◦ Model ▪
Transformer系統の自然言語モデル ▪ PyTorchまたはTensorFlow ◦ Trainer ▪ モデルの学習や保存
モデルの利用 • Models - Hugging Face ◦ Transformersで利用可能なモデルたち ▪
BERT ▪ RoBERTa ▪ Longformer ▪ ELECTRA ▪ etc…
モデルの利用 • タスクに応じてモデルクラスが用意されている ◦ BertForMaskedLM ◦ BertForNextSentencePrediction ◦ BertForSequenceClassification
◦ BertForQuestionAnswering
モデルの利用 • タスクに応じてモデルクラスが用意されている ◦ 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)
モデルの利用 • BertForSequenceClassification BERT 全結合層
モデルの利用 • BertForSequenceClassification.from_pretrained(model_name_or_path) BERT 事前学習済みの モデル 重みをロード 全結合層
出力
モデルの利用 • BertForSequenceClassification.from_pretrained(model_name_or_path) BERT 事前学習済みの モデル 重みをロード 全結合層
ランダムに重みを初期化 出力
• モデルクラス ◦ EncoderDecoderModel • from_pretrained ◦ 東北大の乾研究室が公開している事前学習済みモデル ▪
日本語Wikipediaの約1700万テキストで学習したもの ▪ https://huggingface.co/cl-tohoku モデルの利用 Encoder BERT Input ご注文は うさぎですか? Decoder BERT Output うさぎを注文したら 異世界に 転生した件について
• Trainer ◦ 学習の実行をよしなにしてくれるクラス ◦ ハイパーパラメータを設定して、実行するだけ ◦ 公式のチュートリアル
fine-tuneの実行
• 実行環境 ◦ 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
モデル保存 • 保存される情報 ◦ モデル ▪ モデル実体 ▪ 設定ファイル(json) ◦
トークナイザー ▪ 設定ファイル(json) ◦ 学習情報 ▪ optimizer ▪ scheduler ▪ 設定ファイル(json)
学習したモデルを使って推論する
まとめ • BERT ◦ 汎用的なタスクに応用可能な事前学習済みモデル • Pythonを使ったBERTのfine-tune ◦ Transformersを使った実装 (https://gitlab.com/payanotty/narou_title_generator)
▪ 事前学習済みモデルを簡単にダウンロードして利用できる ▪ タスクに応じたモデルクラスが用意されている ▪ トークナイザーを使った文章処理 ▪ Trainerクラスを使えばfine-tuneをよしなに実行できる • (今回は紹介していないが) • 自作callbackで細かい学習の挙動を制御することも可能 • MLflowやTensorboardとの連携も◦