☰
DeepCTR 版本演进全解析:从 v0.1.0 到 v0.9.4 的 CTR 模型库成长史
2026/9/27 6:51:13 网站建设 项目流程
  • 人工智能
  • 深度学习
  • 机器学习

【免费下载链接】DeepCTR

Easy-to-use,Modular and Extendible package of deep-learning based CTR models .

项目地址:https://gitcode.com/gh_mirrors/de/DeepCTR
点击查看免费下载

导读

本文以 DeepCTR 官方发布历史文档 docs/source/History.md 为主线,系统梳理该深度学习 CTR(Click-Through Rate,点击率)预测模型库自 2018 年 11 月 v0.1.0 首次发布到 v0.9.4(2026 年 4 月)近八年的版本演进脉络。读完本文,你将掌握:每个版本引入了哪些模型与核心能力、这些能力在仓库源码中如何落地(含精确文件路径)、模型家族从"单点模型"到"序列模型 + 多任务模型 + Estimator 大规模训练"的能力图谱,以及随版本演进而不断变化的 TensorFlow / Python 兼容边界与安装约束。

DeepCTR 的定位是Easy-to-use、Modular、Extendible的深度学习 CTR 模型库:提供tf.keras.Model风格的接口用于快速实验,同时提供tensorflow estimator接口用于大规模数据与分布式训练,并兼容 TensorFlow 1.x 与 2.x(见 README.md)。版本历史正是这一能力版图逐步扩张的最可靠索引。


一、版本总览:一份 8 年的能力增长曲线

从 docs/source/History.md 可以看到,DeepCTR 的版本节奏大致分四个阶段:

阶段时间跨度代表版本主题
起步期2018-11 ~ 2019-04v0.1.0 → v0.3.x核心模型沉淀、序列输入、哈希在线化
扩张期2019-05 ~ 2020-06v0.4.x → v0.8.x模型批量扩充、inputs/feature columns 重构、Estimator 支持
精修期2020-10 ~ 2022-11v0.8.x → v0.9.3多任务学习、DCN-Mix、EDCN、Python 3.9/3.10 支持
维护期2026-04v0.9.4更高 TensorFlow 版本兼容

当前仓库 setup.py 中version="0.9.4"、python_requires=">=3.7",与 History 文档最新条目一致,说明本文描述的版本脉络即当前仓库的真实状态。值得注意的是,v0.9.4 的依赖策略发生了变化:h5py>=3.7.0(Python ≥3.9)与h5py==2.10.0(Python <3.9)分叉处理,这是适配新版 TensorFlow 生态的直接体现。


二、2018 起步期:从首个 PyPI 发布到序列输入与注意力模型

v0.1.0(2018-11-24):首版发布

History 文档记录 DeepCTR 首个版本 v0.1.0 于 2018 年 11 月 24 日发布到 PyPI。从 deepctr/models/init.py 的导出清单可以推断,早期模型集中在 FM 系基础模型:DeepFM、FNN、PNN、WDL、NFM、AFM、xDeepFM、MLR、DCN等。其中 DeepFM 至今仍是文档示例中使用最频繁的模型(如 docs/source/Examples.md 的 Criteo 分类示例),也是理解整个库的入口模型。

v0.1.4(2018-11-29):文档体系建立

该版本在文档中新增 FAQ,自此用户可以从官方问答中获取权重保存/加载、学习率设置、embedding 提取等实操方案。FAQ 中给出的权重加载方案(model.save_weights/model.load_weights以及load_model('DeepFM.h5', custom_objects))一直沿用至今。

v0.1.6(2018-12-19):TensorFlow 1.4-1.12 兼容

History 文档特别注明该版本兼容 TensorFlow1.4-1.12(1.7、1.8除外),并引入"自动检查新版本"机制。这是 DeepCTR 一贯兼容策略的起点——直到 README.md 仍强调"DeepCTR does not pin or install TensorFlow for you",即 TensorFlow 版本由用户自行安装匹配。

