这道题其实问的是,当用户没有任何行为历史时,怎么给他做个性化推荐。传统模型依赖ID [[embedding]],新用户一来就抓瞎,但生成式推荐天然能绕过这个问题,因为它用的是语义理解,不需要看到用户ID。
具体来说,生成式模型,比如基于LLM的推荐,它的核心优势是能用自然语言描述用户。比如说一个用户注册时填了“25岁女生,喜欢露营”,我直接把这个描述当prompt塞给模型,它就能根据世界知识生成对应的商品,而不需要等用户先点几个商品再学。这跟传统模型完全是两套逻辑,传统模型是“看行为猜兴趣”,生成式是“听描述直接推”。
但光靠这个不够,实际落地我会结合几个冷启动策略。先说画像引导生成。用户注册时填的信息,比如年龄、性别、职业,或者做几道选择题,我把它拼成一段文本画像作为prompt。这里有个前提,就是用户的画像要足够干净,如果填的是假信息,比如随便选个兴趣,那生成的结果就会偏。所以线上我会加一层置信度判断,信息完整度低于60%的就走兜底策略。
再一个是热门加多样性兜底。生成式模型如果只依赖画像,容易生成太窄的内容,比如用户说喜欢露营,它就只推帐篷。我会在生成时强制加入一些热门但相关的东西,比如“露营美食”、“户外穿搭”,保证结果不单调。说白了,就是让模型在生成时加一个多样性约束,避免所有候选都长一个样。
举个例子,像小红书这种场景,新用户上传一张照片,我就可以用[[多模态]]模型解析图片内容,然后生成相似笔记推荐。这比让用户选兴趣标签更自然,因为图片本身包含了大量语义信息。但这里有个风险,如果用户上传的是随手拍的花,模型可能推一堆花,用户其实想看的不是这个。所以我会在生成时混合一些全局热门内容,比如当前平台最火的10%笔记,保证用户至少能看到一些有爆款潜力的东西。
落地时,我更倾向用生成式召回加传统模型精排的混合架构。生成式负责快速拉出候选集,但它的排序不够精准,所以后面接一个[[Bi-Encoder]]或者轻量的排序模型,把候选[[重排]]一下。这个架构的优点是冷启动阶段效果好,但代价是多了生成这一步,延迟会高。如果对实时性要求特别高,比如首页推荐必须在50毫秒内返回,那生成式召回可能撑不住,得换成更轻量的策略,比如直接基于画像的向量检索。
我最近在思考一个问题:生成式推荐在冷启动阶段表现不错,但用户行为积累多了以后,怎么平滑过渡到传统协同过滤?直接切换会不会导致推荐结果断层?这个我还没完全想透,但感觉可以用模型[[蒸馏]]或者渐进式融合来解决。
所以整体来看,我会把生成式推荐看作冷启动的加速器,而不是终局方案。它解决了“从0到1”的问题,但“从1到100”还得靠传统模型和用户行为反馈。