01
在当前主流的电商平台中,一个典型的用户搜索路径始于用户输入需求,经由传统搜索引擎返回结果,再由用户在结果页中反复挑选、对比,最终完成下单。这个链路存在三个核心痛点:
过程繁琐:用户为了找到完全匹配需求的商品,往往需要进行多次搜索,并结合筛选、排序等操作,整个过程耗时耗力。
信息过载:商品的关键信息散布在标题、属性列表、详情页等各处,用户需要自行阅读和筛选,决策效率低下。
体验被动:整个流程完全由用户自主操作和决策,平台缺乏有效的引导,体验较为机械。
为了解决这些问题,我们构想了一种理想的搜索路径:用户表达需求后,由AI系统一步到位地完成“找”和“挑”的全过程,直接生成一个符合其需求的购物清单。这种模式的核心是实现从“人找货”到“货找人”的范式转变。AI深度搜索的根本动机,正是为了提升用户寻找和挑选商品的效率,并提供一站式的解决方案。通过智能找挑,我们期望能有效减少用户的操作步骤,降低购物过程中的流失率;同时,通过生成个性化的购物清单,打造一种“懒人式”的购物体验,实现体验的全面升级。
扫码入群参与讨论
✅ 对分享有疑问?群里问!
✅ 老师在线解除疑惑!
✅有心得体会想分享?群里聊!
扫码入群参与讨论
我们首先构建了深度搜索的1.0版本,其整体算法框架分为离线和在线两部分。
离线部分:核心工作是对海量商品信息进行结构化清洗。我们深知,大量有价值的商品信息隐藏在非结构化的商品详情页中。为此,我们通过蒸馏的方式,训练了一个QwenVL模型,专门用于从商品详情页中提取关键的结构化信息。这些信息与商品标题、属性列表等其他数据源相结合,共同构成一份详尽的结构化商品文档。随后,我们对这份文档进行Embedding计算,并建立索引,为在线检索做好准备。
在线部分:我们采用了一套经典的Pipeline级联范式。用户的Query会依次经过Query理解、召回、排序和总结四个核心模块,最终生成结果。接下来,我将对这四个模块的技术细节进行详细介绍。
在Query理解模块,我们的核心目标是实现三种关键的映射转换,从而将用户的模糊、口语化的语言,转化为机器可理解的结构化需求点。
场景化到参数化的映射:处理用户在特定场景下的不明确需求。例如,当用户搜索“能穿去哈尔滨的羽绒服”时,系统需要推理出其核心需求是超强的保暖性、防水性和防风性,并将其转换为供给侧的商品特征,如“充绒量300克以上、防水面料、防风立领设计”。
碎片化到结构化的映射:处理语义不完整的Query。例如,对于“TE HD10/12.F5螺钉”这样的搜索,系统需要依赖知识联网功能,补全“泰科电子/TE Connectivity”这样的品牌信息,并准确解析出“HD10/12.F5”是型号规格,而非产品分类。
用户语言到商品语言的映射:处理非供给侧的口语化描述。例如,当用户搜索“质量好一点的卫衣”时,系统首先需要将“质量好”映射为具体的商品语言,如“320克精梳棉、三针五线工艺、抗起球处理”;其次,对于“好一点”这样的量化描述,系统可以根据用户的画像(如注重性价比的学生或关注设计感的职场精英)进行动态调整,推荐不同档次的商品。
在向量召回模块,我们采用了经典的双塔(Siamese Embedding Network)结构。具体模型上,我们选用了阿里开源的GTE-base模型,主要考虑到其支持的最大Token数达到8K,能够很好地处理我们Token数较多的结构化商品文档。
众所周知,在对比学习中,困难负样本的质量直接影响着最终的检索效果。为了持续优化模型性能,我们采用了一种迭代式的困难负样本挖掘策略。该策略如同“左脚踩右脚”一般,通过自我迭代不断提升:
首先,我们使用一个基础数据集D0,通过对比学习训练出一个基础Embedding模型M0。
然后,我们在M0的基础上,通过检索的方式去挖掘出一批困难负样本,并将它们加入到数据集中,形成新的数据集D1。
接着,我们在D1上再次进行对比学习训练,得到一个更强的模型M1。
通过这样反复迭代多次,我们可以持续不断地提升向量检索模块的召回效果。
在排序模块,为了兼顾效果与性能,我们采用了一种多粒度蒸馏学习对齐的方案。
离线阶段:我们微调了一个效果强大但计算量也较大的bge-rerank-v2-gemma-9b模型作为教师模型(Teacher Model)。
在线阶段:为了支持线上高QPS的吞吐量需求,我们将教师模型的能力蒸馏到一个更轻量的gte-multilingual-rerank-base模型上作为学生模型(Student Model)。
在蒸馏过程中,我们设计了一个巧妙的机制:在学生模型的每一个Transformer Block后面都添加了一个蒸馏信号,以此构成一个多粒度的对齐目标。这样做有两个显著的好处:第一,可以有效提升整体的蒸馏学习效果,让学生模型更充分地学习教师模型的能力;第二,可以根据在线的流量压力,动态地对Rank模型的参数进行剪枝,实现性能与效果的灵活平衡。
最后一个模块是总结模块。在这一环节,系统需要根据召回和排序后的商品文档,针对用户的每一个需求点进行归纳总结。具体流程是:首先,提取出与用户需求点相关的商品信息;然后,判断该商品是否满足这个需求点;最后,给出信息的来源(如标题、详情页等)。
在整个过程中,为了提升前端的响应速度,减少用户的等待焦虑,我们采用了“XML结构化输出+流式解析”的方式。后端以流式(Streaming)方式逐步生成XML格式的结果,前端则同步进行解析和渲染,让用户几乎可以立刻看到部分结果,极大地优化了用户体验。
扫码入群参与讨论
✅ 对分享有疑问?群里问!
✅ 老师在线解除疑惑!
✅有心得体会想分享?群里聊!
扫码入群参与讨论
在1.0版本的基础上,我们对系统进行了三大功能升级,推出了AI深度搜索2.0,使其更接近理想中的智能搜索形态。
支持多轮会话搜索:让用户可以通过连续对话的方式逐步明确自己的需求。
支持快速搜索与深度搜索的自动切换:根据用户意图,智能路由到最合适的搜索链路。
支持多模态搜索:允许用户通过“图片+文字”的方式进行更精准的搜索。
在多轮会话场景中,我们通过一个Query改写Agent来自动关联和改写用户的多轮输入。例如:
第一轮:用户输入“3岁女宝宝连衣裙,适合秋天穿”。
第二轮:用户补充“蓝色的,带卡通图案的”。
此时,Query改写Agent会自动将两轮的需求合并,生成一个全新的、完整的Query:“3岁女宝宝连衣裙,适合秋天穿,颜色是蓝色,并且带卡通图案的”,然后再次发起检索。
为了平衡不同用户的需求,我们保留了传统的快速搜索,并提供了深度搜索选项。两者之间的切换由一个我们训练的Bert意图路由模型自动完成。当用户输入一个简单的、明确的商品词(如“男生卫衣”)时,系统会路由到快速搜索;而当用户输入一个带有复杂描述的Query(如“年龄25岁,要韩系风格”)时,系统则会自动切换到深度搜索模式,以更好地理解和满足其个性化需求。
2.0版本最大的亮点之一是支持了多模态检索。例如,用户可以上传一张带有库洛米图案的T恤图片,同时输入文本“要胸口带奥特曼的相似款”。系统需要精准理解这个复合需求:保留参考图的款式、版型、颜色等特征,但将核心图案元素替换为“奥特曼”。
我们的实现方案如下:
首先,将图文Pair(参考图+需求文本)输入到Qwen2.5-VI模型中,生成一段纯文字的需求描述,例如:“卡通图案设计、奥特曼元素、圆领短袖、白色背景的T恤”。
然后,将参考图和这段文字版的需求描述,共同输入到我们离线微调好的GME多模态Embedding模型中,生成一个多模态向量。
最后,通过多模态向量检索的方式,在海量商品库中找到最符合用户需求的商品。
扫码入群参与讨论
✅ 对分享有疑问?群里问!
✅ 老师在线解除疑惑!
✅有心得体会想分享?群里聊!
扫码入群参与讨论
在深度搜索1.0和2.0的探索之后,我们开始思考一种更原生的方式来利用大模型的推理能力,希望打造一个“模型即搜索引擎”的全新检索范式。这就是我们的端到端检索方案。
其核心思想是,让大模型直接生成(decode)出符合用户需求的商品ID或其某种形式的编码。整个流程分为四步:
商品码本化(商品语义化):首先,我们将每个商品都表示成一串离散的ID序列,即“码本”(Codebook)。
商品到码本的对齐训练:这是一个大模型的继续预训练阶段。其目的有两个:一是让大模型学习海量的商品知识;二是将商品的码本Token映射到大模型的语义空间中,实现两种离散Token的语义对齐。
Query到码本的映射:这是模型在线推理的核心任务。我们输入一个用户Query,模型直接生成一个或多个最匹配该Query的商品码本序列。
码本前缀匹配:模型生成码本后,我们通过高效的前缀匹配技术,在索引中快速检索出对应的商品。
在上述方案中,最终的检索效果严重依赖于码本的质量。我们最初采用了业界比较典型的RQ-VAE方式来生成码本。但在实践中,我们发现RQ-VAE对于搜索任务并非特别友好。
其根本原因在于,RQ-VAE本质上是一个多层的VQ-VAE。在第一层,它等价于K-means聚类,效果尚可。但从第二层开始,它聚类的对象是每个样本与第一层类簇中心的“差异(Residual)”。我们发现,这个“差异”在所有商品上呈现出各项同性,分布非常均匀。这导致从第二层开始,每一层的码本都会均匀地覆盖到所有商品类目上,使得模型训练时的熵非常高,不利于大模型进行有效的因果建模。
为了解决这个问题,我们放弃了RQ-VAE,转而采用一种层次化K-means聚类的方式。通过这种方式,我们可以将同一类目的商品在码本的每一层都约束在少数几个空间内,形成一个具有清晰层次结构的前缀编码。这种结构化的码本极大地有利于大模型进行推理和生成。
实验表明,端到端生成式检索在许多Query下表现相当出色。例如,搜索“女士小香风连衣裙”,模型能生成非常精准的结果。
然而,它也存在明显的问题。在一些特别细粒度的Query上,模型可能会出现“幻觉”。例如,当用户搜索“三岁宝宝连衣裙,红色,带米老鼠卡通图案的”,生成式检索返回的结果虽然满足了“三岁宝宝”、“连衣裙”、“红色”等要素,但在最关键的“米老鼠卡通图案”这个细粒度属性上却出现了错误,生成了其他卡通图案。相比之下,传统的向量召回方案虽然在风格上可能略有偏差,但能准确地保留所有核心要素。
这个结论表明,当前的端到端生成式检索方案(1.0版本)虽然在很多场景下可用,但还不能完全替代传统的检索方式。
基于上述发现——即生成式检索在类目、风格等宏观层面表现稳定,仅在细粒度属性上偶有偏差——我们将其应用扩展到了推荐场景。因为在推荐场景中,用户对相关性的要求不像搜索那样苛刻。
例如,对于一个场景化Query“冬天去哈尔滨游玩,我应该穿什么?”,模型能够像导购一样,进行思考并生成一个完整的购物清单,包括加厚羽绒服、保暖内衣、毛线帽等,并为每个品类推理出对应的商品码本。从解码出的商品来看,效果非常出色,证明了该技术在场景化推荐中的巨大潜力。
扫码入群参与讨论
✅ 对分享有疑问?群里问!
✅ 老师在线解除疑惑!
✅有心得体会想分享?群里聊!
扫码入群参与讨论
回顾我们的1.0方案,无论是深度搜索还是端到端检索,其效果的上限很大程度上都取决于商品Embedding的质量。因为从商品文档到Embedding,再到码本量化,最后到大模型训练,这几个步骤都是解耦、分开训练的,无法进行全局优化。
那么,有没有可能突破Embedding本身带来的效果天花板呢?为此,我们提出了端到端检索方案2.0。
在这个新方案中,我们将整个链路通过一个端到端的方式联合建模起来。商品文档经过Encoder后,其产出的向量会作为Key和Value输入到一个Q-Former模块中。Q-Former旨在学习一个变长的码本表示,这个表示再通过一个投影层对齐到大模型的语义空间。
整个模型的训练分为三个阶段:
第一阶段:联合训练Encoder、Q-Former和投影层。我们固定大模型,任务是通过学习到的码本表示来重构(Reconstruct)原始的商品文档。如果码本能够无损地重构出原始文档,就证明它包含了完整的商品信息。
第二阶段:训练VQ量化层。我们冻结第一阶段训练好的所有模块,只训练VQ-Layer。其目的是为量化过程提供一个良好的初始化。
第三阶段:全链路端到端联合微调。我们将所有模块全部解冻,进行联合优化。
通过这种端到端量化感知训练(End-to-End Quantization-Aware Training)的方式,我们可以让码本的质量突破原始Embedding向量的限制,从而真正打开生成式检索效果的想象空间。
生成式检索虽然已经取得了一定的阶段性成果,但我们仍有很长的路要走。感谢大家的聆听。
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |