写点什么

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:005851

评论

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

开发5年!三面字节,成功拿到27k*17offer,原来也没那么难

Java 程序员 架构 面试

Rust从0到1-泛型-生命周期

rust 泛型 生命周期 generic lifetimes

剪视频一点都不难,多款超实用剪辑软件全方位评测!

懒得勤快

短视频 视频剪辑 视频制作

管理者如何避免主观偏见

石云升

职场经验 管理经验 6月日更

高寿命NVMe SSD应用场景探讨

怀瑾握瑜

区块链 数据库 云计算 SSD 虚拟货币

多云部署又添新「云」,EMQ X Cloud 正式支持腾讯云部署

EMQ映云科技

阿里云 IoT 华为云 云平台 #腾讯云

双指针法

后台服务器开发

c++ 双指针 LeetCode

工作年限、成长路线、进阶技术。怎样才能成为架构师?

Linux服务器开发

Linux服务器开发 Linux后台开发 软件架构师 服务器架构师 C++架构师

前端 JavaScript 复制粘贴的奥义——Clipboard 对象概述

编程三昧

JavaScript 大前端

唯品会:在 Flink 容器化与平台化上的建设实践

Apache Flink

flink

低代码助力企业生产管理8大招式,你学废(hui)了吗?

优秀

低代码

【签约计划】百位签约创作者名单公布

InfoQ写作社区官方

签约计划

网络为本,博睿数据NPMD用20%的投入实现80%的功能

博睿数据

博睿数据 数据链DNA NPMD

微警务系统搭建,智慧派出所平台建设解决方案

【小技巧】Google浏览器设置之Tab折叠分组

恒生LIGHT云社区

推荐 浏览器书签 谷歌 工具分享

一份283页pdf,五大核心内容,熬夜“啃完”,竟拿下了阿里offer

Java 程序员 架构 面试

墨奇,以“一手之力” 证明你就是你

E科讯

ROS CDK | 云上资源自动化部署新模式

郭旭东

阿里云 ROS 基础设施即代码 IaC

1小时学会不打代码制作一个网页精美简历(1)

1_bit

大前端 低代码 iVX 低代码开发平台

腾讯安全姬生利:《数据安全法》下,云上数据安全最佳实践

腾讯安全云鼎实验室

数据安全 云安全 数据安全法

架构实战营 模块六:课后作业

👈

架构实战营

体验为先,博睿数据打造以用户会话为中心的监测体系

博睿数据

博睿数据 数据链DNA DEM

2021年,想要成为年薪百万的Java架构师需要掌握哪些技术?

Java架构师迁哥

【Linux】使用 systemd 管理 frp 服务

赖猫

Linux 后端

Flink Job 概览

Alex🐒

flink 翻译 flink1.13

字节跳动亿级视频处理系统高可用架构实践

火山引擎开发者社区

架构 后端 音视频

新版发布|ShardingSphere 5.0.0-beta 来了!

SphereEx

ShardingSphere

为什么大家都在用WebRTC?

anyRTC开发者

音视频 WebRTC 语音通话 视频通讯

网络态势感知是什么?

郑州埃文科技

自从有了这个工具,一键代码迁移不在话下

华为云开发者联盟

代码迁移 鲲鹏DevKit 汇编翻译 汇编语言 Kunpeng

Flink 和 Iceberg 如何解决数据入湖面临的挑战

Apache Flink

flink

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