v0.2.x(2018-12 ~ 2019-01):xDeepFM、AutoInt 与序列输入

  • v0.2.0(2018-12-22):新增xDeepFM,它通过压缩交互网络(CIN)显式学习低阶与高阶特征交互。在 deepctr/layers/interaction.py 中,CIN层的实现注释明确说明其改编自原论文作者发布的代码;同时 v0.2.0 继续强化新版本自动检查。
  • v0.2.1(2018-12-27):新增AutoInt,其核心是 deepctr/layers/interaction.py 的InteractingLayer——通过多头自注意力让每个特征与其他所有特征交互,自动识别相关特征以形成高阶特征。
  • v0.2.2(2019-01-01):为AFM、AutoInt、DCN、DeepFM、FNN、NFM、PNN、xDeepFM等模型增加序列(多值)输入支持。这正是 docs/source/Features.md 中VarLenSparseFeat设计诞生的背景:序列特征需要maxlen填充、combiner池化(sum/mean/max),且约定值 0 专用于 padding(见 docs/source/Examples.md 的 Multi-value Input: Movielens 示例)。
  • v0.2.3(2019-01-24):引入新的特征配置生成方法并修复若干 bug。

三、2019 扩张期:模型批量扩充与模块化重构

2019 年是 DeepCTR 模型增长最快的一年,docs/source/History.md 中从 v0.3.1 到 v0.6.3 共记录十余个版本。

v0.3.x:层库重构与 DIEN/ONN/CCPM/FGCNN

  • v0.3.1(2019-02-17):重构 layers,新增BiLSTM与Transformer。这两类基础层至今仍在 deepctr/layers/sequence.py 中承担序列建模职责,是 DIEN、DSIN 等序列模型的底层组件。
  • v0.3.2(2019-03-30):新增DIEN(深度兴趣演化网络,deepctr/models/sequence/dien.py)与ONN(操作感知神经网络)。DIEN 的兴趣提取层与兴趣演化层依赖 deepctr/contrib/rnn.py 中DynamicGRU等实现(deepctr/layers/sequence.py),随后 v0.6.1 还专门修复了DynamicGRU的 bug,说明其重要性。
  • v0.3.3(2019-04-21):新增CCPM(卷积点击预测模型)及FGCNNLayer。CCPM 通过卷积提取局部-全局关键特征,是模型中少有的 CNN 系代表。
  • v0.3.4(2019-04-27):新增FGCNN与FGCNNLayer,用 CNN 生成新特征、以 IPNN 结构做深度分类器。

v0.4.x:哈希在线化与 DSIN

  • v0.4.0(2019-05-04):支持特征在线哈希(feature hashing on the fly)并兼容 python2.7。哈希能力的底层实现在 deepctr/layers/utils.py 的Hash层:当vocabulary_path未设置时,通过tf.strings.to_hash_bucket_fast将输入哈希到[0, num_buckets)空间。对应的完整示例是 docs/source/Examples.md 中的 "Classification: Criteo with feature hashing on the fly"——此时SparseFeat需设置use_hash=True, dtype='string',省去了LabelEncoder环节。
  • v0.4.1(2019-05-19):新增DSIN(深度会话兴趣网络,deepctr/models/sequence/dsin.py),使用带偏置编码的自注意力提取会话内兴趣,再用 Bi-LSTM 建模会话间演化。

v0.5.x:inputs 重构、FiBiNET、Linear 层重构

  • v0.5.0(2019-06-30):重构inputs模块。该模块(deepctr/inputs.py)负责 embedding 矩阵创建、embedding 查找、稠密输入处理与可变长池化,是整个库的数据通路核心。重构后create_embedding_matrix、embedding_lookup、varlen_embedding_lookup、get_varlen_pooling_list等函数成为 deepctr/feature_column.py 的直接依赖。
  • v0.5.1(2019-07-10):新增FiBiNET(特征重要性 + 双线性特征交互网络),对应测试见 tests/models/FiBiNET_test.py。FiBiNET 通过 SENET 机制动态学习特征重要性、通过双线性函数学习细粒度特征交互,是 2019 年特征交互方向的代表工作。
  • v0.5.2(2019-07-21):重构Linear层(deepctr/layers/utils.py),统一了各模型中线性部分(wide 部分)的构建方式。

v0.6.x:TF 1.14/2.0 兼容、CCPM/DynamicGRU 修复、加权序列

  • v0.6.0(2019-08-02):关键里程碑——DeepCTR 开始同时兼容 TensorFlow 1.14 与 2.0.0。双 TF 兼容策略一直延续至今(README 中 CI 徽章同时包含 TF1 与 TF2 两条流水线)。
  • v0.6.1(2019-09-08):修复CCPM与DynamicGRU的 bug。
  • v0.6.2(2019-10-03):简化输入逻辑。
  • v0.6.3(2019-11-06):新增WeightedSequenceLayer(deepctr/layers/sequence.py),支持加权序列特征输入。对应地,VarLenSparseFeat增加weight_name与weight_norm参数(默认weight_norm=True,见 deepctr/feature_column.py),在 docs/source/Examples.md 的多值输入示例中通过use_weighted_sequence=True并传入weight_name='genres_weight'来启用。

