(論文メモ) Joint Annotation of Search Queries / ACL-HLT 2011

Share on:

ACL-HLT 2011から面白そうな論文3件目。
面白そうと書きつつ自然言語処理にそれほど詳しくないから誤解してる部分多々ありそうなんだけど。


出典情報: P11-1011: Michael Bendersky; W. Bruce Croft; David A. Smith, Joint Annotation of Search Queries, ACL-HLT 2011

検索エンジンにおいて検索窓に入力される文字列はクエリと呼ばれています。そのクエリをhogehogeしましょうという話らしい。

前置き

クエリから意図を読み取るのは難しい!

一般的にクエリは検索対象となるドキュメントと比べて圧倒的に情報量が少ないです。キーワード1つとか2つといった状況や、構文がハッキリしない曖昧な文章っぽいものが入力されるケースも少なくない。そういう状況下で「ユーザが求めているドキュメントはこれだ!」という判断をする必要がある。単純なキーワード・マッチングだけだと検索漏れが多すぎるので、なんとか工夫して意図を汲み取りましょうという研究事例が多いらしい。

意図を汲み取るために使われる技術の例(*注1

例えば、自然言語処理でいうと、以下のような技術を利用されます。

形態素解析, タガー(tagger): 単語単位で品詞を判定する。
 →動詞や名詞判断すると少しは意図が汲み取りやすくなるかも?
構文解析, パーサー(parser): 文を句や節単位に区切り、それらがどのような構造になっているかを解析する。
 →クエリに現れた名詞はどんな単語が形容しているのか、作用しているのか、名詞を対象とした何を探そうとしているのかといった情報を利用して意図を汲み取れないか?

ある程度ボリュームがあって綺麗に編集された文章ならばこれらの技術を利用しやすいですが、クエリの場合には文としても不自然だったり不十分だったりするので、既存技術を単純に利用するといったことが困難! ということで様々な取り組みがあるらしい。

クエリにおける自然言語処理以外の解析例

クエリは確かに文章としては扱い難いのだけど、文章とは異なる特徴もあり、それを利用して意図を汲み取ろうとする解析例もあります。

例えば「一つ目のクエリでめぼしい結果が得られない場合、続けて複数回異なるクエリで試しやすい」という傾向を利用して、時系列順に複数クエリをグルーピングすることができます。これを利用して、そのグルーピングされたクエリ集合をクラスタリングすることで似たクエリ集合を作り、それらの時系列情報を利用して「こういう順序でクエリを入力するユーザはこういう情報を得ようとしている可能性が高い」といったことを抽出しやすくなります。

「もしかして」も、似たクエリ集合から追加キーワードとかキーワード自体の編集を促そうとする形で望んでいるだろうページへの誘導を図る例ですね。ただし、追加キーワードについては割と単純な話じゃなく、「そもそもユーザのクエリがおかしい」ケースも多々あるので、適切な追加キーワードを精度良く提供するという話もあるらしい。

そしてクエリ拡張へ

良く分からないのだけど、「クエリ拡張(query expansion)」というキーワードがあって、こういう「クエリから得られる情報を増やす」とか「クリックされる頻度を利用して返すコンテンツの順番を調整する」といったことでクエリ⇄コンテンツのマッチングを改善する手法の総称をそう呼んでいるのかなと想像。Wikipedia見る限りでは自然言語処理寄りっぽいけど。

この論文におけるベースになる部分は、クエリから意図を汲み取りやすくするために、「ある程度文章っぽいクエリ(例文: who wan the 2004 kentucky derby)」に対して各単語に下記3種のアノテーションすることが大前提になっているらしい。
 ・CAP: 各単語が小文字/それ以外。
 ・POS TAG: 名詞/動詞/それ以外。
 ・SEGmentation: チャンクの開始/チャンクの中。(チャンク=文節等の塊)

上記のアノテーションがある程度実現出来ているという前提で、それらを利用してクエリを適切に(言語学的に)構造化したいということらしい。イメージ的には、単語毎にアノテーションされている状態から、「単語1番目と単語2番目」といったシーケンシャルな単語集合(shallow sequence)に対して「1つのクエリ語句(a single query term)」であるというアノテーションをしたいっぽい。多分、先の例文でいうところの「who wan the 2004 kentucky derby」では「who wan」、「the 2004 kentucky derby」という2つのサブクエリが組み合わさった一つのクエリなんだ、ということを認識しようということなのかな。この部分がタイトルにある Joint Query Annotation のことっぽい。

SEGmentationタグだけでもこのぐらいならできそうだけど、実際にはこんな綺麗な文章だけじゃないので、CAP、TAG、SEGを組み合わせて利用することでより精度良く Joint Query Annotation を実現しようという試みなんだと思います。

実験では、3種のアノテーションを独立した状態で Joint Query Annotation させた場合(i-QRY, i-PRF)と、3種を組み合わせて利用する場合(j-QRY, j-PRF)とで比較検証しているらしい。ただ、ここを見ると「i-QRY, i-PRF」では、CAP,POS,SEGmentationのアノテーションを独立して処理していて、「j-QRY, j-PRF」ではその3種を合算して最適化する処理をしているように見える。何が違うかというと、3種アノテーションする際に「前者は一度付けたらそれをそのまま正解とみなしており、後者は他アノテーションとの兼ね合いからちょっとおかしそうだから調整し直そうとする」という違いに見える。

大分斜め読みしてるのでどっちの解釈が正しいのかは良く分かってませんが、どちらのアプローチもありだよね。

P.S.

生駒日記によると、
本研究では、これらの3つの系列ラベリングのタスクを同時学習することで、精度を大幅に向上させることができた、という話。

と読むのが正しいらしい。後者の方が正しかったか。



*注1: 実際にはユーザの意図を必ずしも汲み取る必要はありません。結果的にユーザが望んでいる検索結果を提示できれば、クエリに対して望む結果を提示することができれば良い。ここではイメージしやすいようにこう書いています。

Tags: , , ,