CRFと素性テンプレート


    @uchumik
自己紹介
●   某IT企業勤務
●
    ものぐさ
今日のお話

1. CRF の説明(実装に必要な部分のみ)
2. 素性テンプレートのお話
CRF に入る前に…
●   マシンラーニング界での CRF の立ち居値は何処?

      ML界                        Logistic Regression


           SVM                                         識別モデル

       Perceptron         M^3N             CRF
                     Structured SVM
          PA        Structured
                    Perceptron
                        MIRA             HMM
      識別関数
                                 構造学習

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

※ @echizen_tm さんのネタパクりました。
CRFを理解するには?
●   CRFはいろんな技術があれこれ使われる
●
    ラベル推定
       Viterbi アルゴリズム
●
    パラメータ学習
       Forward-Backward アルゴリズム
(最低限な)CRFの説明

●   CRFとは何するものぞ?
●
    素性関数とは?
●   Viterbi アルゴリズム?
●
    パラメータ推定ってどうやるの?
    ●   Forward-Backward アルゴリズム
CRFとは何するものぞ?
Conditional Random Fields って?
●
    系列ラベリングに対数線形モデルを適用した物


       Y     B    B     I     B          I

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



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


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


この発表では CRF と言えば Linear Chain CRF を指すよ。
適切なラベリングとは
                exp(W ・Φ ( X ,Y ))
     P(Y | X )=
                      Z X ,W
     Z X ,W : Σ Y P(Y | X )=1 を保証するための分配関数
                           Φ : 素性関数
              W : 素性関数に対する重みベクトル

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

             Viterbi アルゴリズムで効率的に行える
              (あとで話す)