四、2020 精修期:特征列体系成熟与 Estimator 大规模训练

v0.7.x:特征列重构与数值稳定性修复

  • v0.7.0(2019-11-24):重构 feature columns。这是影响面最大的一次 API 演进:deepctr/feature_column.py 中SparseFeat从此支持每个特征独立设置embedding_dim(并支持embedding_dim="auto",按6 * vocabulary_size^0.25自动推导),同时引入group_name实现分组交互(默认组DEFAULT_GROUP_NAME = "default_group",见同文件第 14 行)。
  • v0.7.1(2020-01-28):简化VarLenSparseFeat(重构为包含一个SparseFeat实例 +maxlen/combiner/length_name/weight_name/weight_norm的命名元组,见 deepctr/feature_column.py),支持设置weight_normalization,并修复linear_feature_columns中SparseFeatembedding 尺寸问题。
  • v0.7.2 / v0.7.3 / v0.7.4 / v0.7.5(2020-02 ~ 2020-05):
    • v0.7.3 修复模型加载已训练权重后预测结果不一致的问题——这对应 FAQ 中load_model需传custom_objects的约定(见 docs/source/FAQ.md);
    • v0.7.4 新增FLEN(字段利用嵌入网络,deepctr/models/flen.py)及其配套FieldWiseBiInteraction层(deepctr/layers/interaction.py);
    • v0.7.5 修复LayerNormalization的数值不稳定性(deepctr/layers/normalization.py)。

v0.8.x:Estimator、预训练 embedding、DCN-Mix 与 DNN 重构

  • v0.8.0(2020-06-27):三个重磅能力:
    1. 支持 TensorFlow Estimator,面向大规模数据与分布式训练。仓库新增deepctr/estimator/目录,其中 deepctr/estimator/models/deepfm.py 的DeepFMEstimator支持自定义linear_optimizer(默认'Ftrl')与dnn_optimizer;deepctr/estimator/models/init.py 显示已有 DeepFM、FwFM、FiBiNET、FNN、xDeepFM、DeepFEFM 等 Estimator 版本。配套输入函数input_fn_tfrecord、input_fn_pandas位于 deepctr/estimator/inputs.py,完整用法见 docs/source/Examples.md 的 "Estimator with TFRecord" 与 "Estimator with Pandas DataFrame" 两节。
    2. 支持不同 embedding 使用不同初始化器,以及加载预训练 embedding:SparseFeat的embeddings_initializer与trainable参数在 deepctr/feature_column.py 中实现(默认RandomNormal(mean=0.0, stddev=0.0001, seed=2020)),FAQ 第 6 节给出了用tf.initializers.constant(pretrained_weights)初始化并用trainable=False冻结的完整代码。
    3. 新增FwFM(字段加权因子分解机,deepctr/models/fwfm.py)。
  • v0.8.1(2020-09-12):提升可复现性并修复若干 bug。可复现性相关细节包括SparseFeat默认 embedding 初始化器固定seed=2020,以及示例中train_test_split(..., random_state=2020)、tf.estimator.RunConfig(tf_random_seed=2021)等约定。
  • v0.8.2(2020-10-11):重构DNN层(deepctr/layers/core.py),统一了全连接堆叠、dropout、batch normalization 与激活函数处理。
  • v0.8.3(2021-01-06):新增DCN-Mix(deepctr/models/dcnmix.py,对应论文 DCN V2),用矩阵核替代向量核,并结合 mixture of experts 学习特征交互;同时DenseFeat支持transform_fn(见 deepctr/feature_column.py),可在输入层直接做归一化/变换,例如lambda x: (x - 3.0) / 4.2。
  • v0.8.4(2021-02-12):修复DCN-Mix中的 bug。
  • v0.8.5(2021-03-13):新增BST(行为序列 Transformer,deepctr/models/sequence/bst.py),将 Transformer 引入用户行为序列建模,示例复用 examples/run_din.py。

五、2021-2026:多任务学习、EDCN 与生态兼容收尾

