crfと素性テンプレート

50
CRFと素性テンプレート @uchumik

Upload: kei-uchiumi

Post on 12-Dec-2014

14.993 views

Category:

Economy & Finance


0 download

DESCRIPTION

tokyo nlp 6

TRANSCRIPT

Page 1: Crfと素性テンプレート

CRFと素性テンプレート

@uchumik

Page 2: Crfと素性テンプレート

自己紹介● 某IT企業勤務● ものぐさ

Page 3: Crfと素性テンプレート

今日のお話

1. CRF の説明(実装に必要な部分のみ)2. 素性テンプレートのお話

Page 4: Crfと素性テンプレート

CRF に入る前に…● マシンラーニング界での CRF の立ち居値は何処?

ML界

生成モデルベイジアンの集う修羅の地僕は立ち入れないので説明不可

※ @echizen_tm さんのネタパクりました。

Logistic Regression

SVM

NB

Perceptron

PA

構造学習HMMMIRA

Structured Perceptron

Structured SVM

M^3N CRF

識別関数

識別モデル

Page 5: Crfと素性テンプレート

CRFを理解するには?● CRFはいろんな技術があれこれ使われる● ラベル推定

Viterbi アルゴリズム● パラメータ学習

Forward-Backward アルゴリズム

Page 6: Crfと素性テンプレート

(最低限な)CRFの説明

● CRFとは何するものぞ?● 素性関数とは?● Viterbi アルゴリズム?● パラメータ推定ってどうやるの?

● Forward-Backward アルゴリズム

Page 7: Crfと素性テンプレート

CRFとは何するものぞ?

Page 8: Crfと素性テンプレート

Conditional Random Fields って?● 系列ラベリングに対数線形モデルを適用した物

この発表では CRF と言えば Linear Chain CRF を指すよ。

B B I B I

今すぐ ここ から 逃げだし たい

Y

X

系列ラベリング:入力系列Xが与えられた時に、適切なラベル列Yを与える

B: 文節の開始を示すラベルI: 文節に含まれることを示すラベル

Page 9: Crfと素性テンプレート

適切なラベリングとは

P(Y | X )=exp(W・Φ (X ,Y ))

Z X ,W

訓練データ(正しいラベルが付けられた系列データ)から学習したパラメータWを用いて、入力系列Xに対する出力ラベル系列Yの確率P(Y|X)が最大となるようなラベリングを行う

Z X ,W :Σ Y P(Y | X )=1を保証するための分配関数Φ : 素性関数

W : 素性関数に対する重みベクトル

Viterbi アルゴリズムで効率的に行える(あとで話す)

Page 10: Crfと素性テンプレート

素性関数とは?

Page 11: Crfと素性テンプレート

素性関数とはなんぞ?

Φ k (X ,Y )=Σ tϕ k (X , y t , y t−1)

y t−1 y t

x0 x1 x t xT・・・ ・・・

Φ (X ,Y ) は K 次元のベクトルを返す関数

Φ 0 Φ 1 Φ 2 Φ 3 ...Φ k ... Φ K

