私は大量のテキストのコレクションを持っていますが、各テキストは急速に成長しています。類似検索を実装する必要があります。
各WordをWord2vecとして埋め込み、各Wordの埋め込みをベクトル加算して正規化ベクトルとして各テキストを表すという考え方です。テキストへのその後の追加は、新しいWordのベクトルをそれに追加することによって、結果のテキストのベクトルの改良をもたらすだけです。
ドキュメント内の各テキストの正規化されたベクトルの座標のみを保存することにより、余弦の類似性のためにelasticsearchを使用することは可能ですか?もしそうなら、そのような検索のための適切なインデックス構造は何ですか?
これは elasticsearchプラグインdelimited-payload-tokenfilter を使用して保存されたベクトルのスコア関数(ドット積)を実装します
この検索の複雑さはドキュメント数の線形関数であり、 ESは最初に逆インデックスを検索する であるため、用語クエリのtf-idfよりも悪い tfを使用する-ドキュメントスコアの場合は-idf なので、インデックスのすべてのドキュメントに対してtf-idfは実行されません。ベクトルを使用すると、検索する表現は、逆索引の利点がない、余弦距離が小さいドキュメントのベクトル空間になります。
Elasticsearch 6.4.xの場合、StaySenseは このプラグインが利用可能 を作成しました。