GRSU:会话推荐里的 simulated user 开始兼任 search feedback engine

背景

前几轮 Story Lab 已经把 simulator 支线拆成了几条相对清楚的路:

  • iEvaLM / NAACL 2024 / RecUserSim 这组材料,主要让我把 simulator 记成需要单独校准的评测对象;
  • ECPO / HF4Rec 这组材料,主要让我把 simulator 记成训练反馈生成器;
  • SUBER / Lusifer / RecoWorld 这组材料,则把 simulator 继续推成环境层。

但这里一直还差一类工作:

如果 simulator 既不是主要拿来评测,也不是主要拿来离线构造 preference pair,而是直接接进多轮会话推荐本身的搜索过程,该怎么记?

这一轮我先用本地 search-layerconversational recommendation simulated user githubgenerative reward model simulated user CRSsite:xiaohongshu.com 会话推荐 用户模拟器 这几组查询,随后回到 arXiv、GitHub API、官方 README 和中文公开讨论核验,最后补到最值得记的新入口是:

  1. Search-Based Interaction For Conversation Recommendation via Generative Reward Model Based Simulated User
  2. RUCAIBox/GRSU
  3. 用户模拟器在会话推荐中的使用

它们串起来后,我更确定了一件事:

CRS 里,simulated user 已经开始从“评测器 / 训练信号源 / 环境”继续长成 search feedback engine

核心判断

截至 2026-03-21,Story Lab 再记 simulator 或对话推荐 agent 时,不能只问它“服务评测、训练,还是环境”。

我现在更倾向于至少再补两列:

  1. feedback granularity:它输出的是 coarse-grained item score、fine-grained attribute critique、dissatisfaction reason,还是 reflective instruction
  2. search consumer:这些反馈最终被谁消费,是 beam search、rewrite / pair construction、rank-level alignment,还是 instruction-following recommender

GRSU 的价值不在于“又做了一个 user simulator”,而在于它把这两列一起暴露出来了。

它不是只让模拟用户说“我喜欢 / 不喜欢”,而是让模拟用户同时给出:

  • generative item scoring
  • attribute-based item critiquing

然后把这两类反馈统一成 instruction format,再直接喂给 search。

这和前面几轮已经记过的工作有本质区别:

  • ECPO 更像 dissatisfaction constructor,核心消费者是 rewrite 和 preference optimization
  • RecoWorld 更像 instruction generator,核心消费者是 instruction-following recommender
  • GRSU 则更像 search feedback engine,核心消费者是会话推荐过程本身的 beam search

如果不把这层单独记出来,后面再把 GRSU / ECPO / RecoWorld / Rank-GRPO 压到同一张表里时,方法图会再次变粗。

第一条证据:GRSU 不是普通的 turn-level feedback 模型

Search-Based Interaction For Conversation Recommendation via Generative Reward Model Based Simulated User2025-04-29 提交到 arXiv,comment 里明确写了 Accepted by SIGIR 2025

它的摘要最值得记的,不是“用 LLM 模拟用户”这件已经不新鲜的事,而是两层更具体的设计:

  1. generative item scoring:提供 coarse-grained feedback
  2. attribute-based item critiquing:提供 fine-grained feedback

换句话说,这个 simulated user 不是只吐一句自然语言反馈,而是显式同时承担:

  • item 级打分
  • 属性级批评

这就把 simulator 从“会不会说像用户的话”往前推进成了“能不能为搜索过程提供不同粒度的反馈信号”。

更关键的是,论文没有把这层反馈只当成训练数据,而是直接把 interaction 写成 search:

作者在摘要里明确说,受到 reward-guided search 的启发,他们把多轮交互过程接到了 beam search 上,并在此基础上再做 candidate ranking。

这件事很重要,因为它说明:

在推荐系统里,闭环优化不一定等于先训练一个新 policy。

至少在 GRSU 这条公开路线里,更直接的动作是先把 user-model feedback 接进 search stage,让 simulator 在搜索时就开始影响候选扩展和分支保留。

这也让它和后面 V-STAR 那条把生成式推荐主矛盾推进到 search-credit coupling 的路线产生了一个更早的呼应:

推荐里的 search,本身就可能是奖励信号真正开始起作用的地方。

第二条证据:官方仓已经把 search consumer 写到代码里

RUCAIBox/GRSU 让这个判断更稳。

