如何在Vowpal Wabbit上下文多臂老虎机中基于上下文限制特定动作
基于上下文限制Contextual Bandit动作展示的解决方案
针对你用VW的cb_explore_adf开发推荐系统时,需要根据用户上下文屏蔽特定动作的需求,这里给你两种可行方案,重点推荐第一种:
方案1:给目标动作设置prob=0(推荐)
这种方法能保持动作列表的索引完全一致,彻底避免索引变化影响训练效果,是VW官方认可的屏蔽动作方式。
具体操作
1. 训练/预测数据格式调整
当用户满足屏蔽条件(比如is_signed_up:1),直接在对应动作的行末尾加上prob=0,示例如下:
# 已注册用户的训练数据(假设实际推荐了recommend_content,奖励为1,预测概率0.14) 2:1:0.14 shared |Page pageViewCount:6 videoViewCount:3 language:es user_nation:US page_section:news time_on_site:8.632452878867632 is_signed_up:1 is_subscribed:1 has_downloaded_app:1 favorites_last_updated:56.7385141116986 |Action a=sign_up prob=0 |Action a=subscribe_mktg_comms |Action a=recommend_content |Action a=favorites |Action a=download_app |Action a=do_nothing |Action a=survey
2. 训练标注说明
- 标注格式
[动作索引]:[奖励值]:[预测概率]必须放在shared行最前面,动作索引按Action行的顺序从0开始计数(比如上面的recommend_content是第3个Action,索引为2)。 - 被屏蔽的动作(加了
prob=0)不需要在标注里处理,因为它们不会被选中作为推荐动作,模型训练时会自动忽略这些动作的概率计算。
3. 预测阶段
预测时同样给要屏蔽的动作加上prob=0,VW会自动跳过这些动作,只从非0概率的动作中选择推荐项。
方案2:直接移除对应动作(不推荐)
如果直接删掉sign_up的Action行,会导致不同样本的动作空间不一致,动作索引发生偏移——比如原本subscribe_mktg_comms的索引是1,删掉sign_up后变成0。VW的cb_explore_adf是基于固定动作空间训练的,索引变化会让模型的预测结果完全错位,除非每次都重新训练模型,但这会大幅增加成本,还会影响模型的泛化能力,所以不建议这么做。
内容的提问来源于stack exchange,提问作者Cris Pineda
相关产品推荐
相关产品推荐

