from __future__ import katryo

カリフォルニア州マウンテンビュー在住のソフトウェアエンジニアがいろいろ書きます。

タスク検索の手法と評価

以前にも書いたのだが、僕はタスク検索を研究している。

「部屋の掃除をしたい」と入力すると「Panasonicのサイクロン掃除機を使う」「やる気の出る音楽をかける」みたいなタスクが出てくる検索だ。それも、できるだけ多くのタスクを発見したい。

研究のためにやることをまとめると以下のようになる。

  • 手法を考える
  • 評価の方法を考える
  • 論文を書く

それぞれ、どのように取り組んでいるか説明する。

手法

いまのところ、

  1. クエリを変換する
  2. 変換したクエリでググる
  3. 2を異なる変換クエリで何度か行う
  4. 結果をまとめて出力

という手順で検索をしている。

1のクエリの変換手法が重要だということはわかるだろう。これまで僕が使った方法では、このクエリ変換を以下のように行っていた。

  1. クエリをMeCab形態素解析する
  2. 動詞と名詞だけを抽出してキーワード化する
  3. ゴニョゴニョしてキーワードを拡張クエリにする

現在考えている新たな手法では、単なる拡張ではなく、「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のように、多くのデータを保持してる組織でないとできない研究がほとんどだ。つらい。