Note - ICML24 - Approximate Nearest Neighbor Search with Window Filters

news/2024/10/10 0:22:16

他这个好像保证一个界的 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]]

这里看起来又是普通线段树好了?

总结

emm 感觉也没有啥创新 idea,就是复合了个 k 叉线段树上去(他说的主要贡献就是比暴力快 75倍,这很正常吧就因为暴力 \(O(n)\) 线段树 \(\log n\),确实该这么快。。)(prefiltering)然后他的后筛相当于不是 log 哥区间了烧着一点
...

疑问:

  1. 他一开始说 c 近似,后面好像又跟 c 没关系了就是下找的?

不过 ICML 这种简短风格感觉比 SIGMOD 要舒服一点。(虽然可能是我理论和附录 skip 了 ...

可能的提升?

  • 还是上一篇同样的,如果里面这个 ANN 结构支持可持久化存储前缀插入信息,这样就可以分治精准变成两个区间的查询。这样 \(\log\) 个就变成 \(2\) 个,速度应该还会快,但不知道他用的这个 Vamana 行不行,但我感觉我魔改一下 HNSW 应该会科学点(感觉挺有道理变快的。【相当于线段树其实不慢,但在第一个图里面比分治 *k的post乱搞慢一两杯左右,但感觉这个没保证的。。】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/69634.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式

分享删除字符串最后一个字符的多种实现方法,包括字符串、StringBuilder、Array、Linq等方式,并进行性能测试。结果显示字符串方式性能最优,但了解多种方法有助于选择最合适的方法。今天想通过和大家分享如何删除字符串最后一个字符的N种实现方法,来回顾一些基础知识点。 01…

NET Core 基础 - 删除字符串最后一个字符的七大类N种实现方式

分享删除字符串最后一个字符的多种实现方法,包括字符串、StringBuilder、Array、Linq等方式,并进行性能测试。结果显示字符串方式性能最优,但了解多种方法有助于选择最合适的方法。今天想通过和大家分享如何删除字符串最后一个字符的N种实现方法,来回顾一些基础知识点。 01…

003、v3admin学习,修改全局配置如去掉水印等

1、v3admin打开之后的界面如下 2、修改一下全局通用设置 3、界面如下 4、把app.vue中的这一段注释掉 5、浏览器也就没有弹窗显示了。

在VMware中安装CentOS7(保姆级教程)

centos7下载地址:https://mirrors.aliyun.com/centos/7/isos/x86_64/1、打开“VMware Workstation“软件,选择”创建新的虚拟机 ![ 2、选择“典型”选项,然后下一步。3、选择“稍后安装操作系统”,点击下一步。4、客户机操作选择“Linux”,版本选择“CentOS 7 64位”,点击…

002、v3admin学习,设置npm的端口和ip

1、使用命令行npm run dev启动v3admin的时候,会有多个ip地址以及端口 2、在vite.config.ts中,修改host为false和port为1314 3、ctrl+c结束端口,并运行npm run dev来启动。可以看到只有一个 http://localhost:1314/ 端口启动了。 4、浏览器打开,可以正常显示。5、效果如下:…

001、v3admin学习,下载并这次启动运行v3admin

1、下载github,并放到自己的项目工程中2、确保直接电脑按照了node.js,输入cmd命令行看node,可以看到node版本是v20 3、在工程目录用命令行输入 npm update 4、在命令行继续输入 npm run dev5、可以正常登录了。 6、界面内容如下:

《花100块做个摸鱼小网站! 》第七篇—谁访问了我们的网站?

⭐️基础链接导航⭐️ 服务器 → ☁️ 阿里云活动地址 看样例 → 🐟 摸鱼小网站地址 学代码 → 💻 源码库地址一、前言 大家好呀,我是summo,最近发生了些事情(被裁员了,在找工作中)导致断更了,非常抱歉。刚被裁的时候还是有些难受,而且我还有房贷要还,有些压力,不过…