1. 为什么电商平台需要预训练语言模型
先说一个我在实际业务里经常被问到的问题:电商平台的文本数据又脏又乱,用户搜“小香风外套”可能根本不含“香奈儿”两个字,评论区里“质量不错”到底是夸还是贬也得看语境,这种情况下,传统的词匹配和规则方案早就撑不住了,怎么办?
答案就是预训练语言模型。
我在网易严选做搜索和推荐算法那几年,感受特别深。严选的特点是自营精选商品,SKU数量不像综合电商那么庞大,但每个商品的标题、卖点、评价、售后记录都很有价值,文本密度高、语义信息丰富。早期我们基于词权重和同义词词典做搜索召回,词典靠人工维护,几百个词就会让人崩溃;后来引入预训练模型做语义匹配,很多原来怎么调词典都搞不定的长尾查询,比如“给女朋友的生日礼物”“适合办公室的保温杯”,一下子就能找到正确的商品。
这个标题看起来是“一个技术方向在某平台的应用”,但真正落到业务里,它牵涉的东西远比“跑一个BERT模型”要多。你需要搞清楚:选什么基座模型、用什么样的业务数据去做继续预训练、在每个具体场景里怎么适配、线上推理的延迟怎么压、效果怎么评估、模型怎么迭代。这篇文章就是把这些东西掰开揉碎讲清楚,适合正在做电商NLP的算法工程师,也适合想了解预训练模型怎么真正落到业务里的技术管理者。
2. 模型选型:电商场景下该选哪个底座
2.1 主流中文预训练模型横向对比
先聊选型。2024年了,中文预训练模型的选择比几年前丰富得多,但电商场景并不需要盲目追新。我按“在严选实际用过/评估过”的标准,把主流模型拉了一张对比表:
| 模型 | 参数量 | 预训练数据 | 强项 | 薄弱点 | 适合的电商场景 |
|---|---|---|---|---|---|
| BERT-base-Chinese | 110M | 通用中文语料 | 稳定成熟、生态完善 | 对电商领域词汇理解弱 | 冷启动、快速验证 |
| RoBERTa-wwm-ext | 110M | 通用中文语料+全词掩码 | 语义理解更细腻、泛化好 | 领域迁移仍需微调 | 语义匹配、相似度计算 |
| ELECTRA | 110M | 通用中文语料+替换检测 | 训练效率高、表征质量好 | 下游适配需要经验 | 序列标注、意图识别 |
| NEZha | 110M+ | 中文语料+相对位置编码 | 长文本效果更好 | 生态相对弱 | 长文本、评论分析 |
| MacBERT | 110M+ | 中文语料+纠错式掩码 | 对样本噪声鲁棒 | 参数量不小 | 线上低延迟场景 |
| 自研领域BERT(严选版) | 110M | 通用语料+严选数据继续预训练 | 领域词汇完全覆盖、效果最好 | 需要算力和数据积累 | 全部场景的主力模型 |
这里我想重点说一个判断:像BERT和RoBERTa这个体量(110M左右)的模型,在电商场景下依然是性价比非常高的选择。大语言模型确实能力更强,但直接拿一个几百B参数的模型来做搜索召回或者意图分类,延迟和成本都扛不住。业界的通行做法是“大模型做数据飞轮,小模型做线上推理”,后面我会详细讲这个思路。
2.2 自研领域预训练模型的收益到底有多大
很多人会纠结一个问题:直接用开源的中文RoBERTa微调不就行了吗,为什么还要费劲在业务数据上继续预训练?
我直接说结论:在电商领域,这个收益是肉眼可见的。严选当时做了一版领域继续预训练,基座用的是RoBERTa-wwm-ext,训练语料包括商品标题、副标题、卖点、评论、客服对话、用户搜索日志,一共攒了大概2亿条文本片段,用MLM任务继续训练了10个epoch。结果在搜索相关性、评论情感、意图识别三个任务上,相比直接用通用RoBERTa微调,平均指标提升了3-5个点。别小看这几个点,放在搜索排序上就是点击率、转化率的明显变化。
原因其实不复杂。通用预训练模型学的是“人类的常识”,但电商文本有自己的一套表达体系。比如严选商品标题里的“磨毛”“水洗棉”“天竺棉”这些面料词,通用模型可能见过但理解不深;用户评论里的“掉色”“起球”“缩水”这些反馈词,和商品卖点词之间的语义关系,只有领域数据里才有足够的共现信号。继续预训练的本质,就是让模型在“说人话”的基础上,再学会“说电商的话”。
提示:继续预训练不需要重新起炉灶,用开源权重做初始化,在领域数据上继续训练MLM任务就行。数据质量比数量更重要,宁可选干净的标题和高质量评论,也不要把乱七八槽的日志全塞进去。
3. 从通用到领域:继续预训练与数据工程
3.1 数据洗练:电商语料的“去污”方法论
我踩过最大的坑,就是把数据清洗想得太简单。电商原始文本是绝对的“脏乱差”,如果不处理干净直接丢进预训练流程,模型学到的全是噪音。
先说商品标题。严选的标题有一个相对规范的结构:“品牌+品类+核心属性+规格+场景词”,但实际数据里还是会有各种问题:括号里有内幕信息(比如“非买勿拍”)、标题里带着商家自定义标签、编码混乱的符号。清洗规则我一般分四层:
- 第一层是基础清洗:去除HTML标签、不可见字符、重复标点、乱码。
- 第二层是广告词过滤:把“包邮”“秒杀”“特价”“限量”这类促销词单独抽取出来存到结构化字段,不让它们进预训练语料,因为促销词和商品语义无关,会对表示学习造成干扰。这里有个坑:搜索query里也经常出现“包邮”这个词,如果你训练语料里完全没有,线上匹配就有gap,所以促销词不是简单删掉,而是统一替换成归一化符号,比如[PROMO]。
- 第三层是长度过滤:短于5个字的标题信息量太少,长于100个字的往往是堆砌词,都要过滤。
- 第四层是近重复去重:电商标题大量存在“同款不同色”这种结构,用MinHash做近似去重,保留一个代表,避免某个爆款标题在训练集里出现几千次导致模型过拟合。
用户评论的清洗更复杂。要处理“好评返现”这类无意义文案、全是表情符号的评论、AI水军评论,我们当时的做法是先跑一轮规则+弱监督分类器,自动打上“有效/无效”标签,再抽有效部分进预训练。
3.2 训练细节:参数、算力与迭代节奏
继续预训练的技术细节,网上资料不少,但有几个亲测有效的参数设置想分享给大家。
学习率这块,我建议用非常小的值。继续预训练的出发点是在原有表示上做“微调式的适应”,不是重新学习,learning rate超过5e-5就容易灾难性遗忘——模型把通用语言能力丢了,只记住了电商词。我们最终用的是峰值2e-5,配合warmup线性衰减,效果最好。
训练数据量也不是越大越好。我做过对比实验:5亿条文本训练出来,相比2亿条,多个下游任务指标几乎没有提升,反而多花了两倍算力。原因可能是电商语料本身的信息冗余度高,模式相对有限,超过一定规模后就进入了边际收益递减区。
再说迭代节奏。领域预训练模型不是train one time就完了,电商的词表和语义会随着季节、热点、品类调整而变化。我们的做法是每季度用新增数据做一次增量继续预训练,每次只训练3-5个epoch,保持模型不过时。如果遇到大促(比如双11、618),会针对大促相关的促销词、活动词做一次快速增量训练。
4. 落地场景:严选业务里的具体应用
4.1 搜索相关性:从词匹配到语义匹配
搜索是预训练模型在严选最关键的应用场景,没有之一。
传统的搜索相关性判断是BM25+人工规则,核心问题是“词面不匹配但语义匹配”的query处理不了。用户搜“久坐办公护腰”,商品标题可能是“人体工学椅 腰部支撑”,两个文本一个共同词都没有,BM25直接歇菜。
我们上线了基于领域预训练模型的语义相关性模型,线上用双塔结构,商品塔离线算好向量存进向量检索库,query塔在线实时算向量,用内积召回候选集,再用一个BERT精排模型做相关性打分。这套“粗排双塔+精排BERT”的架构,是电商搜索里非常经典且好用的模式。
相关性标注数据怎么来?一个是人工标注,每天标几千对(query,商品标题)的相关性等级(0/1/2),另一个是基于用户行为的弱标注:用户点了且停留时间长的(query,商品)对视为正样本,展示但没点的视为难负样本。难负样本特别重要,它让模型学会区分“看起来相关但用户不买账”的情况。
4.2 商品语义匹配与类目发现
严选的自营模式会不断引入新商品,很多商品在上架阶段还没有类目标签,或者类目是商家手动填的,可靠性不高。我们做了两个事情:
第一是商品-类目预测。把商品标题+卖点文本喂给预训练模型,预测商品所属的叶子类目。这个任务用普通文本分类就能做,关键是领域预训练模型对“轻便折叠”“静音”“电动”这些词的语义理解更准确,分类准确率比通用模型高不少。
第二是相似商品发现。基于商品向量做召回,找出“相似款”,应用在两个地方:一个是同款比价和抄袭识别,一个是穿搭场景搭配——比如“衬衫”相似款召回,再关联搭配的“裤子”“外套”。注意,相似商品不是简单的语义相似,还要把价格带、风格、适用人群这些因素考虑进去,否则召回“白衬衫”和“白T恤”虽然语义上接近,但用户显然不觉得它们是一类东西。
4.3 智能客服意图识别与情感分析
严选的智能客服场景对预训练模型的要求非常苛刻:用户的话往往是短文本,口语化严重,还有很多错别字和模糊表达。
意图识别我们用预训练模型接了多层分类,目标是把用户问题归类到几十个意图槽位里,比如“物流查询”“退换货”“尺寸咨询”“发票问题”。这个任务的挑战是类目多且部分类目之间的边界模糊,光靠规则很容易撞车。预训练模型解决的核心问题是“语义泛化”——用户说“我鞋子穿两天就开胶了”,模型能懂这是“质量投诉”而不是“开胶是什么材质”的咨询。
情感分析则用在评论分析上,粒度是“方面级情感”——同一句评论里可能对“质量”表达正面,对“物流”表达负面,比如“质量很好 但是发货太慢了”。我们训练了一个方面级情感分类模型,给定评论和方面词,输出正面/中性/负面。这部分的线上收益主要体现在售后策略上:识别出负面情感集中的商品,自动触发质检流程。
5. 工程化实践与踩坑实录
5.1 线上推理延迟是怎么压下来的
预训练模型在搜索链路里最大的工程挑战是延迟。BERT做一次前向计算是毫秒级,但搜索请求的TP99要求往往在100ms以内,query塔可以实时算,但商品塔几百万个商品不可能全部实时过一遍模型。
我的做法是“分阶段混排”:
- 第一层,商品向量离线用双塔模型算好,存入向量检索库,线上用内积做近似最近邻召回(类似Faiss/HNSW),控制在5ms内。
- 第二层,对召回的几百个商品,用一个小型精排BERT(4层蒸馏版)做相关性打分,控制在10ms内。
- 第三层,再交给传统的排序模型(GBDT或深度排序模型)结合价格、销量、转化率等特征做最终排序。
蒸馏这一步值得展开说。用Teacher蒸馏得到的6层或者4层小模型,在相关性任务上能保留95%以上的效果,但推理速度是12层BERT的3-4倍。我们用了一版4层TinyBERT做精排,TP99从80ms降到了30ms以内,效果只掉了0.2个点。部署侧还能叠加量化(INT8),进一步压到20ms以内。
注意:蒸馏的时候蒸馏温度、软标签权重都要好好调。软标签权重设太大会丢失Teacher的暗知识,设太小Student学不到东西。我调下来0.5-0.7的软化温度比较合适,软标签loss权重0.7-0.8。
5.2 数据标注、评测与迭代闭环
预训练模型项目落地的成败,很大程度取决于数据标注和评测体系。我见过太多团队模型做得很花哨,但没有一个可靠的评测集,最后业务方问“效果到底怎么样”时一句话都答不上来。
评测集的建设有几个原则:一是跨越时间,不能用某几天或者某个大促期间的数据做评测集,否则季节性偏差会被模型死记硬背;二是分层采样,不同品类、不同query长度、不同意图类型都要覆盖;三是持续更新,每两周补充一批真实线上bad case,让评测集跟着业务走。
我们建立了“离线评测+在线AB”双轨机制。离线评测看相关性、准确率、召回率这些指标,在线AB看点击率、转化率、成交额。这里有一个很现实的教训:离线指标提升并不等于在线收益,甚至有时候离线涨了在线反而跌。原因可能是离线评测集和线上分布有偏差,或者模型学到的模式在线上被交互反馈扭曲。
5.3 常见问题速查表
把我在实操中遇到的高频问题和解决方案整理成了一张表,大家在落地时可以直接对照排查:
| 问题现象 | 可能原因 | 解决办法 |
|---|---|---|
| 领域继续预训练后通用任务效果暴跌 | 学习率太高/训练epoch过多 | 降低学习率到2e-5以内,减少epoch,增加通用语料混合 |
| 搜索召回结果语义相关但用户不买账 | 缺少行为弱标注数据 | 加入点击/购买信号做难负样本,结合价格带、风格特征 |
| 线上推理延迟超时 | 模型太大/并发太高 | 蒸馏小模型+INT8量化+HNSW召回,必要时上GPU推理 |
| 新品类上线后效果变差 | 领域预训练语料过期 | 每季度增量继续预训练,补充新品类数据 |
| 同一模型在A/B测试中表现不稳定 | 评测集太小/偏差 | 扩大评测集、分层采样、多次重复AB测试 |
| 模型对促销词/活动词理解混乱 | 预训练阶段促销词处理不当 | 用[PROMO]统一归一化,而不是直接删除 |
| 评论情感分析对讽刺/反话识别差 | 通用情感模型不擅长语境推理 | 加入更多上下文信息(评论文本+回复历史),训练对话级情感模型 |
5.4 分布式训练与资源规划的一个补充
最后补一个很多人容易忽视的点:分布式训练的资源规划和断点续训。
当时我们做领域继续预训练,用的是一台8卡V100服务器,并行策略是简单的DataParallel,没有用上更复杂的分布式策略,因为110M的模型单卡就能放得下,数据并行就够了。但有个细节必须注意:大规模数据多卡训练时,loss曲线可能因为batch size变大而变得不稳定,需要相应调低学习率。我一般用“线性缩放规则”:batch size翻倍,学习率也翻倍,但继续预训练场景下我会保守一点,只调1.5倍。
断点续训是保命功能。我们踩过一次坑:训练到第7个epoch时机器突然重启,因为没配checkpoint策略,前面三天算力全部白费。后来配了每1000步保存一次checkpoint,才彻底解决。
6. 未来演进与个人体会
预训练模型在严选的应用,走过了从“摸着石头过河”到“体系化落地”的过程。整个项目下来,我最深刻的体会有三个:
第一,模型永远只是拼图的一部分。同一个BERT模型,用在不同团队手上,效果可能天差地别,差的不是模型结构,而是数据质量、标注体系、评测闭环和迭代机制。这些“脏活累活”才是真正的壁垒。
第二,大语言模型时代,小模型依然有不可替代的价值。我们内部做过很多试验,用大模型做搜索相关性标注、生成训练数据,再用小模型上线推理,这个“大模型教小模型”的飞轮已经跑通了。大模型的角色从线上推理者变成了数据生产者,这个转向我觉得是未来两年最值得投入的方向。
第三,业务语言和技术语言要对齐。我当时踩过的最大的“坑”,不是技术上的,而是和业务方沟通上的——模型离线涨了三个点,业务方问“这能带来多少GMV”,我当时答不上来,后来专门搭了一套归因链路,把模型指标换算成业务指标,沟通效率才真正提高。
最后再分享一个小技巧:如果你想在电商场景快速验证预训练模型的价值,不用急着做继续预训练,先用开源的RoBERTa-wwm-ext在搜索相关性任务上微调一版,跑通整个链路,再回来优化基座模型。先证明价值,再追求极致,这是我反复验证过的节奏。