DSOC研究員の吉村です. 昨今の情勢により, 外食をすることが難しくなり, 私も自炊をするようにしました. 折角自炊をするのでスキルを高めたいと思い, 最近はオムレツを綺麗に焼く練習ばかりしています. その結果, 一日にかなりの数の卵を食べてしまっているので, 非常に不安です.
さて, 今回は前回始まった構造に関する機械学習の話題の詳細に入っていきます. 構造に関する話題の2回目である今回は, 系列 (series, sequential) を扱う機械学習について書いていきます.
系列データと言うとざっと次の二つが思い浮かぶかと思います. 一つが自然言語文 (natural language text) で, もう一つが時系列データ (time series data) です. これらは概ね前者を系列データに関連する分類問題の枠組みの問題設定, 後者を系列データに関連する回帰の枠組みの問題設定と捉えることができます. 今回は, 前者の系列データに関連する分類問題 (特に, 系列ラベリング)の方を中心に見ていきます.
系列データに関連する分類問題 (特に, 系列ラベリング)
今回扱う系列データに関連する分類問題を考えて行きましょう. 今回はそのような問題設定として系列ラベリングを扱います.
系列ラベリングでは, 入力として系列データ が与えられ, この一つ一つに対応してラベルやクラスを割り当てることを考えます. このとき に対応する真のラベルを とし, を系列データのサイズとします.
自然言語文を対象にするこのような形式の問題設定としては, 品詞タグ付け, 単語分割, そして, 固有表現認識などがあります. 今回は自然言語処理それ自体がメインの話ではないため, それぞれの説明については [*1] を参照ください.
この系列ラベリングの問題について, 少しずつ考慮することを増やしていきながら, それを反映したどのようなモデルが使われるのかを見ていきましょう. 下記の説明では, いずれも品詞タグ付けの問題で例を挙げることとします.
独立に分類問題を解く方法
系列ラベリングは, ある対象 の前後に何が来るかがわかっていると言う意味で有用な情報があります. それにもかかわらず, ここではそれぞれの のみを用いて を予測するモデルを考えます. このとき, 各 に対して, 次のような形でモデルを記述できます.
ここで, は が与えられたときの の条件付き確率を表します. この方法だと, 例えば, 動詞の直前には名詞が来やすい, などの順番の情報は何も利用することができないので, それほど高い性能が達成できません. ちなみに補足ですが, 同じ形の単語でも複数の品詞を持つ場合があるのがそもそもの問題です.
直前の数データの隠れ変数を利用する単純なモデル (HMM: Hidden Markov Model)
系列データを扱う予測問題の場合には, 予測時点のある程度前までの情報 (利用できるならその後の情報も) を利用する方が予測性能が向上することは想像できると思います. 一方で, 考慮する情報が多くなるほどモデルは複雑になり計算量の問題が出てきます.
そこで, 問題をある程度簡略化するためにマルコフ性の仮定をおきます. マルコフ性とはある時点 の状態は, 高々その 時点前までの情報にのみ依存する (つまり, 時点の情報のみに依存する) 性質で, これを 階マルコフモデル といいます.
この性質を基にしたモデルが HMM (Hidden Markov Model; 隠れマルコフモデル) です. HMM は, 観測されない状態があって, その観測されない状態間をある確率で遷移し, 遷移先からある確率で何らかの出力が得られると言うモデルです. 例えば, 品詞タグ付けの場合には, 各品詞が観測されない状態, いわゆる, 隠れ状態になり, 出力が各単語となります. 1階マルコフモデルを仮定した HMM は次のようにかけます.
このモデルでは, ここの単語の素性 (例えば, -ed形になっている, 先頭の文字が大文字になっているなど) を考慮していないので, 少し予測に使える情報を捨ててしまっていることになります.
直前の数データの隠れ変数と, 素性を利用する複雑な分類モデル
HMM の欠点である, 各時点のデータの素性を逐次的に利用する方法もあります. 1階マルコフモデルを仮定すると の予測に, 元の系列データの各素性と を入力として, 各種分類モデル (e.g. ナイーブベイズ, SVM, ロジスティック回帰など) に適用することができるので, これを全ての時点に逐次的に適用して行きます.
この方法では, 局所的な整合性は取れますが, 系列全体に対する整合性のとれた最適化とはならないという問題を含みます.
直前の数データの隠れ変数と, 素性を利用し, 系列全体での整合性を考慮するモデル (CRF: Conditional Random Field)
逐次的に適用していた分類モデルを全体の整合性を持って, 最適化する方法として挙げられるのが CRF (Conditional Random Field; 条件付き確率場) です. CRF は, 各データのラベルの生起確率に重みをつけて, 系列全体での最適化を達成するモデルです. 下記のように書くことができます.
ただし, は, 素性関数と呼ばれ, 入力に与えたものから素性を抽出する関数です. このモデルでは, 直前の数データの隠れ変数しか考慮できなかったので, もっと過去まで遡って情報をモデルに反映したいという考えが浮かびます.
それ以前の全てのデータの隠れ変数と, 素性を考慮するモデル (RNN: Recurrent Neural Networks)
ここで deep の登場です. 今までは, 計算量の問題で考慮できるのは直前数データの隠れ変数まででした. それを解決する方法として RNN (Reccurent Newral Networks; 回帰型ニューラルネットワーク) があります. RNN の中でも特に LSTM (Long-Short Time Memory; 長短期記憶) や GRU (Gated Recurrent Unit; ゲート付き回帰型ユニット) などがよく用いられており, これらは過去の系列データや出力結果の重要そうな部分のみをうまく学習して残すようなモデルになっています.
細かいモデルの説明は長くなりすぎるので割愛しますが, これによりとりあえず過去全ての隠れ変数を考慮できそうだというところまできました.
一方で, そのデータの先の隠れ変数は考慮できていない問題がまだ残っています. 前のデータによりラベルが制約されるのと同じように, 後のデータによってもラベル制約されるだろうというのは素直な発想です.
データの前後全ての素性を考慮するモデル (Bi-RNN: Bidirectional RNN)
データの前後を考慮できるようにしたものが Bi-RNN (Bidirectional RNN; 双方向性 RNN) [*2] です. Bi-RNN では, 順方向の入力のほかに, 系列を逆に並べ替えた入力も同時に与えます. これにより, 従来の順方向だけ考慮していたモデルよりも, 利用できる情報が増えるため, より高い予測性能を達成することができるようになります. Bi-LSTM がよく用いられているようです.
しかし, このモデルでは局所的な前後情報による最適化はなされていますが, 系列全体に対しての大域的な最適化による出力が得られているとは言えません.
データの前後全ての素性を考慮し, 系列全体での整合性を考慮するモデル (Bi-LSTM-CRF)
最後に紹介するのが, 色々盛り込んだ Bi-LSTM-CRF [*3] と言うモデルです. Bi-RNN (Bi-LSTM) で, 前後全ての系列データの素性や, 隠れ変数の情報を局所的に考慮できることは分かったので, それに CRF を適用して全体の整合性も考慮して最適化してしまおうと言う考えのモデルです.
Bi-LSTM のモデルの最終層に CRF 層を組み込むことでモデルが構成されます. 今回の話の流れでは, 品詞タグ付けの文脈で説明をいくつかしてきましたが, このモデルは固有表現認識の問題設定でもよく用いられます. ちなみに, 当然考えられる LSTM-CRF と言うものもあります.
まとめ
今回は, 系列データの分類 (系列ラベリング) についてまとめました. 長くなってしまうために, 後半の複雑なモデルについては説明を省いていますが, どのような気持ちでどのようにモデルに反映しているのかが分かってもらえれば嬉しいです. 系列データを扱って分類問題を解くだけでも, 様々なことを考慮して性能向上が図られてきたと言うのがわかるかと思います. 次回は, 系列データの回帰の話です. 引き続きお付き合いくださいませ.
▼【ML Tech RPT. 】シリーズ
buildersbox.corp-sansan.com