LEANN 如何用 LAION 多模态基准通过 90% Recall@3 目标二分搜索出最优 search complexity?
LEANN 如何用 LAION 多模态基准通过 90% Recall3 目标二分搜索出最优 search complexity【免费下载链接】LEANN[MLsys2026 Best Paper]: https://arxiv.org/abs/2506.08276. RAG on Everything with LEANN. Enjoy 97% storage savings while running a fast, accurate, and 100% private RAG application on your personal device.项目地址: https://gitcode.com/GitHub_Trending/le/LEANNLEANN 的搜索质量由complexity搜索复杂度/候选列表大小参数控制api.py 中的文档字符串将其解释为 Search complexity/candidate list size, higher more accuracy but slower即值越大结果越准但越慢。问题随之而来多大的complexity刚好满足业务需要的精度目标LEANN 仓库自带的 LAION 多模态基准benchmarks/laion/README.md把这件事做成了 Stage 3——在 caption→图片的自召回检索上对 complexity 做 1–128 的二分搜索自动找出达到 90% Recall3 的最小复杂度并在最优值附近做验证。本文按 setup_laion.py 和 evaluate_laion.py 的真实实现还原这条从建索引到拿到最优 complexity 的操作路径。准备条件环境与依赖运行基准脚本前需要Python 3.10pyproject.toml 中requires-python 3.10以及uv克隆 LEANN 仓库并进入仓库根目录从源码同步工作区依赖。Linux (Ubuntu/Debian) 路径如下README.md Installation 一节sudo apt-get update sudo apt-get install -y \ libomp-dev libboost-all-dev protobuf-compiler libzmq3-dev \ pkg-config libabsl-dev libaio-dev libprotobuf-dev \ libmkl-full-dev uv sync --extra diskannLAION 基准使用 HNSW 后端如果你只需要 HNSWREADME 说明可以用libopenblas-dev替代 MKL并在同步命令中去掉--extra diskann。Stage 3 还有几个脚本自身会检查的前置条件FAISS flat 基线文件必须存在于baseline/目录faiss_flat.index与metadata.pkl否则 evaluate_laion.py 会打印 FAISS baseline not found 并提示先运行setup_laion.py然后退出评估查询文件data/evaluation_queries.jsonl必须由 setup 生成脚本会用sentence-transformers加载clip-ViT-L-14模型首次运行会下载模型权重需要网络。第一步准备数据、索引与基线在benchmarks/laion目录下运行 setup 脚本README.md Quick Start 的命令cd benchmarks/laion python setup_laion.py --num-samples 10000 --num-queries 200该脚本会依次完成见 setup_laion.py从 HuggingFacelaion/laion400m流式读取样本异步并行下载图片到data/laion_images/用clip-ViT-L-14768 维、归一化向量为每张图片生成嵌入保存到data/clip_image_embeddings.npy构建两个 LEANN 索引紧凑索引data/laion_index.leannis_recomputeTrue, is_compactTrue和非紧凑索引data/laion_index_noncompact.leannis_recomputeFalse, is_compactFalse均为 HNSW 后端、graph_degree32、complexity64、cosine距离构建 FAISS flat 基线IndexFlatIP到baseline/faiss_flat.index并保存图片 id 的metadata.pkl——这是 Recall 计算的 ground truth 来源从样本 caption 中抽样生成data/evaluation_queries.jsonl随机种子固定为 42。注意该步骤有网络下载副作用LAION 子集 CLIP 模型权重文件全部写入benchmarks/laion/data/与benchmarks/laion/baseline/。第二步运行 Stage 3 二分搜索setup 完成后在同一目录运行python evaluate_laion.py --index data/laion_index.leann --stage 3--stage只接受2、3、4、5、all3表示 complexity 分析all会顺序执行所有阶段。Stage 3 的内部流程evaluate_laion.py重建非紧凑索引用于加速搜索。脚本先以is_recomputeFalse、is_compactFalse基于现有 passages 和预计算嵌入重建非紧凑索引到data/laion_index_noncompact.leann。原因是二分搜索要反复跑 Recall 评估非紧凑索引可直接用存储的嵌入、跳过 recompute搜索更快。取前 50 条 caption 查询captions[:50]作为测试集。二分搜索。固定target_recall 0.9搜索范围min_complexity, max_complexity 1, 128每轮取mid (min max) // 2若该复杂度下 Recall3 ≥ 90%记录为当前最优令max_complexity mid - 1向更低复杂度搜索否则令min_complexity mid 1向更高复杂度搜索。每轮评估都会打印当前 complexity 的 Recall3 以及 Target reached / Below target 提示。最优值附近验证。找到最优 complexity 后脚本会额外测试best-2到best2共 5 个复杂度上限 512逐个打印 ✅达到 90%或 ❌未达到方便确认边界。紧凑索引对照。最后用紧凑索引recompute_embeddingsTrue取前 10 条查询测试最优 complexity打印 Recall 及与非紧凑索引结果的差值让你确认 recompute 模式下精度没有明显漂移。如何判断结果成功时控制台会输出 Optimal complexity found! Complexity: 找到的最小 complexity Recall3: 对应的 recall以及验证块 Verification test around optimal complexity: ✅/❌ Complexity N: xx.x%判断依据是达到 90% 且复杂度尽可能小脚本记录的是最后一个满足recall 0.9的mid且每次命中后继续向更小值收缩。如果 1–128 全部低于目标脚本会打印 Could not find complexity achieving 90% recall / All tested complexities were below target——此时需要扩大搜索范围或检查数据文档没有给出进一步的自动处理。benchmarks/laion/README.md 中的 Benchmark Results 给出了文档示例结果示例数值不是每次运行都能复现的固定值Target Recall: 90% Optimal Complexity: 85 Binary Search Range: 1-128 Non-compact Index (fast search, no recompute)限制与边界说明文档内部有一处配置口径不一致benchmarks/laion/README.md 的 Dataset Configuration 写的是 CLIP ViT-B/32512 维但 setup_laion.py 与 evaluate_laion.py 实际加载的是clip-ViT-L-14768 维README 的 Benchmark Results 一节也写的是 ViT-L/14 768 维。按脚本实际行为为准。README Notes 提到 当前实现使用 dummy 数据演示、CLIP 嵌入随机生成而脚本源码已实现真实下载与真实 CLIP 编码如果你换过脚本版本建议以运行输出中的 embedding shape 确认为何值。Stage 3 会额外写出一个非紧凑索引*_noncompact.leann并保留给 Stage 4 使用如果直接跑--stage all全部阶段结束后脚本会自动删除这个临时非紧凑索引按其文件名前缀匹配删除文件这是脚本内置的文件删除行为。--stage all还会执行 Stage 5 多模态生成需要transformers与Qwen/Qwen2.5-VL-7B-Instruct模型只做 complexity 搜索时不需要用--stage 3即可。Recall 的 ground truth 来自 FAISS flat 全量近邻搜索IndexFlatIPk3每条查询的 recall 按与 ground truth 三个 id 的交集大小除以 3 计算平均后与 90% 目标比较。下一步拿到最优 complexity 后脚本在--stage all结尾给出的建议是 Use optimal complexity for best speed/accuracy balance。实际搜索时把它传给LeannSearcher.search(caption, top_k3, complexity最优值, ...)即可complexity的 API 默认值为 64。如果需要进一步量化紧凑索引的存储节省与搜索速度比可运行 Stage 4python evaluate_laion.py --index data/laion_index.leann --stage 4 --output results.jsonStage 4 会复用 Stage 3 留下的非紧凑索引对比两类索引的.index大小、存储节省百分比与平均搜索时间并把指标 JSON 写入--output指定的文件。【免费下载链接】LEANN[MLsys2026 Best Paper]: https://arxiv.org/abs/2506.08276. RAG on Everything with LEANN. Enjoy 97% storage savings while running a fast, accurate, and 100% private RAG application on your personal device.项目地址: https://gitcode.com/GitHub_Trending/le/LEANN创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Apache DolphinScheduler 企业微信告警接入全指南:插件配置、应用与群聊两种发送模式及源码原理解析

