摘要:通过对用户行为序列建模,推荐系统很好地洞察了用户序列行为背后的深层动机,在深度学习时代获得了巨大的成功。自chatgpt出现后的很长一段时间,推荐系统没有很好的紧密结合大模型能力,来增强对用户兴趣的探索和利用。简单的推荐系统+大模型,效果总是忽上忽下,总感觉没
推荐系统正在努力靠近大模型的训练范式。
作者丨谢志军
通过对用户行为序列建模,推荐系统很好地洞察了用户序列行为背后的深层动机,在深度学习时代获得了巨大的成功。自chatgpt出现后的很长一段时间,推荐系统没有很好的紧密结合大模型能力,来增强对用户兴趣的探索和利用。简单的推荐系统+大模型,效果总是忽上忽下,总感觉没有找到推荐系统结合大模型的真髓,而一直是拿着锤子找钉子的迷茫状态。
大模型强势将过去的文本、语音、视觉全部革新一遍,时代的车轮滚滚向前,推荐系统也要有自我革新的能力。
基于用户行为序列,上次是序列建模,这次是序列推理,通过强化学习训练大模型理解用户行为序列之间的内在关系,生成并搜索用户兴趣标签所代表的相关资讯,让大模型承担起用户行为序列与资讯数据库的桥梁,端到端地预测用户下一个最可能点击的资讯,也许是一条崭新而光明的路。
从最近的生成式推荐方案看出,推荐系统正在努力靠近大模型的训练范式。如果我们将DeepFM、DIN之类的训练方案比作是“小模型”从零开始的“预训练”,那么端到端一体式优化在升级“小模型”为“大模型”的同时,也开启了“大模型”的“后训练”进程,从GPT-3集成强化学习RLHF开始诞生ChatGPT,模型的智能才真正大爆发,让我们不断探索推荐系统的ChatGPT时刻。
本实验的github代码和数据:
E1
1 用户行为序列建模
推荐系统吃到了深度学习的时代红利,在对用户行为序列(UBM:User Behavior Modeling)的特征建模方面,基于DIN模型一路演化前进,取得了不错的成绩[1]。
你问DeepSeek,一句话总结那时的模型:
下图说明了各个模型之间的师徒关系和成绩[1]
同时很容易从模型性能的角度,否决如今大部分的LLM大模型作用在实时推荐系统上。换句话说,如果LLM大模型只能作用于部分离线的推荐模块,应用前景是灰暗的。
2 大模型与用户行为序列
笔者曾在ChatGPT出现早期,用当时开源ChatGLM模型对用户行为序列预测下一个最可能点击的item,可能是限于当时模型智能和指令跟随能力,Next-Item的预测总体上欠佳。后来了解到该方法与GPT4REC思路上是相似的,说明思路上可行,但落地上需要等待时机。
此后大模型的发展乘风破浪,DeepSeek将性价比极高的强化学习方法推广开来,SFT微调不再是低成本改造大模型的性价比之选。如今开源大模型的能力早已追上曾经的王者GPT-4,小而强,又强又便宜,和强化学习一结合,简直绝配!
在复现DeepSeek R1的路上,围绕veRL[2]强化学习训练框架,产生了很多有意思的训练策略,其中和用户行为序列推理相关的训练策略Rec_R1[3]和Search_R1[4],前者作用于推荐系统,后者作用于搜索系统,殊路同归,作为关键词相关召回策略的一种优化方法,在Amazon电商推荐、wiki搜索问答与多跳推理等任务上获得了不错成绩。
本文重点在Rec_R1基础上进行了扩展,将实验数据集更换为微软开源的MIND-small[5]新闻数据集,具有完整的用户历史点击序列和相应的新闻标题与摘要(很遗憾没有正文),由此形成完备的强化学习所需数据集,进行下一阶段的实验观察。
3 用户行为序列推理
原作Rec_R1在大模型选型+强化学习+稀疏/稠密搜索方法上进行了不同实验组合,重点在于训练大模型输出最佳搜索关键词,以便在搜索稀疏/稠密数据库后,尽量提高目标文章在搜索结果的排序位置,排名越靠前,间接说明大模型给的关键词越好,极限情况下若排名为第一名,则大模型成功的预测了用户未来点击的下一篇文章。
大部分情况下,我们主要观察搜索评估指标NDCG[6]来客观反映搜索结果与目标文章的相对位置关系,如果NDCG指标越高,则目标文章排名越靠前,这也是我们期望的结果。因此,将NDCG指标分数转化为强化学习算法GRPO[7]的奖励函数,从强化学习的基本原理出发,让大模型按照我们给定的训练要求去自然演化,自动收敛,在我们所关心的评估指标集合上达到一个较好的区间范围。
3.1 Rec_E1训练框架本作在Rec_R1基础上的升级为Rec_E1,主要工作:
升级了veRL版本,从v0.1 升级为 v0.3,支持更多强化学习算法
支持搜索数据库ElasticSearch和BM25S,探索了bm25算法在不同数据库实现上的效果差异
支持新闻资讯推荐数据集MIND-small
因pyserini升级,修复了部分install问题
在开始实验前,我们需要为后续的实验先安排基础对照组,本作基础对照实验组合为:Qwen2.5-3B-instruct + GRPO强化学习算法 +BM25搜索算法[9](Pyserini稀疏数据库[8]) + MIND-small小型数据集。
GRPO强化学习算法的奖励函数包括搜索指标NDCG分和大模型输出格式分,考虑NDCG分小于1且大部分情况下分值较小,这里将NDCG分扩大10倍,最终的奖励分Advantage=NDCG_score * 10 + response_format_score。
3.2 基础对照组实验由于MIND-small数据集中用户点击行为序列可能非常长,为控制输入长度,稳定所需GPU显存大小,这里只截取了用户最新点击的8篇文章,同时将目标文章设为第9篇文章。为加快训练进度,这里的训练集截取了MIND-small的train数据集前10000条样本,测试集截取MIND-small的dev数据集前2000条样本,在两卡A800上共训练3轮。在基础对照组的实验中,一个典型的大模型输入如下:
You first think about the reasoning process in the mind and then provide the user with the answer. Current time is 2019-11-14.You are very good at personalized news recommendation. Based on the user's clicked news sequence, your task is to generate a search query to search for the next news that the user is most likely to click on in the news retrieval system.
In other words, the user is likely to click on news related to the previous clicks.
Below are the titles and abstract of news that users have clicked on in sequence. The next one news is not in the list.
News-1
Title: Bruce Willis brought Demi Moore to tears after reading her book
Abstract: Demi wasn't sure how her ex would feel about her book until he called her.
News-2
Title: ...
Show your thought process in tags. Your final response must be in JSON format within tags. The generated query should use Boolean operators (AND, OR) to structure your query logically. For example:
{"query": xxx}
为了更好的结合BM25搜索算法,规定大模型的输出为用AND或OR连接的多个关键词。在GRPO训练过程中,一个典型的大模型输出如下:
First, I analyzed the topics of the given news articles. News 1 is about a wildlife rescue, News 2 is about economic issues, News 3 is about Trump's legal troubles, News 4 is about political matters, News 5 is about gift ideas, News 6 is about a suspected serial killer, News 7 is about animal welfare, and News 8 is about community service. To find the most likely next news, I'll look for topics that are related to these categories but not too similar to the previous ones. A good candidate would be another news article about community service or a related topic, such as a story about a senior citizen or a charity event. However, since the last news was about a senior shelter dog, a related topic could be another story about animals or community service. The query is constructed to include these related topics to ensure the next news is likely to be clicked on.
{"query": "fishermen rescue deer OR Trump economic OR NY judge settlement OR impeachment inquiry OR holiday gift ideas OR serial killer OR senior shelter dog OR Waffle House employee"}
这里BM25搜索算法使用了Pyserini数据库,该数据库存储字段包括文章id和文章正文,由于MIND-small数据库的文章没有正文,这里将文章的标题和摘要拼接为“正文”。
解析大模型输出的query,查询Pyserini数据库,获得相应的召回集,同时评估目标文章在召回集中的相对位置,即计算NDCG分值,若目标文章没有出现在召回集中,则NDCG分值为0。
通过wandb可以很方便的看到训练细节,在下图各个奖励函数评分曲线可以看出:
大模型给的query仍有很多没有查到目标文章,wrong_answer_ratio和all_correct_ratio是互补关系,从all_correct_ratio可知,最高约18%的查询结果包含了目标文章。
大模型通过强化学习训练逐渐学会了按照指定格式要求输出,即格式错误率format_error_ratio快速下降到0附近
在大模型查询命中目标文章的样本中,ndcg平均值最高到达0.3353/10 = 0.03353
初步验证了强化学习训练大模型进行序列推理能力的可行性
原作使用了Pyserini数据库中的bm25算法,在Amazon电商推荐数据集获得了不错效果,由于bm25算法的普适性,企业界可以立马应用起来。当你走到这里时,下一步可能就要在企业内部集群部署的ElasticSearch数据库上进行本地数据适配化操作了。实际上真正运用起来,还是有些坑要注意的。
第一个迷惑性
Pyserini的BM25算法不等同于ElasticSearch的BM25算法。
虽然两者底层均基于Lucene,但从训练曲线上能明细看出差别:Pyserini对照组的ndcg分值全程高于实验组BoolQuery_to_ESQuery,即将布尔类型的搜索query(AND或OR连接的关键词),转化为ES搜索的query。
考虑搜索ES的字段保持和Pyserini一致,文章存入ES有两个字段:文章id、文章标题与摘要拼接的“正文”。搜索ES的query存在调优的空间,这里按如下格式将布尔类型的搜索query自动转换为ES的搜索query,must为AND布尔操作符后面的关键词列表,should为OR布尔操作符后面的关键词列表。
{"query": {
"bool": {
"must": [
{
"multi_match": {
"query": keyword,
"fields": "content",
"type": "phrase"
}
} for keyword in must
],
"should": [
{
"multi_match": {
"query": keyword,
"fields": "content",
"type": "phrase"
}
} for keyword in should
],
"minimum_should_match": 1 if should else 0
}
}
}
第二个迷惑性
Python库BM25S[10]的bm25算法不等同于Pyserini的BM25算法。
既然布尔类型的搜索query转到ES搜索query后,效果下降较多,可否换一个同样支持bm25算法的数据库来验证bm25搜索结果的普适性。这里考虑了基于python开发的高效BM25S库,从下图BoolQuery_for_BM25S曲线可以看出:
早期Pyserini曲线和BM25S曲线在ndcg指标上不分上下,后期Pyserini曲线在ndcg指标上大幅领先BM25S曲线
在all_correct_ratio指标上,BM25S曲线几乎全程压制Pyserini曲线
以上两个现象说明,Pyserini强于精搜,BM25S强于泛搜
为控制变量进行实验,Python库BM25S存入文章的两个字段:文章id、文章标题与摘要拼接的“正文”。在搜索效率上,BM25S数据库搜索效率较高,同样的训练轮次,BM25S训练任务时间比Pyserini快了一倍以上。
第三个迷惑性
复杂的ES搜索query打不过相对简单的BM25搜索。
考虑主流搜索系统采用的ElasticSearch数据库,大模型的输出,可否不再是简单的AND或OR关系的关键词,而是一个完整的、经过优化后的ES搜索query。这里涉及到大模型本身的json输出控制能力和prompt工程优化,qwen2.5-3b-instruct能够基于给定的few-shots,动态输出满足json格式要求的结果。
从ESQuery_for_ES训练曲线可以看出:
在ndcg指标上,ES复杂搜索query曲线均不如Pyserini和BM25S,仅比BoolQuery_to_ESQuery曲线稍好
在all_correct_ratio指标上,ESQuery_for_ES曲线表现最佳
对比BM25S库的实验曲线,ESQuery_for_ES曲线甚至强于BM25S曲线的泛搜
MIND-small数据集还提供了文章的标签tag,为丰富prompt的文章信息,将用户点击行为序列文章内容加入tag,但在搜索时不提供tag选项,原因是大模型会把tag当做用户的兴趣,但围绕tag的搜索太宽泛而抓不住重点。
当然,ES的搜索query存在很大的优化空间,3B大模型对于搜索query的few-shots理解可能不够深刻,从而只会简单的泛化。
You first think about the reasoning process in the mind and then provide the user with the answer. Current time is 2019-11-14.You are very good at personalized news recommendation. Based on the user's clicked news sequence, your task is to generate a search query to search for the next news that the user is most likely to click on in the ElasticSearch database.
The whole news stored in the Elasticsearch database which you will search includes: itemid and content.
Below are the title, abstract and tag of news that a user have actually clicked on in order. The next news is not in the following list. The news tag, title and abstract not in the Elasticsearch database.
You need to find the common interests of the user from the news sequences, which can be keywords extracted from news titles and abstract, and assign them reasonable weights to better fit the interests of the user.
News-1
Title: Bruce Willis brought Demi Moore to tears after reading her book
Abstract: Demi wasn't sure how her ex would feel about her book until he called her.
Tag:
News-2
Title: ...
Tag:...
First, show your thought process in tags. Then your final response must be in JSON format within tags.
The generated search query should comply with the Elasticsearch database search specification and be able to correctly search for the most relevant news from the Elasticsearch database.
For example:
{
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "keyword1",
"fields": "content",
"type": "phrase"
}
}
],
"should": [
{
"multi_match": {
"query": "keyword2",
"fields": "content",
"type": "phrase"
}
],
"minimum_should_match": 1
}
}
}
4
思考
传统推荐系统经历召回-粗排-精排-重排等阶段,在大模型时代,每个阶段都可以结合大模型做一些优化,很难说哪种优化方案孰优孰劣,毕竟只有完整且准确执行的优化方案才谈得上给出一些真实的结论,我们需要选择适配自身业务需求和硬件基础的优化方式。
从推荐系统+大模型的发展方向来说,端到端一体式优化是一个光明的方向,如Meta的HSTU[11]、快手的OneRec[12]等模型和训练方案看出,推荐系统正在努力靠近大模型的训练范式。如果我们将DeepFM、DIN之类的训练方案比作是“小模型”从零开始的“预训练”,那么端到端一体式优化在升级“小模型”为“大模型”的同时,也开启了“大模型”的“后训练”进程,从GPT-3集成强化学习RLHF开始诞生ChatGPT,模型的智能才真正大爆发。
推荐系统永远在挖掘用户的潜在兴趣,这意味着永远不可能完全洞察用户的真正兴趣。没有完全干净的用户行为序列,用户最想点击的item也许就不在我们的数据库中,我们给与用户的不是大千世界,而是在一个有限的搜索空间给与用户能够接受的item。从这一点上看,与大模型预训练所需的世间万象的知识数据相比,这种推荐系统的端到端一体式优化天然存在上限。
当然,这样比较不公平,沿着历史看,当我们以DeepFM/DIN为代表的深度学习时代视角,看待推荐系统在以LR/SVM/LightGBM为代表的机器学习时代表现,觉得推荐系统是从小学生逐渐升级到了高中生,在飞速发展的大模型时代,推荐系统面临着大模型设下的“高考”,决定了推荐系统后面以本科、硕士还是博士的方式毕业。当模型的结构、模型的训练和模型的部署变得越来越复杂,一个人也不能完全掌握全部,推荐系统的优化可能不再是主要围绕模型的优化了。
受限于资源和精力,本文选取了实验的主要结论,这里抛砖引玉,为大家提供一些参考。
5
附录
[1] A Survey on User Behavior Modeling in Recommender Systems
[2] veRL:https://github.com/volcengine/verl
[3] Rec-R1: Bridging Generative Large Language Models and User-Centric Recommendation Systems via Reinforcement Learning
[4] Search-R1: Training LLMs to Reason and Leverage Search Engines with Reinforcement Learning
[5] MIND:https://msnews.github.io/index.html
[6] NDCG:https://zhuanlan.zhihu.com/p/29499089996
[7] GRPO:https://github.com/deepseek-ai/DeepSeek-R1/blob/main/DeepSeek_R1.pdf
[8] Pyserini:https://github.com/castorini/pyserini
[9] BM25:https://zhuanlan.zhihu.com/p/714612133
[10] BM25S:https://github.com/xhluca/bm25s
[11] HSTU:https://github.com/meta-recsys/generative-recommenders
[12] OneRec:https://arxiv.org/pdf/2502.1896
未经「AI科技评论」授权,严禁以任何方式在网页、论坛、社区进行转载!
公众号转载请先在「AI科技评论」后台留言取得授权,转载时需标注来源并插入本公众号名片。
//
来源:AI科技评论一点号