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
810
bert_introduction_with_python
payanotty
March 17, 2022
Tweet
Share
More Decks by payanotty
See All by payanotty
トークナイザー入門
payanotty
4
2.4k
LLM_Prompt_Recovery
payanotty
3
1k
Embeddingモデルを使ったベクトル化のしくみ、fine-tuning手法を解説
payanotty
15
6.3k
Transformerによるテキストベクトル化を解説
payanotty
6
4.1k
Kaggle_LLMコンペの攻略法を解説.pdf
payanotty
1
1.6k
ManimMLでイケてるアニメーションを作ろう
payanotty
0
810
Lets Finetune LLM
payanotty
3
1.4k
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
AIエージェント、 社内展開の前に知っておきたいこと
oracle4engineer
PRO
2
140
組織全体で実現する標準監視設計
yuobayashi
3
490
AI駆動AI普及活動 ~ 社内AI活用の「何から始めれば?」をAIで突破する
oracle4engineer
PRO
1
110
オレ達はAWS管理をやりたいんじゃない!開発の生産性を爆アゲしたいんだ!!
wkm2
4
540
Keycloak を使った SSO で CockroachDB にログインする / CockroachDB SSO with Keycloak
kota2and3kan
0
150
Postman v12 で変わる API開発ワークフロー (Postman v12 アップデート) / New API development workflow with Postman v12
yokawasa
0
130
AWS CDK「読めるけど書けない」を脱却するファーストステップ
smt7174
3
160
VLAモデル構築のための AIロボット向け模倣学習キット
kmatsuiugo
0
230
Kubernetesにおける推論基盤
ry
1
400
S3はフラットである –AWS公式SDKにも存在した、 署名付きURLにおけるパストラバーサル脆弱性– / JAWS DAYS 2026
flatt_security
0
1.8k
決済サービスを支えるElastic Cloud - Elastic Cloudの導入と推進、決済サービスのObservability
suzukij
2
650
OCHaCafe S11 #2 コンテナ時代の次の一手:Wasm 最前線
oracle4engineer
PRO
2
140
Featured
See All Featured
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
120
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.8k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.8k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
150
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
220
We Are The Robots
honzajavorek
0
200
Darren the Foodie - Storyboard
khoart
PRO
3
2.9k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.1k
Art, The Web, and Tiny UX
lynnandtonic
304
21k
Agile that works and the tools we love
rasmusluckow
331
21k
Everyday Curiosity
cassininazir
0
160
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との連携も◦