v0.8.6(2021-06-14):IFM 系与 FEFM 系

一次性新增三个输入感知/字段嵌入系模型:

  • IFM(输入感知因子分解机,deepctr/models/ifm.py):为同一特征在不同样本中学得独特的输入感知因子;
  • DIFM(双输入感知因子分解机,deepctr/models/difm.py):在 bit-wise 与 vector-wise 两个层级同时自适应重加权原始特征表示;
  • FEFM与DeepFEFM(deepctr/models/deepfefm.py):为每个字段对学习对称矩阵 embedding,模型复杂度显著低于 FFM、与 FwFM 相当。

v0.8.7(2021-07-18):Hash 层支持预定义键值词汇表

此前Hash层只能做纯哈希,该版本起支持通过vocabulary_path加载 CSV 词汇表(键值映射)做确定性查表。对应实现见 deepctr/layers/utils.py:使用TextFileInitializer(vocabulary_path, 'string', 1, 'int64', 0, delimiter=',')构建StaticHashTable,表中缺失的键落入default_value=0。文件格式为每行两列逗号分隔(值列、键列),键缺失时返回 0,因此哈希值需从 1 开始编号(SparseFeat的vocabulary_path参数说明见 docs/source/Features.md 的 SparseFeat 小节)。配套示例使用仓库中 examples/movielens_age_vocabulary.csv 为age特征做键值映射(见 docs/source/Examples.md 的 "Hash Layer with pre-defined key-value vocabulary")。

v0.9.0(2021-09-03):多任务学习模型家族

多任务学习是 DeepCTR 能力版图的最后一块大拼图,该版本一次性新增四个多任务模型(均在 deepctr/models/multitask/ 下):

模型文件核心思想
SharedBottomsharedbottom.py硬参数共享:所有任务共享隐藏层,各任务保留独立输出层
ESMMesmm.py全空间多任务模型:在 impression → click → conversion 全链路建模 CVR
MMOEmmoe.py多门控专家混合:任务共享专家子模型 + 各任务独立门控网络
PLEple.py渐进式分层抽取:显式分离共享与任务特定组件

对应示例 examples/run_mtl.py 与 docs/source/Examples.md 的 "MultiTask Learning: MMOE" 节展示了如何在 census-income 数据集上同时预测"收入是否超 5 万美元"与"婚姻状态"两个任务,其中MMOE(dnn_feature_columns, tower_dnn_hidden_units=[], task_types=['binary','binary'], task_names=[...])的用法清晰可见。

v0.9.1 ~ v0.9.3(2022):TF 2.x 兼容与 EDCN

  • v0.9.1(2022-06-11):提升与 TensorFlow2.x的兼容性。
  • v0.9.2(2022-10-15):支持 Python3.9、3.10,与 setup.py 中python_requires=">=3.7"及 classifiers(Python 3.7/3.10/3.11/3.12)吻合。
  • v0.9.3(2022-11-10):新增EDCN(增强显式与隐式特征交互 DCN,deepctr/models/edcn.py),通过 bridge 模块与 regulation 模块协同捕获并行网络各隐藏层的层间交互信号、学习判别性特征分布。

v0.9.4(2026-04-16):最新版

支持更高的 TensorFlow 版本,是当前仓库的最新状态(setup.py 中version="0.9.4")。README 与 FAQ 第 8 节给出了配套的兼容性指引:安装 DeepCTR 前先自行安装匹配 Python/平台环境的 TensorFlow,且 Python ≥3.9 时允许h5py>=3.7.0;若 TensorFlow 报 NumPy 冲突,需按其要求降级(如numpy<2);应统一使用公开的tensorflow.keras接口,避免混用tensorflow.python.keras私有 API 导致序列化与优化器/指标加载失败。


六、版本演进背后的代码主线:一份源码级索引

