AI News HubLIVE
站内改写2 分钟阅读

针对电商搜索微调稀疏嵌入 | 第2部分:在Modal上训练SPLADE

本文是五部分系列的第二部分,介绍了如何在Modal的无服务器GPU上训练SPLADE模型,使用Amazon ESCI数据集进行电商搜索。文章涵盖了数据加载、产品文本格式化、Modal应用设置、SPLADE模型创建、训练函数、SpladeLoss理解、YAML配置、并行超参数搜索以及避免的陷阱。目标是构建一个针对电商搜索优化的稀疏嵌入模型。

来源Qdrant Blog作者: [email protected] (Andrey Vasnetsov)

本篇文章是五部分系列的第二部分,重点介绍如何在Modal的无服务器GPU上训练SPLADE模型,以优化电商搜索。系列的前一篇文章解释了为什么稀疏嵌入优于BM25,而本文则聚焦于构建实际的训练流程。所有源代码均可在GitHub仓库中找到,微调后的模型也可在HuggingFace上试用。

数据集:Amazon ESCI

我们使用Amazon的ESCI数据集(Shopping Queries Dataset),该数据集源自KDD Cup 2022,是电商搜索领域最真实的基准之一。它包含超过120万个查询-产品对,并附有人工标注的相关性标签,分为四个等级:精确匹配(Exact)、替代品(Substitute)、互补品(Complement)和不相关(Irrelevant)。训练时,我们将精确匹配和替代品作为正样本,使模型学会识别相关产品和合理替代品。

产品文本格式化

产品文本的格式化方式对稀疏嵌入至关重要。与捕捉广泛语义的密集模型不同,SPLADE基于词汇信号:文本中的具体标记决定了激活的词汇维度。文章建议使用方括号标注品牌、管道符分隔不同部分,并设置字符限制,以保持品牌名称、产品属性和关键特征的词汇信号清晰可辨。

设置Modal应用

Modal提供无服务器GPU,无需预配硬件,按秒计费。配置中关键的两点是持久化卷和分离运行。持久化卷确保训练检查点不会因连接断开而丢失;分离运行允许长时间训练任务在后台进行。

创建SPLADE模型

使用Sentence Transformers v5中的SparseEncoder可以轻松实现SPLADE训练。该模型由两部分组成:MLMTransformer(输出词汇表上的logits)和SpladePooling(对标记级logits进行最大池化,并应用ReLU和对数饱和)。文章选择从DistilBERT而非预训练SPLADE检查点开始,以衡量领域特定微调的实际效果。

训练函数与SpladeLoss

核心训练逻辑包含SpladeLoss,它结合了两个目标:对比损失(SparseMultipleNegativesRankingLoss)和稀疏正则化。对比损失将批量内的其他产品作为负样本,将相关查询-产品对拉近,不相关对推远。稀疏正则化则惩罚密集输出,以保持检索效率。正则化权重控制稀疏程度:查询正则化权重设为5e-5,文档正则化权重设为3e-5,以在速度和召回率间取得平衡。

配置与并行超参数搜索

超参数通过YAML文件管理,便于实验。在Modal上,可以使用spawn()并行启动多个实验,每个实验分配一个A100 GPU。例如,24个实验的并行搜索可在单个训练运行时间内完成。

应避免的陷阱:无推断的SPLADE

文章警告不要试图用静态嵌入替换查询侧的Transformer以节省延迟。实验表明,静态嵌入在电商搜索中表现极差(nDCG@10仅为0.065,而标准SPLADE为0.389),因为它无法处理上下文相关的查询(如“苹果”在“苹果手机”与“苹果水果”中的不同含义)。Transformer虽然每查询耗时约15毫秒,但对搜索而言完全可以接受。

运行训练

可通过Modal命令启动训练,支持快速测试和完整数据集分离运行。检查点保存到持久化卷中,模型已发布在HuggingFace上供直接使用。下一篇文章将加载该模型,将产品索引到Qdrant,并进行检索基准测试,评估相对于BM25的提升。

关键要点

  • ESCI的分级相关性标签使模型学习细微匹配,而非二元相关。
  • 产品文本格式化对稀疏模型至关重要,结构化格式可保持词汇信号。
  • SpladeLoss平衡对比学习和稀疏正则化,正则化权重是主要调优参数。
  • Modal的持久化卷和分离运行解决了检查点管理问题。
  • 不要跳过查询Transformer,其15毫秒延迟换来了6倍的质量提升。