0

この質問は、Lucene を使用したドキュメント間の CosineSimilarity の計算に関連しています。

ドキュメントは、タクソノミーとオントロジーの用語で別々にマークアップされています。ドキュメント間のドキュメント類似度を計算するときは、タクソノミー用語とオントロジー用語の重みを高くしたいと考えています。

ドキュメントをインデックス化するとき、ドキュメント コンテンツ、タクソノミー、およびオントロジーの用語を、プログラムでこのように各ドキュメントのフィールドとして定義しました。

Field ontologyTerm= new Field("fiboterms", fiboTermList[curDocNo], Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.YES);
Field taxonomyTerm = new Field("taxoterms", taxoTermList[curDocNo], Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.YES);
Field document = new Field(docNames[curDocNo], strRdElt, Field.TermVector.YES);

Lucene index .TermFreqVector 関数を使用してTFIDF値を計算し、TFIDF値を使用して2つのドキュメント間のコサイン類似度を計算しています。

インデックスを作成する前に、Lucene の field.setBoost() 関数を使用して、フィールドにより高い重みを与えることができます。ブースト値を確認した後、デバッガーを使用して分類用語の頻度値を確認しましたが、用語の頻度は変更されません。つまり、setboost() 関数は TermFreVector または TFIDF 値に影響を与えないということですか? setboost() 関数は重みを増やし、ドキュメント検索でのみ使用できますか?

私ができるもう 1 つのことは、TFIDF スコアを計算する前に、分類法とオントロジーの用語頻度に定義済みの重み係数をプログラムで乗算することです。これにより、ドキュメントの類似度の計算において、タクソノミーとオントロジーの用語の重みが高くなりますか?

TermFreqVector を使用して TFIDF 値を計算するときに、特定のフィールドにより高い重みを与えるために使用できる他の Lucene 関数はありますか? または、この目的のために setboost() 関数を使用できますか?

4

1 に答える 1

1

TermFreqVector周波数という言葉はまさにそれです。ウェイトはありません。ドキュメントには、「配列内の各場所には、ドキュメントまたはドキュメント フィールドでこの用語が出現する回数が含まれています」と記載されています。

Lucene のアルゴリズムからわかるように、ブーストの使用方法は乗算係数として使用されます。したがって、それを複製したい場合は、はい、これにより用語の重みが高くなります。

あなたのユースケースが何であるかはわかりませんが、Lucene の Scorer クラスを使用することを検討することをお勧めします。そうすれば、自分で作成する必要はありません。

于 2012-04-19T19:26:25.807 に答える