内容提要
本文介绍使用Modal无服务器GPU训练SPLADE稀疏嵌入模型。基于亚马逊ESCI数据集,将Exact和Substitute对作为正样本,通过SpladeLoss结合对比学习与稀疏正则化,控制查询约30词、文档100-400词。产品文本以品牌括号和竖线分隔格式化。10万样本在A100上训练约6分钟、成本不足1美元,检查点存入持久卷,支持断连续跑和并行超参搜索。
延伸解读
为什么用Exact和Substitute作为正样本
文章将ESCI数据集中Exact和Substitute的查询-产品对作为正样本,而忽略Complement和Irrelevant。这并非随意选择:Exact代表完全匹配,Substitute代表可接受的替代品,两者都是用户可能点击购买的结果。这样训练能让模型学会区分“相关”与“不相关”,而不是简单地将所有非精确匹配都视为负例,更贴近真实购物场景中的相关性判断。
稀疏正则化权重的权衡
SpladeLoss通过query_regularizer_weight和document_regularizer_weight控制稀疏性。文章指出,权重过高会导致向量几乎为空,检索快但召回低;权重过低则激活数千个词项,索引庞大且检索慢。推荐的甜点区是查询约30个活跃词、文档100-400个。文档正则化权重通常低于查询,因为产品描述需要更多词项来覆盖属性。
Modal持久化卷与断连续跑
训练可能持续数小时,Modal的持久化卷让检查点跨运行保存。即使SSH断开或容器重启,使用--detach启动的训练仍在A100上继续,检查点写入卷中。这避免了因连接中断而丢失训练进度,也省去了手动上传检查点到S3的麻烦。文章示例中,10万样本训练约6分钟,成本不足1美元。
推理无关SPLADE的取舍
文章提到推理无关SPLADE变体:查询侧使用SparseStaticEmbedding,跳过Transformer,仅文档侧保留完整编码器。这样查询成本降至BM25水平,但同一评估集上nDCG@10为0.379,略低于标准SPLADE的0.390。这为需要低延迟查询的场景提供了一个可接受的精度损失选项,但需根据业务需求权衡。
Q&A
如何在Modal上训练SPLADE稀疏嵌入模型?
使用Modal的无服务器GPU,通过Sentence Transformers v5的SparseEncoder和SpladeLoss进行训练。首先设置Modal应用,创建持久卷存储检查点和数据集,然后定义训练函数,加载ESCI数据集,配置训练参数,最后运行训练命令。
SPLADE训练中如何处理产品文本格式?
产品文本格式化时,品牌用方括号括起来,各部分用竖线分隔,并限制长度。例如:'[Sony] WH-1000XM5 Wireless Headphones | Industry-leading noise cancellation | 30hr battery | Hi-Res Audio'。这样保留词汇信号,使品牌、属性等成为独立标记。
SpladeLoss中的稀疏正则化权重如何影响模型?
query_regularizer_weight和document_regularizer_weight控制稀疏性。权重越高,向量越稀疏。最佳平衡是查询约30个活跃词,文档100-400个。文档正则化权重通常低于查询,因为产品描述需要更多词来捕捉属性。
在Modal上训练SPLADE模型需要多少成本和资源?
使用A100 GPU,10万样本训练约6分钟,成本不到1美元。完整120万数据集多轮训练需几小时,成本仍然较低。Modal按秒计费,无闲置硬件费用。
如何利用Modal进行SPLADE超参数并行搜索?
使用Modal的spawn()方法为每个配置启动一个GPU并行训练。例如,定义多个配置,然后同时启动所有实验,收集结果并选择最佳nDCG的配置。4个实验的搜索时间与单次训练相当。
Inference-free SPLADE与标准SPLADE有何不同?
Inference-free SPLADE仅在索引时对文档运行transformer,查询时跳过模型,查询成本降至BM25水平。训练时,查询侧使用SparseStaticEmbedding学习固定权重,文档侧保持完整SPLADE编码器。在相同评估中,其nDCG@10为0.379,略低于标准SPLADE的0.390。