16

Elasticsearch でインデックス化された 2 つのドキュメント間の類似性を計算したいと考えています。項ベクトルを使用して lucene で実行できることはわかっています。それを行う直接的な方法は何ですか?

まさにこれを行う類似性モジュールがあることがわかりました: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules-similarity.html

これをシステムに統合するにはどうすればよいですか? 私はelasticsearchコマンドを呼び出すためにpyelasticsearchを使用していますが、必要に応じて類似性のためにREST APIを使用することもできます.

4

1 に答える 1

7

Elasticsearch のドキュメントは誤解されやすいと思います。

ここでの「類似性」とは、ドキュメントやフィールドの比較ではなく、クエリの一致する用語に基づいて一致するドキュメントをスコアリングするためのメカニズムです。

ドキュメントには次のように記載されています。

類似性 (スコアリング/ランキング モデル) は、一致するドキュメントのスコアリング方法を定義します。

Elasticsearch がサポートする類似性アルゴリズムは、コーパス (インデックス) 内の用語分布に基づく確率モデルです。

用語ベクトルに関しては、これも誤解される可能性があります。

ここで、「用語ベクトル」とは、簡単にクエリできるドキュメントの用語の統計を指します。用語ベクトル間の類似度の測定は、アプリケーションのポストクエリで行う必要があるようです。用語ベクトルに関するドキュメントには次のように記載されています。

特定のドキュメントのフィールドの用語に関する情報と統計を返します。

非常に大きなコーパスに対してパフォーマンスの高い (高速な) 類似度メトリックが必要な場合は、近似最近傍検索を行うために、インデックスに格納されたドキュメントの低ランクの埋め込みを検討できます。候補セットを大幅に削減する KNN ルックアップの後、ランキングのためにコストのかかるメトリック計算を行うことができます。

これは、おおよその KNN ソリューションを評価するための優れたリソースです: https://github.com/erikbern/ann-benchmarks

于 2016-09-14T03:47:15.730 に答える