メルボルン大学で COMP90042(NLP)を受講したときの学習ノートです。本稿では、テキストの前処理、BPE、N-gram と平滑化、テキスト分類、品詞タグ付け、HMM、Viterbi を扱います。
用語
定義
Word:単語
意味や文法上の機能を持つ文字の並び(a sequence of characters with a meaning and/or function)
Sentence:文
単語を文法規則に従って組み合わせ、一つのまとまった意味を表す単位。句読点や構造上の境界で終わる
Document:文書
ニュース記事やメールなど、複数の文からなる連続したテキストの単位
Corpus:コーパス
学習や評価のために一定の規模で収集したテキストの集合(単数形は corpus、複数形は corpora)
Word token:単語トークン(延べ語)
テキスト内の単語の一つひとつの出現を数えたもの。"to be or not to be" には 6 トークンある
Word type:単語タイプ(異なり語)
重複を除いた異なる単語。"to be or not to be" には 4 タイプある
Lexicon:語彙辞書
ある言語や分野に属する全単語タイプと、その語彙項目の情報の集合
“覚えておくこと:トークン数 ≥ タイプ数。コーパスの規模は、一般に \vert V\vert(語彙サイズ)と総トークン数で表す。
覚えておくこと:トークン数 ≥ タイプ数。コーパスの規模は、一般に \vert V\vert(語彙サイズ)と総トークン数で表す。
\vert V\vert
“Language is compositional. 人間は文書を構成要素に分けて理解できる。コンピュータに言語を理解させるにも、同様の分解が必要になる。
Language is compositional. 人間は文書を構成要素に分けて理解できる。コンピュータに言語を理解させるにも、同様の分解が必要になる。
前処理は、生の文字列をタスクに適した表現へ段階的に変換する。以下は従来型のテキスト処理の模式的な流れ。
"<p> Hi there. I'm TARS. </p>" → 書式の除去 "Hi there. I'm TARS." → 文分割 ["Hi there.", "I'm TARS."] → 単語分割 [["Hi","there","."], ["I","'m","TARS","."]] → 正規化 [["hi","there","."], ["i","be","tars","."]] → ストップワード除去 [["hi","tars","."]] (例)
どの処理を使うかはタスクに応じて選ぶ。すべてのモデルで全手順を実行するわけではない。言語モデルでは通常、句読点、語形、機能語を残す必要がある。現代の事前学習済みモデルでも、学習時と同じトークナイザを使うべきである。
“図 1-1 テキスト前処理の 5 段階のパイプラインと、各段階での同じ文の形。
図 1-1 テキスト前処理の 5 段階のパイプラインと、各段階での同じ文の形。
手順
英語名
目的
1
Remove unwanted formatting
HTML/XML タグ、Markdown 記法、余分な空白、エスケープ文字を取り除く
2
Sentence segmentation:文分割
文書を文に分割する
3
Word tokenisation:単語分割
文をトークンに分割する。BPE などのサブワード方式も含む
4
Word normalisation:単語の正規化
大文字・小文字、綴り、語形を統一する(見出し語化/ステミング)
5
Stopword removal:ストップワード除去
高頻度で情報量の少ない機能語を除く
単純なものから順に 4 つの方法がある。
中国語の MaxMatch(最大一致法)
考え方:辞書を与え、左または右から貪欲に辞書中の最長一致文字列を単語として取り出す。
例:
辞書:{去买新, 西兰花, 西兰花新} 入力文:去买新西兰花 前向き最大一致法(FMM、左から右へ、最長一致を優先): 位置 0:"去买新" を試す(長さ 3、辞書にある)→「去买新」を取り出す 位置 3:"西兰花" を試す(長さ 3、辞書にある)→「西兰花」を取り出す 結果:去买新 / 西兰花
要点と限界:
目的:
方法:
Removing Morphology:2 種類の形態変化の違い
種類
Inflectional Morphology(屈折)
Derivational Morphology(派生)
意味
同じ単語の異なる文法形態
既存の単語から新しい単語を作る
例
名詞の複数形 +s、動詞の三人称単数形 +s、時制・相の形 +ed/+ing、形容詞の比較級 +er、最上級 +est
接尾辞による品詞の変化:person → personally、接頭辞による意味の変化:write → rewrite
品詞・意味が変わるか
変わらない
変わる
見出し語化とステミングの比較
観点
Lemmatisation(見出し語化)
Stemming(ステミング)
処理内容
屈折を取り除き、lemma(辞書の見出し語)に戻す
接尾辞を取り除き、語幹を残す
方式
Lexicon-based(辞書と品詞に依存)
Rule-based(通常は接辞を削除する規則の集合)
出力
意味を持つ実在の単語
実在の単語でない語幹になることがある(studies → studi)
速度
遅い(辞書・品詞情報の参照が必要)
速い
適したタスク
実在の語形が必要で、意味に敏感なタスク(生成や可読性を重視する処理など)
大規模な統計処理、検索、分類(語形が一貫していればよい場合)
Porter Stemmer
m
k
学習(マージ規則の獲得)
符号化(新しいテキストのトークン化)
学習したマージ順に従って規則を適用する。どの規則にも該当しない部分は 1 文字ずつ残る。そのため符号化は決定的であり、頻度を数え直す必要はない。
コーパス(語末は _ で表す):
Corpus
Frequency
o l d _
7
o l d e r _
f i n e s t _
9
l o w e s t _
初期の隣接ペアの頻度
Pair
Count
内訳
(e, s)
13
finest_ 9 + lowest_ 4
(s, t)
(t, _)
(o, l)
10
old_ 7 + older_ 3
(l, d)
(f, i)
finest_ 9
(i, n)
(n, e)
(d, _)
old_ 7
(l, o)
lowest_ 4
(o, w)
(w, e)
(d, e)
older_ 3
(e, r)
(r, _)
マージの過程(同頻度の場合の選択は実装上の規約による。最初に現れたものや辞書順で最小のものを選ぶ方法が一般的)
回
マージ
頻度
処理後のコーパス
e + s → es
o l d _(7) o l d e r _(3) f i n es t _(9) l o w es t _(4)
es + t → est
f i n est _(9) l o w est _(4)
est + _ → est_
f i n est_(9) l o w est_(4)
o + l → ol
ol d _(7) ol d e r _(3)
ol + d → old
old _(7) old e r _(3)
6
f + i → fi
fi n est_(9)
fi + n → fin
fin est_(9)
8
fin + est_ → finest_
finest_(9)
old + _ → old_
old_(7)
各行には、その回のマージで変わった単語だけを示す。それ以外の単語は変わらない。
最終語彙の一部:o, l, d, e, r, f, i, n, s, t, w, _, es, est, est_, ol, old, fi, fin, finest_, old_, …
“図 2-1 BPE がコーパスから学習したマージ操作(r · → r·、l o → lo、lo w → low、e r· → er·)。ここでは論文の元の例を用いている。出典:Sennrich et al., Neural Machine Translation of Rare Words with Subword Units, ACL 2016, Figure 1。
図 2-1 BPE がコーパスから学習したマージ操作(r · → r·、l o → lo、lo w → low、e r· → er·)。ここでは論文の元の例を用いている。出典:Sennrich et al., Neural Machine Translation of Rare Words with Subword Units, ACL 2016, Figure 1。
言語モデル(Language Model, LM)は、単語列に確率 P(w_1, w_2, \dots, w_m) を割り当てる。
P(w_1, w_2, \dots, w_m)
P(w_t \mid w_{<t})
N-gram:連続する n 個のトークンからなる部分列。
n
名称
例(the dog barks)
unigram
the / dog / barks
bigram
the dog / dog barks
trigram
the dog barks
N-gram 言語モデルの仮定:位置 t の単語は、直前の n-1 語だけに依存する。
t
n-1
(a) 同時確率から条件付き確率へ(連鎖律)
例として I like apple を考える。
P(\text{I like apple}) = P(\text{I}) \cdot P(\text{like} \mid \text{I}) \cdot P(\text{apple} \mid \text{I like})
P(w_1, w_2, \dots, w_m) = \prod_{i=1}^{m} P(w_i \mid w_1, \dots, w_{i-1})
P(A\mid B) = \dfrac{P(A,B)}{P(B)}
(b) マルコフ仮定(Markov Assumption)
全履歴ではなく、直前の n-1 語だけに依存すると仮定する。
P(w_1, \dots, w_m) \approx \prod_{i=1}^{m} P(w_i \mid w_{i-n+1}, \dots, w_{i-1})
モデル
式
P(w_1,\dots,w_m) = \prod_{i=1}^{m} P(w_i)
P(w_1,\dots,w_m) = \prod_{i=1}^{m} P(w_i \mid w_{i-1})
P(w_1,\dots,w_m) = \prod_{i=1}^{m} P(w_i \mid w_{i-2}, w_{i-1})
(c) 最尤推定(Maximum Likelihood Estimation, MLE)
相対頻度を使って条件付き確率を推定する。
P(w_i \mid w_{i-1}) = \frac{C(w_{i-1}, w_i)}{C(w_{i-1})}, \qquad P(w_i) = \frac{C(w_i)}{M}
ここで C(\cdot) はカウント、M は総トークン数。
C(\cdot)
M
手計算の例
コーパス(2 文。文頭と文末の記号は <s> <eos>):
<s> yes no no no no yes <eos> <s> no no no yes yes no <eos>
確率
計算
結果
P(\text{yes} \mid \text{<s>})
1 / 2
0.5
P(\text{no} \mid \text{yes})
2 / 4
P(\text{no} \mid \text{no})
5 / 8
0.625
P(\text{yes} \mid \text{no})
2 / 8
0.25
P(\text{<eos>} \mid \text{yes})
1 / 4
P(\text{<eos>} \mid \text{no})
1 / 8
0.125
コーパス中で yes は 4 回、no は 8 回現れる。同じ先行語に続く候補には、文末記号も含める必要がある。例えば no に続く語の確率の和は 5/8+2/8+1/8=1。
5/8+2/8+1/8=1
問題
現象
対処法
a) 長距離依存
直前の n-1 語しか見ないため、離れた文脈を無視する("The trophy would not fit in the suitcase because it was too big" の it の照応先を決めるには長距離の情報が必要)
次数 n を増やす(ただしスパース性が増す)、キャッシュモデル、RNN/Transformer
b) 確率が非常に小さい
値が <1 の数を数十個掛けると、アンダーフローして 0 になりうる
<1
計算には対数確率を足し合わせる:\log P = \sum \log P(w_i\mid\cdot)。パープレキシティの計算でも、まず負の対数確率の平均を求める
\log P = \sum \log P(w_i\mid\cdot)
c) 未出現の N-gram(ゼロ確率)
学習データにない n-gram はカウントが 0 → 文全体の確率も 0 になる
平滑化(Smoothing)。第 4 節を参照
目的:未出現の n-gram にも非ゼロの確率を割り当てつつ、確率の和を 1 に保つ(確率質量の保存)。
基本的な考え方:すべての n-gram が少なくとも 1 回は現れたと仮定し、すべてのカウントに +1 を加える。
+1
P_{\text{add1}}(w_i) = \frac{C(w_i) + 1}{M + \vert V\vert } \qquad\text{(unigram)}
P_{\text{add1}}(w_i \mid w_{i-1}) = \frac{C(w_{i-1} w_i) + 1}{C(w_{i-1}) + \vert V\vert } \qquad\text{(bigram)}
分母に \vert V\vert を加えるのは、確率の和を 1 に保つため(\vert V\vert 個の候補それぞれに 1 回分を加えたため)。
問題:+1 は低頻度語や疎なコーパスには「多すぎる」。未出現の事象に大量の確率質量を配り、既出の n-gram の確率を大きく下げてしまうため、歪みが大きい。
P_{\text{add-}k}(w_i \mid w_{i-2}, w_{i-1}) = \frac{C(w_{i-2}, w_{i-1}, w_i) + k}{C(w_{i-2}, w_{i-1}) + k\,\vert V\vert }
0<k<1
k=1
考え方:既出の各単語のカウントから固定量 d(例えば d=0.1)を「借り」、その確率質量を未出現の単語に配る。
d
d=0.1
P_{\text{abs}}(w_i \mid w_{i-1}) = \frac{C(w_{i-1}, w_i) - d}{C(w_{i-1})}, \quad \text{ただし } C(w_{i-1},w_i) > 0
例(context = alleged、既出の bigram が 5 個、未出現の bigram が 2 個)
単語
counts
平滑化前の確率
Add-α (α=0.1) の有効カウント
Add-α の平滑化後の確率
Discounting (d=0.1) の有効カウント
Discounting の平滑化後の確率
impropriety
0.4
7.826
0.391
7.9
0.395
offense
4.928
0.246
4.9
0.245
damage
0.2
3.961
0.198
3.9
0.195
deficiencies
0.1
2.029
0.101
1.9
0.095
outbreak
0.05
1.063
0.053
0.9
0.045
infirmity
0
0.097
0.005
0.013
alleged
合計
20
1.0
8-0.1=7.9
5-0.1=4.9
5\times0.1=0.5
0.5/20=0.025
0.5/2 = 0.25
0.25/20=0.0125\approx0.013
考え方:既出ならディスカウントした確率を使い、未出現なら lower-order model(低次モデル)に従って確保した確率質量を再配分する。
P_{\text{katz}}(w \mid h) = \begin{cases} \dfrac{C^*(h,w)}{C(h)}, & \text{if } C(h,w) > 0 \\[2mm] \alpha(h)\,P_{\text{lower}}(w), & \text{otherwise} \end{cases}
ここで h=w_{i-1} は文脈、C^*(h,w) はディスカウント後のカウント。Katz では通常 Good–Turing に基づくディスカウントを使い、すべての既出カウントから同じ定数を引くわけではない。バックオフの重みは次のとおり。
h=w_{i-1}
C^*(h,w)
\alpha(h)=\frac{1-\sum_{w:C(h,w)>0}C^*(h,w)/C(h)}{\sum_{w:C(h,w)=0}P_{\text{lower}}(w)}
分子は高次モデルが残した確率質量。分母は、現在の文脈で未出現の単語について低次確率を合計したもの。これにより最終的な分布を正規化する。
Katz の問題
P(\text{Kong})
P(\text{glasses})
考え方:ディスカウントした質量を、生のカウントではなく多様性(versatility)、つまりその単語が何種類の異なる語の後に現れるかに応じて配分する。
式:補間型
以下は一般的な補間型 Kneser–Ney。低次分布は高次カウントがゼロの場合だけ使うのではなく、ディスカウント後の高次確率に加算する。
P_{KN}(w_i \mid w_{i-1}) = \frac{\max(C(w_{i-1},w_i)-D,0)}{C(w_{i-1})} +\lambda(w_{i-1})\,P_{\text{cont}}(w_i)
P_{\text{cont}}(w_i)= \frac{\vert\{u:C(u,w_i)>0\}\vert}{\vert\{(u,v):C(u,v)>0\}\vert},\qquad \lambda(h)=\frac{D\,\vert\{v:C(h,v)>0\}\vert}{C(h)}
w_i
\lambda(h)
h
0<D<1
D/C(h)
考え方:どちらか一方にバックオフするのではなく、次数の異なる n-gram モデルを重み付きで混合する。重みはホールドアウトデータで調整・学習する。
P_{IN}(w_i \mid w_{i-1}, w_{i-2}) = \lambda_3 P_3(w_i \mid w_{i-2}, w_{i-1}) + \lambda_2 P_2(w_i \mid w_{i-1}) + \lambda_1 P_1(w_i)
\sum_k \lambda_k = 1, \qquad \lambda_k \ge 0
\lambda
手法
基本的な考え方
利点
限界
Add-1
すべてのカウントに +1
最も単純。非ゼロかつ正規化された確率になる
疎なデータには加算量が多すぎ、既出確率を大きく下げる
Add-k
すべてのカウントに +k
add-one より穏やか
ハイパーパラメータ k の調整が必要。未出現語の確率はすべて同じ。元の比率が変わる
Absolute Discounting
既出カウントから一律に d を引き、残りを未出現語に配る
単純で add-k より良い結果
低次文脈が持つ情報量を区別しない
Katz Backoff
未出現なら低次モデルにバックオフ
高次の精密さを保持
生の確率でバックオフし、文脈の多様性を無視する(reading Kong の問題)
Kneser-Ney
低次分布の継続確率でディスカウントした質量を配分
古典的な n-gram モデルの強力なベースライン
式が複雑で、2 種類のカウントが必要
Interpolation
異なる次数のモデルを重み付き混合
安定し、バックオフを上回ることが多い
ホールドアウトデータで調整する重みは \lambda
C=\{c_1, c_2, \dots, c_k\}
\hat{c} \in C
Bias:バイアス
モデルの制約や単純化した仮定が生む系統的な誤差。仮定が実データと合わないと、大きなバイアスにつながる
Variance:分散
モデルが学習データにどれほど敏感か。敏感なほど、別の標本で学習した際の結果の変動が大きい(過学習しやすい)
前提となる仮定
特徴の独立性、線形境界、距離の意味など、モデルが依拠する条件。満たされない場合、性能に影響しうる
計算量
学習・推論の時間とメモリのコスト。大規模データに拡張できるか
学習と予測の遅延が運用上の要件を満たすか
“バイアスと分散のトレードオフ:高バイアスは適合不足、高分散は過学習に対応することが多い。二乗損失では、予測誤差の期待値はバイアスの二乗、分散、不可約なノイズに分解できる。分類でもこの枠組みを使ってモデルの取捨選択を考えられる。
バイアスと分散のトレードオフ:高バイアスは適合不足、高分散は過学習に対応することが多い。二乗損失では、予測誤差の期待値はバイアスの二乗、分散、不可約なノイズに分解できる。分類でもこの枠組みを使ってモデルの取捨選択を考えられる。
P(C\mid F) \propto P(F\mid C)\,P(C)
つまり「クラスの事前確率 × そのクラスの下でこれらの特徴が現れる確率」。
P(F \mid C) = \prod_{f \in F} P(f \mid C)
P(y=c \mid x) = \frac{\exp(w_c^\top x + b_c)}{\sum_{c'} \exp(w_{c'}^\top x + b_{c'})}
\min_{w,b}\ \tfrac{1}{2}\Vert w\Vert ^2 \quad \text{s.t.}\quad y_i(w^\top x_i + b) \ge 1
Hold-out(ホールドアウト法):データを train / dev(validation)/ test に分割する。ハイパーパラメータは dev で選び、test は最終結果を報告する際に一度だけ使う。
Classified As A
Classified As B
True A
79 (TP)
13 (FN)
True B
8 (FP)
10 (TN)
Accuracy:正解率
\text{Accuracy} = \frac{TP + TN}{N} = \frac{79+10}{110} = 0.809
Precision:適合率:陽性と予測したもののうち、実際に陽性である割合
P = \frac{TP}{TP + FP} = \frac{79}{79+8} = 0.908
Recall:再現率:実際の陽性のうち、検出できた割合
R = \frac{TP}{TP + FN} = \frac{79}{79+13} = 0.859
F1-Score:適合率と再現率の調和平均
F_1 = \frac{2PR}{P+R} = \frac{2 \times 0.908 \times 0.859}{0.908 + 0.859} = 0.883
“なぜ算術平均ではなく調和平均を使うのか? 調和平均は小さい方の値に引き下げられる。P と R の両方が高い場合にだけ F1 も高くなり、再現率だけ高く適合率が低い場合や、その逆の場合が高得点になるのを防げる。
なぜ算術平均ではなく調和平均を使うのか? 調和平均は小さい方の値に引き下げられる。P と R の両方が高い場合にだけ F1 も高くなり、再現率だけ高く適合率が低い場合や、その逆の場合が高得点になるのを防げる。
多クラス分類の指標
指標
方法
特徴
Macro-average
クラスごとに P/R/F1 を計算し、その後クラス間で算術平均を取る
各クラスの重みが等しい。少数クラスの影響が相対的に大きく、ロングテールの性能低下を見つけやすい
Micro-average
全クラスの TP/FP/FN を合算してから P/R/F1 を一度計算する
各サンプルの重みが等しく、大きなクラスが支配的。単一ラベルの多クラス分類では micro-F1 = accuracy
定義:文中の各単語に文法カテゴリ(品詞)を付与すること。
例:Janet/NNP will/MD back/VB the/DT bill/NN
“この文の back は動詞(支持する)であり、名詞や副詞ではない。品詞は文脈で決まる。
この文の back は動詞(支持する)であり、名詞や副詞ではない。品詞は文脈で決まる。
応用:
開いたクラス(Open class):新語が加わり、古い語が使われなくなることがある
大分類
下位分類
Nouns:名詞
Proper:固有名詞(Melbourne)/Common:普通名詞。普通名詞はさらに Mass:不可算名詞(water)/Count:可算名詞(chair)に分かれる
Lexical verbs:語彙動詞
屈折形が豊富(sing/sang/sung)。用法により他動詞と自動詞に分かれる
Adjectives:形容詞
Gradable:段階性がある(very tall)/Non-gradable:段階性がない(dead)
Adverbs:副詞
Locative:場所(here, there)/Degree:程度(very, extremely)
閉じたクラス(Closed class):比較的固定され、語が増減しにくい
同じ語形が複数の品詞に対応し、その分布も非常に偏っている。
“単純なベースラインは、各単語に学習データで最も多い品詞を付ける方法。この偏りは利用できるが、現在の文脈による曖昧性解消はできない。正解率はコーパスと未知語の扱いに依存する。
単純なベースラインは、各単語に学習データで最も多い品詞を付ける方法。この偏りは利用できるが、現在の文脈による曖昧性解消はできない。正解率はコーパスと未知語の扱いに依存する。
タグ集合
タグ数
Brown
87
初期のコーパスタグ集合の一つで、細かい分類
Penn Treebank (PTB)
45
NLP で最も広く使われるタグ集合。例:NN, NNS, NNP, VB, VBD, VBG, JJ, RB, IN, DT, MD, CC, PRP…
CLAWS5 / BNC
61
CLAWS の一つの版。タグ数は版によって異なる
初期の Universal Tagset
12
NOUN, VERB, ADJ, ADV, PRON, DET, ADP, NUM, CONJ, PRT, ., X。Universal Dependencies の 17 分類の UPOS と混同しないこと
古典的な曖昧性の例(Penn Treebank のタグ)
Time flies like an arrow Time/NN flies/VBZ like/IN an/DT arrow/NN Fruit flies like a banana Fruit/NN flies/NNS like/VBP a/DT banana/NN
同じ flies でも、1 文目では動詞(時が飛ぶように過ぎる)、2 文目では名詞(ショウジョウバエ)。文脈を見なければ判断できない。
タスク:POS tagging。単語列 W = w_1 \dots w_n 全体に対して最適なタグ列 T = t_1 \dots t_n を求める。
W = w_1 \dots w_n
T = t_1 \dots t_n
既存手法の問題:各単語を独立に予測するとタグ間の依存関係を利用できない。直前までの予測タグに依存する貪欲な分類器では、先行する誤りが後続の予測に影響する誤り伝播が起こりうる。
新しい考え方:文全体をモデルに渡し、タグ列全体を出力させる。
新たな問題:文の長さは一定でなく、可能なタグの組合せ数は \vert T\vert ^n、指数的で、全列挙はできない。
\vert T\vert ^n
解決策:単語単位でモデル化しながら、学習と予測では文全体を一つの単位として扱う。これを sequence labelling、または structured prediction と呼ぶ。
HMM の動作:文(単語列)を与え、すべての候補タグ列の中から確率が最大のものを見つける。
利点:
\hat{T} = \arg\max_{T} P(T \mid W) = \arg\max_{T} \frac{P(W \mid T)\,P(T)}{P(W)} = \arg\max_{T} P(W \mid T)\,P(T)
(P(W) は T に依存しないため無視できる。これは ベイズの定理を使って分母を取り除く操作)
P(W)
T
“図 7-1 HMM の確率的グラフィカルモデル。実線は状態遷移 P(t_i\mid t_{i-1})(行列 A)、破線は出力 P(w_i\mid t_i)(行列 O)を表す。
図 7-1 HMM の確率的グラフィカルモデル。実線は状態遷移 P(t_i\mid t_{i-1})(行列 A)、破線は出力 P(w_i\mid t_i)(行列 O)を表す。
P(t_i\mid t_{i-1})
P(w_i\mid t_i)
仮定
内容
役割
Output independence(出力の独立性)
位置 i の単語は、位置 i のタグだけに依存し、他の単語やタグには依存しない:P(W\mid T)=\prod_i P(w_i\mid t_i)
i
P(W\mid T)=\prod_i P(w_i\mid t_i)
タグ列を条件とする文全体の確率を、単語ごとの確率の積に分解する
Markov assumption(マルコフ仮定)
現在のタグは直前のタグだけに依存する:P(T)=\prod_i P(t_i \mid t_{i-1})
P(T)=\prod_i P(t_i \mid t_{i-1})
タグ列の確率を、1 次の遷移確率の積に分解する
したがって、
\hat{T} = \arg\max_{T} \prod_{i=1}^{n} \underbrace{P(w_i \mid t_i)}_{\text{emission}} \cdot \underbrace{P(t_i \mid t_{i-1})}_{\text{transition}}
“HMM が生成モデルである理由もここにある。同時確率 P(W,T) = P(T)P(W\mid T) をモデル化している。
HMM が生成モデルである理由もここにある。同時確率 P(W,T) = P(T)P(W\mid T) をモデル化している。
P(W,T) = P(T)P(W\mid T)
パラメータ
P(w_i \mid t_i)
Emission(出力・観測)確率 O
あるタグがある単語を生成する確率
P(t_i \mid t_{i-1})
Transition(遷移)確率 A
直前のタグの後に、あるタグが続く確率
推定方法:ここでも最尤推定(MLE)、つまりカウントを使う。
P(w_i \mid t_i) = \frac{\text{Count}(w_i, t_i)}{\text{Count}(t_i)}, \qquad P(t_i \mid t_{i-1}) = \frac{\text{Count}(t_{i-1}, t_i)}{\text{Count}(t_{i-1})}
最初のタグの確率はどうするか? 各文の前に特別な開始記号 <s> を置くと、最初の項は P(t_1 \mid \text{<s>}):
P(t_1 \mid \text{<s>})
P(t_1 \mid \text{<s>}) = \frac{\text{Count}(\text{<s>}, t_1)}{\text{Count}(\text{<s>})}
同様に文末に </s> を置き、P(\text{</s>} \mid t_n) も学習可能な遷移にする。前述の積では簡潔さのためこの文末因子を省いたが、完全な経路確率にはこの因子も掛ける。
P(\text{</s>} \mid t_n)
未知語はどうするか? ここでも平滑化(第 4 節)を使う。出力確率表に add-k / add-one を適用するか、低頻度語を <UNK> にまとめ、<UNK> の出力確率を低頻度語全体で共有する。
学習済み HMM(2 つの表:遷移行列 A と出力確率行列 O)から、入力文のタグ列を予測する。
基本的な考え方:すべてのタグの組合せから、同時確率が最大のものを選ぶ。
\hat{t} = \arg\max_{t} P(W \mid t)\,P(t) = \arg\max_{t} \prod_{i=1}^{n} P(w_i \mid t_i)\,P(t_i \mid t_{i-1})
なぜ 1 語ずつ予測しないのか?(貪欲復号の限界)
Generative(HMM)
Discriminative(CRF/分類器)
モデル化するもの
同時確率 P(X, Y)
P(X, Y)
条件付き確率 P(Y \mid X)(または P(T\mid W))
P(Y \mid X)
P(T\mid W)
主な用途
言語の生成が可能。HMM は教師なし学習にも対応
分類、予測、系列ラベリング
学習方式
通常は教師あり・半教師あり。EM による教師なし学習も可能
通常は教師あり学習
観測自体の出力確率を用いるため、特徴に制約がある
接頭辞・接尾辞、語形、文脈語、外部辞書など豊富な特徴を使える
データ量
単純な構造の仮定は、少量データでの学習に有利な場合がある
データと特徴が十分なら予測性能が高い傾向があるが、タスクとモデルに依存する
代表例
Naïve Bayes、HMM。ニューラル言語モデルも生成的にモデル化できる
ロジスティック回帰、CRF、SVM、分類用ニューラルネットワーク
“識別モデルは「入力が与えられたときの出力の予測」を直接最適化し、入力分布 P(W) を明示的にモデル化する必要がない。予測タスクに集中できるが、どちらが良いかはタスク・データ・モデルによる。
識別モデルは「入力が与えられたときの出力の予測」を直接最適化し、入力分布 P(W) を明示的にモデル化する必要がない。予測タスクに集中できるが、どちらが良いかはタスク・データ・モデルによる。
“「現在の単語の最良タグ」だけでなく、「各候補タグで終わる最良経路のスコア」を保持し、次の単語へ進む際にすべての組合せを考える。
「現在の単語の最良タグ」だけでなく、「各候補タグで終わる最良経路のスコア」を保持し、次の単語へ進む際にすべての組合せを考える。
各位置 t と各タグ j について、タグ j で終わる最適経路の累積スコア \delta_t(j) とバックポインタ \psi_t(j) を記録する。
j
\delta_t(j)
\psi_t(j)
\delta_1(j) = P(t_1 = j \mid \text{<s>}) \cdot P(w_1 \mid j)
\delta_t(j) = \max_{i \in T}\Big[\delta_{t-1}(i)\cdot P(j \mid i)\Big]\cdot P(w_t \mid j)
\psi_t(j) = \arg\max_{i \in T}\Big[\delta_{t-1}(i)\cdot P(j\mid i)\Big]
終了処理:
\hat{t}_n = \arg\max_{j}\big[\delta_n(j)\,P(\text{</s>}\mid j)\big], \qquad \hat{t}_{t} = \psi_{t+1}(\hat{t}_{t+1}) \ \text{(バックトラック)}
明示的な文末状態がないモデルでは、終了時に \delta_n(j) を直接比較すればよい。以下の 2 例はいずれもこの簡略化を使う。
\delta_n(j)
直感的な例:Can Play
遷移行列(一部抜粋。行が条件となる事象 P(\cdot\mid \text{row}))
P(\cdot\mid \text{row})
NNP
MD
VB
JJ
NN
RB
DT
<s>
0.2767
0.0006
0.0031
0.0453
0.0449
0.0510
0.2026
0.3777
0.0110
0.0009
0.0084
0.0584
0.0090
0.0025
0.0008
0.0002
0.7968
0.0005
0.1698
0.0041
0.0322
0.0050
0.0837
0.0615
0.0514
0.2231
0.0366
0.0004
0.0001
0.0733
0.4509
0.0036
0.0096
0.0176
0.0014
0.0086
0.1216
0.0177
0.0068
0.0102
0.1011
0.1012
0.0120
0.0728
0.0479
0.1147
0.0021
0.2157
0.4744
0.0017
(データは Jurafsky と Martin の Speech and Language Processing 第 18 章 Figure 18.12 による。WSJ コーパスに基づき、平滑化はしていない。タグの一部だけを示しているため、各行の和は 1 とは限らない。正規化されるのは完全な遷移分布。)
出力確率行列(Emission Matrix、Speech and Language Processing、Figure 18.13)
Janet
will
back
the
bill
0.000032
0.000048
0.308431
0.000028
0.000672
0.000340
0.000200
0.000223
0.002337
0.010446
0.506099
手順:\vert T\vert \times n のトレリスを作り、列ごとに \delta を埋める。各セルには「前の列のどのタグから来たか」を記録し、最終列の最大値から逆向きにたどる。
\vert T\vert \times n
\delta
これは動的計画法を示すためだけの 2 状態のトイモデルで、数値は人工的に設定したもの。N と V は状態ラベルであり、実際の英語で they が動詞になることを意味しない。
出力確率
they
fish
N
0.7
0.3
V
0.6
遷移確率
0.8
“図 8-1 they fish の Viterbi トレリス。各セルには「そのタグで終わる最良接頭経路のスコア」\delta だけを残す。赤は逆向きにたどって得た最適経路 they/N → fish/N を示す。
図 8-1 they fish の Viterbi トレリス。各セルには「そのタグで終わる最良接頭経路のスコア」\delta だけを残す。赤は逆向きにたどって得た最適経路 they/N → fish/N を示す。
全 4 経路の列挙
経路
N N
0.6\times0.7 \times 0.8\times0.3
0.1008 ✅ 最適
N V
0.6\times0.7 \times 0.2\times0.6
0.0504
V N
0.4\times0.4 \times 0.7\times0.3
0.0336
V V
0.4\times0.4 \times 0.3\times0.6
0.0288
結果:they/N fish/N。fish の出力確率だけを見ると、P(\text{fish}\mid V)=0.6 が P(\text{fish}\mid N)=0.3 より大きい。しかし遷移確率を加えると、最適経路は N で終わる。出力確率はタグの事後確率ではなく、それだけでタグは選べない。この例は遷移情報の役割を示すが、遷移も逐次考慮する貪欲復号が必ず失敗することを示す例ではない。
P(\text{fish}\mid V)=0.6
P(\text{fish}\mid N)=0.3
性質
説明
時間計算量
O(T^2 N):T = タグ集合の大きさ、N = 系列長。位置は全部で N 個あり、各位置の T 種類のタグそれぞれについて、前の位置の全 T タグと比較する
O(T^2 N)
空間計算量
最適スコアだけなら 2 列を交互に保持でき、必要な空間は O(T)。経路全体の復元には O(TN) 個のバックポインタを保存する
O(T)
O(TN)
正しく解ける理由
最適部分構造:位置 t のタグ j に至る最適経路の接頭部分は、位置 t-1 のいずれかのタグに至る最適経路でなければならない(そうでなければ接頭部分を置き換えて改善できる)。マルコフ性:現在のタグが与えられれば、未来はそれ以前の履歴に依存しない。各セルで最良の接頭経路スコアだけを残し、劣る経路を安全に捨てられる
t-1
数値アンダーフロー
確率を掛け続けるとすぐに 0 になる。実装ではすべて対数確率を使う(乗算が加算になり、O(T^2N) は変わらない)
O(T^2N)
高次の変種
例えばタグの trigram(2 次 HMM):P(t_i \mid t_{i-2}, t_{i-1}) と、interpolation による平滑化を使う。計算量は O(T^3 N)
P(t_i \mid t_{i-2}, t_{i-1})
O(T^3 N)
メルボルン大学で COMP90042(NLP)を受講したときの学習ノートです。本稿では、テキストの前処理、BPE、N-gram と平滑化、テキスト分類、品詞タグ付け、HMM、Viterbi を扱います。
1. テキストの前処理
1.1 基本的な定義
用語
定義
Word:単語
意味や文法上の機能を持つ文字の並び(a sequence of characters with a meaning and/or function)
Sentence:文
単語を文法規則に従って組み合わせ、一つのまとまった意味を表す単位。句読点や構造上の境界で終わる
Document:文書
ニュース記事やメールなど、複数の文からなる連続したテキストの単位
Corpus:コーパス
学習や評価のために一定の規模で収集したテキストの集合(単数形は corpus、複数形は corpora)
Word token:単語トークン(延べ語)
テキスト内の単語の一つひとつの出現を数えたもの。"to be or not to be" には 6 トークンある
Word type:単語タイプ(異なり語)
重複を除いた異なる単語。"to be or not to be" には 4 タイプある
Lexicon:語彙辞書
ある言語や分野に属する全単語タイプと、その語彙項目の情報の集合
1.2 なぜ前処理が必要なのか
前処理は、生の文字列をタスクに適した表現へ段階的に変換する。以下は従来型のテキスト処理の模式的な流れ。
1.3 前処理の 5 ステップ
どの処理を使うかはタスクに応じて選ぶ。すべてのモデルで全手順を実行するわけではない。言語モデルでは通常、句読点、語形、機能語を残す必要がある。現代の事前学習済みモデルでも、学習時と同じトークナイザを使うべきである。
手順
英語名
目的
1
Remove unwanted formatting
HTML/XML タグ、Markdown 記法、余分な空白、エスケープ文字を取り除く
2
Sentence segmentation:文分割
文書を文に分割する
3
Word tokenisation:単語分割
文をトークンに分割する。BPE などのサブワード方式も含む
4
Word normalisation:単語の正規化
大文字・小文字、綴り、語形を統一する(見出し語化/ステミング)
5
Stopword removal:ストップワード除去
高頻度で情報量の少ない機能語を除く
ステップ 2:文分割(Sentence Segmentation)
単純なものから順に 4 つの方法がある。
ステップ 3:単語分割(Word Tokenisation)
中国語の MaxMatch(最大一致法)
考え方:辞書を与え、左または右から貪欲に辞書中の最長一致文字列を単語として取り出す。
例:
要点と限界:
ステップ 4:単語の正規化(Word Normalisation)
目的:
方法:
Removing Morphology:2 種類の形態変化の違い
種類
Inflectional Morphology(屈折)
Derivational Morphology(派生)
意味
同じ単語の異なる文法形態
既存の単語から新しい単語を作る
例
名詞の複数形 +s、動詞の三人称単数形 +s、時制・相の形 +ed/+ing、形容詞の比較級 +er、最上級 +est
接尾辞による品詞の変化:person → personally、接頭辞による意味の変化:write → rewrite
品詞・意味が変わるか
変わらない
変わる
見出し語化とステミングの比較
観点
Lemmatisation(見出し語化)
Stemming(ステミング)
処理内容
屈折を取り除き、lemma(辞書の見出し語)に戻す
接尾辞を取り除き、語幹を残す
方式
Lexicon-based(辞書と品詞に依存)
Rule-based(通常は接辞を削除する規則の集合)
出力
意味を持つ実在の単語
実在の単語でない語幹になることがある(studies → studi)
速度
遅い(辞書・品詞情報の参照が必要)
速い
適したタスク
実在の語形が必要で、意味に敏感なタスク(生成や可読性を重視する処理など)
大規模な統計処理、検索、分類(語形が一貫していればよい場合)
Porter Stemmer
m)に従って処理する。ステップ 5:ストップワード除去(Stopword Removal)
k語を選ぶ(not, no などの否定語を誤って除かないよう、人手で確認する)。2. BPE によるサブワード分割
2.1 動機
2.2 アルゴリズム(Byte-Pair Encoding)
学習(マージ規則の獲得)
k(または語彙サイズ)に達するまで、手順 2〜3 を繰り返す。符号化(新しいテキストのトークン化)
学習したマージ順に従って規則を適用する。どの規則にも該当しない部分は 1 文字ずつ残る。そのため符号化は決定的であり、頻度を数え直す必要はない。
2.3 具体例
コーパス(語末は _ で表す):
Corpus
Frequency
o l d _
7
o l d e r _
3
f i n e s t _
9
l o w e s t _
4
初期の隣接ペアの頻度
Pair
Count
内訳
(e, s)
13
finest_ 9 + lowest_ 4
(s, t)
13
finest_ 9 + lowest_ 4
(t, _)
13
finest_ 9 + lowest_ 4
(o, l)
10
old_ 7 + older_ 3
(l, d)
10
old_ 7 + older_ 3
(f, i)
9
finest_ 9
(i, n)
9
finest_ 9
(n, e)
9
finest_ 9
(d, _)
7
old_ 7
(l, o)
4
lowest_ 4
(o, w)
4
lowest_ 4
(w, e)
4
lowest_ 4
(d, e)
3
older_ 3
(e, r)
3
older_ 3
(r, _)
3
older_ 3
マージの過程(同頻度の場合の選択は実装上の規約による。最初に現れたものや辞書順で最小のものを選ぶ方法が一般的)
回
マージ
頻度
処理後のコーパス
1
e + s → es
13
o l d _(7) o l d e r _(3) f i n es t _(9) l o w es t _(4)
2
es + t → est
13
f i n est _(9) l o w est _(4)
3
est + _ → est_
13
f i n est_(9) l o w est_(4)
4
o + l → ol
10
ol d _(7) ol d e r _(3)
5
ol + d → old
10
old _(7) old e r _(3)
6
f + i → fi
9
fi n est_(9)
7
fi + n → fin
9
fin est_(9)
8
fin + est_ → finest_
9
finest_(9)
9
old + _ → old_
7
old_(7)
各行には、その回のマージで変わった単語だけを示す。それ以外の単語は変わらない。
最終語彙の一部:o, l, d, e, r, f, i, n, s, t, w, _, es, est, est_, ol, old, fi, fin, finest_, old_, …
2.4 要点と補足
3. N-gram 言語モデル
3.1 タスク
言語モデル(Language Model, LM)は、単語列に確率
P(w_1, w_2, \dots, w_m)を割り当てる。P(w_t \mid w_{<t})から順にサンプリングするか argmax を取り、1 語ずつ生成する。これを <eos> まで続ける。3.2 応用
3.3 N-gram とは
N-gram:連続する
n個のトークンからなる部分列。n名称
例(the dog barks)
1
unigram
the / dog / barks
2
bigram
the dog / dog barks
3
trigram
the dog barks
N-gram 言語モデルの仮定:位置
tの単語は、直前のn-1語だけに依存する。3.4 N-gram を支える 3 つの概念・仮定
(a) 同時確率から条件付き確率へ(連鎖律)
例として I like apple を考える。
P(\text{I like apple}) = P(\text{I}) \cdot P(\text{like} \mid \text{I}) \cdot P(\text{apple} \mid \text{I like})P(w_1, w_2, \dots, w_m) = \prod_{i=1}^{m} P(w_i \mid w_1, \dots, w_{i-1})P(A\mid B) = \dfrac{P(A,B)}{P(B)}。(b) マルコフ仮定(Markov Assumption)
全履歴ではなく、直前の
n-1語だけに依存すると仮定する。P(w_1, \dots, w_m) \approx \prod_{i=1}^{m} P(w_i \mid w_{i-n+1}, \dots, w_{i-1})nモデル
式
1
unigram
P(w_1,\dots,w_m) = \prod_{i=1}^{m} P(w_i)2
bigram
P(w_1,\dots,w_m) = \prod_{i=1}^{m} P(w_i \mid w_{i-1})3
trigram
P(w_1,\dots,w_m) = \prod_{i=1}^{m} P(w_i \mid w_{i-2}, w_{i-1})(c) 最尤推定(Maximum Likelihood Estimation, MLE)
相対頻度を使って条件付き確率を推定する。
P(w_i \mid w_{i-1}) = \frac{C(w_{i-1}, w_i)}{C(w_{i-1})}, \qquad P(w_i) = \frac{C(w_i)}{M}ここで
C(\cdot)はカウント、Mは総トークン数。手計算の例
コーパス(2 文。文頭と文末の記号は <s> <eos>):
確率
計算
結果
P(\text{yes} \mid \text{<s>})1 / 20.5
P(\text{no} \mid \text{yes})2 / 40.5
P(\text{no} \mid \text{no})5 / 80.625
P(\text{yes} \mid \text{no})2 / 80.25
P(\text{<eos>} \mid \text{yes})1 / 40.25
P(\text{<eos>} \mid \text{no})1 / 80.125
コーパス中で yes は 4 回、no は 8 回現れる。同じ先行語に続く候補には、文末記号も含める必要がある。例えば no に続く語の確率の和は
5/8+2/8+1/8=1。3.5 N-gram の 3 つの問題
問題
現象
対処法
a) 長距離依存
直前の
n-1語しか見ないため、離れた文脈を無視する("The trophy would not fit in the suitcase because it was too big" の it の照応先を決めるには長距離の情報が必要)次数
nを増やす(ただしスパース性が増す)、キャッシュモデル、RNN/Transformerb) 確率が非常に小さい
値が
<1の数を数十個掛けると、アンダーフローして 0 になりうる計算には対数確率を足し合わせる:
\log P = \sum \log P(w_i\mid\cdot)。パープレキシティの計算でも、まず負の対数確率の平均を求めるc) 未出現の N-gram(ゼロ確率)
学習データにない n-gram はカウントが 0 → 文全体の確率も 0 になる
平滑化(Smoothing)。第 4 節を参照
4. 平滑化(Smoothing)
目的:未出現の n-gram にも非ゼロの確率を割り当てつつ、確率の和を 1 に保つ(確率質量の保存)。
4.1 Add-one(Laplace)平滑化
基本的な考え方:すべての n-gram が少なくとも 1 回は現れたと仮定し、すべてのカウントに
+1を加える。P_{\text{add1}}(w_i) = \frac{C(w_i) + 1}{M + \vert V\vert } \qquad\text{(unigram)}P_{\text{add1}}(w_i \mid w_{i-1}) = \frac{C(w_{i-1} w_i) + 1}{C(w_{i-1}) + \vert V\vert } \qquad\text{(bigram)}分母に
\vert V\vertを加えるのは、確率の和を 1 に保つため(\vert V\vert個の候補それぞれに 1 回分を加えたため)。問題:
+1は低頻度語や疎なコーパスには「多すぎる」。未出現の事象に大量の確率質量を配り、既出の n-gram の確率を大きく下げてしまうため、歪みが大きい。4.2 Add-k(Lidstone)平滑化
P_{\text{add-}k}(w_i \mid w_{i-2}, w_{i-1}) = \frac{C(w_{i-2}, w_{i-1}, w_i) + k}{C(w_{i-2}, w_{i-1}) + k\,\vert V\vert }kは人が選ぶ必要があるハイパーパラメータ。0<k<1は通常k=1より良い結果になる。最適なkは検証データで実験して決める。kを選ぶ必要があり、kの値によって平滑化の効果が大きく異なる。4.3 Absolute Discounting(絶対ディスカウント法)
考え方:既出の各単語のカウントから固定量
d(例えばd=0.1)を「借り」、その確率質量を未出現の単語に配る。P_{\text{abs}}(w_i \mid w_{i-1}) = \frac{C(w_{i-1}, w_i) - d}{C(w_{i-1})}, \quad \text{ただし } C(w_{i-1},w_i) > 0例(context = alleged、既出の bigram が 5 個、未出現の bigram が 2 個)
単語
counts
平滑化前の確率
Add-α (α=0.1) の有効カウント
Add-α の平滑化後の確率
Discounting (d=0.1) の有効カウント
Discounting の平滑化後の確率
impropriety
8
0.4
7.826
0.391
7.9
0.395
offense
5
0.25
4.928
0.246
4.9
0.245
damage
4
0.2
3.961
0.198
3.9
0.195
deficiencies
2
0.1
2.029
0.101
1.9
0.095
outbreak
1
0.05
1.063
0.053
0.9
0.045
infirmity
0
0
0.097
0.005
0.25
0.013
alleged
0
0
0.097
0.005
0.25
0.013
合計
20
1.0
20
1.0
20
1.0
8-0.1=7.9、5-0.1=4.9…となり、合計で5\times0.1=0.5の有効カウントを「借りる」。対応する確率質量は0.5/20=0.025。0.5の有効カウントを、未出現の 2 語に等分する:0.5/2 = 0.25(有効カウント)。正規化後は0.25/20=0.0125\approx0.013。4.4 Katz Backoff(バックオフ)
考え方:既出ならディスカウントした確率を使い、未出現なら lower-order model(低次モデル)に従って確保した確率質量を再配分する。
P_{\text{katz}}(w \mid h) = \begin{cases} \dfrac{C^*(h,w)}{C(h)}, & \text{if } C(h,w) > 0 \\[2mm] \alpha(h)\,P_{\text{lower}}(w), & \text{otherwise} \end{cases}ここで
h=w_{i-1}は文脈、C^*(h,w)はディスカウント後のカウント。Katz では通常 Good–Turing に基づくディスカウントを使い、すべての既出カウントから同じ定数を引くわけではない。バックオフの重みは次のとおり。\alpha(h)=\frac{1-\sum_{w:C(h,w)>0}C^*(h,w)/C(h)}{\sum_{w:C(h,w)=0}P_{\text{lower}}(w)}分子は高次モデルが残した確率質量。分母は、現在の文脈で未出現の単語について低次確率を合計したもの。これにより最終的な分布を正規化する。
Katz の問題
P(\text{Kong})がP(\text{glasses})を上回り、Kong がほぼ常に King の後にしか現れなくても、誤って選ばれる可能性がある。4.5 Kneser–Ney 平滑化
考え方:ディスカウントした質量を、生のカウントではなく多様性(versatility)、つまりその単語が何種類の異なる語の後に現れるかに応じて配分する。
式:補間型
以下は一般的な補間型 Kneser–Ney。低次分布は高次カウントがゼロの場合だけ使うのではなく、ディスカウント後の高次確率に加算する。
P_{KN}(w_i \mid w_{i-1}) = \frac{\max(C(w_{i-1},w_i)-D,0)}{C(w_{i-1})} +\lambda(w_{i-1})\,P_{\text{cont}}(w_i)P_{\text{cont}}(w_i)= \frac{\vert\{u:C(u,w_i)>0\}\vert}{\vert\{(u,v):C(u,v)>0\}\vert},\qquad \lambda(h)=\frac{D\,\vert\{v:C(h,v)>0\}\vert}{C(h)}w_iが現れたものの数(w_iの「文脈タイプ数」)。\lambda(h):文脈hでディスカウントした確率質量の合計。0<D<1なら、既出の各後続語がD/C(h)ずつ寄与する。高次分布と低次分布を加えても、確率の和は 1 のまま。4.6 Interpolation(補間)
考え方:どちらか一方にバックオフするのではなく、次数の異なる n-gram モデルを重み付きで混合する。重みはホールドアウトデータで調整・学習する。
P_{IN}(w_i \mid w_{i-1}, w_{i-2}) = \lambda_3 P_3(w_i \mid w_{i-2}, w_{i-1}) + \lambda_2 P_2(w_i \mid w_{i-1}) + \lambda_1 P_1(w_i)\sum_k \lambda_k = 1, \qquad \lambda_k \ge 0\lambdaは ホールドアウトデータで学習する(EM またはグリッドサーチ)。勘で決めるわけではない。4.7 平滑化手法の比較
手法
基本的な考え方
利点
限界
Add-1
すべてのカウントに +1
最も単純。非ゼロかつ正規化された確率になる
疎なデータには加算量が多すぎ、既出確率を大きく下げる
Add-k
すべてのカウントに +k
add-one より穏やか
ハイパーパラメータ
kの調整が必要。未出現語の確率はすべて同じ。元の比率が変わるAbsolute Discounting
既出カウントから一律に
dを引き、残りを未出現語に配る単純で add-k より良い結果
低次文脈が持つ情報量を区別しない
Katz Backoff
未出現なら低次モデルにバックオフ
高次の精密さを保持
生の確率でバックオフし、文脈の多様性を無視する(reading Kong の問題)
Kneser-Ney
低次分布の継続確率でディスカウントした質量を配分
古典的な n-gram モデルの強力なベースライン
式が複雑で、2 種類のカウントが必要
Interpolation
異なる次数のモデルを重み付き混合
安定し、バックオフを上回ることが多い
ホールドアウトデータで調整する重みは
\lambda5. テキスト分類
5.1 タスクの定義
d(通常は特徴ベクトル(vector of features)として表す)と、固定されたクラス集合C=\{c_1, c_2, \dots, c_k\}(カテゴリ値。連続値でも順序付きの値でもない)。\hat{c} \in C。5.2 応用
5.3 標準的な流れ
5.4 手法を選ぶ際の観点
観点
意味
Bias:バイアス
モデルの制約や単純化した仮定が生む系統的な誤差。仮定が実データと合わないと、大きなバイアスにつながる
Variance:分散
モデルが学習データにどれほど敏感か。敏感なほど、別の標本で学習した際の結果の変動が大きい(過学習しやすい)
前提となる仮定
特徴の独立性、線形境界、距離の意味など、モデルが依拠する条件。満たされない場合、性能に影響しうる
計算量
学習・推論の時間とメモリのコスト。大規模データに拡張できるか
速度
学習と予測の遅延が運用上の要件を満たすか
5.5 代表的なアルゴリズムの比較
(1) Naïve Bayes
P(C\mid F) \propto P(F\mid C)\,P(C)つまり「クラスの事前確率 × そのクラスの下でこれらの特徴が現れる確率」。
P(F \mid C) = \prod_{f \in F} P(f \mid C)(2) Logistic Regression(ロジスティック回帰/最大エントロピー)
P(y=c \mid x) = \frac{\exp(w_c^\top x + b_c)}{\sum_{c'} \exp(w_{c'}^\top x + b_{c'})}(3) Support Vector Machine (SVM)
\min_{w,b}\ \tfrac{1}{2}\Vert w\Vert ^2 \quad \text{s.t.}\quad y_i(w^\top x_i + b) \ge 1(4) K-Nearest Neighbour (KNN)
k個の学習例を探し、その多数派クラスで分類する。(5) Decision Tree
(6) Random Forest
(7) Neural Network
5.6 ハイパーパラメータの調整と評価
Hold-out(ホールドアウト法):データを train / dev(validation)/ test に分割する。ハイパーパラメータは dev で選び、test は最終結果を報告する際に一度だけ使う。
混同行列(二値分類の例)
Classified As A
Classified As B
True A
79 (TP)
13 (FN)
True B
8 (FP)
10 (TN)
評価指標の計算
Accuracy:正解率
\text{Accuracy} = \frac{TP + TN}{N} = \frac{79+10}{110} = 0.809Precision:適合率:陽性と予測したもののうち、実際に陽性である割合
P = \frac{TP}{TP + FP} = \frac{79}{79+8} = 0.908Recall:再現率:実際の陽性のうち、検出できた割合
R = \frac{TP}{TP + FN} = \frac{79}{79+13} = 0.859F1-Score:適合率と再現率の調和平均
F_1 = \frac{2PR}{P+R} = \frac{2 \times 0.908 \times 0.859}{0.908 + 0.859} = 0.883多クラス分類の指標
指標
方法
特徴
Macro-average
クラスごとに P/R/F1 を計算し、その後クラス間で算術平均を取る
各クラスの重みが等しい。少数クラスの影響が相対的に大きく、ロングテールの性能低下を見つけやすい
Micro-average
全クラスの TP/FP/FN を合算してから P/R/F1 を一度計算する
各サンプルの重みが等しく、大きなクラスが支配的。単一ラベルの多クラス分類では micro-F1 = accuracy
6. 品詞タグ付け(POS Tagging)
6.1 POS とは
定義:文中の各単語に文法カテゴリ(品詞)を付与すること。
例:Janet/NNP will/MD back/VB the/DT bill/NN
応用:
6.2 品詞の分類
開いたクラス(Open class):新語が加わり、古い語が使われなくなることがある
大分類
下位分類
Nouns:名詞
Proper:固有名詞(Melbourne)/Common:普通名詞。普通名詞はさらに Mass:不可算名詞(water)/Count:可算名詞(chair)に分かれる
Lexical verbs:語彙動詞
屈折形が豊富(sing/sang/sung)。用法により他動詞と自動詞に分かれる
Adjectives:形容詞
Gradable:段階性がある(very tall)/Non-gradable:段階性がない(dead)
Adverbs:副詞
Locative:場所(here, there)/Degree:程度(very, extremely)
閉じたクラス(Closed class):比較的固定され、語が増減しにくい
6.3 課題:曖昧性(Ambiguity)
同じ語形が複数の品詞に対応し、その分布も非常に偏っている。
6.4 POS Tagsets:品詞タグ集合
タグ集合
タグ数
特徴
Brown
87
初期のコーパスタグ集合の一つで、細かい分類
Penn Treebank (PTB)
45
NLP で最も広く使われるタグ集合。例:NN, NNS, NNP, VB, VBD, VBG, JJ, RB, IN, DT, MD, CC, PRP…
CLAWS5 / BNC
61
CLAWS の一つの版。タグ数は版によって異なる
初期の Universal Tagset
12
NOUN, VERB, ADJ, ADV, PRON, DET, ADP, NUM, CONJ, PRT, ., X。Universal Dependencies の 17 分類の UPOS と混同しないこと
古典的な曖昧性の例(Penn Treebank のタグ)
同じ flies でも、1 文目では動詞(時が飛ぶように過ぎる)、2 文目では名詞(ショウジョウバエ)。文脈を見なければ判断できない。
7. 隠れマルコフモデル(HMM)
7.1 なぜ HMM が必要なのか
タスク:POS tagging。単語列
W = w_1 \dots w_n全体に対して最適なタグ列T = t_1 \dots t_nを求める。既存手法の問題:各単語を独立に予測するとタグ間の依存関係を利用できない。直前までの予測タグに依存する貪欲な分類器では、先行する誤りが後続の予測に影響する誤り伝播が起こりうる。
新しい考え方:文全体をモデルに渡し、タグ列全体を出力させる。
新たな問題:文の長さは一定でなく、可能なタグの組合せ数は
\vert T\vert ^n、指数的で、全列挙はできない。解決策:単語単位でモデル化しながら、学習と予測では文全体を一つの単位として扱う。これを sequence labelling、または structured prediction と呼ぶ。
HMM の動作:文(単語列)を与え、すべての候補タグ列の中から確率が最大のものを見つける。
利点:
7.2 式
\hat{T} = \arg\max_{T} P(T \mid W) = \arg\max_{T} \frac{P(W \mid T)\,P(T)}{P(W)} = \arg\max_{T} P(W \mid T)\,P(T)(
P(W)はTに依存しないため無視できる。これは ベイズの定理を使って分母を取り除く操作)7.3 2 つの仮定
仮定
内容
役割
Output independence(出力の独立性)
位置
iの単語は、位置iのタグだけに依存し、他の単語やタグには依存しない:P(W\mid T)=\prod_i P(w_i\mid t_i)タグ列を条件とする文全体の確率を、単語ごとの確率の積に分解する
Markov assumption(マルコフ仮定)
現在のタグは直前のタグだけに依存する:
P(T)=\prod_i P(t_i \mid t_{i-1})タグ列の確率を、1 次の遷移確率の積に分解する
したがって、
\hat{T} = \arg\max_{T} \prod_{i=1}^{n} \underbrace{P(w_i \mid t_i)}_{\text{emission}} \cdot \underbrace{P(t_i \mid t_{i-1})}_{\text{transition}}7.4 学習:2 つの確率表を求める
パラメータ
名称
意味
P(w_i \mid t_i)Emission(出力・観測)確率 O
あるタグがある単語を生成する確率
P(t_i \mid t_{i-1})Transition(遷移)確率 A
直前のタグの後に、あるタグが続く確率
推定方法:ここでも最尤推定(MLE)、つまりカウントを使う。
P(w_i \mid t_i) = \frac{\text{Count}(w_i, t_i)}{\text{Count}(t_i)}, \qquad P(t_i \mid t_{i-1}) = \frac{\text{Count}(t_{i-1}, t_i)}{\text{Count}(t_{i-1})}最初のタグの確率はどうするか? 各文の前に特別な開始記号 <s> を置くと、最初の項は
P(t_1 \mid \text{<s>}):P(t_1 \mid \text{<s>}) = \frac{\text{Count}(\text{<s>}, t_1)}{\text{Count}(\text{<s>})}同様に文末に </s> を置き、
P(\text{</s>} \mid t_n)も学習可能な遷移にする。前述の積では簡潔さのためこの文末因子を省いたが、完全な経路確率にはこの因子も掛ける。未知語はどうするか? ここでも平滑化(第 4 節)を使う。出力確率表に add-k / add-one を適用するか、低頻度語を <UNK> にまとめ、<UNK> の出力確率を低頻度語全体で共有する。
7.5 予測
学習済み HMM(2 つの表:遷移行列 A と出力確率行列 O)から、入力文のタグ列を予測する。
基本的な考え方:すべてのタグの組合せから、同時確率が最大のものを選ぶ。
\hat{t} = \arg\max_{t} P(W \mid t)\,P(t) = \arg\max_{t} \prod_{i=1}^{n} P(w_i \mid t_i)\,P(t_i \mid t_{i-1})なぜ 1 語ずつ予測しないのか?(貪欲復号の限界)
\vert T\vert ^n個の列挙は非現実的 → Viterbi の動的計画法で大域最適解を求める。タグ集合の大きさが固定なら、実行時間は文長に対して線形に増える。7.6 生成モデルと識別モデル
観点
Generative(HMM)
Discriminative(CRF/分類器)
モデル化するもの
同時確率
P(X, Y)条件付き確率
P(Y \mid X)(またはP(T\mid W))主な用途
言語の生成が可能。HMM は教師なし学習にも対応
分類、予測、系列ラベリング
学習方式
通常は教師あり・半教師あり。EM による教師なし学習も可能
通常は教師あり学習
特徴
観測自体の出力確率を用いるため、特徴に制約がある
接頭辞・接尾辞、語形、文脈語、外部辞書など豊富な特徴を使える
データ量
単純な構造の仮定は、少量データでの学習に有利な場合がある
データと特徴が十分なら予測性能が高い傾向があるが、タスクとモデルに依存する
代表例
Naïve Bayes、HMM。ニューラル言語モデルも生成的にモデル化できる
ロジスティック回帰、CRF、SVM、分類用ニューラルネットワーク
8. Viterbi アルゴリズム
8.1 基本的な考え方
各位置
tと各タグjについて、タグjで終わる最適経路の累積スコア\delta_t(j)とバックポインタ\psi_t(j)を記録する。8.2 漸化式
\delta_1(j) = P(t_1 = j \mid \text{<s>}) \cdot P(w_1 \mid j)\delta_t(j) = \max_{i \in T}\Big[\delta_{t-1}(i)\cdot P(j \mid i)\Big]\cdot P(w_t \mid j)\psi_t(j) = \arg\max_{i \in T}\Big[\delta_{t-1}(i)\cdot P(j\mid i)\Big]終了処理:
\hat{t}_n = \arg\max_{j}\big[\delta_n(j)\,P(\text{</s>}\mid j)\big], \qquad \hat{t}_{t} = \psi_{t+1}(\hat{t}_{t+1}) \ \text{(バックトラック)}明示的な文末状態がないモデルでは、終了時に
\delta_n(j)を直接比較すればよい。以下の 2 例はいずれもこの簡略化を使う。直感的な例:Can Play
8.3 例 1:Janet will back the bill
遷移行列(一部抜粋。行が条件となる事象
P(\cdot\mid \text{row}))NNP
MD
VB
JJ
NN
RB
DT
<s>
0.2767
0.0006
0.0031
0.0453
0.0449
0.0510
0.2026
NNP
0.3777
0.0110
0.0009
0.0084
0.0584
0.0090
0.0025
MD
0.0008
0.0002
0.7968
0.0005
0.0008
0.1698
0.0041
VB
0.0322
0.0005
0.0050
0.0837
0.0615
0.0514
0.2231
JJ
0.0366
0.0004
0.0001
0.0733
0.4509
0.0036
0.0036
NN
0.0096
0.0176
0.0014
0.0086
0.1216
0.0177
0.0068
RB
0.0068
0.0102
0.1011
0.1012
0.0120
0.0728
0.0479
DT
0.1147
0.0021
0.0002
0.2157
0.4744
0.0102
0.0017
(データは Jurafsky と Martin の Speech and Language Processing 第 18 章 Figure 18.12 による。WSJ コーパスに基づき、平滑化はしていない。タグの一部だけを示しているため、各行の和は 1 とは限らない。正規化されるのは完全な遷移分布。)
出力確率行列(Emission Matrix、Speech and Language Processing、Figure 18.13)
Janet
will
back
the
bill
NNP
0.000032
0
0
0.000048
0
MD
0
0.308431
0
0
0
VB
0
0.000028
0.000672
0
0.000028
JJ
0
0
0.000340
0
0
NN
0
0.000200
0.000223
0
0.002337
RB
0
0
0.010446
0
0
DT
0
0
0
0.506099
0
手順:
\vert T\vert \times nのトレリスを作り、列ごとに\deltaを埋める。各セルには「前の列のどのタグから来たか」を記録し、最終列の最大値から逆向きにたどる。8.4 例 2:they fish(手計算で確認できる)
これは動的計画法を示すためだけの 2 状態のトイモデルで、数値は人工的に設定したもの。N と V は状態ラベルであり、実際の英語で they が動詞になることを意味しない。
出力確率
they
fish
N
0.7
0.3
V
0.4
0.6
遷移確率
N
V
<s>
0.6
0.4
N
0.8
0.2
V
0.7
0.3
全 4 経路の列挙
経路
計算
確率
N N
0.6\times0.7 \times 0.8\times0.30.1008 ✅ 最適
N V
0.6\times0.7 \times 0.2\times0.60.0504
V N
0.4\times0.4 \times 0.7\times0.30.0336
V V
0.4\times0.4 \times 0.3\times0.60.0288
結果:they/N fish/N。fish の出力確率だけを見ると、
P(\text{fish}\mid V)=0.6がP(\text{fish}\mid N)=0.3より大きい。しかし遷移確率を加えると、最適経路は N で終わる。出力確率はタグの事後確率ではなく、それだけでタグは選べない。この例は遷移情報の役割を示すが、遷移も逐次考慮する貪欲復号が必ず失敗することを示す例ではない。8.5 アルゴリズムの性質
性質
説明
時間計算量
O(T^2 N):T= タグ集合の大きさ、N= 系列長。位置は全部でN個あり、各位置のT種類のタグそれぞれについて、前の位置の全Tタグと比較する空間計算量
最適スコアだけなら 2 列を交互に保持でき、必要な空間は
O(T)。経路全体の復元にはO(TN)個のバックポインタを保存する正しく解ける理由
最適部分構造:位置
tのタグjに至る最適経路の接頭部分は、位置t-1のいずれかのタグに至る最適経路でなければならない(そうでなければ接頭部分を置き換えて改善できる)。マルコフ性:現在のタグが与えられれば、未来はそれ以前の履歴に依存しない。各セルで最良の接頭経路スコアだけを残し、劣る経路を安全に捨てられる数値アンダーフロー
確率を掛け続けるとすぐに 0 になる。実装ではすべて対数確率を使う(乗算が加算になり、
O(T^2N)は変わらない)高次の変種
例えばタグの trigram(2 次 HMM):
P(t_i \mid t_{i-2}, t_{i-1})と、interpolation による平滑化を使う。計算量はO(T^3 N)