Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
820
Embeddingモデルを使ったベクトル化のしくみ、fine-tuning手法を解説
payanotty
14
4.1k
Transformerによるテキストベクトル化を解説
payanotty
4
2.2k
Kaggle_LLMコンペの攻略法を解説.pdf
payanotty
1
1.3k
ManimMLでイケてるアニメーションを作ろう
payanotty
0
640
Lets Finetune LLM
payanotty
3
1.2k
Stable Diffusion Web UI, Let Your Fave Eat Ramen
payanotty
1
970
Lets Finetune Stable Diffusion
payanotty
0
1.2k
Other Decks in Technology
See All in Technology
偶有的複雑性と戦うためのアーキテクチャとチームトポロジー
knih
7
6k
12/2(月)のBedrockアプデ速報(re:Invent 2024 Daily re:Cap #1 with AWS Heroes)
minorun365
PRO
2
260
全社員に向けて生成AI活用を促進!~電通総研の生成AI活用ロードマップ~
iotcomjpadmin
0
310
Engineer Recruting Deck
siva_official
PRO
1
3.2k
Entra ID の基礎(Japan Microsoft 365 コミュニティ カンファレンス 2024)
murachiakira
3
2.2k
Oracle Cloud Infrastructureデータベース・クラウド:各バージョンのサポート期間
oracle4engineer
PRO
30
16k
Amazon CloudFrontを活用したゼロダウンタイム実現する安定的なデプロイメント / 20241129 Yoshiki Shinagawa
shift_evolve
0
130
B11-SharePoint サイトのストレージ管理を考えよう
maekawa123
0
120
データ基盤の負債解消のためのリプレイス
livesense
PRO
0
140
乗っ取れKubernetes!!~リスクから学ぶKubernetesセキュリティの考え方~/k8s-risk-and-security
mochizuki875
3
430
2024年のAmazon Bedrockアップデート一挙おさらい 〜まだ間に合う! re:Invent直前までの重大ニュースを速習しよう〜
minorun365
PRO
3
160
情シスの引継ぎが大変という話
miyu_dev
2
540
Featured
See All Featured
A Tale of Four Properties
chriscoyier
156
23k
Making the Leap to Tech Lead
cromwellryan
133
8.9k
Six Lessons from altMBA
skipperchong
27
3.5k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.2k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
400
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
47
2.1k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.3k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
Designing the Hi-DPI Web
ddemaree
280
34k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
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との連携も◦