如何理解 vw.format - Vowpal Wabbit 条件上下文强盗中的插槽
How to understand the slots in the vw.format - Vowpal Wabbit Conditional Contextual Bandit
我正在尝试构建一个上下文强盗。因为我喜欢对动作进行排名,所以我想切换到条件上下文强盗(正如我所阅读的 )。
但现在我很难理解新的大众格式。
vowpal wabbit wiki的例子是这样的:
ccb shared | s_1 s_2
ccb action | a:1 b:1 c:1
ccb action | a:0.5 b:2 c:1
ccb action | a:0.5
ccb action | c:1
ccb slot | d:4
ccb slot 1:0.8:0.8,0:0.2 0,1,3 | d:7
不幸的是我不明白插槽部分。
我知道这告诉了所选操作的成本和概率。
ccb slot 1:0.8:0.8,0:0.2 0,1,3
是否可以选择多个动作?
我也不明白为什么插槽部分需要功能?此外,我不完全理解为什么我们必须告诉它要包含的操作 ID?它的目的是什么?
预测还需要哪种格式?如果我还没有任何行动费用,为什么还需要插槽部分?
编辑:我调查了 azure docs,因为 Vowpal Wabbit 是由 MS Research 开发的。我想我在那里找到了有用的信息。一旦找到答案,我就会 post 放在这里。
您可能有兴趣查看 VW 的 wiki 页面,其中包含关于 CCB 的一些信息:
https://github.com/VowpalWabbit/vowpal_wabbit/wiki/Conditional-Contextual-Bandit
您可以将 CCB 视为 CB 之上的一层,它运行一个单独的 CB 示例,其中包含每个槽的所有操作,但是操作被排除在槽 select 之外。上面的示例可能使用了比您的目的所需更多的功能。如果您只想对操作进行排名,这将是更好的格式:
ccb 分享 | s_1s_2
建行行动 | a:1 b:1 c:1
建行行动 | a:0.5 b:2 c:1
建行行动 | a:0.5
建行行动 | c:1
ccb 插槽 1:0.8:0.8 |
ccb 插槽 0:0.8:0.8 |
ccb 插槽 3:0.8:0.8 |
ccb 插槽 2:0.8:0.8 |
这个例子可以用于学习和预测,但是如果你只是想做预测,你可以像这样使用未标记的插槽:
ccb 分享 | s_1s_2
建行行动 | a:1 b:1 c:1
建行行动 | a:0.5 b:2 c:1
建行行动 | a:0.5
建行行动 | c:1
ccb 插槽 |
ccb 插槽 |
ccb 插槽 |
ccb 插槽 |
我会分别回答你的每个问题:
我也不明白为什么插槽部分需要功能?
插槽不需要功能。如果您希望每个插槽以不同方式学习,则允许它们使用功能,但这不是必需的。如果您正在尝试排名操作,您可能不想要插槽特定的功能。
此外,我不完全理解为什么我们必须告诉它要包含的操作 ID?
你不需要这样做。默认情况下,所有尚未 selected 的动作都将包含在每个插槽中。例如,如果有操作 0、1、2、3 和槽 0 select 操作 1,则槽 1 将有操作 1、2、3 可用。从这个意义上说,每个后面的动作将不包括来自先前插槽的动作 select,因此每个插槽 selects 的动作将按顺序排列动作。
这样做的目的是什么?
如果您想要一个带有专门插槽的更复杂的系统,您可能希望从插槽中明确排除某些操作,但对于简单的排名操作,您不会希望这样做。
还有预测需要哪种格式?
可以对任何 CCB 示例(标记或未标记)进行预测。你不需要对这个例子做任何特殊的事情,你只需要指定 -p pred_file.txt 标志来输出预测到那个文件。
如果我还没有任何行动费用,为什么还需要插槽部分?
如果你没有成本(所以你只是在做预测),槽的数量将代表你想要做出的预测的数量。如果你只想找到前 n 个动作,你可以只使用 n 个槽。如果您有任何其他问题,请告诉我。
我正在尝试构建一个上下文强盗。因为我喜欢对动作进行排名,所以我想切换到条件上下文强盗(正如我所阅读的
但现在我很难理解新的大众格式。
vowpal wabbit wiki的例子是这样的:
ccb shared | s_1 s_2
ccb action | a:1 b:1 c:1
ccb action | a:0.5 b:2 c:1
ccb action | a:0.5
ccb action | c:1
ccb slot | d:4
ccb slot 1:0.8:0.8,0:0.2 0,1,3 | d:7
不幸的是我不明白插槽部分。
我知道这告诉了所选操作的成本和概率。
ccb slot 1:0.8:0.8,0:0.2 0,1,3
是否可以选择多个动作?
我也不明白为什么插槽部分需要功能?此外,我不完全理解为什么我们必须告诉它要包含的操作 ID?它的目的是什么? 预测还需要哪种格式?如果我还没有任何行动费用,为什么还需要插槽部分?
编辑:我调查了 azure docs,因为 Vowpal Wabbit 是由 MS Research 开发的。我想我在那里找到了有用的信息。一旦找到答案,我就会 post 放在这里。
您可能有兴趣查看 VW 的 wiki 页面,其中包含关于 CCB 的一些信息:
https://github.com/VowpalWabbit/vowpal_wabbit/wiki/Conditional-Contextual-Bandit
您可以将 CCB 视为 CB 之上的一层,它运行一个单独的 CB 示例,其中包含每个槽的所有操作,但是操作被排除在槽 select 之外。上面的示例可能使用了比您的目的所需更多的功能。如果您只想对操作进行排名,这将是更好的格式:
ccb 分享 | s_1s_2
建行行动 | a:1 b:1 c:1
建行行动 | a:0.5 b:2 c:1
建行行动 | a:0.5
建行行动 | c:1
ccb 插槽 1:0.8:0.8 |
ccb 插槽 0:0.8:0.8 |
ccb 插槽 3:0.8:0.8 |
ccb 插槽 2:0.8:0.8 |
这个例子可以用于学习和预测,但是如果你只是想做预测,你可以像这样使用未标记的插槽:
ccb 分享 | s_1s_2
建行行动 | a:1 b:1 c:1
建行行动 | a:0.5 b:2 c:1
建行行动 | a:0.5
建行行动 | c:1
ccb 插槽 |
ccb 插槽 |
ccb 插槽 |
ccb 插槽 |
我会分别回答你的每个问题:
我也不明白为什么插槽部分需要功能?
插槽不需要功能。如果您希望每个插槽以不同方式学习,则允许它们使用功能,但这不是必需的。如果您正在尝试排名操作,您可能不想要插槽特定的功能。
此外,我不完全理解为什么我们必须告诉它要包含的操作 ID?
你不需要这样做。默认情况下,所有尚未 selected 的动作都将包含在每个插槽中。例如,如果有操作 0、1、2、3 和槽 0 select 操作 1,则槽 1 将有操作 1、2、3 可用。从这个意义上说,每个后面的动作将不包括来自先前插槽的动作 select,因此每个插槽 selects 的动作将按顺序排列动作。
这样做的目的是什么?
如果您想要一个带有专门插槽的更复杂的系统,您可能希望从插槽中明确排除某些操作,但对于简单的排名操作,您不会希望这样做。
还有预测需要哪种格式?
可以对任何 CCB 示例(标记或未标记)进行预测。你不需要对这个例子做任何特殊的事情,你只需要指定 -p pred_file.txt 标志来输出预测到那个文件。
如果我还没有任何行动费用,为什么还需要插槽部分?
如果你没有成本(所以你只是在做预测),槽的数量将代表你想要做出的预测的数量。如果你只想找到前 n 个动作,你可以只使用 n 个槽。如果您有任何其他问题,请告诉我。