2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

评论

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

用户行为分析模型实践(二)—— 漏斗分析模型

vivo互联网技术

大数据 数据分析 Clickhouse

apk瘦身;如何缩小体积呢?这篇文章来教你

爱好编程进阶

Java 程序员 后端开发

AQS中那些不得不说的理论知识

爱好编程进阶

Java 程序员 后端开发

Day340

爱好编程进阶

Java 程序员 后端开发

《对线面试官》Java注解

Java3y

Java 程序员 面试 编程语言 5月月更

SpringSecurity认证流程分析

急需上岸的小谢

5月月更

10-2 5-2 查询至少生产两种不同的计算机(PC或便携式电脑)且机器速度至少为133的厂商 (20 分)(思路加详解+测试用例

爱好编程进阶

程序员 后端开发

320000字2021春招高频面试真题汇总

爱好编程进阶

Java 程序员 后端开发

企评家,打造专业的企业大数据SaaS平台

企评家

企业大数据 企评家 企业成长性评价

Elasticsearch Document Bulk API详解、原理与示例

爱好编程进阶

程序员 后端开发

2021-6-1【利用指针方法求数组的最大值和最小值】

爱好编程进阶

Java 程序员 后端开发

50道大厂经典Spring面试题,你能答出来几题?

爱好编程进阶

Java 程序员 后端开发

Git 这样回退代码,才足够优雅

爱好编程进阶

Java 程序员 后端开发

IDEA常用快捷键总结

爱好编程进阶

程序员 后端开发

C语言_Linux基本命令与C语言基础

DS小龙哥

5月月更

MongoDB 入门教程系列之三:使用 Restful API 操作 MongoDB

汪子熙

数据库 mongodb 分布式数据库 分布式数据库mongodb 5月月更

Day141

爱好编程进阶

Java 程序员 后端开发

Dubbo实战案例01【需求分析及项目创建】

爱好编程进阶

Java 程序员 后端开发

Python 操作 Excel 第3篇博客,python openpyxl 模块一文打通

梦想橡皮擦

5月月更

网站开发进阶(二十六)JavaScript 实现页面刷新方法汇总

No Silver Bullet

JavaScript 页面刷新 5月月更

2021 年最新版 68道Redis面试题,20000字,赶紧收藏起来备用

爱好编程进阶

Java 程序员 后端开发

2个不同的对象集合如何取交集和差集

爱好编程进阶

Java 程序员 后端开发

Dart9

爱好编程进阶

Java 程序员 后端开发

什么是隐私计算,它是怎样保护我们的隐私安全

华为云开发者联盟

安全 联邦学习 隐私计算 隐私安全 可信智能计算服务

聊聊 C 语言和 ABAP 这两门编程语言的关系

汪子熙

编程语言 C语言 SAP abap 5月月更

15-拦截器

爱好编程进阶

Java 程序员 后端开发

BATJ内部Java求职面试宝典,尤其应届生如果还没有学过那后悔去吧,也许你已经错过N多家大厂offer

爱好编程进阶

Java 程序员 后端开发

Day301

爱好编程进阶

Java 程序员 后端开发

HR面试都会问什么问题?(上

爱好编程进阶

程序员 后端开发

MongoDB 入门教程系列之二:使用 Spring Boot 操作 MongoDB

汪子熙

node.js 数据库 mongodb 分布式数据库 5月月更

Java EE 阶段小项目(小型商城商品展示 + 购物车

爱好编程进阶

Java 程序员 后端开发

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