6章は、タームの重み付けとVSM(ベクトル空間モデル)について。
1章で、Boolean検索について学んだが、これはWeb検索などでは実用的ではない。
Boolean検索では、クエリのタームを含むドキュメントが全て結果として返ってくるので、クエリが単純だとヒットしすぎ、クエリが複雑だと全然ヒットしないというように、クエリの調節が難しいからである。
例えば、ユーザがあるクエリを投げて仮に1000件の結果が返ってきたとしても、1から全てに目を通して目的のドキュメントを見付ける、というわけにはいかない。
そこで、クエリにより関係の深いドキュメントを上位にするといった、ランキング手法が必要になってくる。
ランキングとして、クエリとドキュメントがどれほどマッチしているかを、[0,1]の連続値のスコアで表現する(スコアが高いほどクエリとドキュメントは関係が深い)。
以下、スコアリング手法を挙げていく。
Jaccard係数
2つの集合の共起性を考えたもの。以下のような式になる。
Jaccard(A,B) = |A∩B|/|A∪B|
2つの集合が全く同じであればスコアが1、全く異なればスコアが0になることは容易に分かる。
以下に例を挙げる。
- Query:“ides of March”
- Document:“Caesar died in March”
この時、
- |Q∪D| = |ides of March Caesar died in| = 6
- |Q∩D| = |March| = 1
となり、
Jaccard(Q,D) = 1/6 となる。
しかし、この手法には欠点がある。
- タームの出現頻度(tf)を考慮していない。
- レアなタームとそうでないタームが同じ重みである。
そこで、更によい手法を考えることにする。
tf(term freqency)
は、ドキュメントdにおけるタームtの出現頻度。
すなわち、1つのドキュメントに同じタームが沢山出てくるほど、スコアは大きくなる。
tf-idf
tfだけでは、全てのタームが同じ重みである。
しかし実際は、多くのドキュメントに現れるようなタームは大して検索の手がかりにはならず、レアなタームほど検索の有力な手がかりになる。
そこで、df(document freqency)というものを考える。
は、ドキュメントセット中でタームtの含まれる文書数。
dfが小さいほど、タームtはレアなタームということになる。
実際には、dfが小さいほど重みは大きくなってほしいので、その逆のidf(inverse document freqency)を使用する。
これを先程のtfとかけ合わせ、スコアは以下のような式になる。
これで、あるドキュメントに沢山出てくるタームほど、またレアなタームほど、スコアが大きくなる。