Note - ICML24 - Approximate Nearest Neighbor Search with Window Filters

他这个好像保证一个界的 window / range filter
Github: RangeFilteredANN

adversarially 对抗生成,75x (75倍)快于?召回率差不多

![[Pasted image 20241007142744.png]]

那我看的上一篇是啥?虽然可能也 trivial,没事了。
贡献:很多区间搜索方法(他这里叫 window search) (① 模块化基于树的框架 [我猜是线段树。。] modular tree-based framework(使用 Vamana ANNS 算法的特定实例化) and 标签空间划分方法 a labelspace partitioning approach. [讨论最优划分方法])

感觉恨我理解意义上的通法很像,还会很bsaic吗??

https://www.aimodels.fyi/papers/arxiv/approximate-nearest-neighbor-search-window-filters

这是ai生成的,搁着搁着。
他说不能支持动态的?

![[Pasted image 20241007144508.png]]
KD 树筛选举行
平凡做法

  1. prefiltering 前筛
  2. postfiltering 后筛
    他们好像就是线段树。

Def

\((D, l)\) 一组数据 \(D\) 是空间 (\(R^{10}\)\(l(x)\)\(x\) 这个点的属性)
可以定义筛数据是 \(D_{(a,b)}\)
\(c\)-近似,不超过最小的 \(c\) 倍返回一个(而且在区间里)

算法

朴素 baseline

\(β-WST\) : Window Search Tree

\(\beta\) 份,但最后 \(<\beta\) 就不分了。
他就是 \(\beta\) (k) 叉线段树。。真的有用吗,(为啥我觉得不如正常二叉)
\(A(D)\) 创建一个新节点,然后存儿子和 每个儿子sz()

4.2 查询线段树

就直接线段树分成 log 个节点查。

4.3 附加查询方法

OptimizedPostfiltering

找一个最大的区间后筛(我还以为是分治的,就最后扫吗,太蠢了》。。。最大的扩展区间也最多是两倍,就每次找 K 近的如果没有就倍增 (*2) 找,感觉有点笨的

ThreeSplit

找到最小的包含他区间然后执行两次 OptimizedPostfilering,没明白。。

SuperPostfiltering

任意数据结构

5. Theoretical Analysis

不想看了,感觉就线段树啊。。log

6. 实验

2.20GHz Intel Xeon machine with 40 cores and two-way hyper-threading, 100 MiB L3 cache, and 504 GB of RAM.

80 hyper-threads, query -> 16 threads.

separate 2.10GHz Intel Xeon machine with 96 cores and two way hyper-threading, 132 MiB L3 cache, and 1.47 TB of RAM

还返回了前十个的召回率。

Filter Fraction: \(1/2^i\) 这种意思
Data:没细看
查询方法超参:大部分都是正常线段树 \(\beta = 2\)
![[Pasted image 20241009233107.png]]
看起来都是他的 Super Postfiltering 要好点,不太明白,就正常高线段树很菜?
![[Pasted image 20241009233432.png]]

posted @ 2024-10-10 00:07  DMoRanSky  阅读(72)  评论(0编辑  收藏  举报