rank_loss¶
- paddle.fluid.layers.loss. rank_loss ( label, left, right, name=None ) [source]
-
This operator implements the sort loss layer in the RankNet model. RankNet is a pairwise ranking model with a training sample consisting of a pair of documents (A and B), The label (P) indicates whether A is ranked higher than B or not. Please refer to more details: RankNet
Rank loss layer takes three inputs: left ( \(o_i\) ), right ( \(o_j\) ) and label ( \(P_{i,j}\) ). The inputs respectively represent RankNet’s output scores for documents A and B and the value of label P. Rank loss layer takes batch inputs with size batch_size (batch_size >= 1), P = {0, 1} or {0, 0.5, 1}, where 0.5 means that there is no information about the rank of the input pair. The following equation computes rank loss C_{i,j} from the inputs:
\[\begin{split}C_{i,j} &= -\\tilde{P_{ij}} * o_{i,j} + \log(1 + e^{o_{i,j}}) \\\\\end{split}\]\[\begin{split}o_{i,j} &= o_i - o_j \\\\\end{split}\]\[\begin{split}\\tilde{P_{i,j}} &= \\left \{0, 0.5, 1 \\right \} \ or \ \\left \{0, 1 \\right \}\end{split}\]- Parameters
-
label (Variable) – 2-D
Tensor
with the shape of \([batch,1]\), the data type is float32, batch indicates the size of the data. Indicats whether A ranked higher than B or not.left (Variable) – 2-D
Tensor
with the shape of \([batch,1]\), the data type is float32. RankNet’s output score for doc A.right (Variable) – 2-D
Tensor
with the shape of \([batch,1]\), the data type is float32. RankNet’s output score for doc B.name (str|None) – The default value is None. Normally there is no need for user to set this property. For more information, please refer to Name .
- Returns
-
Tensor
indicating the output value of the sort loss layer, the data type is float32, and the return value’s shape is \([batch,1]\) . - Return type
-
Variable
- Raises
-
ValueError – Any of label, left, and right is not a
Variable
.
Examples
import paddle.fluid as fluid import paddle paddle.enable_static() label = fluid.data(name="label", shape=[-1, 1], dtype="float32") left = fluid.data(name="left", shape=[-1, 1], dtype="float32") right = fluid.data(name="right", shape=[-1, 1], dtype="float32") out = fluid.layers.rank_loss(label, left, right)