busesese / MultiTaskModel

multi task mode for esmm and mmoe
123 stars 25 forks source link
esmm mmoe multitask-learning pytorch recommendation-algorithms

多任务模型

多任务的优势

多任务的一些问题

ESMM模型

avatar

模型解读

模型主要有一个双塔的形式分别构建user和item相关的特征,然后进行embedding和拼接,最终输出到各个task的NN网络中进行学习,整体结构非常简单清晰,这里不一一细说。主要强调几个需要注意和可以优化的点:

MMOE模型

avatar

模型解读

模型跟ESMM大体框架基本一致,这里说一下主要的区别:其实图上说的也比较直观,大致就是传统的ESMM底层是直接共享一个share bottom的结构,这里一般是embedding层的共享,这种共享会让各个任务直接彼此受到很强的束缚,不能完全发挥单任务的最大价值;这里的改进是提出了一种expert机制,利用多个expert分别进行加权融合的形式去表达每个单任务,这样一定程度能缓解ESMM那找直接share bottom的束缚; 在深入一点就是,我们在得到融合后的input embedding(这里可以理解为user embedding和item embedding拼接后的整体embedding),然后加入多个结构相同的DNN网络进行学习,虽然DNN网络结构相同,但是参数在初始化及反向传播迭代的时候会有一定的差别,相当于多个相同结构的DNN同时训练一批数据预测的结果,然后这里添加了一个门机制对各个DNN的输出进行加权处理得到最终的输出,最后塞入单个任务塔中得到最终的结果; 个人理解MMOE其实就是集成版本的ESMM但是这种内部模块的集成非不同模型的集成其效果有待验证,了解集成的应该都清楚,模型的差异化带来的集成效果较为明显但是模型相同参数不同的集成带来的效果一般都很小。

实验情况

数据说明

选用的是uci的数据集https://archive.ics.uci.edu/ml/datasets/census+income

特征处理

数值特征进行归一化,类别特征进行embedding操作,由于没有区分user和item的特征,这里直接取前面7个特征为user特征后面的特征为item特征,然后进行向量化拼接 预测值分别为income_50kmarital_status

实验结果

模型 auc_income auc_marital
ESMM 90.2% 96.2%
MMOE 89.6% 96.1%

可以看到在这个小数据集上ESMM效果于MMOE差别很小,较大数据集还未实验