タスク検索の手法と評価
以前にも書いたのだが、僕はタスク検索を研究している。
「部屋の掃除をしたい」と入力すると「Panasonicのサイクロン掃除機を使う」「やる気の出る音楽をかける」みたいなタスクが出てくる検索だ。それも、できるだけ多くのタスクを発見したい。
研究のためにやることをまとめると以下のようになる。
- 手法を考える
- 評価の方法を考える
- 論文を書く
それぞれ、どのように取り組んでいるか説明する。
手法
いまのところ、
- クエリを変換する
- 変換したクエリでググる
- 2を異なる変換クエリで何度か行う
- 結果をまとめて出力
という手順で検索をしている。
1のクエリの変換手法が重要だということはわかるだろう。これまで僕が使った方法では、このクエリ変換を以下のように行っていた。
現在考えている新たな手法では、単なる拡張ではなく、「AをBする」A、Bのクエリ変換をそれぞれ別に行う。AにはAに適した、BにはBにふさわしいクエリ拡張がある。なんとかして、そのルールを見つけよう、と思うのだ。
そして、サービス提供者を表現する語や価値を表す語を追加することも行う。
たとえばもともとのクエリが「ボーカル 録音」だったときに、
- 「演奏 録音」
- 「ボーカル レコーディング」
- 「ボーカル 録音 スタジオ」
- 「ボーカル 録音 自宅」
- 「ボーカル 録音 格安」
こういったクエリ変換を想定している。
変換ルール発見
どのような手法をとるにしても、「録音といえばスタジオ」のような語をうまく発見することが大切になる。Amazonの商品ページや価格ドットコムのようにAといえばBの情報を持っていて引き出せる外部サービスを利用することになると思う。が、本研究において大切なのは「なにを使うか」ではなくその前に「なぜそれを使うか」だ。
たとえば「統一された商品情報をもとにすれば、有用なクエリ変換ルールを発見できるから、Amazon商品ページを使う」といったように、確固たる理由をもとに外部の情報を使うべきだ。この理由をはっきりと自覚できていれば、たとえ失敗したとしても仮説検証を行え、一歩前に進むことができる。
なにを使えば変換ルールを発見できるか、思い浮かばないから困っているのが現状である。
評価の方法
はっきりいうと、情報検索の評価は難しい。
一般的に、文書検索の評価はrecall(再現率)とprecision(適合率)をもとに行うことが多い。Web検索ではすべての正解セットを把握するのは無理なので、recallは相対的再現率で代用するのが一般的だ。
タスク検索の目的は多くのタスクを発見することである。なのでrecallではなく文書内に記述されたタスク数で評価を行っていた。
しかしそれはタスク検索の評価手法として不適当なのではないか? という疑いがあった。詳細な記述、タスク遂行の順序記述、タスクの珍しさ、タスクの有用性、評価すべき要素は数以外にあるのではないか? こうした疑問に答えるため、僕はparf-ofやinstance-of、subtype-ofというタスク同士の関係に着目したタスクのモデルを作っている。
そういえば、研究発表会で、「ひとつの文書の内包タスク得点を評価するのに、tf-idfのような手法を使うべきではないか」とのコメントをもらった。今回はこのアイディアに取り組んでみよう。
tf-idf
tf-idfは、要するに「文書と単語の組み合わせがどれだけ特徴的か」を評価する尺度だ。ある単語を特徴的に多く持つページや、あるページに特徴的に出現する単語を見つけるのに使える。くわしい解説はググったらでてくる。ここは簡単に具体例をあげてみよう。
「Wikipediaのグレンラガンのページ」と「アンチスパイラル」の組み合わせはtfが大きく、dfが小さく(idfが大きく)なり、tf-idfが大きくなる。この組み合わせは特徴的だ。
「Wikipediaのグレンラガンのページ」と「テレビ」の組み合わせは、tfは大きくなるが「テレビ」という語が一般的すぎるのでdfが大きく(idfが小さく)なり、tf-idfは小さい。
「Wikipediaのグレンラガンのページ」と「パンダ」はtfが小さい。パンダのdfは小さく(idfは大きく)なるが、tfが小さすぎるのでtf-idfは小さい。
この評価手法をタスク検索の評価に応用しよう、というのだ。
※ちなみに当初はグレンラガンのページと「螺旋力」でtf-idfを説明しようとしたが、螺旋力でググった結果約 18,300,000 件という予想以上に多くのページを取得できてしまったので「アンチスパイラル」に変更した。
タスク検索の評価にtf-idfを応用する
教科書的なtf/idfの使い方ではターム頻度と転置ドキュメント頻度で、タームに対する文書の特徴量を評価しているわけだが、これを、「文書がタスクを含んでいる度合い」の評価に使う……つまりタスク頻度と転置タスク頻度で文書を測れるのではないか? という提案である。
これを評価尺度に使うと、どうなるか?
まとめサイトのように、タスクを沢山ふくむ(重複していてもよい)ページを集めてくれば、高評価になるだろう。これまで目標としていた「できるだけ多くのタスクを発見する」とはすこし違うゴールだが、最終的な目的には合致している。
ただし、文書内のタスクを発見する方法は確立していない。tfを評価するため、人手でWebページを読むしかなく、idfは擬似的にしか評価できない。つらい。
クエリに「まとめ」を追加したら?
以前、「花粉症対策をする」という目的を題材にしたとき、クエリに「まとめ」を加えるとまとめサイトを多数発見できて、多くのタスクを発見できたことがあった。
そこで、ちょっとした疑問が湧いた。クエリ変換のルールを見つけるなんて難しいことするよりも、単純にクエリに「まとめ」を追加するだけのほうが性能良かったりするんじゃないか? この研究の提案手法はそれに勝てないのでは?
気になったので「犬 育てる 方法 まとめ」で検索してみたが、まとめサイトは発見できなかった。よかった。まだ負けと決まったわけじゃなかった。
花粉症対策のまとめサイトはあっても、犬の育て方まとめサイトはない(か、弱い)んだ。たとえ「まとめ」という単語をクエリに追加したところで、誰かが有力なまとめサイトを作成していない場合、タスクを多く含むページを発見することはできない。
でもベースラインとしては妥当なところだろう。誰でも思いつくし、簡単に実行できる。
論文を書く
先行研究
工場での開発フローなど、情報検索以外でのタスク分解木の研究を探してみた。しかし使えそうな論文は見つかっていない。情報検索で、タスクに関する論文はけっこう出てくる。しかし、大量のユーザーのアクティビティデータを使った論文が多く、MicrosoftやYahooのように、多くのデータを保持してる組織でないとできない研究がほとんどだ。つらい。