SlideShare a Scribd company logo
1 of 41
学生・若手研究者のための
BERTワークショップ
2020/08/04
RIKEN AIP 中山功太
1
質問はslackチャットで随時受け付けております
本ワークショップの目的
目的
BERTについての知識を得る。
BERTを用いて文書分類タスクを試す(Pytorch実装)。
より発展的な理解のために
本ワークショップでは深層学習の知識がなくともデモの実行は可能ですが、
より深く理解したい場合は、「ゼロから作るDeep Learning」を読んだり、
以下の深層学習や誤差逆伝播を数学的に解説した動画の視聴をお勧めしま
す。
https://youtu.be/xzzTYL90M8s
https://youtu.be/0itH0iDO8BE
2
質問はslackチャットで随時受け付けております
深層学習についての説明
3
質問はslackチャットで随時受け付けております
ザクっとわかる深層学習
質問はslackチャットで随時受け付けております
4
深層学習モデル e.g. BERT
(計算グラフ)
吾輩は猫である。 名前はまだ無い。
夏目漱石 太宰治
0.3 0.7
夏目漱石 太宰治
1 0
正答ラベル
予測
入力
誤差
誤差逆伝播(微分)+パラメーター更新
深層学習は一般的に予測と正答ラベルの間の誤差を最小化することでモデルを学習する。
誤差逆伝播とは
深層学習モデルの誤差を微分し
誤差が小さくなる方向にパラメーターを更新する。
⇨オプティマイザーが勝手にやってくれる。
勾配
パラメーター
更新
バッチ入力
質問はslackチャットで随時受け付けております
5
バッチ入力とは
複数の入力をもとに誤差を最小化することで学習
を安定化させるテクニック。
吾輩は猫である。 名前はまだ無い。
私は、その男の写真を三葉、見たことがある。
親譲の無鉄砲で小供の時から損ばかりしている。
…
深層学習モデル e.g. BERT
(計算グラフ)
夏目漱石 太宰治
1 0
0 1
1 0
… …
夏目漱石 太宰治
0.3 0.7
0.8 0.2
0.4 0.6
… …
誤差
(基本的には
誤差の平均)
バッチサイズ
入力
予測
正答
ラベル
BERTについての説明
6
質問はslackチャットで随時受け付けております
BERTとは
BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (2018)
で提案された深層学習モデル。2022/7/22現在 44471引用!!!
簡単に、さまざまな自然言語処理タスクに適用可能であり、実際に多くの研究で用いられている。
以下の順序でBERTについて説明していく。
1. 入力文章の前処理
2. BERTの構造
A) 埋め込み
B) 自己注意機構(Self-Attention Mechanism)
C) 残差接続(Residual Connection)
D) 層正規化(Layer Normalization)
3. 事前学習
A) マスク言語モデリング(MLM : Masked Language Modeling)
4. 分類タスクへの適用法
7
質問はslackチャットで随時受け付けております
1. 入力文章の前処理
1. 入力文章の前処理
2. BERTの実際の構造
A) 自己注意機構(Self-Attention Mechanism)
B) 残差接続
C) 層正規化
3. 事前学習
A) マスク言語モデリング(Masked Language Modeling)
4. 実際に分類タスクに適用
本日は晴天なり。
[[CLS], 本, ##日, は, 晴, ##天, なり, 。, [SEP], [PAD], …, [PAD]]
[本, ##日, は, 晴, ##天, なり, 。]
入力文章
単語分割
特殊トークン結合
特殊トークン
[CLS] : 文章の先頭を示す
[SEP] : 文章の終わり(もしくは区切り)
[PAD] : 入力長の調節用
トークン
トークン
[ 2, 108, 28486, 9, 4798, 28849, 297, 8, 3, 0, …, 0 ]
辞書を用いてID化
トークンID
辞書は事前に大規模データから単語頻度を用いて作成する
辞書のサイズは32000程度が用いられる場合が多い。
辞書に含まれなかったトークンは事前に[UNK]トークンに置き換える。
[UNK] : 語彙リストに含まれない
トークン
[MASK] : のちに説明
※##は1つ前のサブワードと結合して
1つの単語を意味することを示す。
※正確には単語より細かいサブワードに分割する
8
質問はslackチャットで随時受け付けております
BERTでは自然文を分割した後、ID配列に変換し入力とする。
1. 入力文章の前処理
BERTは各トークンIDに対応する位置ID、文章ID、注意マスクも入力に取る。
9
質問はslackチャットで随時受け付けております
入力長N
2. BERTの構造
10
質問はslackチャットで随時受け付けております
[CLS]
2
0
0
1
筑波大学
14227
1
0
1
は
9
2
0
1
日本
6
3
0
1
の
91
4
0
1
国立
2221
5
0
1
大学
396
6
0
1
で
12
7
0
1
[SEP]
3
9
0
1
ある
31
8
0
1
トークンID
位置ID
文章ID
注意マスク
𝑣0
[CLS]
𝑣1
筑波大学 𝑣2
は 𝑣3
日本 𝑣4
の 𝑣5
国立 𝑣6
大学 𝑣7
で 𝑣8
ある 𝑣9
[SEP]
BERTは各トークンごとにベクトルを出力する。
多くの場合この出力ベクトルをもとにさまざまなタスクを解くことになる。
学校名
BERT
分類タスク
B-FAC O B-LOC O O O O O
固有表現抽出タスク
2. BERTの構造
入力
埋め込み層
MH自己注意
残差接続
層正規化
注意層1
注意層2
注意層𝑙
※注意層数𝑙は
8や12の場合が多い。
出力
埋め込み層
(トークンID用)
埋め込み層
(位置ID用)
埋め込み層
(文章ID用)
和
線形層
残差接続
層正規化
11
質問はslackチャットで随時受け付けております
…
2.A 埋め込み
埋め込みとは
トークンIDなどの整数値はニューラルネットでは扱いにくいため、連続値ベクトルに変換することが多い。
この連続値ベクトルのことを埋め込みと呼ぶ。
埋め込み層
(トークンID用)
埋め込み層
(位置ID用)
埋め込み層
(文章ID用)
和
12
質問はslackチャットで随時受け付けております
[CLS]
2
0
0
筑波大学
14227
1
0
は
9
2
0
日本
6
3
0
の
91
4
0
国立
2221
5
0
大学
396
6
0
で
12
7
0
[SEP]
3
9
0
ある
31
8
0
トークンID
位置ID
文章ID
𝑥0
[CLS]
𝑥1
筑波大学 𝑥2
は 𝑥3
日本 𝑥4
の 𝑥5
国立 𝑥6
大学 𝑥7
で 𝑥8
ある 𝑥9
[SEP]
[PAD]
0
N-1
0
…
𝑥𝑁−1
[SEP]
…
埋め込み層
各トークンごとに𝑑次元の埋め込みを得る。
2.A 埋め込み
One-hotエンコーディングとは
対応するインデックスのみ1、それ以外0のベ
クトルに変換する。
次元数𝑘は、入力整数値の範囲に対応する。
𝑘トークンID⇨全体の語彙数
𝑘位置ID⇨入力長
𝑘文章ID⇨1入力に含まれる文章数
トークンID
One-hot
エンコーディング
𝑘トークンID次元
ベクトル
線形層
𝑑次元トークンID
埋め込みベクトル
各埋め込み層は
One-hotエンコーディングと線形層からなる。
埋め込み層
(トークンID用)
埋め込み層
(位置ID用)
埋め込み層
(文章ID用)
和
13
質問はslackチャットで随時受け付けております
位置ID
One-hot
エンコーディング
𝑘位置ID次元
ベクトル
線形層
𝑑次元位置ID
埋め込みベクトル
文章ID
One-hot
エンコーディング
𝑘文章ID次元
ベクトル
線形層
𝑑次元文章ID
埋め込みベクトル
和
𝑑次元埋め込みベクトル
2.B 自己注意機構
以前から、自己注意はLSTMの補助等で活用されて
いたが、Attention Is All You Need(2017)で提案さ
れたTransformerでモデルの核として利用されて以
来画像処理等でも広く使用されるようなった。
入力
(𝑥1
𝑡
, 𝑥2
𝑡
, … , 𝑥𝑁
𝑡
) ∈ ℝ𝑑
線形層 𝑊𝑄 線形層 𝑊𝐾
線形層 𝑊𝑉
クエリ
𝑄 ∈ ℝ𝑁×𝑑𝑘
キー
K ∈ ℝ𝑁×𝑑𝑘
バリュー
V ∈ ℝ𝑁×𝑑
転置
行列積
スケーリング+
ソフトマックス
注意スコア
𝑆 ∈ ℝ𝑁×𝑁 行列積
出力
(𝑥1
𝑡+1
, 𝑥2
𝑡+1
, … , 𝑥𝑁
𝑡+1
) ∈ ℝ𝑑
自己注意
自己注意を数式で表すと
𝑑𝑘 : Query, Keyのベクトル次元数
𝑑𝑘 : 次元数𝑑𝑘が大きいと内積値𝑄𝐾𝑇
も大きくなりやすい
次元数の影響を調節するスケーリング因子
Self-Attention Mechanism
MH自己注意
残差接続
層正規化
線形層
残差接続
層正規化
14
ソフトマックスは値を0~1の範囲、合計1に正規化する関数
質問はslackチャットで随時受け付けております
自己注意(Self-Attention)とは
入力ベクトルを、文脈を加味したベクトルに変換する機構
2.B 自己注意機構
晴
[CLS]
本
##日
[SEP]
は
晴
##天
なり
。
[PAD]
クエリ(一部) キー 注意スコア
1.2
1.3
-0.5
1.2
-1.2
3.0
2.5
1.1
0.5
-∞
0.07
0.08
0.01
0.07
0.00
0.42
0.25
0.07
0.03
0.00
[PAD]とのスコアは-∞で置き換える。
(この時に注意マスクが使用される)
⇨ソフトマックスを通した際に値が
限りなく0に近くなる。
スケーリング
+ソフトマックス
[CLS]
本
##日
[SEP]
は
晴
##天
なり
。
[PAD]
バリュー
New 晴
加重和
クエリ
[CLS]
本
##日
[SEP]
は
晴
##天
なり
。
[PAD]
わかりやすさのた
め、一旦クエリの
うち1ベクトルの
みで考える。
注意スコアをもとにバ
リューの加重和を取る。
⇨文脈を加味した埋め込み
を得ることができる。
New [CLS]
New 本
New ##日
New [SEP]
New は
New 晴
New ##天
New なり
New 。
New [PAD]
文脈を加味した
最終出力
全てのクエリで同じ処
理をすることで、最終
出力を得る。
Self-Attention Mechanism
内積値
MH自己注意
残差接続
層正規化
線形層
残差接続
層正規化
15
質問はslackチャットで随時受け付けております
各キーと
内積を取る
どのように文脈を加味したベクトルを得ているのか図解的に説明していく。
2.B マルチヘッド自己注意
Multi-Head Self-Attention
式で表すと以下のようになる。
𝑊
𝑖
𝑄
, 𝑊𝑖
𝐾
, 𝑊𝑖
𝑉
: 𝑖番目の頭の次元圧縮用の線形層の重み
𝑊𝑂
: 結合の境目を隠すための線形層の重み
MH自己注意
残差接続
層正規化
線形層
残差接続
層正規化
線形層を用いて、入力𝑁 × 𝑑を𝑁 ×
𝒅
𝒉
次元に圧縮。
ここでℎは𝑑の約数。
ℎ個の注意ヘッドを用いることで出力h × 𝑁 ×
𝒅
𝒉
を得
た後、結合し𝑁 × 𝑑とする。
結合位置を隠すため線形層に通し最終出力を得る。
入力
(𝑥1
𝑡
, 𝑥2
𝑡
, … , 𝑥𝑁
𝑡
) ∈ ℝ𝑑
線形層 𝑊
1
𝑄
線形層 𝑊1
𝐾
線形層 𝑊1
𝑉
クエリ
𝑄1 ∈ ℝ
𝑁×
𝒅
𝒉
(𝑥1,1
𝑡+1
, 𝑥1,2
𝑡+1
, … , 𝑥1,𝑁
𝑡+1
) ∈ ℝ
𝒅
𝒉
自己注意
キー
K1 ∈ ℝ
𝑁×
𝒅
𝒉
バリュー
𝑉1 ∈ ℝ𝑁×
𝒅
𝒉
線形層 𝑊
ℎ
𝑄
線形層 𝑊ℎ
𝐾
線形層 𝑊ℎ
𝑉
クエリ
𝑄ℎ ∈ ℝ
𝑁×
𝒅
𝒉
(𝑥ℎ,1
𝑡+1
, 𝑥ℎ,2
𝑡+1
, … , 𝑥ℎ,𝑁
𝑡+1
) ∈ ℝ
𝒅
𝒉
自己注意
キー
Kℎ ∈ ℝ
𝑁×
𝒅
𝒉
バリュー
𝑉ℎ ∈ ℝ𝑁×
𝒅
𝒉
…
結合
線形層 𝑊𝑂
出力
(𝑥1
𝑡+1
, 𝑥2
𝑡+1
, … , 𝑥𝑁
𝑡+1
) ∈ ℝ𝑑
注意ヘッド 注意ヘッド
16
質問はslackチャットで随時受け付けております
マルチヘッド自己注意とは
複数の自己注意を並列で行うことで、単一の場合
より多くの文脈関係を扱うことができるようにな
る手法。
2.C 残差接続
Residual Connection
入力
(𝑥1
𝑡
, 𝑥2
𝑡
, … , 𝑥𝑁
𝑡
) ∈ ℝ𝑑
自己注意 or 線形層
(𝑥1
𝑡+1
, 𝑥2
𝑡+1
, … , 𝑥𝑁
𝑡+1
) ∈ ℝ𝑑
和
(𝑥1
𝑡
+ 𝑥1
𝑡+1
, 𝑥2
𝑡
+ 𝑥2
𝑡+1
, … , 𝑥𝑁
𝑡
+ 𝑥𝑁
𝑡+1
) ∈ ℝ𝑑
残差接続
Deep Residual Learning for Image Recognition(2015)で提案され
た。
何かしらのネットワーク(今回の場合は自己注意か線形層)の入力
𝑥𝑡
と出力 𝑥𝑡+1
の和 𝑥𝑡
+ 𝑥𝑡+1
を最終出力とする。
この場合、モデルは入力との差分𝑥𝑡+1を学習すれば良いため全体の
ネットワークが深くなっても学習が安定する。
やや詳しく説明するとニューラルネットは層が深くなればなるほど、
誤差逆伝播の際に勾配が消失しやすくなることが知られている。
残差接続はこの勾配消失を防ぐ効果を持っており、結果として深い
ネットワークの学習の安定に繋がる。
MH自己注意
残差接続
層正規化
線形層
残差接続
層正規化
17
質問はslackチャットで随時受け付けております
残差接続とは
深い(つまり多層の)ネットワークを安定して学習するためのテクニック
2.D 層正規化
Layer Normalization
Layer Normalization(2016)で提案された。
1次元に結合した残差接続後の出力 : 𝑎𝑡 = 𝑐𝑜𝑛𝑐𝑎𝑡 𝑥1
𝑡
, 𝑥2
𝑡
, … , 𝑥𝑁
𝑡
, 𝑎𝑡 ∈ ℝ𝑁𝑑
平均 : 分散 :
平均と分散を用いて、出力を平均0、分散1に正規化する。
⨀ : 要素積
𝐠, 𝐛 ∈ ℝ𝑁𝑑
: 学習可能なベクトル
(𝑥1
𝑡′
, 𝑥2
𝑡′
, … , 𝑥𝑁
𝑡′
) = decompose(ℎ𝑡)
MH自己注意
残差接続
層正規化
線形層
残差接続
層正規化
ℎ𝑡 =
𝐠
𝜎𝑡
⨀ 𝑎𝑡 − 𝜇𝑡 + 𝐛
18
質問はslackチャットで随時受け付けております
層正規化とは
ネットワーク出力の分布変動を抑制することで、学習を安定化&高速化できる手法。
3 事前学習
Pre-Training
膨大な計算コストを必要とするため、一般的には配布されている事前学習済みのBERTモデルを使用する
ことが多い。
本ワークショップでも東北大が公開している日本語事前学習済みBERTを使用する。
BERTの事前学習は
A. マスク言語モデリング (Masked Language Modeling)
B. 次文予測 (Next Sentence Prediction) ⇦あまり効果がないことがわかっているため説明を省く※
からなる。
19
質問はslackチャットで随時受け付けております
事前学習とは
モデルを大規模データセットで学習した後、解きたいタスクに転用することで収束を早めたり精度を
向上させることができる学習手法。
※RoBERTa: A Robustly Optimized BERT Pretraining Approach(2019)
3.A マスク言語モデリング
Masked Language Modeling
[CLS]
一定の確率で単語を[MASK]に置き換えて単語を当てるタスク。
Wikipediaなどの大規模コーパスで事前学習を行う。
語 ##日 は [MASK] ##天 なり 。 [SEP]
BERT
線形層
0.4 晴
0.2 雨
0.2 曇
…
ソフトマックス
0.5 本
0.2 当
0.1 休
…
全体の15%の単語が対象となる。
そのうち、
80%を[MASK]トークン
10%を別のトークン
10%を同じトークン
に置き換える。
BERTは対象の単語が何であったか
を当てる必要がある。
置き換え マスク 置き換えしない
0.5 です
0.1 なり
0.1 である
…
20
質問はslackチャットで随時受け付けております
4 分類タスクへの適用
分類タスクの場合、[CLS]トークンに対応する出力ベクトルを用いてラベル予測を行う。
21
質問はslackチャットで随時受け付けております
[CLS]
2
0
0
1
筑波大学
14227
1
0
1
は
9
2
0
1
日本
6
3
0
1
の
91
4
0
1
国立
2221
5
0
1
大学
396
6
0
1
で
12
7
0
1
[SEP]
3
9
0
1
ある
31
8
0
1
トークンID
位置ID
文章ID
注意マスク
𝑣0
[CLS]
𝑣1
筑波大学 𝑣2
は 𝑣3
日本 𝑣4
の 𝑣5
国立 𝑣6
大学 𝑣7
で 𝑣8
ある 𝑣9
[SEP]
学校名
BERT
予測クラス
線形層
𝑜𝜖ℝ𝐶
Argmax
⇦線形層を用いて𝑑次元ベクトルを𝐶次元に変換。𝐶はクラス数を意味する。
⇦最も値が大きい次元に対応するクラスを選択する。
22
森羅分類データセットの説明
質問はslackチャットで随時受け付けております
森羅分類データセットとは
質問はslackチャットで随時受け付けております
今年度開催している森羅共有タスクのデータセットの一つ。
日本語Wikipediaを拡張固有表現に分類する。
分類
拡張固有表現階層(約200カテゴリー)
日本語Wikipedia
ラベルは複数付与される場合がある。
例えば、映画化された書籍の場合、
書物名、映画名が付与される。
全体の約3%に複数ラベルが付与されている。
23
森羅分類データセットとは
質問はslackチャットで随時受け付けております
学習データ : 分類済み日本語Wikipedia(2019年時点)
予測データ : 未分類日本語Wikipedia(2021年時点)
学習データは100万件近く存在する。
計算コストの都合上、ワークショップでは5000件をランダムにサンプリングし学習データとする。
また、簡易化のため約3%の複数ラベルを除去し、単一ラベルのデータセットとして扱う。
本ワークショップでは予測とリーダーボード投稿まで行う。
24
25
いざ実践
質問はslackチャットで随時受け付けております
質問はslackチャットで随時受け付けております
26
https://colab.research.google.com/drive/1M2xbF4gqCH5O7LnmnAvVOkbBO22SiX8K?usp=sharing
①Colabを開きます。(Googleアカウントが必要です。)
②自分のGoogleDriveにコピーします。(コードの編集が可能になります。)
③ランタイム>全てのセルを実行を押す
④ポップアップが出るのでGoogleドライブに接続
④学習が回っていれば成功
まずは動作確認
もし動かない場合は
Slackでご相談ください🙇♂️
MyDrive/Shinra2022ClassificationWorkshop/leaderboard_predictions.json
学生・若手研究者のための
BERTワークショップ
質問解答編
2022/08/10
RIKEN AIP 中山功太
27
質問はSlack#bert_workshop2022チャンネルで随時受け付けております
バッチ入力に関して
28
質問はSlack#bert_workshop2022チャンネルで随時受け付けております
Q. バッチ入力の「学習を安定させる効果」とはどういうことでしょうか?
A. 「モデルが学習中に好ましくないパラメータに陥るのを防ぎ、より理想的なモデルを得られる」と
いった効果を意味します。
バッチ入力だとなぜ学習が安定するのか?
入力テキスト 正解ラベル
吾輩は猫である。 名前はまだ無い。 夏目漱石
私は、その男の写真を三葉、見たことが
ある。
太宰治
親譲の無鉄砲で小供の時から損ばかりし
ている。
夏目漱石
… …
深層学習モデルの性能を上げるためには、希少な問題
より頻出する問題の方が良く解けていることが好まし
い。
そのため、毎回のパラメータ更新はなるべく入力分布
にとって最適なものである必要がある。
バッチ入力は、入力分布をある程度近似でき、誤差の
平均から得られる勾配も入力分布を反映した方向とな
る。
⇨学習が安定する。 間違ったラベルがつけられたデータを中和してくれる効果もある。
サブワード分割に関して
29
質問はSlack#bert_workshop2022チャンネルで随時受け付けております
本日は晴天なり。
[本, ##日, は, 晴, ##天, なり, 。]
入力文章
単語分割
トークン
※##は1つ前のサブワードと結合して
1つの単語を意味することを示す。
※正確には単語より細かいサブワードに分割する
Q. サブワード分割の前にMeCab等で単語分割をおこなっているのでしょうか?
A. はい。MeCabなどの形態素解析器で単語分割をおこなった後、BPE(バイトペアエンコーディング)な
どの手法を用いてサブワードに分割しています。
ちなみに、サブワードレベルへの分割を行うと、全体の語彙数を大幅に圧縮することができます。
サブワードの細かさは調節可能ですが、事前学習を行う前に決めておく必要があります。
分割を細かくすると全体の語彙数をより圧縮できますが、逆に分割後のトークン列が長くなります。
各注意ヘッドの出力の意味
30
質問はSlack#bert_workshop2022チャンネルで随時受け付けております
入力
(𝑥1
𝑡
, 𝑥2
𝑡
, … , 𝑥𝑁
𝑡
) ∈ ℝ𝑑
線形層 𝑊
1
𝑄
線形層 𝑊1
𝐾
線形層 𝑊1
𝑉
クエリ
𝑄1 ∈ ℝ𝑁×
𝒅
𝒉
(𝑥1,1
𝑡+1
, 𝑥1,2
𝑡+1
, … , 𝑥1,𝑁
𝑡+1
) ∈ ℝ
𝒅
𝒉
自己注意
キー
K1 ∈ ℝ𝑁×
𝒅
𝒉
バリュー
𝑉1 ∈ ℝ𝑁×
𝒅
𝒉
線形層 𝑊
ℎ
𝑄
線形層 𝑊ℎ
𝐾
線形層 𝑊ℎ
𝑉
クエリ
𝑄ℎ ∈ ℝ𝑁×
𝒅
𝒉
(𝑥ℎ,1
𝑡+1
, 𝑥ℎ,2
𝑡+1
, … , 𝑥ℎ,𝑁
𝑡+1
) ∈ ℝ
𝒅
𝒉
自己注意
キー
Kℎ ∈ ℝ𝑁×
𝒅
𝒉
バリュー
𝑉ℎ ∈ ℝ𝑁×
𝒅
𝒉
…
結合
線形層 𝑊𝑂
出力
(𝑥1
𝑡+1
, 𝑥2
𝑡+1
, … , 𝑥𝑁
𝑡+1
) ∈ ℝ𝑑
注意ヘッド 注意ヘッド
Q. 注意ヘッドの出力は何かを意味しているも
のなのでしょうか?
A. 注意ヘッドの出力は、各注意ヘッドで捉え
た文脈を考慮した単語の意味を表していると
考えられます。また、それぞれの注意ヘッド
は別々のパラメータを持っているため、文章
のさまざまな側面から捉えた意味を表してく
れていると考えられます。
次文予測(Next Sentence Prediction)とは
31
質問はSlack#bert_workshop2022チャンネルで随時受け付けております
[CLS]吾輩は猫である。名前はまだ無い。[SEP]どこで生れたかとんと見当がつかぬ。[SEP]
Q. 次文予測とはなんでしょうか。なぜ役に立たないと言われているのでしょうか。
A. [SEP]トークンで連結された文章ペアが流れとして正しいかどうかを判定する分類タスク。
本タスクによりモデルが長期的な依存関係を学習することが期待される。
50%の確率で次の文章を大規模コーパスからサンプリングした文章に置き換えてデータセットを作成する。
[CLS]親譲りの無鉄砲で小供の時から損ばかりしている。[SEP]小学校に居る時分学校の二階から飛び降りて …[SEP]
正例
[CLS]吾輩は猫である。名前はまだ無い。[SEP]小学校に居る時分学校の二階から飛び降りて …[SEP]
[CLS]親譲りの無鉄砲で小供の時から損ばかりしている。[SEP]どこで生れたかとんと見当がつかぬ。[SEP]
負例
RoBERTa: A Robustly Optimized BERT Pretraining Approach(2019)
であまり効果がないことが指摘された。
次文予測を並列して用いた場合、マスク言語モデリングでは50%の
確率でしか文章全体を参照できないデメリットが存在する。次文予
測タスクが簡単すぎるため、このデメリットの方が目立ってしまい
効果が低いと思われる。
BERTを固有表現抽出に適用したい
32
質問はSlack#bert_workshop2022チャンネルで随時受け付けております
Q. BERTは固有表現抽出のようなタスクに適用できますか?
A. できます。トークン分類タスクとして解くことになります。
固有表現抽出タスクとは
文章中から固有表現に関する言及を抽出するタスクである。
どこまでを固有表現とするかはタスクごとに決められている。
人名(PER)、施設名(ORG)、地名(LOC)を対象とするタスクの場合、
「中山功太は日本の筑波大学の学生である。」となる。
PER LOC ORG
BERTを固有表現抽出に適用したい
33
質問はSlack#bert_workshop2022チャンネルで随時受け付けております
BERTを固有表現抽出に適用する場合、各トークンを
人名(B-PER, I-PER), 組織名(B-ORG, I-ORG), 地名(B-LOC, I-LOC), それ以外 O
の7クラスに分類するタスクとして解くことができる。
ここでB-は範囲の先頭を示し、I-は範囲の継続を示す。
[CLS]
2
0
0
1
中山
5817
1
0
1
功
2981
2
0
1
太
519
3
0
1
は
9
4
0
1
日本
91
5
0
1
の
5
6
0
1
筑波大学
14227
7
0
1
[SEP]
3
9
0
1
の
5
8
0
1
トークンID
位置ID
文章ID
注意マスク
𝑣0
[CLS]
𝑣1
中山 𝑣2
功 𝑣3
太 𝑣4
は 𝑣5
日本 𝑣6
の 𝑣7
筑波大学 𝑣8
の 𝑣9
[SEP]
BERT
B-PER I-PER I-PER O B-LOC O B-ORG O
線形層
今回のコードを感情分類に適用したい
34
質問はSlack#bert_workshop2022チャンネルで随時受け付けております
感情分類とは
入力文章がどの感情に属するのかを判定するタスク。
簡単なものではポジティブ、ネガティブ、ニュートラルに分類する。
飲食店のレビューを対象とする場合「スープが美味しかった」「店内が汚かった」「いい天気でした。」
ポジティブ ネガティブ ニュートラル
Q. 感情分類に適用したいが今回のコードを適用できる?
A. 以下の場所を書き換えれば、動くかと思います。
1. データの読み込みの部分を書き替える。
2. データセットのテキストを取り出す部分と、クラスラベルを
作成する部分を書き換える。
3. 評価が正答率ではない場合は、評価関数を適したものに書き
換える。
今回のコードは、文章に対して複数のラベルがつかないタスク
全般に流用できます。
長いトークン列を使いたい⓪
35
質問はSlack#bert_workshop2022チャンネルで随時受け付けております
BERTの計算で最も重い部分は自己注意のQ𝐾𝑇であり、入力長に対する計算量は𝑂(𝑛2)である。
⇨入力長に対してシビアに計算量が増える。
そのため、BERTの事前学習では入力長を512トークン前後に制限する場合が多い。
また、BERTでは位置IDに対する埋め込みを採用しており、事前学習時に使用されたトークン長以下
の入力しか扱うことができない。
[CLS]
2
0
0
筑波大学
14227
1
0
は
9
2
0
日本
6
3
0
の
91
4
0
国立
2221
5
0
大学
396
6
0
で
12
7
0
[SEP]
3
9
0
ある
31
8
0
トークンID
位置ID
文章ID
𝑥0
[CLS]
𝑥1
筑波大学 𝑥2
は 𝑥3
日本 𝑥4
の 𝑥5
国立 𝑥6
大学 𝑥7
で 𝑥8
ある 𝑥9
[SEP]
[PAD]
0
N-1
0
…
𝑥𝑁−1
[SEP]
…
埋め込み層
Q. 長いトークン列を使いたいのですが方法はありますか?
A. 知っている限りにはなりますがいくつか方法をご紹介します。
長いトークン列を使いたい①
36
質問はSlack#bert_workshop2022チャンネルで随時受け付けております
入力文章を入力長以下のセグメントに区切り、
BERTと線形層を用いてそれぞれの予測を出力す
る。
最終予測はそれらの平均によって得る。
勾配計算による学習は、
①各予測と正答ラベルとの誤差を独立して逆伝播
もしくは、
②予測平均と正答ラベルとの誤差を逆伝播
することで行うことができる。
①の場合は、いずれかのセグメントにおいて正答
ラベルに関するヒントが含まれない場合に学習に
矛盾が発生し、②の場合は全てのセグメントの計
算グラフを保持しておく必要があるため膨大な計
算メモリーを必要とする。
入力文章
分割
セグメント1 セグメント2 セグメントM
…
[CLS]埋め込み1 [CLS]埋め込み2 [CLS]埋め込みM
…
BERT BERT BERT
線形層 線形層 線形層
予測M
予測2
予測1
平均
最終予測
…
長いトークン列を使いたい②
37
質問はSlack#bert_workshop2022チャンネルで随時受け付けております
入力文章を入力長以下のセグメントに区切
る部分は同じだが、BERTから得られた
[CLS]埋め込みを自己注意と線形層に入力
することで最終予測を得る。
自己注意によりセグメント間の関係を捉え
て最終予測を行うことができる。
全てのセグメントの計算グラフを保持して
おく必要があるため膨大な計算メモリーを
必要とする。
入力文章
分割
セグメント1 セグメント2 セグメントM
…
[CLS]埋め込み1 [CLS]埋め込み2 [CLS]埋め込みM
…
BERT BERT BERT
(マルチヘッド)自己注意
最終予測
[CLS]埋め込み
線形層
長いトークン列を使いたい③
38
質問はSlack#bert_workshop2022チャンネルで随時受け付けております
手法ベースでの改良も行われている。
Longformer: The Long-Document Transformer (2020)で提案された手法の場合、
近隣単語のみとの注意を計算することで計算コストを削減している。
[CLS]トークンなどは文章全体を見る必要があるため全トークンとの注意を計算する。
デメリットとしては、日本語で事前学習されたモデルが存在しないことが挙げられる。
BERTの選び方
39
質問はSlack#bert_workshop2022チャンネルで随時受け付けております
Q. ファインチューニング(事前学習後に別タスクで学習することを意味する)に用いる事前学習済みモデ
ルは予測タスクによって適切なものを選ぶ必要はあるか。
A. あります。
事前学習済みBERTを選ぶ際に特に重要になる点は2つ
1. トークン分割の適性
分類のような文章全体から1つの予測を導くタスクでは強く影響しないが、固有表現抽出のように
各トークンを分類するような場合、トークン分割が粗いモデルだと固有表現の境界線とトークン
の境界線が合わない場合があるため、分割が細かいモデルを選ぶ必要がある。
2. 事前学習に使用されたコーパスの適性
経済、医療、化学などのタスクに適用する場合、それぞれの分野のコーパスで事前学習されたモ
デルを用いた方が良い。ちなみにワークショップで使用した東北大BERTはWikipediaで事前学習
されている。
XLNetとの違い
40
質問はSlack#bert_workshop2022チャンネルで随時受け付けております
XLNet: Generalized Autoregressive Pretraining for Language Understanding(2019)で提案されたモデル。
BERTにおける[MASK]のデメリットを克服しているが、計算コストがBERTより重い。
New, York, is, a, city といった入力を考える
• BERTのマスク言語モデリングの場合
[MASK]された単語を予測する。
New, York, [MASK], a, city ⇦[MASK]という通常は使用されない単語が使用されている。
[MASK], [MASK], is, a, city ⇦複数単語マスクされた場合2つの単語の間の予測を活用できない。
• 通常の言語モデリングの場合
現在までの単語列から次の単語を予測する。
New, York, ? ⇦後半に出てくる単語の情報が使用できない。
• XLNetのモデリングの場合
語順を入れ替えて言語モデリングを行う。(各単語は元の位置を保存している)
is, New, city, a, ?
以上をすべての順列で行う。後半に出てくる単語を使用しつつ他の予測結果も使用できる。
意味のクラスタリングは可能?
41
質問はSlack#bert_workshop2022チャンネルで随時受け付けております
Q. BERTが文脈を加味しているなら単語の意味でクラスタリングできるのでは?
A. 可能であり、実際に多くの研究がなされています。
以下の4つの文章をBERTでエンコーディングし、
「甘い」に対応する出力ベクトルのコサイン類似度を計算した。
質問で挙げられていた「甘い」という単語の意味に関して実際に東北大のBERTで試してみる。
味覚的の一つを示すP1とP2、足りなさを示すN1とN2のペアの類似度が高い、
つまり超球面上で集まっていることがわかる。
P1 : 砂糖が甘い。
P2 : カレーが甘い。
N1 : 詰めが甘い。
N2 : 考えが甘い。
使用したColabはこちら。

More Related Content

What's hot

パターン認識と機械学習入門
パターン認識と機械学習入門パターン認識と機械学習入門
パターン認識と機械学習入門
Momoko Hayamizu
 

What's hot (20)

DSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめDSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめ
 
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
 
パターン認識と機械学習入門
パターン認識と機械学習入門パターン認識と機械学習入門
パターン認識と機械学習入門
 
トピックモデルの評価指標 Perplexity とは何なのか?
トピックモデルの評価指標 Perplexity とは何なのか?トピックモデルの評価指標 Perplexity とは何なのか?
トピックモデルの評価指標 Perplexity とは何なのか?
 
深層生成モデルと世界モデル
深層生成モデルと世界モデル深層生成モデルと世界モデル
深層生成モデルと世界モデル
 
[DL輪読会]相互情報量最大化による表現学習
[DL輪読会]相互情報量最大化による表現学習[DL輪読会]相互情報量最大化による表現学習
[DL輪読会]相互情報量最大化による表現学習
 
データに内在する構造をみるための埋め込み手法
データに内在する構造をみるための埋め込み手法データに内在する構造をみるための埋め込み手法
データに内在する構造をみるための埋め込み手法
 
機械学習モデルの判断根拠の説明(Ver.2)
機械学習モデルの判断根拠の説明(Ver.2)機械学習モデルの判断根拠の説明(Ver.2)
機械学習モデルの判断根拠の説明(Ver.2)
 
最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情
 
優れた研究論文の書き方―7つの提案
優れた研究論文の書き方―7つの提案優れた研究論文の書き方―7つの提案
優れた研究論文の書き方―7つの提案
 
深層学習の数理
深層学習の数理深層学習の数理
深層学習の数理
 
機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門
 
近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer
 
MLOpsはバズワード
MLOpsはバズワードMLOpsはバズワード
MLOpsはバズワード
 
【DL輪読会】SimCSE: Simple Contrastive Learning of Sentence Embeddings (EMNLP 2021)
【DL輪読会】SimCSE: Simple Contrastive Learning of Sentence Embeddings  (EMNLP 2021)【DL輪読会】SimCSE: Simple Contrastive Learning of Sentence Embeddings  (EMNLP 2021)
【DL輪読会】SimCSE: Simple Contrastive Learning of Sentence Embeddings (EMNLP 2021)
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
 
Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...
Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...
Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...
 
DQNからRainbowまで 〜深層強化学習の最新動向〜
DQNからRainbowまで 〜深層強化学習の最新動向〜DQNからRainbowまで 〜深層強化学習の最新動向〜
DQNからRainbowまで 〜深層強化学習の最新動向〜
 
グラフニューラルネットワークとグラフ組合せ問題
グラフニューラルネットワークとグラフ組合せ問題グラフニューラルネットワークとグラフ組合せ問題
グラフニューラルネットワークとグラフ組合せ問題
 
ナレッジグラフとオントロジー
ナレッジグラフとオントロジーナレッジグラフとオントロジー
ナレッジグラフとオントロジー
 

Similar to BERT分類ワークショップ.pptx

ユーザーストーリー:ファースト・ジェネレーション
ユーザーストーリー:ファースト・ジェネレーションユーザーストーリー:ファースト・ジェネレーション
ユーザーストーリー:ファースト・ジェネレーション
Masanori Kado
 
[CE94] 高等学校での「プログラミング」教育の導入– PEN を用いて (発表資料)
[CE94] 高等学校での「プログラミング」教育の導入– PEN を用いて (発表資料)[CE94] 高等学校での「プログラミング」教育の導入– PEN を用いて (発表資料)
[CE94] 高等学校での「プログラミング」教育の導入– PEN を用いて (発表資料)
Ryota Nakamura
 
マルチスレッド学習のミッシングリンク
マルチスレッド学習のミッシングリンクマルチスレッド学習のミッシングリンク
マルチスレッド学習のミッシングリンク
Satoshi KOBAYASHI
 

Similar to BERT分類ワークショップ.pptx (17)

20180830 implement dqn_platinum_data_meetup_vol1
20180830 implement dqn_platinum_data_meetup_vol120180830 implement dqn_platinum_data_meetup_vol1
20180830 implement dqn_platinum_data_meetup_vol1
 
Deep Learningと自然言語処理
Deep Learningと自然言語処理Deep Learningと自然言語処理
Deep Learningと自然言語処理
 
充足可能性問題のいろいろ
充足可能性問題のいろいろ充足可能性問題のいろいろ
充足可能性問題のいろいろ
 
ユーザーストーリー:ファースト・ジェネレーション
ユーザーストーリー:ファースト・ジェネレーションユーザーストーリー:ファースト・ジェネレーション
ユーザーストーリー:ファースト・ジェネレーション
 
SSII2018TS: 大規模深層学習
SSII2018TS: 大規模深層学習SSII2018TS: 大規模深層学習
SSII2018TS: 大規模深層学習
 
Acl2020 taguchi
Acl2020 taguchiAcl2020 taguchi
Acl2020 taguchi
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化
 
[CE94] 高等学校での「プログラミング」教育の導入– PEN を用いて (発表資料)
[CE94] 高等学校での「プログラミング」教育の導入– PEN を用いて (発表資料)[CE94] 高等学校での「プログラミング」教育の導入– PEN を用いて (発表資料)
[CE94] 高等学校での「プログラミング」教育の導入– PEN を用いて (発表資料)
 
第2回 メドレー読書会
第2回 メドレー読書会第2回 メドレー読書会
第2回 メドレー読書会
 
センパイ!このプログラムクラッシュするんですけど。。。
センパイ!このプログラムクラッシュするんですけど。。。センパイ!このプログラムクラッシュするんですけど。。。
センパイ!このプログラムクラッシュするんですけど。。。
 
Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識
 
単語・句の分散表現の学習
単語・句の分散表現の学習単語・句の分散表現の学習
単語・句の分散表現の学習
 
マルチスレッド学習のミッシングリンク
マルチスレッド学習のミッシングリンクマルチスレッド学習のミッシングリンク
マルチスレッド学習のミッシングリンク
 
201207 ssmjp
201207 ssmjp201207 ssmjp
201207 ssmjp
 
Tensor flow勉強会3
Tensor flow勉強会3Tensor flow勉強会3
Tensor flow勉強会3
 
[DL輪読会]Learning to Act by Predicting the Future
[DL輪読会]Learning to Act by Predicting the Future[DL輪読会]Learning to Act by Predicting the Future
[DL輪読会]Learning to Act by Predicting the Future
 
BERTに関して
BERTに関してBERTに関して
BERTに関して
 

BERT分類ワークショップ.pptx

Editor's Notes

  1. 理解できてなくてもデモ自体は動かせますよ。
  2. 次元数を追記する。実例。
  3. 理解できてなくてもデモ自体は動かせますよ。
  4. 理解できてなくてもデモ自体は動かせますよ。
  5. 理解できてなくてもデモ自体は動かせますよ。
  6. 理解できてなくてもデモ自体は動かせますよ。
  7. 理解できてなくてもデモ自体は動かせますよ。
  8. 理解できてなくてもデモ自体は動かせますよ。
  9. 理解できてなくてもデモ自体は動かせますよ。
  10. 理解できてなくてもデモ自体は動かせますよ。
  11. 理解できてなくてもデモ自体は動かせますよ。
  12. 理解できてなくてもデモ自体は動かせますよ。
  13. 理解できてなくてもデモ自体は動かせますよ。
  14. 理解できてなくてもデモ自体は動かせますよ。
  15. 理解できてなくてもデモ自体は動かせますよ。
  16. 理解できてなくてもデモ自体は動かせますよ。