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
720
bert_introduction_with_python
payanotty
March 17, 2022
Tweet
Share
More Decks by payanotty
See All by payanotty
トークナイザー入門
payanotty
2
1.2k
LLM_Prompt_Recovery
payanotty
3
840
Embeddingモデルを使ったベクトル化のしくみ、fine-tuning手法を解説
payanotty
14
4.2k
Transformerによるテキストベクトル化を解説
payanotty
4
2.3k
Kaggle_LLMコンペの攻略法を解説.pdf
payanotty
1
1.3k
ManimMLでイケてるアニメーションを作ろう
payanotty
0
650
Lets Finetune LLM
payanotty
3
1.2k
Stable Diffusion Web UI, Let Your Fave Eat Ramen
payanotty
1
980
Lets Finetune Stable Diffusion
payanotty
0
1.2k
Other Decks in Technology
See All in Technology
NilAway による静的解析で「10 億ドル」を節約する #kyotogo / Kyoto Go 56th
ytaka23
3
380
大幅アップデートされたRagas v0.2をキャッチアップ
os1ma
2
530
バクラクのドキュメント解析技術と実データにおける課題 / layerx-ccc-winter-2024
shimacos
2
1.1k
Postman と API セキュリティ / Postman and API Security
yokawasa
0
200
DevOps視点でAWS re:invent2024の新サービス・アプデを振り返ってみた
oshanqq
0
180
re:Invent 2024 Innovation Talks(NET201)で語られた大切なこと
shotashiratori
0
310
10個のフィルタをAXI4-Streamでつなげてみた
marsee101
0
170
なぜCodeceptJSを選んだか
goataka
0
160
サービスでLLMを採用したばっかりに振り回され続けたこの一年のあれやこれや
segavvy
2
410
20241214_WACATE2024冬_テスト設計技法をチョット俯瞰してみよう
kzsuzuki
3
450
Amazon VPC Lattice 最新アップデート紹介 - PrivateLink も似たようなアップデートあったけど違いとは
bigmuramura
0
190
Microsoft Azure全冠になってみた ~アレを使い倒した者が試験を制す!?~/Obtained all Microsoft Azure certifications Those who use "that" to the full will win the exam! ?
yuj1osm
2
110
Featured
See All Featured
A better future with KSS
kneath
238
17k
Statistics for Hackers
jakevdp
796
220k
Why Our Code Smells
bkeepers
PRO
335
57k
Done Done
chrislema
181
16k
Rails Girls Zürich Keynote
gr2m
94
13k
Product Roadmaps are Hard
iamctodd
PRO
49
11k
Raft: Consensus for Rubyists
vanstee
137
6.7k
Navigating Team Friction
lara
183
15k
Automating Front-end Workflow
addyosmani
1366
200k
Code Reviewing Like a Champion
maltzj
520
39k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
45
2.2k
Become a Pro
speakerdeck
PRO
26
5k
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との連携も◦