我是新的沃帕尔瓦布比特,并正在工作的多臂强盗模型,以推荐不同的CTAs注册弹出。我已经完成了主站点上的演练,但对于--cb_explore_adf版本的培训数据应该是什么样子有点困惑。到目前为止,对于常规版本(设置了动作总数),数据如下所示:
action:cost:probability | features这是有意义的,但是当您进入adf版本时,它变成:
| a:1 b:0.5
0:0.1:0.75 | a:0.5 b:1 c:2
shared | s_1 s_2
0:1.0:0.5 | a:1 b:1 c:1
| a:0.5 b:2 c:1我已经看了很多次文档了,我仍然不明白它是如何工作的。
我认为,一个类似于我的数据的例子,说明它将如何适应上述版本将是很棒的。
我的用例示例:2动作:1和2 3功能:语言,国家,最喜爱的运动
我看过的一些文档:
编辑
在玩这个游戏时,我用这个输入创建了一个train.txt:
shared |user language=en nation=CAN
|action arm=10-OC-ValueProp10
0:0:0.5 |action arm=11-OC-ValueProp11
shared |user language=it nation=ITA
|action arm=10-OC-ValueProp10
0:0:0.5 |action arm=11-OC-ValueProp11
shared |user language=it nation=ITA
0:0:0.5 |action arm=10-OC-ValueProp10
|action arm=11-OC-ValueProp11
shared |user language=it nation=ITA
0:0:0.5 |action arm=10-OC-ValueProp10
|action arm=11-OC-ValueProp11 但当我运行这个:
vw = pyvw.vw("-d full_data.txt --cb_explore_adf -q ua --quiet --epsilon 0.2")
vw.predict("|user language=en nation=USA")我得到了一个1.0,这是没有道理的。我确信我做错了什么。
发布于 2021-04-08 14:56:28
ADF代表与动作相关的特性。因此,每个事件/示例都由多行组成,第一行是一组可选的共享特性(标记为shared)。
除了共享行之外,每一行都对应于一个动作。
因此,当您向大众提供输入时:
|user language=en nation=USA您只要求对一个操作进行预测(因为没有共享行),这就是为什么您要返回一个PMF (概率质量函数,或选择每个不同项的概率),即仅为1.0。这说明选择单个操作的概率应为1.0。但是,阅读这些特性时,似乎实际上是在传递应该共享的特性。
对于每个预测,您需要为每个操作提供所有的功能,因为实际上,操作本身被定义为其功能集(ADF)。
您的预测数据应该类似于(注意标签被省略了):
shared |user language=it nation=ITA
|action arm=10-OC-ValueProp10
|action arm=11-OC-ValueProp11 然后,大众汽车会发出类似于0.9,0.1的东西。然后,您应该从这个PMF中取样(以便进行探索),以确定哪个是所选的操作。
训练数据
培训数据的格式有点混乱,因为同一格式是从非adf重用的。标签的action部分实际上是未使用的,因为标签必须在行上,作为它要执行的操作。
shared |user language=en nation=CAN
|action arm=10-OC-ValueProp10
0:0:0.5 |action arm=11-OC-ValueProp11 在上面的例子中,它说这里的行动2的成本是0,当它被选中时,选择的概率是0.5 (PMF中的值)。
https://stackoverflow.com/questions/66996884
复制相似问题