素性関数とは?
素性関数とはなんぞ?
     Φ ( X , Y ) は K 次元のベクトルを返す関数
     Φ0 Φ1 Φ2 Φ3                                   ...Φ k ...                 ΦK

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

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

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


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


   ϕ 10 ( y t , y t −1)=
           0               {
           1 ( y t −1=BOS , y t =B) 観測素性とか言われたりする
                     otherwise
                                        ϕ 0 (今すぐ , B) ϕ 5 (から , I )
        ϕ 10 ( B , BOS ) ϕ 14 ( B , B) ϕ (今すぐ , I ) ϕ (逃げ出し , B)
                                          1             6
スペースの省略 ϕ 11 ( I , BOS ) ϕ 15 ( B , I ) ϕ 2 (ここ , B)  ϕ 7 (逃げ出し , I )
のためこう書く ϕ ( B , EOS ) ϕ 16 ( I , B)
          12                            ϕ 3 (ここ , I ) ϕ 8 (たい , B)
        ϕ 13 ( I , EOS ) ϕ 17 ( I , I ) ϕ 4 (から , B)  ϕ 9 (たい , I )
   ラベルの種類は B , I の2つ, 入力系列Xが以下の時には上のような素性関数が作られる


                  X            今すぐ ここ   から   逃げだし   たい
Viterbi アルゴリズム?
Viterbi アルゴリズムって何?(1/5)
●
    グラフ上の重みが最大となる経路を求める手法
●   各位置 t で取り得るラベル種類が L, 系列長が
    T の時は O(L^2 T) で最適パスが求まる
    (まともに取り得るラベルを全列挙するとO(L^T) )
●   各位値 t のノードのスコアが最大となるような t-1 の
    ノードを選んで接続する
Viterbi アルゴリズムって何?(2/5)
     ϕ 1(今すぐ , I )

ϕ 11 ( I , BOS )     I           I       I            I     I



      BOS                                                        EOS
               ϕ 16 ( I , B)


ϕ 10 ( B , BOS ) B             B           B          B     B
   が発火
          ϕ 0 (今すぐ , B) ϕ 14 ( B , B) ϕ 2 (ここ , B)
                   今すぐ         ここ       から           逃げだし   たい

           I   I    B    B     B というラベル付け        BOS から EOS までの経路を辿
                                                 るとラベル付けが行える
           B   B    I    B     I というラベル付け        ではどうやって最適な経路を見
                                                 つけたら良いのか?
Viterbi アルゴリズムって何?(3/5)
     ϕ 1(今すぐ , I )

ϕ 11 ( I , BOS )    I          I         I            I     I



      BOS                                                        EOS
              ϕ 16 ( I , B)


ϕ 10 ( B , BOS ) B             B           B          B     B
   が発火
          ϕ 0 (今すぐ , B) ϕ 14 ( B , B) ϕ 2 (ここ , B)
                   今すぐ        ここ        から           逃げだし   たい


      W     1 -1 2 -1 0 1 3 -2 -3 1 3 -2 1 1 1 2 1 -1
            0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
                         学習済みのパラメータ
Viterbi アルゴリズムって何?(4/5)
        w 11 +w 1=−3

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

BOS                 w 11 +w 1+ w 16=−2
                               ^
                     w 10 +w 0 +w 14 =5
                                スコアの大きくなる
            B             B     B のノードと接続!
         w 10 + w 0=4        w 10 + w 0+w 14 +w 2 =7

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


W     1 -1 2 -1 0 1 3 -2 -3 1 3 -2 1 1 1 2 1 -1
      0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Viterbi アルゴリズムって何?(5/5)

       I     I   I     I     I



BOS                               EOS




       B    B    B     B     B



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

EOSから順番にBOSまで、後ろ向きに接続されてる
ノードを辿ると最適パスになっている!
パラメータ推定ってどうやるの?
重みベクトル W はどう求めるの?
    W の更新式                               勾配ベクトル
                W t+1 = W t +Φ ( X ,Y )− Σ Y P (Y | X )Φ ( X ,Y )
                                                 '             '
                                            '


                Y は学習データにある正解のラベル列
                  '
                Y は生起しうる全てのラベル列


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




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

●   勾配ベクトルの求め方は @sleepy_yoshi さん
    のブログを見ると良い。
     ●   http://d.hatena.ne.jp/sleepy_yoshi/20110329/p1
ここから Forward-Backward アルゴリズムの話
まずは式変形
Σ Y P (Y | X )Φ( X , Y )
            '                    '
   '



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


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




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



                      y_0,...,y_{t-2} y_{t+1},...,y_T について
                      周辺化することで求められる
周辺化とは?
●   ラベルは B I の2種類で、T=5
●   位置 1 が B で、位置 2 が I となる組み合わせ

    B   B   I   B   B    P( B B I B B ) +
    B   B   I   B   I    P( B B I B I ) +
    B   B   I   I   B    .
    B   B   I   I   I    .
    I   B   I   B   B    .
    I   B   I   B   I    .
    I   B   I   I   B    .
    I   B   I   I   I    .   全部足し合わせてやると
                         = P ( y 1= B , y 2= I | X )
    0   1   2   3   4
                                が求まる
P(B B I B B)
    1       ( W ・ϕ ( B , BOS , X , t =0) ) (W ・ϕ ( B , B , X , t =1))      ( W ・ϕ ( EOS , B , X , t =5))
=        (e                               e                           ...e                               )
  Z X ,W
P(B B I B I )
    1       ( W ・ϕ ( B , BOS , X , t =0) ) (W ・ϕ ( B , B , X , t =1))      ( W ・ϕ ( EOS , I , X ,t =5))
=        (e                               e                           ...e                             )
  Z X ,W

                         I                          I             I             I



          BOS                                                                              EOS




                        B             B                           B             B


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

            素性関数のベクトル ϕ ( y 0=B , y −1=BOS , X , t=0)が得られる
周辺化した式

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

                                           Σy                       Σy                       Π t != t e
                                                                                                                    '    '


                                                     ... , y t− 2               ,... , y T      '
                Z X ,W                          0,                       t+ 1




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


                                     Forward-Backward アルゴリズム
Forward-Backward アルゴリズム
P ( y t−1 , y t | X )
        (W ・ ϕ ( y t , y t − 1 , X , t))
    e                                                                                                                                                ( W ・ ϕ( y t ' , y't−1 , X ,t ' ))
=                                                       Σy                 .. , y t − 2   Σy                  , ... , y T   Π t != t e
                                                                                                                                 '
                Z X ,W                                               0,.                               t+ 1




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

               Σy   0,.
                          .. , y t − 2   Σy    t +1
                                                      ,... , y T       Πt ! =t e'


                                                                                               (W ・ϕ ( yt ' , y 't − 1 , X , t ' ))
               = (Σ y            0,.   .. , yt− 2   Π t =0,. .. ,t −1 e
                                                          '                                                                                      )
                                                                                                                                     ( W ・ϕ ( y t ' , y t − 1 , X , t ))
                                                                                                                                                                '      '

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

                 t-1より前とtより後ろで式を分けて
                                                                                                                   (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    , ... , y T     Π t =t+1,... , T +1 e
                                                                                               '




                とおくと
Forward-Backward アルゴリズム
                          ( W ・ϕ ( y t , yt −1 , X ,t ))
                       e
P ( y t−1 , y t | X )=                                     α ( y t−1 , t −1) β ( y t , t )
                       Z X ,W
     と表せる。
     α と β は次のように表せる

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




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




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

     Z X ,W = α ( EOS ,T +1)= β (BOS ,−1)となる 。
e( W ・ ϕ( I , B , X , t=2))∗e(W ・ ϕ ( I , I , X , t=3))∗e(W ・ ϕ (I , I , X ,t =4))
                                                             +
                   (W ・ ϕ( I , B , X , t= 2))      (W ・ ϕ ( I , I , X , t =3))    (W ・ϕ (B , I , X ,t =4))
                e                            ∗e                               ∗e
                                                             =
  (W ・ ϕ ( I , B , X ,t =2))     ( W ・ ϕ ( I , I , X ,t =3))     (W ・ ϕ (I , I , X ,t =4))    (W ・ϕ ( B , I , X , t=4))
e                           ∗e                               (e                           +e                            )
            途中の計算結果を保存しておくと
            再計算の必要が無くなる。

                         I                                  I                I                I



       BOS                                                                                                 EOS




                         B                B                                 B                 B


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

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



BOS                                                                                EOS

            α ( B , t =1)


       B         B                                    B                  B


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

                 P ( y 1=B , y 2= I | X )=
                              ( W ・ ϕ ( y 2 =I , y1= B , X ,t =2))
                            e
                                                                     α ( B ,t =1) β ( I , t =2)
                                          Z X ,W
学習まとめ
1. 学習事例を1つ読み込む
2. 現在のパラメータWtを使って勾配ベクトルを計算
 1.Forward-Backward で各ノードのα, βを計算
 2.α,βを使って各位置での遷移確率を求めて勾配ベクトル
   を作成
3. Wt に勾配ベクトルを足し込んで Wt+1とする
4.1-3. を繰り返す

   勾配法とか学習率のスケジューリングとか正則化とか
   いろいろあるけどそれらはここでは説明しない
ここから素性テンプレートの話をするよ!
素性テンプレートの説明

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

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

A「素性関数のデザインが出来るよ。」
どう書くの?
テンプレートの例(1/5)
                         yt


                         xt

          2 形動         名詞場所      格助詞    サ五   助動詞たい
      X   1 形容動詞       名詞        助詞     動詞     助動詞
          0 今すぐ        ここ        から     逃げだし   たい


             -1         0        1       2     3
                        t
  現在の位置 t からの相対位置                指定された位置の何行目の素性を取るか
                   U01:%x[0,0]
                                 指定された位置の観測された
                                 素性を取り出すマクロ
現在の位置のラベルのみ見る
                  観測された素性x_t に Prefix
                  として付加される
テンプレートの例(2/5)
                   yt


                   xt

    2 形動          名詞場所    格助詞     サ五   助動詞たい
X   1 形容動詞        名詞      助詞      動詞     助動詞
    0 今すぐ         ここ      から      逃げだし   たい


       -1         0        1       2     3
                  t
    U01:%x[0,0]          U01:ここ
    U02:%x[0,1]          U02:名詞

            の様に置き換わる
テンプレートの例(3/5)
     y t−1       yt


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

位置 t とt-1 の2つのラベルを見る
テンプレートの例(4/5)
    y t−1        yt          B01:%x[0,0]


                 xt
                             B01:ここ        と置き換わる

    2 形動              名詞場所     格助詞         サ五   助動詞たい
X   1 形容動詞            名詞       助詞          動詞     助動詞
    0 今すぐ             ここ       から          逃げだし   たい


            -1        0         1           2     3
                      t
テンプレートの例(5/5)
                   yt                       yt




x t−1             xt          x t−1         xt          x t+1




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

             “/”はただの文字列として観測された素性に付加される
素性関数は?
素性関数はどうした。
テンプレートに従って取り出された観測された素性について
先頭のU,Bに従って素性関数が作られる

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

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

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

が作られる

Prefix があるおかげで, 観測された値が位置 t からどの位置に
あるのかが区別出来る
B とだけあるのはどうなるの?

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

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

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

入力系列Xに依存しないため, 全ての位置についてBという
 素性が取り出され, ラベル遷移だけを見る事が出来る
素性関数のID管理はどうしてる?
内部での表現
             “U01:ここ-B” = 0
             “U01:ここ-I” = 1
                   ...

Q. みたいな Key と ID のペアを用意してハッシュにでも入れるの?
A. それでも出来るけど素性関数のIDチェックする度に文字列作る事に
   なるから遅い。
   それに組み合わせが多すぎてハッシュがメモリ馬鹿食いしちゃう。


   Q. じゃあどうやって ID を管理するのさ?
Idの管理(1/2)
素性テンプレートで取りだされた観測値が U の時は (Unigram Feature)

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

の素性関数が作られる

素性テンプレートで取りだされた観測値が B の時は (Bigram Feature)
           2
      (2∗L+L )∗Bで始まる素性数

の素性関数が作られ, 重みベクトルWの要素数は
                           2
ラベル数L∗Uで始まる素性数     +   (2∗L+L )∗Bで始まる素性数
になる
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 のパラメータ


と対応づける
すると・・・
U01:%x[0,0]
B           X           今すぐ ここ      から   逃げだし    たい
素性テンプレート


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



Unigram Feature のID 0      1        2        3          4
 Bigram Feature のID 0      0        0        0          0
素性ID と ラベル ID の組から対応するWの
       要素が直で参照出来る
        ϕ 1(0, 1)

                 1        1           1         1         1



 BOS                             1つ前のラベルID          カレントのラベル ID EOS
          ϕ 16 (0,1,0)
  Unigram Feature 数10 + (2L+L^2)*0 + 2L + 1*L + 0 = 16


                 0        0           0         0         0

  ϕ 0 (0,0)          ϕ 14 (0,0,0) ϕ 2 (1,0)
0*L+0           0         1            2         3         4
            X   0         0            0         0         0

        W       1 -1 2 -1 0 1 3 -2 -3 1 3 -2 1 1 1 2 1 -1
                0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
結論
●   素性関数は対応するパラメータWだけ作る
●   素性とラベルにだけ ID を付ける
    ●   Unigram Feature と Bigram Feature は別管理
●   系列Xにテンプレートを適用して素性 ID 列にする
    ●   ラティスのノードに付けられたラベルIDと各位置の素性
        IDから対応するWの要素を直で参照する
まとめ
●   「言語処理のための機械学習入門」(高村大也, 奥村学)

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

Crfと素性テンプレート

  • 1.
  • 2.
    自己紹介 ● 某IT企業勤務 ● ものぐさ
  • 3.
  • 4.
    CRF に入る前に… ● マシンラーニング界での CRF の立ち居値は何処? ML界 Logistic Regression SVM 識別モデル Perceptron M^3N CRF Structured SVM PA Structured Perceptron MIRA HMM 識別関数 構造学習 ベイジアンの集う修羅の地 生成モデル 僕は立ち入れないので説明不可 NB ※ @echizen_tm さんのネタパクりました。
  • 5.
    CRFを理解するには? ● CRFはいろんな技術があれこれ使われる ● ラベル推定 Viterbi アルゴリズム ● パラメータ学習 Forward-Backward アルゴリズム
  • 6.
    (最低限な)CRFの説明 ● CRFとは何するものぞ? ● 素性関数とは? ● Viterbi アルゴリズム? ● パラメータ推定ってどうやるの? ● Forward-Backward アルゴリズム
  • 7.
  • 8.
    Conditional Random Fieldsって? ● 系列ラベリングに対数線形モデルを適用した物 Y B B I B I X 今すぐ ここ から 逃げだし たい B: 文節の開始を示すラベル I: 文節に含まれることを示すラベル 系列ラベリング:入力系列Xが与えられた時に、適切なラベル列Yを与える この発表では CRF と言えば Linear Chain CRF を指すよ。
  • 9.
    適切なラベリングとは exp(W ・Φ ( X ,Y )) P(Y | X )= Z X ,W Z X ,W : Σ Y P(Y | X )=1 を保証するための分配関数 Φ : 素性関数 W : 素性関数に対する重みベクトル 訓練データ(正しいラベルが付けられた系列データ)から学 習したパラメータWを用いて、入力系列Xに対する出力ラベル 系列Yの確率P(Y|X)が最大となるようなラベリングを行う Viterbi アルゴリズムで効率的に行える (あとで話す)
  • 10.
  • 11.
    素性関数とはなんぞ? Φ ( X , Y ) は K 次元のベクトルを返す関数 Φ0 Φ1 Φ2 Φ3 ...Φ k ... ΦK Φ k ( X ,Y )= Σ t ϕ k ( X , y t , y t −1 ) ϕ k ( X , y t , y t−1 )= { 1 ( y t −1=B , y t=B , xt =ここ.) 0 otherwise y t−1 yt 現在の位置 t から見て, 1つ前の ラベル y_{t-1}と現在のラベル y_t , 観測された素性Xが特定の 3つ組の時に1を返すような関数 (y_{t-1},y_t,Xの全ての情報を自 x0 x1 ・・・ xt ・・・ xT 由に使ってよい)
  • 12.
    よくある素性関数 yt y t−1 yt 遷移素性とか言われたりする xt ϕ 10 ( y t , y t −1)= 0 { 1 ( y t −1=BOS , y t =B) 観測素性とか言われたりする otherwise ϕ 0 (今すぐ , B) ϕ 5 (から , I ) ϕ 10 ( B , BOS ) ϕ 14 ( B , B) ϕ (今すぐ , I ) ϕ (逃げ出し , B) 1 6 スペースの省略 ϕ 11 ( I , BOS ) ϕ 15 ( B , I ) ϕ 2 (ここ , B) ϕ 7 (逃げ出し , I ) のためこう書く ϕ ( B , EOS ) ϕ 16 ( I , B) 12 ϕ 3 (ここ , I ) ϕ 8 (たい , B) ϕ 13 ( I , EOS ) ϕ 17 ( I , I ) ϕ 4 (から , B) ϕ 9 (たい , I ) ラベルの種類は B , I の2つ, 入力系列Xが以下の時には上のような素性関数が作られる X 今すぐ ここ から 逃げだし たい
  • 13.
  • 14.
    Viterbi アルゴリズムって何?(1/5) ● グラフ上の重みが最大となる経路を求める手法 ● 各位置 t で取り得るラベル種類が L, 系列長が T の時は O(L^2 T) で最適パスが求まる (まともに取り得るラベルを全列挙するとO(L^T) ) ● 各位値 t のノードのスコアが最大となるような t-1 の ノードを選んで接続する
  • 15.
    Viterbi アルゴリズムって何?(2/5) ϕ 1(今すぐ , I ) ϕ 11 ( I , BOS ) I I I I I BOS EOS ϕ 16 ( I , B) ϕ 10 ( B , BOS ) B B B B B が発火 ϕ 0 (今すぐ , B) ϕ 14 ( B , B) ϕ 2 (ここ , B) 今すぐ ここ から 逃げだし たい I I B B B というラベル付け BOS から EOS までの経路を辿 るとラベル付けが行える B B I B I というラベル付け ではどうやって最適な経路を見 つけたら良いのか?
  • 16.
    Viterbi アルゴリズムって何?(3/5) ϕ 1(今すぐ , I ) ϕ 11 ( I , BOS ) I I I I I BOS EOS ϕ 16 ( I , B) ϕ 10 ( B , BOS ) B B B B B が発火 ϕ 0 (今すぐ , B) ϕ 14 ( B , B) ϕ 2 (ここ , B) 今すぐ ここ から 逃げだし たい W 1 -1 2 -1 0 1 3 -2 -3 1 3 -2 1 1 1 2 1 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 学習済みのパラメータ
  • 17.
    Viterbi アルゴリズムって何?(4/5) w 11 +w 1=−3 各ノードごとで最もスコアの大きくなる I I 1つ前のノードと接続する BOS w 11 +w 1+ w 16=−2 ^ w 10 +w 0 +w 14 =5 スコアの大きくなる B B B のノードと接続! w 10 + w 0=4 w 10 + w 0+w 14 +w 2 =7 今すぐ ここ から 逃げだし たい W 1 -1 2 -1 0 1 3 -2 -3 1 3 -2 1 1 1 2 1 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
  • 18.
    Viterbi アルゴリズムって何?(5/5) I I I I I BOS EOS B B B B B 今すぐ ここ から 逃げだし たい EOSから順番にBOSまで、後ろ向きに接続されてる ノードを辿ると最適パスになっている!
  • 19.
  • 20.
    重みベクトル W はどう求めるの? W の更新式 勾配ベクトル W t+1 = W t +Φ ( X ,Y )− Σ Y P (Y | X )Φ ( X ,Y ) ' ' ' Y は学習データにある正解のラベル列 ' Y は生起しうる全てのラベル列 Σ Y P (Y | X )Φ( X , Y ) が求まれば割と簡単に更新出来る ' ' ' Forward-Backward アルゴリズムで効率的に求まる ● 勾配ベクトルの求め方は @sleepy_yoshi さん のブログを見ると良い。 ● http://d.hatena.ne.jp/sleepy_yoshi/20110329/p1
  • 21.
  • 22.
    まずは式変形 Σ Y P(Y | X )Φ( X , Y ) ' ' ' = ΣY P (Y ' | X ) Σ t ϕ( X , y t , y t −1 ) ' = Σt Σ y , y P ( y t−1 , y t | X ) ϕ( X , y t , y t −1) t t−1 位置 t-1 から t へのラベルの遷移確率が求まればよい y_0,...,y_{t-2} y_{t+1},...,y_T について 周辺化することで求められる
  • 23.
    周辺化とは? ● ラベルは B I の2種類で、T=5 ● 位置 1 が B で、位置 2 が I となる組み合わせ B B I B B P( B B I B B ) + B B I B I P( B B I B I ) + B B I I B . B B I I I . I B I B B . I B I B I . I B I I B . I B I I I . 全部足し合わせてやると = P ( y 1= B , y 2= I | X ) 0 1 2 3 4 が求まる
  • 24.
    P(B B IB B) 1 ( W ・ϕ ( B , BOS , X , t =0) ) (W ・ϕ ( B , B , X , t =1)) ( W ・ϕ ( EOS , B , X , t =5)) = (e e ...e ) Z X ,W P(B B I B I ) 1 ( W ・ϕ ( B , BOS , X , t =0) ) (W ・ϕ ( B , B , X , t =1)) ( W ・ϕ ( EOS , I , X ,t =5)) = (e e ...e ) Z X ,W I I I I BOS EOS B B B B 今すぐ ここ から 逃げだし たい 素性関数のベクトル ϕ ( y 0=B , y −1=BOS , X , t=0)が得られる
  • 25.
    周辺化した式 P ( yt−1 , y t | X ) (W ・ ϕ ( y t , y t − 1 , X , t)) e ( W ・ ϕ( y t , y t − 1 , X , t )) = ' Σy Σy Π t != t e ' ' ... , y t− 2 ,... , y T ' Z X ,W 0, t+ 1 各位置での遷移確率を計算する場合, 同じ計算が何回も出てくるので, 再計算が起こらないように計算結果を保存しておいて再利用する Forward-Backward アルゴリズム
  • 26.
    Forward-Backward アルゴリズム P (y t−1 , y t | X ) (W ・ ϕ ( y t , y t − 1 , X , t)) e ( W ・ ϕ( y t ' , y't−1 , X ,t ' )) = Σy .. , y t − 2 Σy , ... , y T Π t != t e ' Z X ,W 0,. t+ 1 (W ・ϕ (y t ' , y t− 1 , X , t )) ' ' Σy 0,. .. , y t − 2 Σy t +1 ,... , y T Πt ! =t e' (W ・ϕ ( yt ' , y 't − 1 , X , t ' )) = (Σ y 0,. .. , yt− 2 Π t =0,. .. ,t −1 e ' ) ( W ・ϕ ( y t ' , y t − 1 , X , t )) ' ' ( Σy t+ 1 ,... , y T Π t =t +1,... ,T +1 e ' ) t-1より前とtより後ろで式を分けて (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 , ... , y T Π t =t+1,... , T +1 e ' とおくと
  • 27.
    Forward-Backward アルゴリズム ( W ・ϕ ( y t , yt −1 , X ,t )) e P ( y t−1 , y t | X )= α ( y t−1 , t −1) β ( y t , t ) Z X ,W と表せる。 α と β は次のように表せる α ( y t , t )=Σ y e(W ・ϕ ( y , y , X , t) ) α ( y t −1 , t −1) t− 1 t t− 1 β ( y t , t )=Σ y e(W ・ ϕ ( y , y , X , t+1)) β ( y t +1 , t +1) t+1 t+ 1 t ただし α (BOS ,−1)=1, β ( EOS , T +1)=1 Z X ,W = α ( EOS ,T +1)= β (BOS ,−1)となる 。
  • 28.
    e( W ・ϕ( I , B , X , t=2))∗e(W ・ ϕ ( I , I , X , t=3))∗e(W ・ ϕ (I , I , X ,t =4)) + (W ・ ϕ( I , B , X , t= 2)) (W ・ ϕ ( I , I , X , t =3)) (W ・ϕ (B , I , X ,t =4)) e ∗e ∗e = (W ・ ϕ ( I , B , X ,t =2)) ( W ・ ϕ ( I , I , X ,t =3)) (W ・ ϕ (I , I , X ,t =4)) (W ・ϕ ( B , I , X , t=4)) e ∗e (e +e ) 途中の計算結果を保存しておくと 再計算の必要が無くなる。 I I I I BOS EOS B B B B 今すぐ ここ から 逃げだし たい 素性関数のベクトル ϕ ( y 0=B , y −1=BOS , X , t=0)が得られる
  • 29.
    ϕ ( y2=I , y 1=B , X , t=2) β ( I ,t = 2) I I I I BOS EOS α ( B , t =1) B B B B 今すぐ ここ から 逃げだし たい P ( y 1=B , y 2= I | X )= ( W ・ ϕ ( y 2 =I , y1= B , X ,t =2)) e α ( B ,t =1) β ( I , t =2) Z X ,W
  • 30.
    学習まとめ 1. 学習事例を1つ読み込む 2. 現在のパラメータWtを使って勾配ベクトルを計算 1.Forward-Backward で各ノードのα, βを計算 2.α,βを使って各位置での遷移確率を求めて勾配ベクトル を作成 3. Wt に勾配ベクトルを足し込んで Wt+1とする 4.1-3. を繰り返す 勾配法とか学習率のスケジューリングとか正則化とか いろいろあるけどそれらはここでは説明しない
  • 31.
  • 32.
    素性テンプレートの説明 ● 何が出来るの? ● どう書くの? ● 素性関数は? ● 素性関数のID管理ってどうしてる?
  • 33.
  • 34.
  • 35.
    テンプレートの例(1/5) yt xt 2 形動 名詞場所 格助詞 サ五 助動詞たい X 1 形容動詞 名詞 助詞 動詞 助動詞 0 今すぐ ここ から 逃げだし たい -1 0 1 2 3 t 現在の位置 t からの相対位置 指定された位置の何行目の素性を取るか U01:%x[0,0] 指定された位置の観測された 素性を取り出すマクロ 現在の位置のラベルのみ見る 観測された素性x_t に Prefix として付加される
  • 36.
    テンプレートの例(2/5) yt xt 2 形動 名詞場所 格助詞 サ五 助動詞たい X 1 形容動詞 名詞 助詞 動詞 助動詞 0 今すぐ ここ から 逃げだし たい -1 0 1 2 3 t U01:%x[0,0] U01:ここ U02:%x[0,1] U02:名詞 の様に置き換わる
  • 37.
    テンプレートの例(3/5) y t−1 yt B 各位置 t で B という 素性が取り出される 位置 t とt-1 の2つのラベルを見る
  • 38.
    テンプレートの例(4/5) y t−1 yt B01:%x[0,0] xt B01:ここ と置き換わる 2 形動 名詞場所 格助詞 サ五 助動詞たい X 1 形容動詞 名詞 助詞 動詞 助動詞 0 今すぐ ここ から 逃げだし たい -1 0 1 2 3 t
  • 39.
    テンプレートの例(5/5) yt yt x t−1 xt x t−1 xt x t+1 U03:%x[-1,0]/%[0,0] U04:%x[-1,0]/%[0,0]/%x[1,0] 観測値の bigram 観測値の trigram “/”はただの文字列として観測された素性に付加される
  • 40.
  • 41.
    素性関数はどうした。 テンプレートに従って取り出された観測された素性について 先頭のU,Bに従って素性関数が作られる U01:ここ マクロで取り出された素性 ラベルの種類は B と I の2種類だとしたら ϕ 0 (U01 : ここ , B) ϕ 1 (U01: ここ , I ) が作られる Prefix があるおかげで, 観測された値が位置 t からどの位置に あるのかが区別出来る
  • 42.
    B とだけあるのはどうなるの? B マクロで取り出された素性 ϕ 10 ( B , B , BOS ) ϕ 10 ( B , B , B) ϕ 11 ( B , I , BOS ) ϕ 11 ( B , I , B) ϕ 12 ( B , B , EOS ) ϕ 12 ( B , B , E ) ϕ 13 ( B , I , EOS ) ϕ 13 ( B , I , E) という素性関数が作られる 入力系列Xに依存しないため, 全ての位置についてBという 素性が取り出され, ラベル遷移だけを見る事が出来る
  • 43.
  • 44.
    内部での表現 “U01:ここ-B” = 0 “U01:ここ-I” = 1 ... Q. みたいな Key と ID のペアを用意してハッシュにでも入れるの? A. それでも出来るけど素性関数のIDチェックする度に文字列作る事に なるから遅い。 それに組み合わせが多すぎてハッシュがメモリ馬鹿食いしちゃう。 Q. じゃあどうやって ID を管理するのさ?
  • 45.
    Idの管理(1/2) 素性テンプレートで取りだされた観測値が U の時は(Unigram Feature) ラベル数L∗Uで始まる素性数 の素性関数が作られる 素性テンプレートで取りだされた観測値が B の時は (Bigram Feature) 2 (2∗L+L )∗Bで始まる素性数 の素性関数が作られ, 重みベクトルWの要素数は 2 ラベル数L∗Uで始まる素性数 + (2∗L+L )∗Bで始まる素性数 になる
  • 46.
    Idの管理(2/2) Wパラメータの構造を下のようにする UnigramFeature のパラメータ 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 のパラメータ と対応づける
  • 47.
    すると・・・ U01:%x[0,0] B X 今すぐ ここ から 逃げだし たい 素性テンプレート U01:今すぐ U01:ここ U01:から U01:逃げ出し U01:たい B B B B B Unigram Feature のID 0 1 2 3 4 Bigram Feature のID 0 0 0 0 0
  • 48.
    素性ID と ラベルID の組から対応するWの 要素が直で参照出来る ϕ 1(0, 1) 1 1 1 1 1 BOS 1つ前のラベルID カレントのラベル ID EOS ϕ 16 (0,1,0) Unigram Feature 数10 + (2L+L^2)*0 + 2L + 1*L + 0 = 16 0 0 0 0 0 ϕ 0 (0,0) ϕ 14 (0,0,0) ϕ 2 (1,0) 0*L+0 0 1 2 3 4 X 0 0 0 0 0 W 1 -1 2 -1 0 1 3 -2 -3 1 3 -2 1 1 1 2 1 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
  • 49.
    結論 ● 素性関数は対応するパラメータWだけ作る ● 素性とラベルにだけ ID を付ける ● Unigram Feature と Bigram Feature は別管理 ● 系列Xにテンプレートを適用して素性 ID 列にする ● ラティスのノードに付けられたラベルIDと各位置の素性 IDから対応するWの要素を直で参照する
  • 50.
    まとめ ● 「言語処理のための機械学習入門」(高村大也, 奥村学) を読めば今日の話はもっと詳しく載ってる ので、これを読めば良いと思う。