Introduction to Information Retrieval輪講 第15回

IIR輪講第15回は、前回やり残した13章の残りと、14章を読みました。いつも復習の資料を作ってきてくれる、はてな伊藤さんが体調を崩されてお休みだったので、復習はなしでした。

前回と同じように、式ではなく文章で振り返ります。はさみマークの部分は飛ばしています。

13章の残り

テキスト分類の評価方法について。テキストのそれぞれを、ゼロ個以上複数のクラスに分類する場合、「A or not A」、「B or not B」・・・という分類器をたくさん用意して、クラスごとに調べていくのが標準的なアプローチになります。これらの分類器の性能テストをまとめて評価したい場合、MicroaveragingとMacroaveragingという集計方法があります。

まずテストした個々の事例について考えると、クラスに該当する場合の正解、クラスに該当しない場合の正解、それぞれの不正解という四つのケースがあります。Microaveragingは、テスト全体からこれらの各事例の数を足してしまって、正答の割合を評価するという、ざっくりとした評価方法です。

これだと事例の多いクラスの結果が大勢を占めてしまうので、Macroaveragingでは、クラスごとに割合を評価し、それらを平均します。

たつをさんも仰っていたのですが、ざっくりとしたのがMicroで、分けて見るのがMacroという、直感と反対の憶えにくい名前です。Microは一つ一つの事例が等しい重さになるのでMicro、と考えればいいみたいです。

14章

この章では、テキスト分類の別の手法として、文書をベクトルとして表現し、文書間の類似度を距離として計算する分類方法が解説されています。文書をベクトルとして表現するところは、以前の章で出てきたベクトル空間モデルによる検索と同じです。

ベクトル表現

文書のベクトル表現について簡単に振り返っておくと、まず文書は単語の集まりと考えます。ある単語がその文書に入っていた数(TF)を、単語の種類分並べると、文書を表すベクトル=文書ベクトルになります。全体の中での特徴を数値に反映するために、全文書の数を、単語が入っていた文書数で割った数字(IDF)を、TFと掛けたりします。IDFは対数にしたりして調整しますが、これをTF-IDFという名前でよく使います。

さて、ベクトルを使った分類には、Contiguity hypothesisという基本前提があるそうです。これは、同じクラスの文書はN次元のグラフのなかで連続した領域にあり、また、異なるクラスの領域は重ならない、という仮説です。これを使う場合は、例えば飛び飛びになっているような分布は対象にしないということになります。 

ベクトルを使った分類方法として、Rocchio分類法とkNNが紹介されています。

Rocchio分類法

言葉で書くとすごく簡単です。まず学習の時に、クラスごとに、そのクラスに含まれる文書ベクトルの重心を計算します。単純に平均をとるということでOKです。

新しい文書を分類する時は、その文書のベクトルと、各クラスの重心ベクトルとの距離を計算します。そしてもっとも近いクラスを採用します。

Rocchioの欠点は歪んだ分布に対応できないことです。 Rocchioの場合、各クラスは大体同じくらいのばらつきで文書が分布していることになりますので、文書が広く分布したクラスというものに対応できません。

kNN(K近傍法)

kNNは、新しい文書を分類する時に、距離的に近くにあるトレーニング文書を探して、それらの文書のクラスを採用するという方法です。

近くにある文書は仲間だろう、という、直感的なアプローチな気がします。さすがに一つだけ調べるのは不安なので、K個の近い文書を見つけて、多数決で決めたりします。 考え方は単純ですが、結構うまく行くケースが多いみたいです。

Rocchioはリニアな分類器ですが、kNNはノンリニアな分類器です。二次元でいうと、一本の直線で図面を二分割するのがリニアな分類器です。kNNは歪んだ分布にも対応することができます。