写点什么

Spotify 开源 ANN 搜索库 Voyager,比 Annoy 快 10 倍

作者:Anthony Alford

  • 2023-11-30
    北京
  • 本文字数:1137 字

    阅读完需:约 4 分钟

Spotify 开源 ANN 搜索库 Voyager,比Annoy快10倍

Spotify 最近开源了Voyager,一个近似最近邻(Approximate Nearest-Neighbor,ANN)搜索库。Voyager 基于Hierarchical Navigable Small Word(HNSW)算法,比 Spotify 之前的 ANN 库 Annoy 快 10 倍。


Spotify 使用 ANN 来支持其音乐推荐功能,比如 Discover Weekly。他们于 2013 年开发了 Annoy 来执行 ANN 搜索,但在 10 年后的当前规模下表现不佳。部分原因是由于底层算法:Annoy 使用树分区算法,而 Voyager 使用更新的 HNSW 算法。Voyager 比 Annoy 使用的内存少 4 倍,比 hnswlib(HNSW 的实现之一)少 16 倍。根据 Spotify 机器学习工程师和 Voyager 贡献者 Peter Sobot 所说:


Voyager 结合了 HNSW 更高的精度和速度,提供了经过充分测试、具有完善文档、可以在生产环境中使用的 Java 和 Python 绑定。Voyager 的理念是提供一个稳定、可靠、可在生产环境中使用的库,让任何人都可以在其应用中添加近似最近邻检索功能,无论使用的是 Python 还是 Java。


Spotify 的推荐功能首先通过机器学习算法计算歌曲或 音轨 的 Embedding。两个音轨在播放列表中频繁出现,它们在 Embedding 空间中就会被映射得越近。用户也根据他们所听的歌曲被映射到这个空间。为了推荐用户可能喜欢的歌曲,Spotify 使用 ANN 搜索来找到与用户在 Embedding 空间中位置接近的音轨。Spotify 还可以使用 ANN 进行歌曲去重:通过计算音频数据的 Embedding,ANN 可以识别具有基本相同音频的音轨。


像 Spotify 这样的规模,要快速执行这种搜索要困难得多:他们的嵌入向量有数千个维度,目录中包含了数百万音轨。Annoy 显然无法提供足够好的性能,于是 Spotify 的工程师们尝试使用现有的开源库 hnswlib,但"遇到了问题"。其核心代码存在 Spotify 工程师无法修复的错误。他们还希望拥有更简单的 API。这导致他们开发了 Voyager,该项目考虑到了 Spotify 的生产基础设施需求。


Voyager 的设计目标是快速和轻量级。其 API 针对 Java 和 Python 做了绑定,但库本身没有 Java 依赖,并且仅需要 Python 的 NumPy 库。该库可以在 Intel 和 ARM 芯片架构的机器(Linux 和 MacOS)和 Windows (Intel 芯片架构)上运行。


用户在 Hacker News 上将 Voyager 其与其前身 Annoy 进行了比较


我看到的最大区别是,Annoy 使用只读索引文件(如文档所述:"树一旦创建,就无法再添加更多的项"),而 Voyager 允许你随时调用.add_item


Peter Sobot 在 Twitter 的某个关于 Voyager 的帖子中回答道


我认为 Voyager 是一个可嵌入、超轻量、快速的向量搜索库。Voyager 没有向量数据库的花哨功能,但它没有依赖,并且只有大约 300KB。


Voyager 的源代码可以在 GitHub 上获取。Voyager 已经提交到 ANN-Benchmarks 页面,但尚未运行基准测试


原文链接:

https://www.infoq.com/news/2023/11/spotify-ann-voyager/

2023-11-30 08:005439

评论

发布
暂无评论
发现更多内容

StarRocks 成都见!企业如何打造极速统一的数据分析新范式,助力业务全方位升级

StarRocks

数据库 大数据 数据分析 国产数据库

在线SQL转XML工具

入门小站

工具

2022-07微软漏洞通告

火绒安全

microsoft 安全 漏洞

老树开花——用ImageProcessor快速搭一个图床应用

为自己带盐

dotnet 7月月更

云上解锁Web3.0 阿里云XR平台助力彼真科技呈现沉浸式演唱会

阿里云弹性计算

XR 视觉计算 虚拟演唱会

密码密钥硬编码检查

华为云开发者联盟

安全 后端 密钥

用 AnimatedBuilder 分离组件和动画,实现动效复用

岛上码农

flutter ios 安卓 移动端开发 7月月更

Python图像处理丨图像腐蚀与图像膨胀

华为云开发者联盟

Python 软件 开发 图像处理

Kubernetes入坑篇

青柚1943

Kubernetes DevOps minikube

从全球价值链视角看,京东云数智供应链对未来经济有何影响?

脑极体

GPU资源池的虚拟化路径

Finovy Cloud

GPU服务器 显卡、gpu

Docker入门(一)

神农写代码

我用开天平台做了一个城市防疫政策查询系统,你不试试?

华为云开发者联盟

开发 华为云 开天aPaaS 开天 城市防疫政策

泰凌微电子B91通用开发板合入OpenHarmony社区主干

科技汇

Java 集合

Damon

7月月更

2022冲刺金九银十震撼发布!Java八股文+大厂面试真题,干货满满!

了不起的程序猿

Java java程序员 java面试

ECCV2022 | 腾讯优图29篇论文入选,含人脸安全、图像分割、目标检测等多个研究方向

科技热闻

AIOps落地五大原则(三):架构路线

BizSeer必示科技

人工智能 AIOPS

转行前端是自学好还是培训班好

小谷哥

不要小看WebSocket!长连接、有状态、双向、全双工都是王炸技能

wljslmz

HTTP websocket 7月月更

容错、熔断的使用与扩展

神农写代码

Chrome实现自动化测试:录制回放网页动作

和牛

测试

拔掉电源会怎样?GaussDB(for Redis)双活让你有备无患

华为云开发者联盟

数据库 后端

Python|制作词云,改变词云字体颜色

AXYZdong

Python 7月月更

本周四晚19:00知识赋能第3期直播丨OpenHarmony智能家居项目之控制面板功能实现

OpenHarmony开发者

Open Harmony

在线多行文本批量正则替换添加后缀工具

入门小站

工具

融云 x 天聊,用声音打造「无压力社交」栖息地

融云 RongCloud

ArkUI路由跳转概览

坚果

HarmonyOS OpenHarmony 7月月更

日志黑名单,真的能帮你省钱!

观测云

Python3详细的数组基础操作-入门必备[列表的操作]

迷彩

数组 Python基础 列表 7月月更

【刷题记录】9. 回文数

WangNing

7月月更

Spotify 开源 ANN 搜索库 Voyager,比Annoy快10倍_数据库_InfoQ精选文章