rank_loss

  • paddle.fluid.layers.rank_loss(label, left, right, name=None)[源代码]

该OP实现了RankNet模型中的排序损失层。RankNet是一种文档对(pairwise)排序模型,训练样本由一对文档(假设用A、B来表示)组成。标签(假设用P来表示)表示A的排名是否高于B。更多详情请参考:RankNet

排序损失层有三个输入:

rank_loss - 图1rank_loss - 图2rank_loss - 图3 ,输入分别表示RankNet模型对文档A、B的输出得分和标签P的值;排序损失层的输入是批输入数据(批大小大于等于1);标签P的取值可以为: {0, 1} 或 {0, 0.5, 1} ,其中,0.5表示输入文档对排序相同。输入数据的排序损失 rank_loss - 图4 计算过程如下:

rank_loss - 图5

  • 参数:
    • label (Variable):维度为 rank_loss - 图6 的2-D Tensor ,数据类型为float32。其中batch表示批数据的大小。表示A的排名是否高于B。
    • left (Variable):维度为 rank_loss - 图7 的2-D Tensor ,数据类型为float32。其中batch表示批数据的大小。表示RankNet对文档A的输出得分。
    • right (Variable):维度为 rank_loss - 图8 的2-D Tensor ,数据类型为float32。其中batch表示批数据的大小。表示RankNet对文档B的输出得分。
    • name (str, 可选):具体用法请参见 Name ,一般无需设置,默认值为None。

返回:表示排序损失层输出值的 Tensor ,数据类型为float32,返回值维度为

rank_loss - 图9

返回类型:Variable

  • 抛出异常:
    • ValueError - 输入 labelleft ,和 right 至少有一个不是 Variable 类型。

代码示例

  1. import paddle.fluid as fluid
  2. label = fluid.layers.data(name="label", shape=[-1, 1], dtype="float32")
  3. left = fluid.layers.data(name="left", shape=[-1, 1], dtype="float32")
  4. right = fluid.layers.data(name="right", shape=[-1, 1], dtype="float32")
  5. out = fluid.layers.rank_loss(label, left, right)