類似度計算について
GETAssocでは、ベクトル間の類似度の計算式を任意に指定することができます。 現在、GETAssocでは、(内積)、(Cosine類似度)、Smart[ref]、(Okapi[ref])、が 予め組込まれている類似度として登録されており、デフォルトではSmartが使われます。登録されている類似度の指定方法はgss3プロトコルをご覧ください。
新しい類似度計算式の追加
GETAssocでは、次のようにして簡単に新しい類似度が追加できます。
- configure に –enable-dlsim=yes を渡し、GETAssocを共有ライブラリ有りでインストールしておきます。 SolarisやMac OS Xの場合にはMakefileを編集してリンカフラグも変更する必要があります。
-
最初に類似度の計算式をテキストファイルで用意します。実際の類似度計算式の例を以下に掲載します。
-
Cosine類似度 この方法では記述できません。
-
Smart
-
それぞれの変数の意味は、[[類似度計算に必要な変数>類似度の計算/類似度の定義で使用可能な記号]]をご覧ください。 先頭の記号(::=の直前)が類似度の名前になります。 類似度の名前と、ファイル名の.simを除いた部分とは一致しなければなりません。 式は,(コンマ)で区切ります。 式は上から順に計算されます。 すべての計算は倍精度で行なわれます。 \sum_tは、その被演算子中のtをdに現れるすべてのtについて計算し、その合計を返します。 \sum_tは、最後の式に、1回しか使うことができません。 \sum_tが一回も現れなくても構いません。
-
次にこの類似度をmakeを使って.so形式に変換し、それを $GETAROOT/lib にコピーします。 作業は、GETAssocのソースディレクトリで行います。
make smart.so cp smart.so $GETAROOT/lib
-
使い方 コピーした類似度の名前の前に.(ドット)を付けたものが使えるようになります。例:
- 分散版の場合 すべての計算ノードに同じ共有ライブラリをコピーしてください。
新しい類似度計算式の追加2
上述の方法では、.simファイルの記法の制限から、複雑な類似度の記述が困難だったり、不可能だったりします。 その場合、simdef.cに新たな定義を追加することで、より複雑な類似度が利用可能になります。