版本历史看似是"发布日志",实则映射了仓库内几条清晰的代码主线,方便你按需深入:

  1. 特征列主线(deepctr/feature_column.py):SparseFeat(v0.7.0 起支持独立 embedding_dim 与 group_name,v0.8.0 起支持独立初始化器与 trainable,v0.8.7 起支持 vocabulary_path)、DenseFeat(v0.8.3 起支持 transform_fn)、VarLenSparseFeat(v0.7.1 简化,v0.6.3 起支持权重序列)——所有版本的功能点都汇聚于此。
  2. 层库主线(deepctr/layers/):Hash(v0.4.0 引入、v0.8.7 扩展)、Linear(v0.5.2 重构)、DNN(v0.8.2 重构)、BiInteractionPooling(NFM)、CIN(xDeepFM)、InteractingLayer(AutoInt)、FieldWiseBiInteraction(FLEN)、WeightedSequenceLayer(v0.6.3)、DynamicGRU(DIEN)等,每个模型都由这些可复用的 Keras Layer 拼装而成。
  3. 模型注册表主线(deepctr/models/init.py):一行一模型地记录着 20+ 个单任务模型、4 个序列模型(DIN/DIEN/DSIN/BST)与 4 个多任务模型(SharedBottom/ESMM/MMOE/PLE),对照 History 文档可精确还原每个模型的引入版本。
  4. 大规模训练主线(deepctr/estimator/):v0.8.0 引入,与 Keras 版模型一一对应(DeepFMEstimator、FwFMEstimator、FiBiNETEstimator 等),配合input_fn_tfrecord/input_fn_pandas支持 TFRecord 与 DataFrame 两种输入。

七、如何验证版本能力:从示例与测试入手

仓库为上述绝大多数版本功能提供了可直接运行与验证的配套材料:

  • 示例脚本(examples/):run_classification_criteo.py(Keras 分类)、run_classification_criteo_hash.py(v0.4.0 哈希)、run_classification_criteo_multi_gpu.py(FAQ 第 9 节提及的多 GPU)、run_din.py/run_dien.py/run_dsin.py(序列模型,BST 亦复用 run_din.py)、run_flen.py(v0.7.4)、run_mtl.py(v0.9.0 多任务)、run_multivalue_movielens*.py(序列/哈希/词汇表多值输入)、run_estimator_*.py(v0.8.0 Estimator)、gen_tfrecords.py(生成 Estimator 示例所需的 TFRecord)。示例配套数据均位于 examples/ 下,如 criteo_sample.txt、movielens_sample.txt、census-income.sample。
  • 测试套件(tests/models/):每个模型都有独立的 smoke test(如 DeepFM_test.py、EDCN_test.py、MTL_test.py),tests/layers/ 则覆盖各核心层的数值正确性——它们是验证某个版本新增能力在本地是否正常工作的最快途径。
  • 文档体系(docs/source/):Features.md 详解全部模型与特征列参数,Examples.md 提供 12 个带完整代码的实战示例,FAQ.md 覆盖权重加载、预训练 embedding、GPU/多 GPU、TF/Keras/h5py 兼容等高频问题,Quick-Start.md 与 Model_Methods.md 给出 4 步上手流程。

八、给新用户的版本选择建议

结合 History 文档与当前仓库约束,可以给出如下实操建议(注意:以下兼容信息均以当前仓库 README.md、setup.py、docs/source/FAQ.md 为准):

  1. 新项目直接使用 v0.9.4:它同时保留完整的 Keras 模型族、Estimator 接口、多任务模型与序列模型,且对更高 TensorFlow 版本支持最好。安装顺序应为先pip install tensorflow再pip install deepctr(DeepCTR 不替你锁定 TF 版本)。
  2. 老项目升级时关注三个 API 断点:v0.5.0(inputs 重构)、v0.6.2(输入逻辑简化)、v0.7.0(feature columns 重构,SparseFeat/VarLenSparseFeat签名变化)——这三个版本的变更影响所有模型调用方式,升级前应核对 docs/source/Features.md 中当前的特征列签名。
  3. 大规模训练选 Estimator 家族:v0.8.0 起提供的DeepFMEstimator等接口配合input_fn_tfrecord更适合海量数据与分布式场景;单机实验仍以model.fit/model.predict的 Keras 风格为主。

总而言之,docs/source/History.md 不仅是一份发布日志,更是理解 DeepCTR 架构演进的最佳地图:顺着版本号逐一对照 deepctr/models/init.py、deepctr/feature_column.py 与 deepctr/layers/ 中的实现,你就能以"版本 → 能力 → 代码"的三层视角完整掌握这个 CTR 模型库的设计哲学与使用方法。

  • 人工智能
  • 深度学习
  • 机器学习

【免费下载链接】DeepCTR

Easy-to-use,Modular and Extendible package of deep-learning based CTR models .

项目地址:https://gitcode.com/gh_mirrors/de/DeepCTR
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询