写点什么

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

评论

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

2022 Gartner RPA魔力象限,弘玑Cyclone位置飞跃国产RPA进击全球

王吉伟频道

RPA 机器人流程自动化 Gartner RPA魔力象限 弘玑Cyclone

用户权限-Linux系统用户管理

Albert Edison

Linux centos 运维 用户权限 8月月更

RocketMQ高可用设计之异步刷盘

急需上岸的小谢

8月月更

拒绝“填”麻烦,这里有条安全返校小妙招

sofiya

抽象工厂模式在项目开发中的应用,这个例子绝了

知识浅谈

工厂模式 8月月更

华为云桌面说“高清”的时候,究竟在说什么

科技云未来

微信小程序开发速览

乌龟哥哥

8月月更

Kubernetes Nginx配置热加载

CTO技术共享

开源 签约计划第三季

Kubernetes 核心组件

CTO技术共享

开源 签约计划第三季

让视频会议更简单,华为云会议SmartRooms一站全搞定

sofiya

docker下的spark集群,调整参数榨干硬件

程序员欣宸

Java spark 8月月更

华为发布IdeaHub S2系列,与华为云会议结合更强大!

科技怪咖

ITIL服务支持5个运营级流程简单介绍

阿泽🧸

ITIL 8月月更

“掌上迎新”,这个学校把5400+新生安排的明明白白

sofiya

C++多态案例(一)-计算器类

CtrlX

c c++ 面向对象 代码 8月月更

计算机网络(四、网络层)

计算机网络 8月月更

每日一R「10」数据结构(一)智能指针

Samson

8月日更 ​Rust

时尚品牌玛丝菲尔,选择华为云会议的3个理由

sofiya

Kubernetes服务的注册与发现

CTO技术共享

签约计划第三季

云签约,云培训,云办公,云指挥… 欧冶工业品,用数字化赋能企业

sofiya

【全干】从零搞定微信SDK授权

小鑫同学

8月月更

网红50万卖微信号被判交易无效:如何监管互联网账号交易市场

石头IT视角

游族马寅龙:常见信息安全风险及应对方案

声网

网络安全 创业讲堂

政企视频会议首选,华为云OneMeeting全场景视频会议解决方案正式发布

sofiya

打造数字化工作平台,提升内外协同效率

神奇视野

IPv6中的隧道技术

穿过生命散发芬芳

ipv6 8月月更 隧道技术

华为云会议,用高效联接推进工业企业数字化转型

sofiya

华为云会议智能会议室助力财通证券加速数字化

科技怪咖

云原生(二十二) | Kubernetes篇之Ingress案例实战

Lansonli

云原生 8月月更

头脑风暴:最长重复子数组

HelloWorld杰少

【消息通知】用公众号模板消息怎么样?

小鑫同学

8月月更

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