def METHOD_NAME(self, dy_model, metrics_list, batch_data, config):
    hist_item_seq, hist_cat_seq, target_item, target_cat, label, mask, target_item_seq, target_cat_seq, neg_hist_item_seq, neg_hist_cat_seq = self.create_feeds(
        batch_data, config)
    raw_pred, aux_loss = dy_model.forward(
        hist_item_seq, hist_cat_seq, target_item, target_cat, label, mask,
        target_item_seq, target_cat_seq, neg_hist_item_seq,
        neg_hist_cat_seq)
    loss = self.create_loss(raw_pred, label)
    cost = loss + aux_loss
    predict = paddle.nn.functional.sigmoid(raw_pred)
    # update metrics
    predict_2d = paddle.concat(x=[1 - predict, predict], axis=1)
    metrics_list[0].update(preds=predict_2d.numpy(), labels=label.numpy())
    print_dict = {'loss': cost}
    return cost, metrics_list, print_dict