本文介绍了DeepFM算法相关内容。
简介
DeepFM将深度学习模型(DNN)和因子分解机(FM)模型结合,同时支持学习低阶显式特征组合和高阶隐式特征组合,不需要人工做特征工程,常用于推荐系统或广告系统。
输入通常有以下两类特征:
类别特征(Categorical Feature):字符串类型。如性别(男/女)或物品类型(服饰、玩具、电子等)。
数值特征(Numrical Feature):整型或浮点型。如用户活跃度或商品价格等。
输出通常是0~1之间的浮点数,表示取值为1的概率。可以用于排序,也可以用于二分类。
使用场景
DeepFM通常用于分类或排序场景。在人工构建的特征但不能直接反映结果的场景上效果更好。在各种各样的推荐场景中,低阶特征组合或者高阶的特征组合都会对用户最终的行为产生影响。但人为可能无法明确特征组合,DeepFM可以自动学习这些组合。
例如:在个性化商品推荐场景中,通常需要做点击预估模型。使用用户过往的行为(点击、曝光未点击、购买等)作为创建模型数据,来预测用户点击或购买的概率。如果用户过往行为较多,且不能直接反映出在未来某时刻的点击或购买情况。DeepFM会对用户行为进行组合,同时将一些稀疏特征转化为高维的稠密特征。
参数说明
下表中的参数为创建模型CREATE MODEL语法中model_parameter参数的取值,您可以根据当前需求选择对应的参数。
参数 | 说明 |
| 评估模型的指标参数。取值如下:
|
| 学习任务及对应的学习目标。取值如下:
|
| 优化器。取值如下:
|
| 交叉验证数据比例。默认值为0.2。 |
| 迭代次数。默认6次。 |
| 每批训练样本数。默认值为64。batch 越短越容易过拟合,但过大的 |
| 学习率,控制模型参数每次更新的幅度。该参数需与 |
| DNN 隐藏层的网络结构。取值示例: |
| 任务类型。取值如下:
|
参数配置最佳实践:
建议显式指定
loss、metrics、batch_size等关键参数,避免因依赖默认值导致训练行为不符合预期。batch_size与epochs需配合调整:增大 batch_size 时可适当减少 epochs,减小 batch_size 时需增加 epochs 以保证充分训练。learning_rate与epochs需配合调整:epochs 增加时应适当减小 learning_rate 防止发散。dnn_hidden_units应根据特征数量设置,特征较少时避免使用过深的网络结构。
示例
创建模型与离线模型学习
/*polar4ai*/CREATE MODEL airline_deepfm WITH
(model_class = 'deepfm',
x_cols = 'Airline,Flight,AirportFrom,AirportTo,DayOfWeek,Time,Length',
y_cols='Delay',model_parameter=(epochs=6))
AS (SELECT * FROM db4ai.airlines);模型评估
/*polar4ai*/SELECT Airline FROM EVALUATE(MODEL airline_deepfm,
SELECT * FROM db4ai.airlines LIMIT 20) WITH
(x_cols = 'Airline,Flight,AirportFrom,AirportTo,DayOfWeek,Time,Length',y_cols='Delay',metrics='acc');模型预测
/*polar4ai*/SELECT Airline FROM PREDICT(MODEL airline_deepfm,
SELECT * FROM db4ai.airlines limit 20) WITH
(x_cols = 'Airline,Flight,AirportFrom,AirportTo,DayOfWeek,Time,Length');常见问题
Q:DeepFM 模型训练耗时过长或最终失败如何排查?
A:DeepFM 模型训练耗时数天仍未完成或最终失败属于异常现象,请从以下方向排查:
可能原因 | 排查与解决方法 |
| 增大 |
| 调整 |
| 简化网络结构,如将 |
关键参数未显式指定:依赖默认值可能导致训练行为不符合预期。 | 显式配置 |
数据质量问题:训练数据中存在大量缺失值、异常值或特征分布不均匀。 | 检查训练数据质量,对缺失值进行填充或剔除异常样本后再重新训练。 |