
这项由Clark Labs Inc.开展的研究发表于2026年5月,论文以预印本形式公开,编号为arXiv:2605.28034v1,感兴趣的读者可通过该编号检索完整论文。
**一个让人头疼的存储账单**
假设你经营一家图书馆,每本书进门时你都要给它拍一张超高清全身照存档,方便日后快速认出它。一张照片占1536字节的存储空间,听起来不多,但当你的图书馆藏书达到一亿册时,仅仅是这些"档案照"就要吃掉将近150GB的硬盘。更麻烦的是,每次有读者来询问"有没有类似这本书的作品",系统都得把所有档案照翻出来比对一遍,数据量越大,速度越慢,费用越高。
这正是当下很多互联网产品面临的真实困境。现代AI系统会把一段文字、一个问题甚至一首歌转化成一串长长的数字,这串数字叫做"嵌入向量"(embedding),你可以把它理解为AI为这段内容绘制的一张精确地图。两段意思相近的句子,它们的地图坐标就会很接近;意思差得远的句子,坐标就相距甚远。搜索引擎、推荐系统、智能客服,背后都依赖这张地图在工作。
问题是这张地图太大了。一段384维的句子嵌入向量,存成普通浮点数格式需要1536字节。当系统每天要处理数百万甚至数十亿条内容时,单是存储这些地图就是一笔巨大的开销。更别提把地图从服务器传到用户设备,或者在内存里快速翻找的代价。
现有的压缩方案大多像量身定制的西装——先收集大量样本,量体裁衣,学习这批数据的特有规律,再生成压缩模板。这类方法效果确实不错,但有个硬伤:你得先有一批训练数据才能开工。如果内容是实时产生的,一条一条地往系统里送,还没等凑够训练集,内容就已经堆成山了。
Clark Labs Inc.的工程团队为此设计了一套叫做Clark Hash的工具,它的核心思路是:不量体裁衣,改用一把通用的"折叠尺"。每一个新向量进来,不管它是什么内容,直接按照同一套固定规则折叠压缩,存成48字节——是原来1536字节的三十二分之一。不需要训练,不需要等数据,来一个压一个,随时可用。
**一、把一幅画折成一张名片**
要理解Clark Hash怎么工作,先回到那个图书馆的比喻。原始的嵌入向量像一张详细的城市地图,标注了384个精确坐标,每个坐标用一个32位浮点数表示,信息密度极高。Clark Hash要做的,是把这张详图压缩成一张只有96个格子的简易棋盘,每个格子里只存一个粗略的数字。
压缩分四步走,环环相扣。
第一步叫"方向标准化"。每个输入向量先被缩放到单位长度——也就是说,不管原来这个向量有多长,都先把它变成一个方向箭头,长度统一定为1。这一步的目的是确保后续比较的是"朝向哪里",而不是"走了多远",对应的是余弦相似度搜索(简单理解:只看两个箭头的夹角,不管箭头长短)。
第二步是核心魔法:稀疏带符号投影。这一步相当于把那个384维的方向箭头"折叠"成96维。具体做法是:预先用一个固定种子数(默认是12345)生成一张随机的"折叠规则表"。规则表里写着,原始坐标里的第i个数,应该折叠到目标棋盘的第k格,并且乘以正1或负1(这个正负号也是随机但固定的)。每个原始坐标会参与s次折叠(默认s=4),最后每格的数值是所有落入该格的贡献之和,再除以√s做归一化。
这个设计的精妙之处在于:虽然折叠过程引入了随机性,但数学上可以证明,两个原始向量的内积(即相似度)的期望值,等于它们折叠后向量的内积。换句话说,平均而言,折叠不会系统性地扭曲相似关系。这背后的数学基础叫做Johnson-Lindenstrauss引理,是1984年由两位数学家Johnson和Lindenstrauss建立的经典理论,大意是:高维空间里的一组点,可以投影到低维空间,同时近似保持点与点之间的距离。
第三步是尺度调整。折叠后的每个坐标值理论上落在一个很小的范围内(大约是1/√m量级,m是目标维度),为了让后续的量化步骤有合适的精度,先乘以√m把数值放大到一个稳定区间,比如[-3, 3]附近。
第四步是固定标量量化。把放大后的每个坐标值,先截断到[-3, 3]的范围(超出范围的强制拉回边界),然后均匀划分成2^b-1个台阶(b=4时就是15个台阶),把连续数值"取整"成最近的台阶编号,存成4位整数。96个格子,每格4位,总共96×4=384位=48字节,压缩完成。
整个过程中没有任何需要从数据里学习的参数。折叠规则表由种子固定生成,量化台阶数由位宽决定,截断范围由用户指定。来一个向量,按规则走一遍,立刻出码。
**二、查询时不走相同的路**
存储端把地图折叠成了简易棋盘,那查询的时候怎么办?如果查询向量也被同样压缩成48字节再来比对,两边都经历了量化误差,错上加错,精度损失会更大。
Clark Hash的解决方案叫做"非对称评分":数据库里存的是压缩后的低精度棋盘(48字节),但查询向量保持浮点数精度,只做投影折叠,不做量化。查询时,先把查询向量也用同一套种子折叠成96维浮点向量,然后用这个高精度的查询向量去和数据库里的低精度棋盘做点积。
具体计算是:查询的第k个浮点坐标乘以数据库向量的第k个量化坐标(先反量化回近似浮点值),96对相乘再求和,最后除以96,得到一个近似的余弦相似度估计值。
这种"一边精确一边粗糙"的比对方式,比两边都粗糙要准得多,而且不增加存储负担——数据库侧的存储量没有变化,只是查询时多保留了一份浮点向量而已,而这份向量是临时计算的,不需要存储。
对于需要保留向量原始长度信息(而非只比较方向)的场景,Clark Hash还提供了"点积模式":在48字节的棋盘基础上额外附加2字节,存储原始向量长度的对数编码,总共50字节,查询时把方向相似度乘以两端的长度估计,恢复出完整的点积近似值。
**三、用数字说话的测试结果**
研究团队在一套覆盖29个语言子集、共9304对标注句子的多语言语义相似度数据集上做了验证。数据来自两个标准测试集:STS17(跨语言语义文本相似度数据集)和STS22(更新版的跨语言相似度数据集),通过MTEB(大规模文本嵌入评测基准)获取。
测试用了两个MiniLM家族的句子编码器。第一个是all-MiniLM-L6-v2,主要针对英语训练,拿来做多语言测试基本上是"赶鸭子上架"。第二个是paraphrase-multilingual-MiniLM-L12-v2,是专门为多语言场景训练的。
评估指标分两层。第一层是Spearman相关系数,衡量模型打出的相似度分数和人类标注分数的相关性,数值越高说明模型越像人类的判断。第二层是Pearson相关系数,衡量Clark Hash压缩后的分数和原始浮点分数的相关性,数值越高说明压缩失真越小。
多语言模型在STS17数据集上,原始浮点余弦分数的Spearman相关系数为0.8144,压缩后的48字节版本达到0.7460,下降了0.0684。同时,压缩分数和原始分数之间的Pearson相关系数高达0.9099,说明压缩对分数排序的影响相当有限。在STS22数据集上,多语言模型的原始分数本身就不高(0.2973),压缩后变为0.2472,下降了0.0501,但压缩分数和原始分数的Pearson相关系数达到了0.9460,反而更高。这表明Clark Hash在这个数据集上保留了极高比例的原始分数信息。
英语模型的表现验证了一个重要结论:压缩工具的质量上限取决于编码器本身。all-MiniLM-L6-v2在多语言数据上表现本就不佳(STS17上只有0.3644),压缩后进一步跌至0.2719。这不是Clark Hash的锅,而是用了一把不合适的尺子去量不该量的东西。Clark Hash的作用是忠实地保留编码器输出的信息,但它无法弥补编码器本身对数据的理解不足。
从运行时间来看,测试机器上编码器生成句子嵌入分别耗时约119秒(英语模型)和208秒(多语言模型),而Clark Hash对全部17000个唯一句子的量化编码只需约0.025秒,对所有句子对的打分只需约0.005秒。换句话说,压缩和打分加在一起还不到整体时间的万分之一。研究团队明确指出这些时间数字只是特定机器上的参考,不应作为跨机器的性能基准。
**四、这把折叠尺能用在哪,又不能用在哪**
Clark Hash适合的场景有一个共同特征:内容实时产生,无法等待训练,但对存储效率有明确要求。比如个人设备上的本地语义搜索,一台手机里不可能存几百万条1536字节的向量,但用48字节版本就很可行。再比如实时日志分析系统,每秒钟涌入的日志条目需要立刻编码存储,等不及任何离线训练环节。又比如低带宽网络下的向量传输,把1536字节压成48字节再传,再在接收端解压,可以显著降低传输成本。
不过研究团队在论文中态度相当坦诚地说明了局限性。Clark Hash没有从数据里学习任何东西,这意味着它无法针对特定数据分布做优化。产品量化(Product Quantization)等学习型压缩方案,在拥有足够训练数据的前提下,可以在相同字节数内保留更多的精度。Clark Hash的定位是"什么都不用准备就能用的简单工具",而不是"在相同预算下精度最高的方案"。
此外,论文中的测试只评估了分数保留率,没有测试在大规模真实检索场景下的召回率表现,也没有测试对抗性输入或动态数据流的鲁棒性。固定的sketch维度(m=96)对于某些特殊分布的数据可能不够用。研究团队建议用户根据自己的编码器和质量目标,自行调整m(目标维度)、b(位宽)、s(稀疏度)和c(截断范围)这四个参数。
实现层面,Clark Hash是一个Rust语言编写的库(crate),对外同时暴露SQuaJL和ClarkHash两个名称的接口。库本身包含一个FlatIndex组件,可以在内存里对压缩向量做精确的线性扫描搜索,但这只是演示工具,不是生产级别的近似最近邻索引。如果需要在数百万向量中做毫秒级搜索,还需要搭配HNSW或IVF等专门的近似索引结构,Clark Hash负责压缩,索引结构负责快速导航。
说到底,Clark Hash做的事情并不复杂,它把三件有据可查的数学工具——稀疏随机投影、固定标量量化、非对称内积评分——组合成一个拿来就能用的小包裹。背后的Johnson-Lindenstrauss引理早在1984年就有了,特征哈希技术也被机器学习社区研究多年,标量量化更是信号处理领域的基础教材内容。Clark Hash的价值不在于发现了什么新数学,而在于把这些工具打包成了一个无需配置、无需训练、代码量极小、行为完全确定的实用组件。
这对开发者意味着:再也不用为"向量库还没数据可以训练但又得先存向量"的鸡生蛋问题发愁。一行代码初始化,一行代码编码,存进去,用的时候拿出来打分,始终如一。代价是精度略有损失,以及在数据分布极端的场景下可能需要手动调参。在权衡过这笔账之后,如果你觉得32倍的存储节省比那一点精度损失更重要,Clark Hash就是现成的答案。
---
Q&A
Q1:Clark Hash压缩句子嵌入时需要准备哪些训练数据?
A:Clark Hash完全不需要训练数据。它使用一个固定的随机种子(默认为12345)生成投影规则,每个向量都按照同一套固定规则独立压缩,不依赖任何语料库统计信息。这是它区别于产品量化等学习型压缩方案的核心特点,来一个向量就能立刻压缩存储,无需等待。
Q2:Clark Hash的48字节和原始1536字节相比,相似度搜索的准确性损失有多大?
A:在多语言MiniLM-L12编码器的测试中,压缩后的分数与原始浮点分数的Pearson相关系数达到0.9099(STS17数据集)和0.9460(STS22数据集),说明分数排序保留得相当好。对比人类标注的Spearman相关系数下降约0.05到0.07。但实际损失大小取决于编码器质量和具体数据分布,用户需自行测试。
Q3:Clark Hash适合用来替代FAISS或其他近似最近邻搜索库吗?
A:不适合直接替代。Clark Hash是一个存储压缩编解码器,负责把向量压缩成紧凑格式并快速估算相似度分数。它自带的FlatIndex只能做线性扫描,不具备FAISS等工具的快速索引能力。实际生产中,Clark Hash更适合与近似最近邻索引配合使用:用Clark Hash压缩节省存储,用专门的索引结构加速检索。
好文章,需要你的鼓励
AWS AI Labs研究团队发布EvalAgent,这是一套通过"评估技能"自动生成AI智能体评测方案的系统,将首次运行成功率从17.5%提升至65%,并在人类专家评测中获得79.5%的偏好选择。
亚历山大大学提出M2Retinexformer,通过融合深度、亮度和语义三种辅助模态,让AI在增强暗光图像时兼顾几何结构与视觉自然度。
浙大、西湖大学等联合提出FAAST,无需反向传播,一次正向扫描将训练样本压缩为快速权重矩阵,推理时间和内存占用分别节省90%和95%以上。
慕尼黑工业大学发布RealICU基准,用专家后见之明评测大语言模型在ICU实时决策中的真实能力,发现现有顶级AI存在有害推荐率过高和锚定偏差两大安全隐患。