次の講演で説明するアイデアを実装するための Dice.com コード:
これは、https://github.com/DiceTechJobs/ConceptualSearch (スライドとビデオ リンクを含む) にある「Conceptual Search」に関する私の以前の作業を拡張したものです。この講演では、転置インデックスを使用して大規模にベクトルを検索するためのさまざまなアプローチをいくつか紹介します。これにより、次のような近似 k 最近傍検索のアプローチが実装されます。
また、これらのアイデアを転置インデックス内で効率的に実装およびクエリできる方法について説明します。
更新: LucidWorks の Trey Grainger および Erik Hatcher と話し合った結果、用語の重みをインデックスに埋め込み、特別なペイロード対応類似度関数 (これも必要ありません) を使用するソリューションでは、ペイロードの代わりに用語頻度を使用することを推奨しました。ペイロードによりパフォーマンスが大幅に低下します。これに関する課題は負の重みです。負の用語の頻度をエンコードすることはできないと思いますが、正と負の重み付きトークンに異なるトークンを使用し、クエリ時に同様の調整を行うことで回避できます (負のブーストが可能な場合)。必要に応じて Solr に適用されます)。
Lucene ドキュメント: Lucene 区切り用語頻度フィルター
Lucene コアには最近の更新もあり、これはここで適用可能であり、この記事の執筆時点では間もなく Elastic Search に導入される予定です: Block Max WAND。これにより、結果の正確な数を知る必要がなく、上位 N 個の結果をできるだけ早く取得することだけを気にする大規模なブール OR クエリの速度が大幅に向上します。ここで説明するすべてのアプローチは比較的大きな OR クエリを生成するため、これは非常に重要です。また、minimum- should-match の現在の実装にも同様の最適化が含まれているため、適切な mm 設定を使用して同じ種類のパフォーマンスの向上がすでに達成されている可能性があることも読みました。これは、すでにコードで実験していたことです。
2018 年のアクティブ化: 「検索のベクトル」
ヘイスタック 2019: 「ベクトルによる検索」
Simon Hughes (Dice.com チーフ データ サイエンティスト)