Apache DolphinScheduler 企业微信告警接入全指南:插件配置、应用与群聊两种发送模式及源码原理解析

Apache DolphinScheduler 企业微信告警接入全指南:插件配置、应用与群聊两种发送模式及源码原理解析 【免费下载链接】dolphinscheduler Apache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-…

2026/11/13 10:38:07 阅读更多 →
固定电话验证:从正则到前后端实现,避开这些坑

固定电话验证:从正则到前后端实现,避开这些坑

前几天有个同事跑过来问我:“固定电话验证不就一个正则吗?你帮我写一个就行。”我没急着回答,而是打开工作邮箱翻出一份客户导入记录,屏幕上几条真实数据让他沉默了几秒:010-62245678转801 0755-12345678#666 &#xf…

2026/11/13 10:38:07 阅读更多 →
Spring Boot Actuator Heapdump信息泄露分析与实战

Spring Boot Actuator Heapdump信息泄露分析与实战

1. 为什么Spring Boot信息泄露如此常见1.1 开发框架的“默认信任边界”做安全评估这些年,Spring Boot是我见过最容易暴露敏感信息的框架之一。它内置的自动配置让开发很方便,但同样让很多人忽略了同一个问题:默认情况下框架不会帮你做任何对外…

2026/11/7 10:18:57 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/13 5:13:25 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/13 5:13:25 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/13 5:13:25 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/12 18:22:26 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/12 18:22:25 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/13 5:13:25 阅读更多 →

日新闻

周新闻

月新闻