論文読み: Building and Learning from a Contextual Knowledge Base for a Personalized Pyhsical Therapy Coach

[Building and Learning from a Contextual Knowledge Base for a Personalized Pyhsical Therapy Coach](http://www.cs.cmu.edu/afs/cs/user/rwfisher/www/Curriculum_Vitae_files/icml2013_fks.pdf)のまとめ

## 要約

相手に合わせた対話(=対話のpersonalize)を行うために、対話における文脈情報(Contextual Knowledge Base = CKB)を活用しよう、というのが論旨。「対話における文脈情報(CKB)」とは、ユーザーの発話以外にも、センサーからの情報(どういう姿勢なのか、どういう動きをしているかなど)からも得られる。

論文ではこうした情報を活かした、「パーソナルトレーナー」の実装を試みている(リハビリの指導に使用する)。人間のトレーナーが人によって厳しく言う方がいいか、やさしく言う方がいいか判断するように、ロボットにも「対話における文脈情報(CKB)」を利用しこうした判断を実装しよう、ということだ。

研究のポイントとしては、以下が挙げられる。

* オンライン・トレーニング  
パーソナライズのために事前にユーザーに多くの情報を入れさせるのはナンセンスなので、ユーザーとの対話の中で自動的に学習するようにする。
* 言語・行動双方を利用した情報取得  
食習慣など聞かないとわからないところは普通に聞くが、逆に「この運動はきつい」とユーザーが言っているとき「この運動」がなんの運動なのかは言葉だけでは判断できないため、行動の観測結果も加味する
* アクティブ・ラーニング  
学習させるために必要な「ラベル付されたトレーニング中の対話データ」というのは非常に数が少なく、ユーザーとの対話データも然りである。そこで、貴重なラベル付されたデータを最大限生かすためアクティブ・ラーニングの手法を活用する


## モデル

システムの全体像は、以下のようになっている。

![image](https://qiita-image-store.s3.amazonaws.com/0/25990/a7ccaaac-4f4b-679a-7c95-b708ce02f24e.png)

**Ontology**は、システム内の知識構造ともいえるものである。Ontologyにはconceptとfunctionがあり、conceptは要素的なもの、functionは要素を引数にとり何らかの状態を出力する関数となっている。

そして、システムの目的はユーザーの発話(sentence)をシステム内の語意(ontology)で表現し直したMRL(Meaning Representation Language)を得ることである。具体的には、「私の年齢は20才です」というsentenceを、「user_age(20)」のようなMRLに変換することである(user_ageは、システム内のontologyに登録されたfunction)。

**semantic parser**が上記の変換プロセスを担っている。内部のプロセスは、大きく分けてmatchingとcompositionに分かれている。
**matching**では、sentenceの構成要素(word, phrase)とontologyの要素の間の類似度を比較し、算出する。この類似度は、具体的にはlexical similarity、つまり語彙間の類似度(carはhouseよりはvehicleに近い、など)で表される(wは学習により調整される類似度にかかる係数?)。
**composition**では、抽出された要素を組み合わせる。この「組み合わせ」はつまり「どのようなfunctionで要素がつなげるか」ということである。functionはその引数の型が決まっているので(user_ageなら数値型、など)、functionの型と要素の型が合うかどうかをまず判定する。要素が合う場合は、ontologyの構成ツリー(要素同士の関連をツリー構造で表現したもの?)からfunctionと要素の間の距離を算出し、それを類似度とする。

最終的にはmatching/compositionそれぞれの類似度が最も高くなる組み合わせを線形計画法により導出し、MRLを構築する。
なお、matching/compositionの対象にsentenceだけでなくCKBも含むことで、文脈を意識したMRLの構築を可能にしている。具体的には、CKB内にcurrent_activity(exercise4)があり、ユーザーの発話が"I want to finish this exercise."であった場合、CKBとマッチするontologyからexercise4が取得できるため、最終的にはuser_request(finish(exercise4))というような文脈に沿ったMRLが導出できる。

※なお、論文中ではセンサーからの判定についてはほぼ言及がない。また、ユーザーが行っている動作は時間によって移り変わるため、一旦CKBに格納したものをどう変更/削除するのかも重要なテーマになるが、この点については本論文の対象外とされている。


## 学習方法

システムの中核となるsemantic parserの学習に際しては、まず学習データはそれほど用意できないし、冒頭に述べたとおり対話の中、つまりオンラインで学習していく必要がある。そのため、効率的な学習を行いたい。そのために利用するのがアクティブ・ラーニングの手法である。

**アクティブ・ラーニング**とは、学習効果の高いデータを優先的に学習する方法である([Active Learning 入門](http://www.slideshare.net/shuyo/introduction-to-active-learning-25787487)が分かりやすいので、ご参考)。今回は、これを正解データを得るためのシステムの挙動を制御するために利用する。
具体的には、システムは正解データを得るためアノテーター(場合によってはユーザー)に以下2つの質問を行う。

1. sentenceに対しMRLの候補を挙げ、正しいかどうか聞く
2. sentenceに対し、ユーザーに正しいMRLを入力してくれるよう求める

上記は何れも正解を得ることができるけれども、2の方がユーザーにとって負担が大きい。そのため、本当に必要な場合だけ2の質問をして、概ねわかりそうな場合は1で済ませることが必要になる。この「本当に必要な場合」の判断にアクティブ・ラーニングの手法が用いられている。

アクティブ・ラーニングの手法としては様々なものがあるが、今回利用されているのはDensityを考慮するものである。要は、周辺にデータが多いものほど学習する価値が高い、と見るものだ。

[Active Learning 入門 p41](http://www.slideshare.net/shuyo/introduction-to-active-learning-25787487)
![image](https://qiita-image-store.s3.amazonaws.com/0/25990/d95b19fd-14bb-c4d1-d9d1-01c4f8536019.png)

また、semantic parserの出力であるf(X)よりどれくらいontologyでうまく表現できているかがわかるので、この値が低いほど2、つまりユーザーに質問したほうがいいことになる。
上記点を加味し、質問1をした方がいい度合い$WD_1$と、質問2をした方がいい度合い$WD_2$は以下のようにあらわせる。

![image](https://qiita-image-store.s3.amazonaws.com/0/25990/7ad392bd-145e-7c17-0473-ac5ee95657e1.png)

δはユーザーに質問する際のコストを表している(大体20ぐらいらしい。$WD_1$と$WD_2$の出現頻度のバランスを取るための係数?)。


## パーソナライズ

今回のシステムは、単に行動するだけでなく、ユーザーに合った行動をする必要がある。そのためのアイデアは、以下のようなものである。

* あるCKBにおいて、アクション$a$を実施した場合のコストを$C(a, CKB)$とする
 * アクションは指示内容(運動指示、ユーザーの行動に対する評価etc)とその言い方(厳しく言う、やさしく言う)で構成される
* 過去の$C(a, CKB)$についてのデータがあれば、どんなCKBの時にどのようなアクションが適切なのかが学習できる
* 今回は、Conditional Random Field(CRF)によりこの推定を行う

ユーザーがシステムを利用することで、そのユーザーについての$C(a, CKB)$が蓄積されて来ればパーソナライズが完成する、という寸法である。

(この節(3.3 Personalization)はよく分からない箇所が多かったが、端的には上記のようにまとめられるはず)


## 実験結果

学習には、98のsentenceを利用している。各sentenceはそれぞれ独自のCKBを背景に発話されたものとなっており、またトレーニング中の対話を再現したものになっている(運動の開始・終了など・・・)。

semantic parserはstructured SVMで学習させ、ここではアクティブ・ラーニングの結果が顕著に出ていることが確認できた(Fugure1 (a))。

![image](https://qiita-image-store.s3.amazonaws.com/0/25990/e284190e-bf98-41aa-5e4b-c2d69faf124b.png)

学習された重みを見ると、current_activity、last_questionといった表現が重要であり、逆にageなどユーザーの個人情報に関わるところはあまり重要ではないようだった(ただ、そもそもシステムの利用中に個人情報を明確に言ったりしないので、これは当然と言えば当然)。

パーソナライゼーションでは、60のCKBの組み合わせについて調査した。全組み合わせを調べるのは大変なため、組み合わせの数は10を上限とし、このうち実際に値が入っていた100～300の組み合わせ(L1正規化済み)についてコストの平均を取りプロットしたものがFugure1 (b)となる。
これを見ると大体400くらいでコストがかなり下がっており、ユーザーが使い続ければパーソナライズされることが期待できる(リハビリのためのシステムは数週間は使うので、これは現実的にも有効な機能のはず)。

## 所感

実験結果がほぼ実験室内で得られた結果であり、本当にこんなにうまくいくかなという気はする。Kinectを利用した画像からのセンシング情報の活用や、肝心のCKBを対話の中で更新していく方法など、実際完成させるにはまだまだ取り組まないといけない点があると思う。逆に言えば、そこがこの先の研究として取り組める箇所と感じた。