截至 2026-03-21,GitHub API 显示仓库创建于 2025-04-22 09:02:40 UTC。根目录已经公开了:

  • dataset/redial
  • dataset/inspired
  • script/train
  • script/serve
  • src/infer
  • src/train

README 也把 workflow 写得很直接:

  1. 先训练 simulated user:bash script/train/sft.sh
  2. 再用 vLLM 部署 user/system 模型
  3. LiteLLM 做负载均衡
  4. 最后跑 python src/infer/main.py --config_file_path redial.yamlinspired.yaml

这说明它公开的不是某个抽象概念,而是:

simulator training + serving + search-time interaction workflow

更关键的是,仓库里的配置把 search 真正落到了代码层。

script/infer/redial.yamlscript/infer/inspired.yaml 当前都写着:

  • num_beams: 4
  • max_depth: 5
  • actor_param.n: 4
  • output_strategy: reward mean / sum 和 vote sum

src/infer/search_algo/beam_search_algo.py 里也能直接看到:

  • 每一层先扩展当前节点
  • 再按 reward 排序
  • 只保留 top-num_beams 分支继续往下走

也就是说,论文里“interaction is search”这句话在 released code 里不是口号。

它已经有专门的 beam_search_algo、单独的 user model、单独的 rec model,以及 reward 驱动的分支选择。

第三条证据:它公开到了 workflow 层,但还没到一键复现层

这条路线的公开边界也值得单独记。

GRSU 仓库虽然已经公开了训练、服务和推理脚本,但 README 里同时把两件关键资产标成了 available soon

  1. generated instruction data
  2. trained user model 下载链接

另外,训练要求也不低,README 直接写的是:

  • 4*80G8*40G GPU

这意味着更准确的写法不是“GRSU 已经开源完毕”,而是:

它已经把 simulator + search workflow 公开到可以复查的底盘层,但距离低门槛一键复现还有明显缺口。

这条判断和前面几轮给 OpenOneRecDeepRecRecThinker 写公开边界时用的口径是一致的:

是否公开,不只看有没有 GitHub 仓库,还要看数据、模型、脚本和运行门槛是不是同时到位。

这会反过来改写 ECPO / RecoWorld 的位置

这一轮把 GRSU 放进来后,前面一些工作的位置也更容易排清楚了。

ECPO 里,AILO 的模拟用户主要服务的是:

dissatisfaction analysis -> rewrite -> preference optimization

也就是说,它最终更像训练时的 constructor。

RecoWorld 里,simulated user 最关键的新动作则是:

reflective instructions -> instruction-following recommender

它最终更像 agentic environment 里的 instruction source。

GRSU 则不同。

它没有把 simulator 主要放在训练前或评测后,而是把 simulator 放在 interaction trajectory 里面,让 coarse / fine 两级反馈直接参与分支选择。

所以如果后续要给 CRS 单独做一张更细的观察表,我现在更倾向于至少先区分四种 consumer:

  1. interactive evaluator
  2. preference / rewrite constructor
  3. search feedback engine
  4. instruction generator

只写 simulator function = feedback generator 已经不够用了。

中文传播层这轮终于有一篇能看的机制稿

这一轮我也顺手补了中文公开讨论和小红书线索。

相对最值得留的是 Peter ThinkTank 的中文文章:用户模拟器在会话推荐中的使用

它的价值不在于替代一手来源,而在于它把:

  • iEvaLM
  • How Reliable is Your Simulator?
  • GRSU
  • ECPO

压成了一条中文可读的 simulator 演进线,并明确点出了 GRSU 的“生成式项目评分 + 属性批判”双反馈结构。

这对 Story Lab 来说是比较合格的中文传播层导航材料。

但小红书这一侧仍然没有收获。

我这轮继续补做了:

  • site:xiaohongshu.com GRSU 推荐
  • site:xiaohongshu.com 会话推荐 用户模拟器
  • xhslink GRSU 推荐

结果仍主要是无关页、缩链工具页和噪声,没有拿到稳定高价值的 xhslink 一手链路。

所以这条线短期内仍要以论文、官方仓和少量高质量中文博客为主。

参考来源

下一步

  • GRSU / ECPO / RecoWorld / Rank-GRPO 压到同一张 CRS scaffold / simulator consumer 小表里,新增 feedback granularity / search consumer 两列。
  • 在 simulator 支线里,把 paper-onlyrepo with workflow coderepo with sample processed datarepo with full data/model artifacts 四档公开边界写得更清楚,避免再把 GRSULusiferRecoWorld 粗写成同一种“已公开”。