深層学習/Deep Learning 基礎講座
第9回(20200625) 深層学習と自然言語処理
谷中 瞳
理化学研究所
http://hitomiyanaka.strikingly.com/
Twitter: @verypluming
1
自己紹介
●理化学研究所 革新知能統合研究センター
自然言語理解チーム(乾健太郎チームリーダー)
特別研究員
●研究キーワード:
自然言語処理、自然言語推論、文類似度計算
とくに自然言語処理と言語学の融合、
深層学習と記号推論の融合に興味
●経歴:
2018年9月 東京大学大学院工学系研究科システム創成学専攻 博士(工学)
2013年4月-
2015年12月
野村総合研究所にて特許検索システムの開発に従事
2013年3月 東京大学工学系研究科化学システム工学専攻 修士課程修了
2011年3月 早稲田大学先進理工学部応用化学科 卒業
2
今回の講義の目標
● 自然言語処理(Natural Language Processing, NLP)
の概観を理解する
● 深層学習によるNLPの基本を理解する
○ Word embedding
○ Encoder-Decoder
○ Attention
● 深層学習によるNLPの課題と最近の研究動向を理解する
3
自然言語処理をもっと学びたい人に:参考資料
Stanford大学の講義資料
Natural Language Processing with Deep Learning
動画・演習のソースコードも充実
http://web.stanford.edu/class/cs224n/
Speech and Language Processing
Dan Jurafsky and James H. Martin
https://web.stanford.edu/~jurafsky/slp3/
東工大岡崎先生の講義資料
https://chokkan.github.io/deeplearning/
最新の研究は、Twitterも情報源
(NLPerの多くはTwitterにいる:ハッシュタグは#NLProc)
4
自然言語処理をもっと学びたい人に:参考図書
1. 深層学習による自然言語処理
(機械学習プロフェッショナルシリーズ)
著・坪井祐太/海野裕也/鈴木潤
通称:出た本
本講義もかなり参考にしています
1. 自然言語処理 (放送大学教材)
著・黒橋禎夫
自然言語処理の基礎から網羅的に学べます
5
自然言語処理の概要
6
質問:自然言語処理というと、何を連想しますか?
7
質問:自然言語処理というと、何を連想しますか?
自然言語をコンピュータで処理するための技術:自然言語処理
身近な自然言語処理の例 ・AIアシスタント
・機械翻訳
・情報検索
8
自然言語の特性と自然言語処理のタスク
● 自然言語:様々な特性をもった可変長の記号列
○ 新しい語が膨大に生まれる(未知語)
例:がこおわー、オーバーシュート
○ 一定の規則がある(文法)
例:英語の文型はSVO、日本語の文型はSOV
○ 前後の単語・文によって意味が定まる(文脈)
例:「青い車」「あの新入社員はまだ青い」
9
自然言語の特性と自然言語処理のタスク
● 自然言語:様々な特性をもった可変長の記号列
○ 新しい語が膨大に生まれる(未知語)
例:がこおわー、オーバーシュート
○ 一定の規則がある(文法)
例:英語の文型はSVO、日本語の文型はSOV
○ 前後の単語・文によって意味が定まる(文脈)
例:「青い車」「あの新入社員はまだ青い」
● タスクという単位で自然言語を処理
○ 基礎タスク:言語を応用タスクで処理しやすい形式に変換する
固有表現抽出、単語分割、品詞タグ付け、構文解析、意味解析
○ 応用タスク:アプリケーションに関わる
機械翻訳、文書分類、質問応答、対話
10
自然言語の特性と自然言語処理のタスク
● 自然言語:様々な特性をもった可変長の記号列
○ 新しい語が膨大に生まれる(未知語)
例:がこおわー、オーバーシュート
○ 一定の規則がある(文法)
例:英語の文型はSVO、日本語の文型はSOV
○ 前後の単語・文によって意味が定まる(文脈)
例:「青い車」「あの新入社員はまだ青い」
● タスクという単位で自然言語を処理
○ 基礎タスク:言語を応用タスクで処理しやすい形式に変換する
固有表現抽出、単語分割、品詞タグ付け、構文解析、意味解析
○ 応用タスク:アプリケーションに関わる
機械翻訳、文書分類、質問応答、対話
● 特性・タスクに応じた前処理が結構大事(沼が深い)
11
● 以前の言語処理では、部分問題ごとにモデルを学習し解析
深層学習以前の言語処理と深層学習による言語処理
12
質問応答
意味解析
例.述語項構造解析
構文解析
例.係り受け解析
入力:質問文
出力:回答文の候補
品詞タグ付け
質問応答
訓練データ
意味解析
訓練データ
構文解析
訓練データ
品詞タグ
付け
訓練データ
学習
学習
学習
学習
以前
● 以前の言語処理では、部分問題ごとにモデルを学習し解析
● 深層学習では、部分問題を隠れ層での学習に置き換えることで、
応用タスク用の学習データからend-to-endで学習可能に
● タスクによっては従来の手法と同程度または上回る性能
● 反面、出力の解釈が難しいなどの問題がある(最後に説明)
深層学習以前の言語処理と深層学習による言語処理
13
質問応答
意味解析
例.述語項構造解析
構文解析
例.係り受け解析
入力:質問文
出力:回答文の候補
品詞タグ付け
質問応答
訓練データ
隠れ層
隠れ層
隠れ層
隠れ層
入力:質問文
出力:回答文の候補
意味解析
訓練データ
構文解析
訓練データ
品詞タグ
付け
訓練データ
学習
学習
学習
学習 学習
以前 深層学習
● 応用タスクの多く(機械翻訳、質問応答、対話など)は、
文を入力として文を出力(予測)する問題
深層学習による言語処理
14
応用タスク
訓練データ
隠れ層
隠れ層
隠れ層
隠れ層
入力:文
出力:文
学習
どうやって自然言語文を
ベクトルで表すか?
どうやって文をベクトルで表すか
ある単位で区切り、単位ごとにベクトルで表し、合成する
文字:未知語に有効。語彙サイズは減るが、系列長が長くなる
今 日 の 本 郷 三 丁 目 は 晴 れ て い る
サブワード:部分文字列で、文字よりもバランスが良い
今日 の 本郷 三 丁目 は 晴れ て い る
単語:意味を考慮した情報が得られる
今日 の 本郷三丁目 は 晴れ て いる
15
どうやって文をベクトルで表すか
ある単位で区切り、単位ごとにベクトルで表し、合成する
文字:未知語に有効。語彙サイズは減るが、系列長が長くなる
今 日 の 本 郷 三 丁 目 は 晴 れ て い る
サブワード:部分文字列で、文字よりもバランスが良い
今日 の 本郷 三 丁目 は 晴れ て い る
単語:意味を考慮した情報が得られる
今日 の 本郷三丁目 は 晴れ て いる
16
どうやって単語をベクトルで表すか?
深層学習による自然言語処理
(1)埋め込みによる単語の意味表現
17
分布仮説(distributional hypothesis)[Harris+, 1954]
単語の意味はその周囲の単語から形成されるという仮説
天気という単語は今日という単語と同時に出現しやすい(共起)
→単語の意味を周囲の単語との共起頻度で表現できそう
18
今日の天気は晴れである。
今日の1時間ごとの天気、気温、降水量を掲載します。
あなたが知りたい天気予報をお伝えします。
今日は天気が良いので布団を干した。
どうやって単語の意味を表すか(1)共起行列
単語の前後の語(文脈:context)との共起頻度を表した行列
前後1語の共起行列の例:
19
今日 は 晴れ て いる
今日 0 1 0 0 0
は 1 0 1 0 0
晴れ 0 1 0 1 0
て 0 0 1 0 1
いる 0 0 0 1 0
単語
文脈(前後1語に出現する単語)
文脈として扱う
前後の語の数を
ウインドウサイズ
という
「今日」を表す
単語ベクトルは
(0,1,0,0,0)
どうやって単語の意味を表すか(2)one-hotベクトル
文を単語分割し、各単語にID(次元)を振り、1-of-K表現でone-
hot(局所表現)ベクトルにする
今日 (1,0,0,0,0,0,0) 今日
(1,0,0,0,0,0,0)
は (0,1,0,0,0,0,0) は
(0,1,0,0,0,0,0)
晴れ (0,0,1,0,0,0,0) 休み
(0,0,0,0,0,1,0)
今日 は 晴れ て いる
1 2 3 4 5
今日 は 休み だ
1 2 6 7
20
単語
ID
単語の局所表現の問題点
一単語にone-hotベクトルを割りあてると、ベクトルの次元が巨大
かつスパース(ほとんどゼロ) になり、無駄な計算が多くなる
ニューラルネットワークとコーパス(大規模言語データ)を用い
単語埋め込みベクトル(分散表現:distributed representation)
を学習することで、one-hotベクトル化によるベクトル表現(数万
〜数十万次元)よりも低次元で密なベクトル(数十〜数百次元)
を獲得できる
21
単語の分散表現 (単語埋め込み: word embedding)
密なベクトル はone-hotベクトル に行列 をかけて得られる
- の次元は語彙数
の次元は埋め込みたい数(ハイパーパラメータ)
- は重みを表す埋め込み行列(embedding matrix)
- 行列 において単語ID番目の列を抽出すると単語埋め込みベ
クトルが得られる。つまり、 は単語IDをルックアップして
単語埋め込みベクトルに変換する行列ともいえる
22
分布仮説再掲
周囲の単語から、( )には「天気」が入りそうと推測できる
分布仮説を、周囲の単語が与えられたときにどんな単語が出現す
るかを推測する問題に帰着させた言語モデル:Word2Vec
23
今日の( )は晴れである。
1時間ごとの( )、気温、降水量を掲載します。
あなたが知りたい( )予報をお伝えします。
( )が悪いと外に出かける気にならない。
今日は( )が良いので布団を干した。
● 分布仮説に基づき、埋め込み行列 を学習する言語モデル
● 周辺の単語から中心の単語を予測する
CBOW (Continuous Bag of Words)モデル(左)と、
ある単語が与えられた時にその周辺の単語を予測する
Skip-Gramモデル(右)から構成される
Word2Vec [Micolov+,2013]
入力
V次元
隠れ層
N次元
出力
V次元
入力
V次元
隠れ層
N次元
出力
V次元
V×N
次元
N×V
次元
N×V
次元
V×N
次元
24
Skip-Gram
単語 からその周辺の語(文脈語) が予測される確率
について、次の目的関数を最大化する
:コーパスに出現する全語彙集合
次の損失関数が最小となるように誤差逆伝播法で学習し、
確率 をモデル化
今日 は 晴れ て いる
softmax関数
25
Skip-Gram
単語 からその周辺の語(文脈語) が予測される確率
について、次の目的関数を最大化する
:コーパスに出現する全語彙集合
negative sampling:全語彙について計算すると分母の計算量が
大きくなるため、文脈語では確率が高くなるように、文脈語以外
からランダムに選ばれた語彙(擬似負例)では確率が低くなるよ
うに学習する
今日 は 晴れ て いる
26
Word2Vecの問題点
分布仮説に起因する問題
・反義語は共起する単語が似てしまい、似たベクトルになる
合否の判定結果は( )だ
最終試験は( )だった 合格⇔不合格どちらも入り得る
志望校は( )圏内にある
・多義語は文脈に応じて語義曖昧性の解消を行う必要がある
青い車
あの新入社員はまだ青い
顔色が青い
同じ「青い」意味ベクトルではない
27
文脈を考慮した単語ベクトル:ELMo [Peters+2018]
大規模コーパス1B Word Benchmarkを用い、
文字レベルの双方向(left-to-right, right-to-left)2層LSTMで
前後の文脈を考慮した単語ベクトルの学習を実現
28
図は[Devlin+2019]から引用
単語埋め込みベクトルの性質:加法構成性
単語埋め込みベクトルは、低次元で計算効率が上がるだけでなく
ベクトルの足し算・引き算で語の意味の足し算・引き算が
できるという加法構成性の性質があることが知られている
有名な例:
vec(king) - vec(man) + vec(woman) = vec(queen)
単語埋め込みベクトルをうまく合成して文の意味を表現できる?
→Encoder-Decoderモデル
29
深層学習による自然言語処理
(2)系列変換による文の意味表現
30
機械翻訳
ある言語の文を、別の言語の文に変換する系列変換タスク
31
今日 は 晴れ 。
It is sunny today .
日本語
英語
系列から別の系列に変換する確率をモデル化したもの
系列変換(sequence-to-sequence)モデルとも呼ばれる
EncoderとDecoderから構成される
Encoder: 系列(単語列)Xを固定長ベクトルZに変換するモデル
Decoder: 固定長ベクトルZから系列Yを出力するモデル
Encoder-Decoderモデル
Encoder
Decoder
今日 は 晴れ <BOS> It is today
It is sunny today <EOS>
32
X
sunny
Z
Y
<BOS>は文頭、<EOS>は文末を表す
h2
Encoderモデル
1. 符号化器埋め込み層(encoder embedding layer)
入力文中のi番目の単語のone-hotベクトルを埋め込みベクトル
xiに変換(前述の単語埋め込みと同じ処理)
2. 符号化器再帰層(encoder recurrent layer)
i番目の埋め込みベクトルxiを隠れ状態ベクトルhiに変換
33
今日 は 晴れ
i = 1 2
X
3
encoder embedding layer
encoder recurrent layer
h1 h3
Encoderモデル
1. 符号化器埋め込み層(encoder embedding layer)
入力文中のi番目の単語のone-hotベクトルを埋め込みベクトル
xiに変換(前述の単語埋め込みと同じ処理)
34
今日 は 晴れ
X
i = 1 2 3
encoder embedding layer
h2
Encoderモデル
1. 符号化器埋め込み層(encoder embedding layer)
入力文中のi番目の単語のone-hotベクトルを埋め込みベクトル
xiに変換(前述の単語埋め込みと同じ処理)
2. 符号化器再帰層(encoder recurrent layer)
i番目の埋め込みベクトルxiを隠れ状態ベクトルhiに変換
35
今日 は 晴れ
i = 1 2
X
3
encoder embedding layer
encoder recurrent layer
h1 h3
h2
Encoderモデル
1. 符号化器埋め込み層(encoder embedding layer)
入力文中のi番目の単語のone-hotベクトルを埋め込みベクトル
xiに変換(前述の単語埋め込みと同じ処理)
2. 符号化器再帰層(encoder recurrent layer)
i番目の埋め込みベクトルxiを隠れ状態ベクトルhiに変換
36
今日 は 晴れ
i = 1 2
X
3
encoder embedding layer
encoder recurrent layer
h1 h3
・関数の種類はLSTM, GRU, CNN何でも良い
・単方向・双方向や層数などのモデル構成も変更できる
Decoderモデル
1. 復号化器埋め込み層 (decoder embedding layer)
復号化器出力層のj-1番目の出力を埋め込みベクトルyjに変換
2. 復号化器再帰層(decoder recurrent layer)
埋め込みベクトルyjを隠れ状態ベクトルhjに変換
3. 復号化器出力層(decoder output layer)
隠れ状態ベクトルhjからj番目の単語の生成確率を計算
37
<BOS> It is today
It is sunny today <EOS>
sunny
Y
decoder embedding layer
decoder recurrent layer
decoder output layer
j = 1 2 4 5
h1 h2 h3 h4
3
Decoderモデル
1. 復号化器埋め込み層 (decoder embedding layer)
復号化器出力層のj-1番目の出力を埋め込みベクトルyjに変換
位置jの処理に位置j-1の処理結果(自身の一つ前の出力単語)
を考慮して変換する構造になっていることに注意
38
<BOS> It is today
is sunny today <EOS>
sunny
Y
decoder embedding layer
j = 1 2 3 4 5
It
Decoderモデル
1. 復号化器埋め込み層 (decoder embedding layer)
復号化器出力層のj-1番目の出力を埋め込みベクトルyjに変換
2. 復号化器再帰層(decoder recurrent layer)
埋め込みベクトルyjを隠れ状態ベクトルhjに変換
ニューラルネットの種類はLSTM, GRU, CNN何でも良い
39
<BOS> It is today
It is sunny today <EOS>
sunny
Y
decoder embedding layer
decoder recurrent layer
j = 1 2 4 5
h1 h2 h3 h4
3
Decoderモデル
1. 復号化器埋め込み層 (decoder embedding layer)
復号化器出力層のj-1番目の出力を埋め込みベクトルyjに変換
2. 復号化器再帰層(decoder recurrent layer)
埋め込みベクトルyjを隠れ状態ベクトルhjに変換
40
<BOS> It is today
It is sunny today <EOS>
sunny
Y
decoder embedding layer
decoder recurrent layer
j = 1 2 4 5
h1 h2 h3 h4
3
h0
h0はEncoderの符号化器再帰層の最後の位置の隠れ状態ベクトルZ
Decoderモデル
1. 復号化器埋め込み層 (decoder embedding layer)
復号化器出力層のj-1番目の出力を埋め込みベクトルyjに変換
2. 復号化器再帰層(decoder recurrent layer)
埋め込みベクトルyjを隠れ状態ベクトルhjに変換
3. 復号化器出力層(decoder output layer)
隠れ状態ベクトルhjからj番目の単語の生成確率を計算
41
<BOS> It is today
It is sunny today <EOS>
sunny
Y
decoder embedding layer
decoder recurrent layer
decoder output layer
j = 1 2 4 5
h1 h2 h3 h4
3
RNNs, CNNによる文の意味表現
RNNs (Recurrent Neural Networks)
Pros:
・系列の情報を捉えられる
Cons:
・並列化が難しい
CNN (Convolutional Neural Network)
Pros:
・局所的な位置情報を捉えられる
・並列化しやすく高速
Cons:
・大局的な位置情報が失われる
42
RNNs, CNNによる文の意味表現
RNNs (Recurrent Neural Networks)
Pros:
・系列の情報を捉えられる
Cons:
・並列化が難しい
CNN (Convolutional Neural Network)
Pros:
・局所的な位置情報を捉えられる
・並列化しやすく高速
Cons:
・大局的な位置情報が失われる
43RNNs, CNNの両方の良い点を採用できないか?→Attention
系列中の重要な情報(文中のある単語の意味を理解するために、
文中の単語のどれに注目すれば良いか)を直接的に用いる仕組み
・RNNsの系列の情報を捉える利点
・CNNの並列化しやすいという利点
を兼ね備えている
Attention mechanism(注意機構)
44
各位置のEncoderの隠れ層のベクトルと、位置jのDecoderの隠れ
層のベクトル間の類似度を計算
AttentionつきEncoder-Decoderモデル
Decoder今日 は 晴れ
<BOS> It is today
It is sunny today <EOS>
45
sunny
softmax
関数の形
Encoder
各位置のEncoderの隠れ層のベクトルと、位置jのDecoderの隠れ
層のベクトル間の類似度を計算
この類似度からEncoderの隠れ層のベクトルの加重平均を求める
(位置jでの変換に必要な文脈情報を抽出:Soft attention)
AttentionつきEncoder-Decoderモデル
Decoder今日 は 晴れ
<BOS> It is today
It is sunny today <EOS>
46
sunny
Encoder
各位置のEncoderの隠れ層のベクトルと、位置jのDecoderの隠れ
層のベクトル間の類似度を計算
この類似度からEncoderの隠れ層のベクトルの加重平均を求め、
最終的な位置jのDecoderの隠れ層のベクトルを計算
AttentionつきEncoder-Decoderモデル
Decoder今日 は 晴れ
<BOS> It is today
It is sunny today <EOS>
47
sunny
Encoder
Attentionを用いた代表的なモデル:Transformer
[Vaswani+ 2017]
48
Encoder
● RNNやCNNを用いず、
Attentionのみを使用したEncoder-
Decoderモデル
● N=6層のEncoderとDecoder
● Attentionは3箇所
○ Encoder-Decoder Attention
○ Encoder Self-Attention
○ Decoder Masked Self-Attention
Decoder
Query, Key, Valueを用いたAttentionの説明
AttentionはDecoderの隠れ層であるQueryによって、Encoderの
隠れ層であるmemory(KeyとValueのペア)から重要な情報を取
り出す機構とみなすことができ、次のように表せる
QueryとKeyの関連度をsoftmaxで正規化してAttention weightを
計算し、Keyの位置に対応したValueを加重和として取り出す
49
Key Value
( )
Attention Weight
Query
σ
Transformerで使われているAttention
Source-Target-Attention
Decode時にEncoderの隠れ層の情報を参照
Self-Attention (Encoder/Decoderどちらにも使える)
自分自身(Self)の下の隠れ層の全ての位置を参照
50
Key Value
( )
Query
σ
Key Value
( )
Query
σ
Decoder Encoder
SelfSelf
単語間の距離によらず
依存関係を学習
Multi-head Attention
各単語に対し1組のQuery, Key, Valueを割り当てるのではなく、
複数のheadという単位に分けてQuery, Key, Valueの組を用意
各headで潜在表現を計算し、最終的にheadの潜在表現を並列に
結合することで、様々な側面からみた各単語の潜在表現を得る
51
深層学習による自然言語処理
(3)汎用言語モデル
52
GPT (Generative Pre-trained Transformer)
[Radford+2018]
元祖・Transformerによる事前学習に基づく汎用言語モデル
12層片方向(left-to-right)Transformerの自己回帰言語モデル
:逆方向の情報を利用できていないのが難点
53図は[Devlin+2019]から引用
BERT (Bidirectional Encoder Representations
from Transformers)[Devlin+ 2019]
24層の双方向Transformerをベースとした、
1. 大規模コーパスによる事前学習
2. タスクに応じたファインチューニング
によって様々なタスク・言語に応用できる汎用言語モデル
54
[CLS] 今日 の [MASK] は 雨 だ [SEP] 傘 を 持っ て [SEP]
BERTの事前学習
2つの事前学習タスクによって双方向Transformerの学習を実現
1. Masked Language Model
入力データの一部を[MASK]でマスキングし、前後の単語ではなく
マスキングされた単語を予測するタスクで双方向の情報を考慮
2. Next Sentence Prediction
文のペア(A, B)が入力として与えられた時、文Bが文Aの次に続く
か否かを予測する
55
…
文B文A
is_next 天気
1年以内に…BERTの改良モデルが続々と登場
56
https://github.com/thunlp/PLMpapers より引用
1年以内に…BERTの改良モデルが続々と登場
● XLNet[Zhilin+2019]
マスキングに用いられる特殊記号[MASK]はfine-tuning時には
出現しないためバイアスとなる問題に対して、
単語の並び替え(Permutation Language Model)を採用
● RoBERTa[Yinhan+2019]
マスキングの位置を動的に変えることで効率的な学習を実現
● ALBERT[Lan+2019]
BERTで使われているパラメータ数を減らし軽量化
● T5[Raffel+2019]
Text-to-Text Transfer Transformerの略。
分類・翻訳・質問応答などの全タスクで入力と出力をテキスト
フォーマットに統一し転移学習することで、高精度を実現
57
汎用言語モデルの評価ベンチマーク
General Language Understanding Evaluation Benchmark
(GLUE)[Wang+2019] https://gluebenchmark.com/
・文単位の理解(文法性評価、感情分析)
・文間の理解(質問応答、類似度、言い換え、推論、照応)
を問う9種類のデータセットを組み合わせている
SuperGLUE[Wang+2020] https://super.gluebenchmark.com/
・GLUEの後続。共参照などGLUEよりもハードなタスクを追加
58
GLUE Leaderboardの現状(2020/05/27時点)
人間超え…?
ALBERT+α: 90.6
T5: 90.3
RoBERTa: 88.1
人間:87.1
BERTは80.5 59
汎用言語モデルの実装:transformersの利用
huggingfaceが提供するpytorchフレームワークtransformers
https://github.com/huggingface/transformers
で、簡単にBERTなどの汎用言語モデルを動かせる
例えば、BERTを用いた日本語単語分割も、数行で書けてしまう!
60
from transformers import BertJapaneseTokenizer
tokenizer = BertJapaneseTokenizer.from_pretrained('bert-
base-japanese-whole-word-masking')
tokenizer.tokenize('今日は晴れている')
#['今日', 'は', '晴れ', 'て', 'いる']
汎用言語モデルの課題:
言語の意味を真に理解しているか?
自然言語推論 (Natural Language Inference) a.k.a.
含意関係認識(Recognizing Textual Entailment)[Dagan,2013]
前提文が仮説文の意味を含むか否かを自動判定するタスク
61
前提文: 今年はある日本人がノーベル文学賞を受賞した
仮説文: 今年はある日本人がノーベル賞を受賞した 含意
前提文: 今年はある日本人がノーベル文学賞を受賞した
仮説文: 日本人は誰もノーベル賞を受賞しなかった 矛盾
前提文: 今年はある日本人がノーベル文学賞を受賞した
仮説文: 去年はある日本人がノーベル文学賞を受賞した 非含意 (中立)
汎用言語モデルの課題:
言語の意味を真に理解しているか?
62
大規模データMultiNLI[Williams+2018]でfinetuningしたBERTの正答率
・MultiNLIテストデータ
・様々な推論現象に特化したテストデータ
- MED[Yanaka+2019]
- Logic Fragments[Richardson+2020]
特定の推論は全く解けていない
MEDに含まれる、BERTが解けない推論の例(downward monotone)
前提文: 今年は日本人は誰もノーベル賞を受賞しなかった
仮説文: 今年は日本人は誰もノーベル文学賞を受賞しなかった 含意
汎用言語モデルの課題:
言語の意味を真に理解しているか?
63
大規模データMultiNLI[Williams+2018]でfinetuningしたBERTの正答率
・MultiNLIテストデータ
・様々な推論現象に特化したテストデータ
- MED[Yanaka+2019]
- Logic Fragments[Richardson+2020]
特定の推論は全く解けていない
大規模データセットの問題:
・簡単な問題が多い
・クラウドワーカーの作業バイアス
ニューラル言語モデルの問題:
・否定・数量などの離散的な意味を埋め込むことが難しい
・入力から出力までの過程がブラックボックス化されており、
なぜ解ける/解けないのかがわからない
汎用言語モデルの分析:プロービング(probing)
汎用言語モデルが言語を真に理解しているかを分析するための
様々なデータセットや手法が研究されている
subject-verb agreement[Linzen+2016][Gulordava+2018]
主語と動詞の数の一致を正しく予測できるかで言語モデルが文法
性を獲得しているか評価
● The keys are/*is ...
● The keys to the cabinet are/*is ...
64
文法構造を捉えていないと、
直前のcabinetに対応する動詞
を予測してしまう
判断の根拠を生成可能なDNNに向けて(1)データ
● e-SNLI[Camburu+,2018]
自然言語推論の判断根拠をアノテーションしたデータセット
● e-SNLI-VE[Xie+2019][Do+2020]
e-SNLIのマルチモーダル版。画像ーテキスト間の含意関係と
判断根拠がアノテーションされている
65
判断の根拠を生成可能なDNNに向けて(2)モデル
WT5[Narang+,2020]
Text-to-Textの汎用言語モデルT5を応用したモデル
タスクの種類と問題のテキストを入力として、
問題の答えと根拠を予測
66
記号推論が可能なDNNに向けて(1)データ
DROP[Dua+,2019]:数値演算・ソート・比較などの記号推論を
問う文書読解データセット
67
記号推論が可能なDNNに向けて(2)モデル
Neural Symbolic Reader[Chen+,2020]
Neural Module Networks[Gupta+,2020][Andreas+,2016]
質問文から回答を算出するためのプログラムに変換することで、
数値演算を実現
68
おわりに:
自然言語処理に限らず?深層学習の今後の課題
・汎用言語モデルの登場により自然言語処理の研究がさらに加速
・一方で、次のような様々な未解決課題が山積
1. 入力から出力までの過程を解釈できる、説明できるモデル
解釈性(interpretability)
説明性(explainability)
信頼できるAI(trastworthy AI)
2. 否定や数量といった離散的な意味を表現し、推論できるモデル
記号推論(symbolic reasoning)
3. マルチモーダル(画像・音声)情報を統合したモデル
69

東京大学2020年度深層学習(Deep learning基礎講座) 第9回「深層学習と自然言語処理」

Editor's Notes

  • #3 他分野を大きく変えた経歴なので、そういうキャリアの質問も受け付けます。
  • #8 まず伺いたいのですが、みなさん自然言語処理というと何を連想しますか。あるいはどういうことが自然言語処理で実現できると期待していますか。中にはもう何か自然言語処理のコードを実装している人というのも結構いらっしゃるのかもしれません。なんでもいいので自然言語処理に対して思うことについてキーワードをQ&Aに回答してみてください。いくつか紹介したいと思います。 どういうことが実現できると期待するか聞いておきたい(3分くらい)
  • #9 華々しいがさまざまな前処理
  • #10 言語は記号でもありますが、それを処理するためには言語のいろんな性質を考慮する必要があります。 タスクという単位で解く(処理する) 固有表現:単語に分割するための前処理ドナルド・トランプなら固有名詞として1語にしたいなど 固有表現抽出(named entity extraction) 人名・地名・日付などを抽出する処理 単語分割(word segmentation) 日本語など単語に分けられていないテキストを単語列に分割する処理 品詞タグ付け(part-of-speech tagging) 単語に名詞・動詞などの文法的な役割分類(品詞) を付与する処理 構文解析(syntactic parsing) 文法に基づく文の木構造を構築する処理 述語項構造認識(predicate-argument recognition) 述語を中心とした意味構造を抽出する処理
  • #11 言語は記号でもありますが、それを処理するためには言語のいろんな性質を考慮する必要があります。 タスクという単位で解く(処理する) 固有表現:単語に分割するための前処理ドナルド・トランプなら固有名詞として1語にしたいなど 固有表現抽出(named entity extraction) 人名・地名・日付などを抽出する処理 単語分割(word segmentation) 日本語など単語に分けられていないテキストを単語列に分割する処理 品詞タグ付け(part-of-speech tagging) 単語に名詞・動詞などの文法的な役割分類(品詞) を付与する処理 構文解析(syntactic parsing) 文法に基づく文の木構造を構築する処理 述語項構造認識(predicate-argument recognition) 述語を中心とした意味構造を抽出する処理
  • #12 言語は記号でもありますが、それを処理するためには言語のいろんな性質を考慮する必要があります。 タスクという単位で解く(処理する) 固有表現:単語に分割するための前処理ドナルド・トランプなら固有名詞として1語にしたいなど 固有表現抽出(named entity extraction) 人名・地名・日付などを抽出する処理 単語分割(word segmentation) 日本語など単語に分けられていないテキストを単語列に分割する処理 品詞タグ付け(part-of-speech tagging) 単語に名詞・動詞などの文法的な役割分類(品詞) を付与する処理 構文解析(syntactic parsing) 文法に基づく文の木構造を構築する処理 述語項構造認識(predicate-argument recognition) 述語を中心とした意味構造を抽出する処理
  • #13 従来の言語処理では、品詞タグ付け、構文解析、意味解析、質問応答と部分問題ごとにモデルを用意して解析していました。ただこのパイプラインは各部分問題でエラーが蓄積する問題があり、そもそもタスクによっては部分問題に分解するのも大変でした。(動画から説明文を生成するマルチモーダルタスクでは連続表現と離散表現をどう組み合わせるか自明でないなど) 係り受け解析が単語同士の文法構造上の主従関係を解析するのに対して 述語項構造は出来事や状態を表現する単語:述語を中心として各単語の文章中の意味的な役割関係を表す 質問文の意味を解析してデータベースで検索して回答の候補を出すような感じ
  • #14 各タスクにわけなくていいという利点に加え、それよりも精度がいいケースもある
  • #16 どうやって文をベクトルで表すか、いろいろなやり方が考えられますが、ベーシックな方法は文をある単位で区切り、… 単位としては文字、サブワード、単語の3種類があります。 ベーシックなのは単語:これも日本語だと奥が深い…。 文字もベーシック。未知語に強い。だけど系列長が長くなり学習が大変 そこでいまホットなのはサブワード
  • #17 では代表的な単位として単語をどうやってベクトルで表すか考えていきたいと思います。
  • #19 単語の意味をどうやってベクトルで表現するかを説明するにあたって、まず分布仮説について説明します。 この仮説は、意味が近い単語はその周辺の語も似ているという仮説です。
  • #20 まず共起行列を作って単語のベクトルを導出する方法があります。 Bag-of-wordsともよばれるやつです。 文中のある単語の前後の語を文脈といいます。 文脈として考慮する前後の語の数をウインドウサイズといいモデル構築の際に指定することが多いです。ここでは前後1語をウインドウサイズとしてきょうき行列を作ってみます。
  • #21 別の方法としてone-hotベクトルで表す方法をみてみましょう。これはニューラルネットの入力の単語ベクトルを用意する方法として一番基本的な方法でもあります。
  • #22 単純に一単語に1IDを割り当てる方法では、ベクトルの次元数はコーパスの語彙数に相当することになり、コーパス全体における各単語の出現頻度は少ないのでスパースなベクトルになってしまう 埋め込みベクトルを学習することで、低次元で密なベクトルを獲得できる
  • #23 xは語彙数でたくさん、これに行列Wをかければhに圧縮できる 重みを表す埋め込み行列Wをニューラルで学習することになる hの次元は埋め込みたい数でだいたい200ー300を指定することが多い 埋め込み行列Wは先ほどのきょうきぎょうれつと同様、単語ベクトルのIDをクエリとしてルックアップし単語ベクトルを得るための行列とみることもできる。
  • #24 分布仮説に基づく代表的な言語モデルとしてWord2Vecを紹介します。
  • #25 入力層から隠れそうへの重み行列Wを学習します。 CBOWとSkip-Gramモデルがあります。 さきほどあったようにWは単語のIDを指定するとその単語のベクトルを取り出す変換行列とみることができます。V次元の単語ベクトルを入力として、これを横に並べるとVかけるN次元の埋め込み行列Wができます。隠れ層の密なベクトルhはWかける単語ベクトルで得られてN次元となります。これに単語ベクトルを転置したものをすべて並べたNかけるV次元の行列W’をかけるとまたV次元に戻り、出力の単語ベクトルとなります。
  • #26 ここではskip-gramの具体的なモデル化の方法をみていきます。skip-gramはある単語から周辺の語を予測するためのモデルですが、 ウインドウサイズjとして、ある時刻tの単語wtから周辺の語wt+jが予測される条件付き確率p(…)はこの式のようにsoftmax関数で定義できます。この目的関数を最大化することを考えます。 それにはこの損失関数が最小となるように誤差逆でんぱ法でモデルを学習することで確率をモデル化できます。 vは入力ベクトル、v’は出力ベクトル
  • #27 ここで、すべての語彙について学習を行うと分母の計算量が多くなります。 学習のイテレーション毎に計算しなおさなければなりませんので、なかなか学習が終わりません。そのため、高速化の手法としてnegative samplingという手法があります。これは文脈語以外の語彙からランダムに擬似負例をピックアップし、それらについて確率が低くなるように学習を行う手法です。
  • #28 というなかなか賢く単語の意味を学習するモデルですが、結局word2vecも単語の出現頻度や共起に基づいているので、分布仮説に起因する問題点があります。 よく言われるのは反義語も共起する単語としては似てしまうので、まったく反対の意味なのにベクトルとしては同じような表現になる点です。 たとえばつぎのかっこには合格・不合格も入り得るので、これらの文が含まれるテキストコーパスから学習した合格ベクトル・不合格ベクトルは似たようなベクトルになってしまいます。 また、多義語は前後の文脈を考慮しないと一意に定まらないという問題があります。
  • #29 これに対して、文脈を考慮した単語ベクトルとして代表的なものにELMoがあります。 これは双方向LSTM(Bidirectional LSTM)を用いて大量のコーパスを学習することで,同じ単語でも文脈によって異なる埋め込み表現を獲得することができる手法で、2018年のNAACLという自然言語処理のトップ会議でBest paper awardを受賞した手法です。トップ会議とかにも論文をだしてみたいという人がいるのかもしれないですがELMoは2018年のBestのモデルだったということですね。。
  • #30 では、単語埋め込みベクトルのまとめとして加法構成性という特性を紹介します。 有名な例ですが、… とすると、単語ベクトルをうまく合成すればフレーズや文の意味を表現できるのではないかということで、その手法の一つとしてencoder decoderモデルについて次は見ていきたいと思います。 質問は最後にまとめて回答しようと思いますが何かあればQ&Aでお願いします。 26分
  • #32 Encoder decoderの説明をするにあたり、機械翻訳という自然言語処理のタスクを紹介します。これは文を単語の系列とみなして、ある言語の文を別の言語の文に変換する系列変換タスクとして捉えることができます。 自然言語は最初にのべた通り可変長の記号の系列なので、これをどうやって有限次元のベクトルに埋め込むか、がEncoder decoderモデルのポイントとなります。
  • #33 系列から別の系列に変換する確率をモデル化したものがEncoder-decoderモデルです。 今日は晴れという単語列Xを固定長のベクトルZに変換するEncoderモデルと固定長のベクトルZからIt is sunny todayという系列Yを出力するDecoderモデルから構成されます。 ここで<BOS>はbeginning of sentenceの略で文頭, <EOS>はending of sentenceと文末を表す記号で、よく実装で使う記号なので覚えておいてください。 ここでのポイントはEncoderの最後の位置の隠れ状態ベクトルをDecoderの初期状態の隠れ状態ベクトルhとして利用するところです。
  • #34 Encoderモデルはベーシックにはこのふたつの層からなります。
  • #35 Encoderモデルではまず、入力文中の単語のone-hotベクトルを埋め込みベクトルに変換します。 これは前にご説明した単語埋め込みと同じ処理になります。
  • #36 次に、i番目の埋め込みベクトルxiを再帰層で隠れ状態ベクトルhiに変換します。
  • #37 ここで関数の種類はLSTMでもGRUでもCNNでもなんでも大丈夫です。また、この例では左から右への方向しか見ていませんが、前後の文脈を考慮するために双方向にすることやネット数もいろいろな組み合わせが考えられます。このいろいろな組み合わせを試すのも実際のNLPの研究では大変であり面白いところでもあります。。
  • #38 Decoderモデルの基本的なネットワークはこの3層からなります。
  • #39 Decoderモデルでもまずは各単語の埋め込みを行います。このとき復号化器出力層の一つ前の出力を埋め込みベクトルに変換します。ここでのポイントは一つ前の出力単語を考慮して変換する構造になっていることに注意してください。
  • #40 復号化器再帰層について説明します。これはEncoderの再帰層と同様に、埋め込みベクトルを隠れ状態ベクトルに変換します。 ここでも関数はなんでもよく工夫のしどころでもあります。
  • #41 また、ここでのポイントはEncoderの符号化器再帰層の最後の位置の隠れ状態ベクトルつまり固定長ベクトルZを復号化器再帰層の初期状態の隠れ状態ベクトルh0として利用するところです。
  • #42 最後に復号化器出力層です。j番目の隠れ状態ベクトルからj番目の単語の生成確率を計算します。
  • #43 主な関数のアーキテクチャとしてはRNNとCNNがありますが、それぞれ利点と欠点があります。 よく特にNLPではRNNやLSTMが用いられますが、系列情報に強い一方で、並列化が難しいという欠点があります。 一方画像処理ではCNNが用いられますが、並列化できるものの、文全体の情報が失われるという欠点があります。
  • #44 そこで、RNNとCNNの両方の良い点を組み合わせた技術にAttentionがあり、今はAttentionを使ったモデルが活発に提案されています。Attentionについて説明していきます。
  • #46 AttentionつきEncoder-decoderモデルの紹介をします。 Attentionでは、文中の各位置、または時刻というときもありますが、Encoderの隠れ層のベクトルhiとある位置のDecoderの隠れ層のベクトルhj間で類似度スコアを計算し、位置jではどの入力単語に注視するかというスコアajを計算します。そのスコアはsoftmax関数で表すことができます。 https://qiita.com/ymym3412/items/c84e6254de89c9952c55
  • #47 この類似度をつかってEncoderの隠れそうのベクトルの重みの平均、加重平均を求めます。これがDecoderの各位置jの隠れベクトルへの変換に必要な文脈情報をSoft attentionとして抽出する処理となります。
  • #48 そしてこのSoft アテンションcjとj番目のDecoderの隠れそうhjを結合して変換することで、最終的なj番目のDecoderの隠れそうのベクトルを計算します。
  • #49 Attentionを用いた代表的なモデルとしては、現在活発に研究されているTransformerというモデルがあります。これはAttention is all you needという論文のタイトルの通り、RNNやCNNを用いずAttentionのみを用いたEncoder-decoderモデルになっています。 Encoder, Decoderはそれぞれ6層あり、〜という3種類のAttentionを使用しています。順に説明します。 positional encoding: 一番最初にこのモデルに単語の分散表現を入力するときに単語位置に一意の値を各分散表現に加算する masked decoder: 予測すべきターゲット単語の情報が予測前のデコーダにリークしないように自己注意にマスクをかけている
  • #50 TransformerではEncoderの隠れ層をmemory、Decoderの隠れ層を、Encoderから関連する情報を取り出すための検索クエリqueryとしてとらえAttentionを説明します。 さらにmemoryはKeyとValueという形で考えることができ、AttentionはQueryとKeyとの関連度を内積で計算し、それをsoftmaxで正規化し、関連度の高いKeyの位置に対応したValueを加重和として取り出す処理と考えることができます。 一般的な Memoryをkeyとvalueに分けることでkeyとvalueの関係が自明でなくてもkeyからvalueを取り出すことができ、高い表現力を得られる。非自明な関係をkeyとvalueで切り離すことで考えなくて良くなった。 注意の重みは内積注意を取りあげているが、隠れ層のフィードフォワードで求める加法注意でもよい。でも一般に内積のほうが高速
  • #51 さきほど紹介したsoft attentionも含めTransformer以前のattentionはsource-target-attentionと言われmemoryまたはsourceがEncoder,queryまたはtargetがDecoderに相当し、Decode時にEncoderの隠れそうの情報を参照するものでした。 Transformerではself-attention、自己注意というのを採用しており、これはEncoderもDecoderにも使えるもので、queryもmemoryも自分自身selfの下の隠れ層のすべての位置を参照しています。これによってCNNと異なり全部の位置を考慮して重みを学習できます。
  • #52 また、transformerではmulti-head attentionというのが使われています。 これは言語には表層・統語・意味様々な特性を持っているので、各単語に1組のquery, key, valueを割り当てるのではなく複数のheadという単位にわけて用意します。これによって様々な側面からみた各単語の潜在表現を得ることができます。 質問は最後にまとめて回答しようと思いますが何かあればQ&Aでお願いします。 すらすらいえて46分
  • #53 ここからは最近の研究の紹介ということで主にTransformerをベースにした汎用言語モデルについて説明します。
  • #54 まず汎用言語モデルとは、大規模データの事前学習に基づき複数のタスクに応用できる言語モデルの総称を指します。Transformerに基づく元祖汎用言語モデルはOpenAIが開発したGPTです。最近は1750億のパラメータで構築した巨大な言語モデルGPT−3というのが話題になってますが、これは片方向のtransformerに基づくモデルで、逆方向の情報を利用できていないのが難点でした。
  • #55 そこで出てきたのがBERTです、モデル名のフルネームを知っておくとだいたいのことがわかりますが、BERTのBはbidirectionalからきていて、双方向transformerであることがポイントです。
  • #63 probing、もうちょっと他の最新の話も入れたほうがいいか
  • #64 具体例をいれるか?
  • #70 この辺西田さんスライドなども参考に