01/13

(0:51) 今日は仕事のほうでうまくいかなかった。

(本来であれば個人の日記に仕事のことを書くなど公私混同・労働力のダンピングで言語道断なのだが、興味のあることを仕事でやってしまっているため云々)

 

高次 CRF のデコード、根本的に間違っていた。

考えてみたら、修論のときにあんなに悩んだのにすぐにいい考えが浮かぶはずもなかった…。

 

誰にも伝わらないけど(そもそも高次 CRF 自体誰もやってないから当然だ)、頭の整理のために書いてみる。

 

まず、高次 CRF の計算のキモは計算するパターンをスパースにするというところだ。

それができれば、何次にしても計算量はあまり変わらない。

で、スパースにして計算量を減らすというのは一次でも言えるので、とりあえず一次の場合を考える。

 

例えば、次のような重みのノードがあるとする。

 

位置1            2

    φ:-         φ:-

    X:1         X:1

   Y: 2      YX:2

   Z: 3        Y:3

               ZY:2

                 Z:5

               ZZ:1

 

(まあ解説して誰かにわかるようになるわけじゃないけど)

位置2で二つ以上のラベルのあるところは、1次の素性(ラベル2個の素性)があるところ。

ほかは0次の素性(ラベル1個の素性)しかないとする。

 

で、高次 CRF で前向き・後ろ向きがうまく行くのは、例えば位置1(「いちいち」だ)(どうでもいい)でラベル長ゼロのノード(ここではφ)を考えて、そこに合計スコアを入れて、位置2ではそれを使って差分を取ったりするということをしているからだ。

 

しかし、ビタビ的なことをやろうとすると、それではうまくいかない。

最適パスは1個だけ選ぶものなので。

 

まず、自明な解法として、前向きに見ていって、位置2のラベルが変わるたびにスコアをリセットするというものがある。

(考えてみたらそう自明でもなくて、修論を見ながら思い出すのに時間がかかったけど)

しかし、それは訓練時に比べてラベル数倍の時間がかかってしまう。

 

で、今日考えていたのが後ろ向きの方法。

これも結局、修論で考えていためんどくさい方法しかなさそうだということに。

 

まず、位置2のそれぞれのノードについて、対応する位置1のノードに点数順に並べる(位置2までしかないので重みがそのまま点数になる)。

 

位置1                        2

    φ:-  [Z:5,Y:3,X:1] φ:-

    X:1 []                   X:1

   Y: 2 [X:2]            YX:2

   Z: 3 [Y:2,Z:1]        Y:3

                             ZY:2

                               Z:5

                             ZZ:1

 

こうすると、位置1のノードのそれぞれについて、必要なだけ置き換えていけばいい。

位置1のXのノードでは、φの最大のZ:5で、Yではφのやつと合成して[Z:5,Y:3,X:2]になってやっぱりZ:5で、Zではφのやつと合成して[Y:2,X:1,Z:1]になっていて今度はY:2になる。

これで確かに動くのは動く。

結果として、YZ:10が得られる。

 並べ替えはヒープを使ったらlog n での挿入ができて最大のが取り出せるから、log n 倍ですむ。

 

しかし、どうもこれは美しくなさすぎる。

何かもっといい方法があるんじゃないかと思ってしまう。

 

実用的にも、ヒープの処理などを考えたら、ラベル数倍分ぐらい簡単に飛んでしまう気もする。

うーん。

 

すごく残念だけど、やっぱりこの路線はあきらめて、前向きで素直に実装しよう…。

修論のときと同じ結論)

でもそうすると、ラベル数倍だけ時間がかかってしまうから、ますます実用性の乏しいものになってしまうなぁ…。

区切り(ラベル数2)とかに使う分にはいいんだけど、英語の品詞みたいに数十でもけっこう重くなる。

修論のときはそれでやったんだけど)

まあ、しょうがないか…。

明日はこれ以上時間の浪費をしないようにして、素直に前向きのデコードを実装しよう。

(この日記の効用、頭の整理というより、あきらめをつけるきっかけとして役に立っている気がする)

(まあ、それも頭の整理の一種か)

 

テーマ別日記は「火曜日:幸せな時間を思い出す」。

この対象は先週一週間ということではなかったはず。

 

このテーマ、どうしても女性絡みになる。

(といっても、両思いの恋愛なんて経験はないので、片思いまたは非恋愛関係)

 

そういえば、大学2年のころ、やけにぼくのことを慕ってくれる後輩の女の子がいた。

その子の家に泊まったこともある。

背が高い子だったので、服を貸してもらって女装してみたり。

夜も何もしないで布団に入ってふざけたりしていただけ。

(こう書くと性同一性障害アセクシャルっぽいけどそういうわけではない)

(性同一性というもの自体が薄いという面はあるけれど)

 

その子もかなりの変人だったな。

その後いろいろあって疎遠になってしまったし、不自然な関係ではあったから長続きするものでもなかったと思うけど、もったいないことをしたな…。

ああいうお泊まりみたいなこと、もうできないんだろうなぁ。

 

また寝るのが遅くなった…。

日記に時間をかけすぎだ。