VectorsInSearch
1.0.0
用於實現以下演講中討論的想法的 Dice.com 代碼:
這擴展了我之前關於「概念搜尋」的工作,可以在這裡找到 - https://github.com/DiceTechJobs/ConceptualSearch(包括幻燈片和影片連結)。在本次演講中,我提出了多種使用倒排索引大規模搜尋向量的不同方法。這實現了近似 k 最近鄰搜尋的方法,包括:
並描述如何在倒排索引中有效地實現和查詢這些想法。
更新:在與LucidWorks 的Trey Grainger 和Erik Hatcher 交談後,他們建議使用術語頻率代替有效負載來解決我將術語權重嵌入到索引中並使用特殊的有效負載感知相似性函數(這也不需要)的解決方案。有效負載會導致嚴重的效能損失。這樣做的挑戰是負權重,我認為不可能對負詞頻率進行編碼,但這可以透過為正權重標記和負權重標記使用不同的標記來解決,並在查詢時進行類似的調整(其中負提升可以根據需要在 Solr 中應用)。
Lucene 文件:Lucene 定界詞頻過濾器
最近還有一個適用於此處的 Lucene 核心更新,並且在撰寫本文時很快就會進入 Elastic 搜尋:Block Max WAND。這對於大型布林 OR 查詢會產生顯著的加速,您不需要知道結果的確切數量,而只關心盡快獲得前 N 個結果。我在這裡討論的所有方法都會產生相對較大的 OR 查詢,因此這是非常相關的。我還讀到,最小應該匹配的當前實現也包括類似的優化,因此使用適當的 mm 設定可能已經獲得了相同的性能增益,我已經在程式碼中進行了試驗。
啟動 2018: “搜尋向量”
Haystack 2019: “用向量搜尋”
Simon Hughes(Dice.com 首席資料科學家)