類似度の計算 の変更点

Top > 類似度の計算


#Contents
*類似度計算について

GETAssocでは、ベクトル間の類似度の計算式を任意に指定することができます。現在、GETAssocでは、(内積)、(Cosine類似度)、Smart[ref]、(Okapi[ref])、が[[組み込み済類似度計算式>./組み込み済類似度計算式]]として登録されており、デフォルトではSmartが使われます。登録されている類似度の指定方法は[[gss3プロトコル]]をご覧ください。

**(新しい類似度計算式の追加)
GETAssocでは、次のようにして簡単に新しい類似度が追加できます。
- configure に --enable-dlsim=yes を渡し、GETAssocを共有ライブラリ有りでインストールしておきます。
SolarisやMac OS Xの場合にはMakefileを編集してリンカフラグも変更する必要があります。
- 最初に類似度の計算式をテキストファイルで用意します。実際の類似度計算式の例を以下に掲載します。

-- Cosine類似度
この方法では記述できません。

-- Smart

 smart ::=
         aveTFq = TF(.|q) / DF(.|q),
         avelen = DF(w) / Nr(w),
         slope = .2,
         norm = (avelen + slope * (DF(.|d) - avelen)) * (1 + log(TF(.|d) / DF(.|d))),
         1 / norm \sum_t (1 + log(TF(t|q))) / (1 + log(aveTFq)) * idf(t) * (1 + log(TF(t|d))) .


それぞれの変数の意味は、[[類似度計算に必要な変数>類似度の計算/類似度の定義で使用可能な記号]]をご覧ください。
先頭の記号(::=の直前)が類似度の名前になります。
類似度の名前と、ファイル名の.simを除いた部分とは一致しなければなりません。
式は,(コンマ)で区切ります。
式は上から順に計算されます。
すべての計算は倍精度で行なわれます。
\sum_tは、その被演算子中のtをdに現れるすべてのtについて計算し、その合計を返します。
\sum_tは、最後の式に、1回しか使うことができません。
\sum_tが一回も現れなくても構いません。

- 次にこの類似度をmakeを使って.so形式に変換し、それを $GETAROOT/lib にコピーします。
作業は、GETAssocのソースディレクトリで行います。

 make smart.so
 cp smart.so $GETAROOT/lib

- 使い方
コピーした類似度の名前の前に.(ドット)を付けたものが使えるようになります。例:
  <assoc target="ja_document" narticles="10" nkeywords="10" a-props="title,link" 
         stage1-sim=".smart" > ...

- 分散版の場合
すべての計算ノードに同じ共有ライブラリをコピーしてください。

**(新しい類似度計算式の追加2)
上述の方法では、.simファイルの記法の制限から、複雑な類似度の記述が困難だったり、不可能だったりします。
その場合、simdef.cに新たな定義を追加することで、より複雑な類似度が利用可能になります。

TOP