排序01 多目标模型

引入

使用机器学习方法对指标做预估,再对预估分数做融合。融合方法:加权和方法给不同指标赋予不同的权重,权重是做A/B test调试得到的。还有更好地融合方法。

多目标模型

排序模型的输入是各种各样的特征,用户特征主要是用户id和用户画像,物品特征包括物品Id、物品画像和作者信息,统计特征包括用户统计特征和物品统计特征:候选物品多少次曝光、点击、点赞等,用户曝光了多少篇笔记、点赞了多少等,场景特征有时间地点。

神经网络输出一个向量,向量再输入到四个神经网络,每个神经网络有二到三个全连接层,最后一个激活函数是sigmoid,四个神经网络分别输出点击率等四个指标,为实数,介于0到1之间。

推荐系统的排序依靠点击率等这四个预估值,可以反映出用户对物品的兴趣。

模型的训练

鼓励预测接近目标,目标Y的值非0即1。

也就是有四个二元分类任务,使用交叉熵损失函数,加权和为总的损失函数,权重是根据经验给定。

困难:负样本过多,远大于正样本

预估值校准:

使用模型得到p_pred,再利用校准公式得到最终的p_true。

多目标排序(Multi-Objective Ranking)模型在推荐系统中具有广泛应用,尤其是在需要同时优化多个目标(如点击率、转化率、用户停留时长等)的场景中。常见的多目标排序模型包括 **MMoE(Multi-gate Mixture-of-Experts)** 和 **PLE(Progressive Layered Extraction)** 等架构。 ### MMoE 模型实现 MMoE 是一种基于多任务学习的模型,通过引入多个专家网络和门控机制来处理多个目标任务。以下是一个简化的 MMoE 模型在 TensorFlow/Keras 中的实现示例: ```python import tensorflow as tf from tensorflow.keras import layers, Model class MMoE(layers.Layer): def __init__(self, num_experts, num_tasks, expert_dim, **kwargs): super(MMoE, self).__init__(**kwargs) self.num_experts = num_experts self.num_tasks = num_tasks self.expert_dim = expert_dim self.experts = tf.keras.initializers.RandomUniform()(shape=[num_experts, expert_dim]) self.gate_kernel = tf.keras.initializers.RandomUniform()(shape=[num_tasks, num_experts]) def call(self, inputs): expert_outputs = tf.tensordot(inputs, self.experts, axes=1) expert_outputs = tf.nn.relu(expert_outputs) gates = tf.tensordot(inputs, self.gate_kernel, axes=1) gates = tf.nn.softmax(gates) fused_output = tf.einsum('te,ti->ti', gates, expert_outputs) return fused_output # 示例模型构建 inputs = layers.Input(shape=(100,)) mmoe_layer = MMoE(num_experts=8, num_tasks=2, expert_dim=64) mmoe_output = mmoe_layer(inputs) task_outputs = [] for i in range(2): task_output = layers.Dense(1, activation='sigmoid')(mmoe_output) task_outputs.append(task_output) model = Model(inputs=inputs, outputs=task_outputs) model.compile(optimizer='adam', loss='binary_crossentropy') ``` ### PLE 模型实现 PLE(Progressive Layered Extraction)是对 MMoE 的改进,通过引入共享层和特定任务层来更有效地分离共享知识和任务特有知识。以下是一个简化的 PLE 模型结构示意: ```python class PLELayer(layers.Layer): def __init__(self, num_shared_experts, num_task_experts, expert_dim, **kwargs): super(PLLayer, self).__init__(**kwargs) self.num_shared_experts = num_shared_experts self.num_task_experts = num_task_experts self.expert_dim = expert_dim self.shared_experts = layers.Dense(expert_dim, activation='relu') self.task_experts = layers.Dense(expert_dim, activation='relu') def call(self, inputs): shared_output = self.shared_experts(inputs) task_output = self.task_experts(inputs) return tf.concat([shared_output, task_output], axis=-1) # 示例模型构建 inputs = layers.Input(shape=(100,)) ple_layer = PLELayer(num_shared_experts=4, num_task_experts=4, expert_dim=64) ple_output = ple_layer(inputs) task_outputs = [] for i in range(2): task_output = layers.Dense(1, activation='sigmoid')(ple_output) task_outputs.append(task_output) model = Model(inputs=inputs, outputs=task_outputs) model.compile(optimizer='adam', loss='binary_crossentropy') ``` ### GitHub 资源推荐 1. **多任务学习模型实现汇总**:[GitHub - ShowMeAI-Hub/multi-task-learning](https://github.com/ShowMeAI-Hub/multi-task-learning) 包含了 MMoE、PLE 等模型的实现[^1]。 2. **DeepCTR 多任务模型实现**:[GitHub - shenweichen/DeepCTR](https://github.com/shenweichen/DeepCTR/tree/master/deepctr/models/multitask) 提供了多种推荐系统模型的实现,包括多目标排序模型[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值