1. 项目概述:当机器学习遇上向量搜索的“水土不服”
在信息检索和相似性匹配的领域里,向量搜索(Vector Search)早已不是什么新鲜概念。无论是你手机相册里“查找相似图片”的功能,还是电商平台“猜你喜欢”的推荐,亦或是当下大热的LLM(大语言模型)进行检索增强生成(RAG)时从海量文档中精准捞取相关片段,背后都离不开向量搜索技术的支撑。简单来说,它的任务很明确:把文本、图片、音频等各种数据,通过一个嵌入模型(Embedder)转换成高维空间中的点(即向量),然后当有一个查询(Query)进来时,快速从数以亿计的向量库中,找出与之最“相似”的那些点。
按理说,机器学习(ML),尤其是近年来横扫计算机视觉、自然语言处理的深度学习,应该是解决这类“模式匹配”和“相似性度量”问题的绝佳人选。一个很自然的想法是:我们能否训练一个超级强大的深度神经网络,让它直接“学会”如何为海量数据建立索引并进行快速检索?这听起来像是“学习索引结构”这一美好愿景在向量领域的自然延伸。
然而,现实却有些骨感。如果你去翻看当前最权威的向量搜索基准测试榜单,比如BigANN或ANN-Benchmarks,会发现一个有趣的现象:在性能排行榜上名列前茅的,几乎清一色是基于传统统计方法(如乘积量化PQ)、图遍历算法(如HNSW)或哈希技术(如LSH)的方案。深度神经网络,这个在其他领域大杀四方的“万能逼近器”,在向量搜索这个核心战场上,却鲜有作为。最先进的ML工具,可能还停留在 k-means聚类 这个经典的、非深度的方法上。
这就引出了一个核心问题: 为什么机器学习,尤其是深度学习,没有像颠覆其他领域那样,主导高维向量检索? 是算力不够?数据不足?还是两者在根本逻辑上就存在某种“错配”?这篇文章,我就想结合自己处理大规模向量系统的经验,拆解一下这背后的深层原因。这不仅仅是一个学术讨论,更关乎我们在实际工程中,面对海量相似性检索需求时,应该如何理性地选择技术路线,避免陷入“为AI而AI”的陷阱。
2. 核心思路拆解:从“端到端学习”到“嵌入+搜索”的必然妥协
要理解机器学习为何在向量搜索上“使不上劲”,我们得先回到一个最典型的应用场景:图像检索。假设你有一个包含N张图片的数据库(N可能非常大,比如十亿级),现在用户上传了一张查询图片q,你的任务是找出数据库中所有与q内容相似的图片。
2.1 机器学习的三条技术路径及其瓶颈
面对这个问题,机器学习社区很自然地会尝试几种思路,但每一条路走到大规模场景时,都会撞上坚实的墙壁。
路径一:N路分类器(The N-way Classifier) 这是最“暴力”也最直接的ML思路。我们训练一个庞大的分类模型 f1(q) ,它直接输出一个N维的向量,每个维度对应数据库中的一张图片,数值代表该图片与查询q相关的概率。搜索时,只需对模型做一次前向传播,然后取概率最大的那个维度对应的图片即可。理论上,搜索复杂度是O(1),完美。
注意 :这个方案的致命缺陷在于,模型的参数量必须与数据库大小N成正比。每新增或删除一张图片,都需要重新训练整个模型。这在大规模动态更新的场景下是完全不可行的。它把“索引”的构建完全固化在了模型参数里,丧失了灵活性。
路径二:两两比对模型(Pairwise Comparison) 退一步,我们训练一个函数 f2(q, xi) ,它接受查询q和数据库中的一张图片xi,输出一个匹配分数。搜索时,我们需要将q与数据库中所有N张图片逐一通过 f2 计算分数,然后排序。这解决了模型大小固定的问题,增删图片只需更新数据库,无需动模型。
实操心得 :然而,其计算复杂度是O(N)次模型前向传播。即使一次前向传播只需10毫秒(这已经非常快了),在十亿规模的数据集上,一次查询就需要超过100天!这显然不现实。它的瓶颈在于,复杂的深度模型计算成本太高,无法承受线性的放大。
路径三:嵌入模型+相似度计算(Embedding + Similarity) 这正是当前业界实际采用的路径。我们训练一个 嵌入函数E ,将任意图片x映射为一个固定维度d(比如512维)的向量 e = E(x) 。同时,定义一个简单的 相似度函数S ,比如余弦相似度或内积。在数据入库时,我们预先计算好所有图片的嵌入向量 {e1, e2, ..., eN} 并存储起来。搜索时,我们只需计算查询图片的嵌入向量 eq = E(q) ,然后计算 eq 与所有N个


448

被折叠的 条评论
为什么被折叠?



