類似度の計算

Top > 類似度の計算

類似度計算について

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に新たな定義を追加することで、より複雑な類似度が利用可能になります。

最終更新日: 2014-12-09 (火) 18:25:46 (896d)

このページをブックマーク:

このページのURL(コピペして利用下さい):

TOP