ϕ k (X , y t , y t−1)={1 ( y t−1=B , y t=B , xt=ここ.)0 otherwise

現在の位置 t から見て, 1つ前のラベル y_{t-1}と現在のラベル y_t , 観測された素性Xが特定の3つ組の時に1を返すような関数(y_{t-1},y_t,Xの全ての情報を自由に使ってよい)

Page 12: Crfと素性テンプレート

よくある素性関数y t

x t

ϕ 10( y t , y t−1)={1 (y t−1=BOS , y t=B)0 otherwise

y t−1 y t

ϕ 0(今すぐ , B) ϕ 5(から , I )ϕ 1(今すぐ , I ) ϕ 6(逃げ出し , B)ϕ 2(ここ , B) ϕ 7 (逃げ出し , I )ϕ 3(ここ , I ) ϕ 8(たい , B)ϕ 4(から , B) ϕ 9(たい , I )

ϕ 10(B ,BOS )

スペースの省略のためこう書く

観測素性とか言われたりする

遷移素性とか言われたりする

ϕ 14(B ,B)

ϕ 13( I ,EOS )ϕ 12(B ,EOS )ϕ 11( I ,BOS ) ϕ 15(B , I )

ϕ 16( I , B)ϕ 17( I , I )

今すぐ ここ から 逃げだし たい

ラベルの種類は B , I の2つ, 入力系列Xが以下の時には上のような素性関数が作られる

X

Page 13: Crfと素性テンプレート

Viterbi アルゴリズム?

Page 14: Crfと素性テンプレート

Viterbi アルゴリズムって何?(1/5)

● グラフ上の重みが最大となる経路を求める手法● 各位置 t で取り得るラベル種類が L, 系列長が

T の時は O(L^2 T) で最適パスが求まる(まともに取り得るラベルを全列挙するとO(L^T) )

● 各位値 t のノードのスコアが最大となるような t-1 のノードを選んで接続する

Page 15: Crfと素性テンプレート

今すぐ ここ から 逃げだし たい

BOS EOS

B B

I

Viterbi アルゴリズムって何?(2/5)

I

B

I

B

I

B

I

ϕ 10(B ,BOS )が発火

ϕ 11( I ,BOS )

ϕ 14(B ,B)

ϕ 16( I , B)

ϕ 0(今すぐ , B)

ϕ 1(今すぐ , I )

ϕ 2(ここ ,B)

I I B B B というラベル付け

B B I B I というラベル付け

BOS から EOS までの経路を辿るとラベル付けが行えるではどうやって最適な経路を見つけたら良いのか?

Page 16: Crfと素性テンプレート

今すぐ ここ から 逃げだし たい

BOS EOS

B B

I

Viterbi アルゴリズムって何?(3/5)

I

B

I

B

I

B

I

W 1 -1 2 -11 0 1 3 -2 -3 1 3 -2 1 1 1 2 1 -10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

ϕ 10(B ,BOS )が発火

ϕ 11( I ,BOS )

ϕ 14(B ,B)

ϕ 16( I , B)

ϕ 0(今すぐ , B)

ϕ 1(今すぐ , I )

ϕ 2(ここ ,B)

学習済みのパラメータ

Page 17: Crfと素性テンプレート

今すぐ ここ から 逃げだし たい

BOS

B B

I

Viterbi アルゴリズムって何?(4/5)

I

W 1 -1 2 -11 0 1 3 -2 -3 1 3 -2 1 1 1 2 1 -10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

w11+w1=−3

w10+w0=4

w11+w1+w16=−2

w10+w0+w14=5スコアの大きくなる B のノードと接続!

w10+w0+w14+w2=7

^

各ノードごとで最もスコアの大きくなる1つ前のノードと接続する

Page 18: Crfと素性テンプレート

今すぐ ここ から 逃げだし たい

BOS EOS

B B

I

Viterbi アルゴリズムって何?(5/5)

I

B

I

B

I

B

I

EOSから順番にBOSまで、後ろ向きに接続されてるノードを辿ると最適パスになっている!

Page 19: Crfと素性テンプレート

パラメータ推定ってどうやるの?

Page 20: Crfと素性テンプレート

重みベクトル W はどう求めるの?

● 勾配ベクトルの求め方は @sleepy_yoshi さんのブログを見ると良い。● http://d.hatena.ne.jp/sleepy_yoshi/20110329/p1

W t+1 = W t+Φ (X ,Y )−Σ Y 'P (Y ' | X )Φ (X ,Y ' )Yは学習データにある正解のラベル列Y 'は生起しうる全てのラベル列

W の更新式

ΣY ' P (Y ' | X )Φ(X ,Y ' ) が求まれば割と簡単に更新出来る

Forward-Backward アルゴリズムで効率的に求まる

勾配ベクトル

Page 21: Crfと素性テンプレート

ここから Forward-Backward アルゴリズムの話

Page 22: Crfと素性テンプレート

まずは式変形ΣY 'P (Y ' | X )Φ(X ,Y ' )

= ΣY ' P(Y ' | X )Σtϕ(X , y t , y t−1)= Σt Σy t , y t−1 P( y t−1 , y t | X )ϕ(X , y t , y t−1)

位置 t-1 から t へのラベルの遷移確率が求まればよい

y_0,...,y_{t-2} y_{t+1},...,y_T について周辺化することで求められる

Page 23: Crfと素性テンプレート

周辺化とは?● ラベルは B I の2種類で、T=5● 位置 1 が B で、位置 2 が I となる組み合わせ

B B I B BB B I B IB B I I BB B I I II B I B BI B I B II B I I BI B I I I

P( B B I B B ) +P( B B I B I ) +......= P( y1=B , y2=I | X )

が求まる0 1 2 3 4

全部足し合わせてやると

Page 24: Crfと素性テンプレート

P(BB I B B)

= 1Z X ,W

(e(W・ϕ(B , BOS , X , t=0))e(W ・ϕ(B , B , X , t=1)) ...e(W・ϕ(EOS , B , X , t=5)))

今すぐ ここ から 逃げだし たい

BOS EOS

B B

I I

B

I

B

I

素性関数のベクトルϕ ( y0=B , y−1=BOS , X , t=0)が得られる

P(BB I B I )

= 1Z X ,W

(e(W・ϕ(B , BOS , X , t=0))e(W ・ϕ(B , B , X , t=1)) ...e(W・ϕ(EOS , I , X ,t=5)))

Page 25: Crfと素性テンプレート

周辺化した式

P( y t−1 , y t | X )

= e(W・ ϕ(y t , y t−1 , X , t))

Z X ,WΣy 0, ... , y t−2Σy t+1 ,... , yT Πt ' != t e

(W・ ϕ( y t ' , y t '−1 , X , t'))

各位置での遷移確率を計算する場合, 同じ計算が何回も出てくるので, 再計算が起こらないように計算結果を保存しておいて再利用する

Forward-Backward アルゴリズム

Page 26: Crfと素性テンプレート

Forward-Backward アルゴリズムP( y t−1 , y t | X )

= e(W・ ϕ(y t , y t−1 , X , t))

Z X ,WΣy 0,. .. , y t−2Σy t+1 , ... , yT Πt ' != t e

(W・ ϕ( y t ' , y t−1' , X ,t '))

Σ y 0,... , y t−2Σ y t+1 ,... , yT

Πt '!=t e(W ・ϕ(y t ' , y t−1

' , X , t '))

= (Σ y0,. .. , yt−2Πt '=0,. .. ,t−1e

(W・ϕ( yt ' , y t−1' , X , t ')))

(Σy t+1 ,... , yT Πt '=t+1,... ,T+1e(W・ϕ( y t ' , y t−1

' , X , t ')))

α( y t , t )=Σ y 0,... , y t−1Πt '=0,... , t e

(W・ ϕ( y t ' , y t−1' , X ,t '))

β ( y t , t )=Σ y t+1 , ... , yTΠt '=t+1,... , T+1 e

(W・ ϕ( y t ' , y t−1' , X ,t '))

t-1より前とtより後ろで式を分けて

とおくと

Page 27: Crfと素性テンプレート

Forward-Backward アルゴリズムP( y t−1 , y t | X )=e

(W・ϕ( y t , yt −1 , X ,t ))

Z X ,Wα ( y t−1 , t−1)β ( y t , t )

と表せる。

α( y t , t )=Σ y t−1e(W ・ϕ( yt , y t−1 , X , t))α( y t−1 , t−1)

β ( y t , t )=Σ y t+1e(W・ ϕ(y t+1 , yt , X , t+1))β ( y t+1 , t+1)

ただしα (BOS ,−1)=1, β (EOS ,T+1)=1

αとβは次のように表せる

Z X ,W=α(EOS ,T+1)=β (BOS ,−1)となる。

Page 28: Crfと素性テンプレート

e(W・ ϕ( I , B , X , t=2))∗e(W・ ϕ( I , I , X , t=3))∗e(W・ ϕ(I , I , X ,t=4))

+e(W・ ϕ( I , B , X , t= 2))∗e(W・ ϕ( I , I , X , t=3))∗e(W ・ϕ(B , I , X ,t=4))

=e(W・ ϕ(I , B , X ,t=2))∗e(W・ϕ (I , I , X ,t=3))(e(W・ ϕ(I , I , X ,t=4))+e(W・ϕ(B , I , X , t=4)))

今すぐ ここ から 逃げだし たい

BOS EOS

B B

I I

B

I

B

I

素性関数のベクトルϕ ( y0=B , y−1=BOS , X , t=0)が得られる

途中の計算結果を保存しておくと再計算の必要が無くなる。

Page 29: Crfと素性テンプレート

今すぐ ここ から 逃げだし たい

BOS EOS

B B

I I

B

I

B

I

α(B , t=1)

β ( I ,t=2)

ϕ ( y2=I , y1=B , X , t=2)

P( y1=B , y2=I | X )=e(W・ϕ ( y2=I , y1=B , X ,t=2))

Z X ,Wα(B ,t=1)β ( I , t=2)

Page 30: Crfと素性テンプレート

学習まとめ1. 学習事例を1つ読み込む2. 現在のパラメータWtを使って勾配ベクトルを計算

1.Forward-Backward で各ノードのα, βを計算2.α,βを使って各位置での遷移確率を求めて勾配ベクトル

を作成3. Wt に勾配ベクトルを足し込んで Wt+1とする4.1-3. を繰り返す

勾配法とか学習率のスケジューリングとか正則化とかいろいろあるけどそれらはここでは説明しない

Page 31: Crfと素性テンプレート

ここから素性テンプレートの話をするよ!

Page 32: Crfと素性テンプレート

素性テンプレートの説明

● 何が出来るの?● どう書くの?● 素性関数は?● 素性関数のID管理ってどうしてる?

Page 33: Crfと素性テンプレート

Q&A

Q「素性テンプレートって何が出来るの?」

A「素性関数のデザインが出来るよ。」

Page 34: Crfと素性テンプレート

どう書くの?

Page 35: Crfと素性テンプレート

テンプレートの例(1/5)

U01:%x[0,0]

y t

x t

今すぐ ここ から 逃げだし たいX

-1 0 1 2 3t

現在の位置のラベルのみ見る観測された素性x_t に Prefix として付加される

指定された位置の観測された素性を取り出すマクロ

210

現在の位置 t からの相対位置 指定された位置の何行目の素性を取るか

形容動詞 名詞 助詞 動詞 助動詞形動 名詞場所 格助詞 サ五 助動詞たい

Page 36: Crfと素性テンプレート

テンプレートの例(2/5)

U01:%x[0,0] U01:ここU02:%x[0,1] U02:名詞

の様に置き換わる

y t

x t

今すぐ ここ から 逃げだし たいX

-1 0 1 2 3t

210

形容動詞 名詞 助詞 動詞 助動詞形動 名詞場所 格助詞 サ五 助動詞たい

Page 37: Crfと素性テンプレート

テンプレートの例(3/5)

y t−1 y t

B

位置 t とt-1 の2つのラベルを見る

各位置 t で B という素性が取り出される

Page 38: Crfと素性テンプレート

テンプレートの例(4/5)

y t−1 y t

x t

B01:%x[0,0]

B01:ここ と置き換わる

今すぐ ここ から 逃げだし たいX

-1 0 1 2 3

t

210

形容動詞 名詞 助詞 動詞 助動詞形動 名詞場所 格助詞 サ五 助動詞たい

Page 39: Crfと素性テンプレート

テンプレートの例(5/5)y t

x t−1 x t

U03:%x[-1,0]/%[0,0] U04:%x[-1,0]/%[0,0]/%x[1,0]観測値の bigram 観測値の trigram

“/”はただの文字列として観測された素性に付加される

y t

x t−1 x t x t+1

Page 40: Crfと素性テンプレート

素性関数は?

Page 41: Crfと素性テンプレート

素性関数はどうした。テンプレートに従って取り出された観測された素性について先頭のU,Bに従って素性関数が作られる

U01:ここマクロで取り出された素性

ラベルの種類は B と I の2種類だとしたら

ϕ 0(U01 :ここ , B)ϕ 1(U01:ここ , I )

が作られる

Prefix があるおかげで, 観測された値が位置 t からどの位置にあるのかが区別出来る

Page 42: Crfと素性テンプレート

B とだけあるのはどうなるの?

Bマクロで取り出された素性

ϕ 10(B ,B ,BOS )ϕ 11(B , I , BOS )ϕ 12(B ,B ,EOS )ϕ 13(B , I ,EOS )

ϕ 10(B ,B , B)ϕ 11(B , I ,B)ϕ 12(B ,B ,E )ϕ 13(B , I ,E)

という素性関数が作られる

入力系列Xに依存しないため, 全ての位置についてBという素性が取り出され, ラベル遷移だけを見る事が出来る

Page 43: Crfと素性テンプレート

素性関数のID管理はどうしてる?

Page 44: Crfと素性テンプレート

内部での表現“U01:ここ-B” = 0“U01:ここ-I” = 1

...

Q. みたいな Key と ID のペアを用意してハッシュにでも入れるの?A. それでも出来るけど素性関数のIDチェックする度に文字列作る事に

なるから遅い。それに組み合わせが多すぎてハッシュがメモリ馬鹿食いしちゃう。

Q. じゃあどうやって ID を管理するのさ?

Page 45: Crfと素性テンプレート

Idの管理(1/2)

素性テンプレートで取りだされた観測値が U の時は

素性テンプレートで取りだされた観測値が B の時は

ラベル数L∗Uで始まる素性数

の素性関数が作られる

(2∗L+L2)∗Bで始まる素性数

の素性関数が作られ, 重みベクトルWの要素数は

(2∗L+L2)∗Bで始まる素性数ラベル数L∗Uで始まる素性数 +

になる

(Unigram Feature)

(Bigram Feature)

Page 46: Crfと素性テンプレート

Idの管理(2/2)

Wパラメータの構造を下のようにする

Unigram Feature のパラメータ Bigram Feature のパラメータ

素性とラベルには予め ID を付けておいて

φ(0,0), φ(0,1),φ(1,0),φ(1,1),.... ,φ(0,0,0),φ(0,0,1),φ(0,1,0),φ(0,1,1),...

Unigram Feature のパラメータ Bigram Feature のパラメータ

と対応づける

Page 47: Crfと素性テンプレート

すると・・・今すぐ ここ から 逃げだし たいX

U01:%x[0,0]B素性テンプレート

U01:今すぐ U01:ここ U01:から U01:逃げ出し U01:たいB B B B B

0 1 2 3 40 0 0 0 0

Unigram Feature のIDBigram Feature のID

Page 48: Crfと素性テンプレート

BOS EOS

0 0

1

素性ID と ラベル ID の組から対応するWの要素が直で参照出来る

1

0

1

0

1

0

1

ϕ 14(0,0,0)

ϕ 16(0,1,0)

ϕ 0(0,0)

ϕ 1(0, 1)

ϕ 2(1,0)

0 1 2 3 40 0 0 0 0

0*L+0

W 1 -1 2 -11 0 1 3 -2 -3 1 3 -2 1 1 1 2 1 -10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

Unigram Feature 数10 + (2L+L^2)*0 + 2L + 1*L + 0 = 16

1つ前のラベルID カレントのラベル ID

X

Page 49: Crfと素性テンプレート

結論● 素性関数は対応するパラメータWだけ作る● 素性とラベルにだけ ID を付ける

● Unigram Feature と Bigram Feature は別管理● 系列Xにテンプレートを適用して素性 ID 列にする

● ラティスのノードに付けられたラベルIDと各位置の素性IDから対応するWの要素を直で参照する

Page 50: Crfと素性テンプレート

まとめ● 「言語処理のための機械学習入門」(高村大也, 奥村学)

を読めば今日の話はもっと詳しく載ってるので、これを読めば良いと思う。