微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Softmax Explorer (--cb_explore_adf) 在 VowpalWabbit 中进行排名

如何解决使用 Softmax Explorer (--cb_explore_adf) 在 VowpalWabbit 中进行排名

我正在尝试使用 VW 使用上下文老虎机框架执行排名,特别是使用 --cb_explore_adf --softmax --lambda X。选择 softmax 是因为,根据 VW 的文档:“这是一个不同的浏览器,它不仅使用策略来预测一个动作,而且还预测一个表示每个动作质量的分数。" 这个与质量相关的分数是我想用来排名的。

场景是这样的:我有一个项目列表 [A、B、C、D],我想按照最大化预定义指标(例如,点击率)的顺序对其进行排序。正如我所看到的,问题之一是我们无法单独评估这些项目,因为我们无法确定哪个项目让用户点击。

为了测试一些方法,我创建了一个虚拟数据集。作为尝试解决上述问题的一种方法,我使用整个有序列表作为评估是否发生点击的一种方式(例如,给定用户 X 的上下文,如果项目是 [C,A,B,D])。然后,我根据它们在列表中的位置分别奖励这些项目,即 reward = 1/P for 0

此外,我发现的困难之一是为这种方法定义采样函数。通常,我们只对选择一个选项感兴趣,但在这里我必须采样多次(示例中为 4)。因此,在对项目进行采样时我应该如何结合探索并不是很清楚。我有几个想法:

  • 复制概率质量函数并将其分配给 copy_pmf。绘制一个介于 0 和 max(copy_pmf)间的随机数,并为 copy_pmf 中的每个概率值递增 sum_prob 变量(与此处的教程非常相似:https://vowpalwabbit.org/tutorials/cb_simulation.html)。当 sum_prob > draw 时,我们将当前项目/概率添加到列表中。然后,我们从 copy_pmf 中移除这个概率,设置 sum_prob = 0,并再次在 0 和 max(copy_pmf) 之间绘制一个新数字(可能会改变也可能不会改变)。
  • 另一种选择是绘制一个随机数,如果最大概率,即 max(pmf) 大于这个数字,我们就会利用。如果不是,我们打乱列表并返回这个(探索)。这种方法需要调整 lambda 参数,该参数控制输出 pmf(我见过最大概率 > 0.99 的情况,这意味着大约有 1% 的机会探索。我也见过实例其中 max prob 为 ~0.5,即大约 50% 的探索。

我想知道是否有关于这个问题的任何建议,特别是采样和奖励函数。另外,如果我在这里可能遗漏了任何东西。

谢谢!

解决方法

这听起来像是可以通过conditional contextual bandits

解决的问题

对于您提到的演示场景,每个示例都应该有 4 个插槽。 在这种情况下,您可以使用任何探索算法,并且每个插槽都将独立完成。学习目标是所有槽的平均损失,但决策是从第一个槽到最后一个按顺序做出的,因此即使这里是二元奖励,您也可以有效地学习排名。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。