From c13aba6db708ff4815069d2f80c99b5c424e4261 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E6=84=8F?= <1512818945@qq.com> Date: Wed, 2 Nov 2022 20:40:32 +0800 Subject: [PATCH 1/4] Add EDCN model. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: Add EDCN model. Co-authored-by: 何意 Co-authored-by: 浅梦 --- README.md | 1 + deepctr/layers/__init__.py | 8 ++- deepctr/layers/core.py | 60 ++++++++++++++++++- deepctr/layers/interaction.py | 75 +++++++++++++++++++++++- deepctr/models/__init__.py | 3 +- deepctr/models/edcn.py | 107 ++++++++++++++++++++++++++++++++++ tests/models/EDCN_test.py | 31 ++++++++++ 7 files changed, 278 insertions(+), 7 deletions(-) create mode 100644 deepctr/models/edcn.py create mode 100644 tests/models/EDCN_test.py diff --git a/README.md b/README.md index f0d90c13..ec42fd31 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,7 @@ Introduction](https://zhuanlan.zhihu.com/p/53231955)) and [welcome to join us!]( | ESMM | [SIGIR 2018][Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate](https://arxiv.org/abs/1804.07931) | | MMOE | [KDD 2018][Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts](https://dl.acm.org/doi/abs/10.1145/3219819.3220007) | | PLE | [RecSys 2020][Progressive Layered Extraction (PLE): A Novel Multi-Task Learning (MTL) Model for Personalized Recommendations](https://dl.acm.org/doi/10.1145/3383313.3412236) | +| EDCN | [KDD 2021][Enhancing Explicit and Implicit Feature Interactions via Information Sharing for Parallel Deep CTR Models](https://dlp-kdd.github.io/assets/pdf/DLP-KDD_2021_paper_12.pdf) | ## Citation diff --git a/deepctr/layers/__init__.py b/deepctr/layers/__init__.py index 1bfd40ef..108cd7f2 100644 --- a/deepctr/layers/__init__.py +++ b/deepctr/layers/__init__.py @@ -1,11 +1,11 @@ import tensorflow as tf from .activation import Dice -from .core import DNN, LocalActivationUnit, PredictionLayer +from .core import DNN, LocalActivationUnit, PredictionLayer, RegulationLayer from .interaction import (CIN, FM, AFMLayer, BiInteractionPooling, CrossNet, CrossNetMix, InnerProductLayer, InteractingLayer, OutterProductLayer, FGCNNLayer, SENETLayer, BilinearInteraction, - FieldWiseBiInteraction, FwFMLayer, FEFMLayer) + FieldWiseBiInteraction, FwFMLayer, FEFMLayer, BridgeLayer) from .normalization import LayerNormalization from .sequence import (AttentionSequencePoolingLayer, BiasEncoding, BiLSTM, KMaxPooling, SequencePoolingLayer, WeightedSequenceLayer, @@ -28,6 +28,7 @@ 'SequencePoolingLayer': SequencePoolingLayer, 'AttentionSequencePoolingLayer': AttentionSequencePoolingLayer, 'CIN': CIN, + 'RegulationLayer': RegulationLayer, 'InteractingLayer': InteractingLayer, 'LayerNormalization': LayerNormalization, 'BiLSTM': BiLSTM, @@ -48,5 +49,6 @@ 'softmax': softmax, 'FEFMLayer': FEFMLayer, 'reduce_sum': reduce_sum, - 'PositionEncoding':PositionEncoding + 'PositionEncoding': PositionEncoding, + 'BridgeLayer': BridgeLayer } diff --git a/deepctr/layers/core.py b/deepctr/layers/core.py index 668348d2..6eb64726 100644 --- a/deepctr/layers/core.py +++ b/deepctr/layers/core.py @@ -10,9 +10,9 @@ from tensorflow.python.keras import backend as K try: - from tensorflow.python.ops.init_ops_v2 import Zeros, glorot_normal + from tensorflow.python.ops.init_ops_v2 import Zeros, Ones, glorot_normal except ImportError: - from tensorflow.python.ops.init_ops import Zeros, glorot_normal_initializer as glorot_normal + from tensorflow.python.ops.init_ops import Zeros, Ones, glorot_normal_initializer as glorot_normal from tensorflow.python.keras.layers import Layer, Dropout @@ -265,3 +265,59 @@ def get_config(self, ): config = {'task': self.task, 'use_bias': self.use_bias} base_config = super(PredictionLayer, self).get_config() return dict(list(base_config.items()) + list(config.items())) + + +class RegulationLayer(Layer): + """Regulation module used in EDCN. + + Input shape + - A list of 3D tensor with shape: ``(batch_size,1,embedding_size)``. + + Output shape + - 2D tensor with shape: ``(batch_size, embedding_size * field_num)``. + + Arguments + - **tau** : Positive float, the temperature coefficient to control + distribution of field-wise gating unit. + + - **seed** : A Python integer to use as random seed. + + References + - [Enhancing Explicit and Implicit Feature Interactions via Information Sharing for Parallel Deep CTR Models.](https://dlp-kdd.github.io/assets/pdf/DLP-KDD_2021_paper_12.pdf) + """ + + def __init__(self, tau=0.1, **kwargs): + if tau == 0: + raise ValueError("RegulationLayer tau can not be zero.") + self.tau = 1.0 / tau + super(RegulationLayer, self).__init__(**kwargs) + + def build(self, input_shape): + self.field_num = int(input_shape[1]) + self.embedding_size = int(input_shape[2]) + self.g = self.add_weight( + shape=(1, self.field_num, 1), + initializer=Ones(), + name=self.name + '_field_weight') + + # Be sure to call this somewhere! + super(RegulationLayer, self).build(input_shape) + + def call(self, inputs, **kwargs): + + if K.ndim(inputs) != 3: + raise ValueError( + "Unexpected inputs dimensions %d, expect to be 3 dimensions" % (K.ndim(inputs))) + + feild_gating_score = tf.nn.softmax(self.g * self.tau, 1) + E = inputs * feild_gating_score + return tf.reshape(E, [-1, self.field_num * self.embedding_size]) + + def compute_output_shape(self, input_shape): + return (None, self.field_num * self.embedding_size) + + def get_config(self): + config = {'tau': self.tau} + base_config = super(RegulationLayer, self).get_config() + base_config.update(config) + return base_config diff --git a/deepctr/layers/interaction.py b/deepctr/layers/interaction.py index d26eb2c1..a050a14a 100644 --- a/deepctr/layers/interaction.py +++ b/deepctr/layers/interaction.py @@ -3,7 +3,8 @@ Authors: Weichen Shen,weichenswc@163.com, - Harshit Pande + Harshit Pande, + Yi He, heyi_jack@163.com """ @@ -26,6 +27,7 @@ from .activation import activation_layer from .utils import concat_func, reduce_sum, softmax, reduce_mean +from .core import DNN class AFMLayer(Layer): @@ -1489,3 +1491,74 @@ def get_config(self): 'regularizer': self.regularizer, }) return config + + +class BridgeLayer(Layer): # ridge + """AttentionPoolingLayer layer used in EDCN + + Input shape + - A list of 3D tensor with shape: ``(batch_size,1,embedding_size)``. Its length is ``number of subnetworks``. + + Output shape + - 2D tensor with shape: ``(batch_size, embedding_size)``. + + Arguments + - **activation**: Activation function to use. + + - **l2_reg**: float between 0 and 1. L2 regularizer strength applied to the kernel weights matrix. + + - **seed**: A Python integer to use as random seed. + + References + - [Enhancing Explicit and Implicit Feature Interactions via Information Sharing for Parallel Deep CTR Models.](https://dlp-kdd.github.io/assets/pdf/DLP-KDD_2021_paper_12.pdf) + + """ + + def __init__(self, bridge_type='attention_pooling', activation='relu', l2_reg=0, seed=1024, **kwargs): + self.bridge_type = bridge_type + self.activation = activation + self.l2_reg = l2_reg + self.seed = seed + + super(BridgeLayer, self).__init__(**kwargs) + + def build(self, input_shape): + if not isinstance(input_shape, list) or len(input_shape) < 2: + raise ValueError( + 'A `AttentionPoolingLayer` layer should be called ' + 'on a list of at least 2 inputs') + + self.dnn_dim = int(input_shape[0][-1]) + + self.dense = Dense(self.dnn_dim, self.activation) + self.dense_x = DNN([self.dnn_dim, self.dnn_dim], output_activation='softmax') + self.dense_h = DNN([self.dnn_dim, self.dnn_dim], output_activation='softmax') + + super(BridgeLayer, self).build(input_shape) # Be sure to call this somewhere! + + def call(self, inputs, **kwargs): + x, h = inputs + if self.bridge_type == "pointwise_addition": + return x + h + elif self.bridge_type == "hadamard_product": + return x * h + elif self.bridge_type == "concatenation": + return self.dense(tf.concat(inputs, axis=-1)) + elif self.bridge_type == "attention_pooling": + a_x = self.dense_x(x) + a_h = self.dense_h(h) + return a_x * x + a_h * h + + def compute_output_shape(self, input_shape): + return (None, self.dnn_dim) + + def get_config(self): + base_config = super(BridgeLayer, self).get_config().copy() + config = { + 'bridge_type': self.bridge_type, + 'l2_reg': self.l2_reg, + 'activation': self.activation, + 'seed': self.seed + } + config.update(base_config) + return config diff --git a/deepctr/models/__init__.py b/deepctr/models/__init__.py index 2d19714b..1d797e78 100644 --- a/deepctr/models/__init__.py +++ b/deepctr/models/__init__.py @@ -20,7 +20,8 @@ from .sequence import DIN, DIEN, DSIN, BST from .wdl import WDL from .xdeepfm import xDeepFM +from .edcn import EDCN __all__ = ["AFM", "CCPM", "DCN", "IFM", "DIFM", "DCNMix", "MLR", "DeepFM", "MLR", "NFM", "DIN", "DIEN", "FNN", "PNN", "WDL", "xDeepFM", "AutoInt", "ONN", "FGCNN", "DSIN", "FiBiNET", 'FLEN', "FwFM", "BST", "DeepFEFM", - "SharedBottom", "ESMM", "MMOE", "PLE"] + "SharedBottom", "ESMM", "MMOE", "PLE", 'EDCN'] diff --git a/deepctr/models/edcn.py b/deepctr/models/edcn.py new file mode 100644 index 00000000..09dfe9f2 --- /dev/null +++ b/deepctr/models/edcn.py @@ -0,0 +1,107 @@ +# -*- coding:utf-8 -*- +""" +Author: + Yi He, heyi_jack@163.com + +Reference: + [1] Chen, B., Wang, Y., Liu, et al. Enhancing Explicit and Implicit Feature Interactions via Information Sharing for Parallel Deep CTR Models. CIKM, 2021, October (https://dlp-kdd.github.io/assets/pdf/DLP-KDD_2021_paper_12.pdf) +""" +import tensorflow as tf +from tensorflow.python.keras.layers import Dense, Lambda, Reshape, Concatenate +from tensorflow.python.keras.models import Model + +from ..feature_column import build_input_features, get_linear_logit, input_from_feature_columns +from ..layers.core import PredictionLayer, DNN, RegulationLayer +from ..layers.interaction import CrossNet, BridgeLayer +from ..layers.utils import add_func, concat_func + + +def EDCN(linear_feature_columns, + dnn_feature_columns, + bridge_type='attention_pooling', + tau=0.1, + use_dense_features=True, + cross_num=2, + cross_parameterization='vector', + l2_reg_linear=1e-5, + l2_reg_embedding=1e-5, + l2_reg_cross=1e-5, + l2_reg_dnn=0, + seed=10000, + dnn_dropout=0, + dnn_use_bn=False, + dnn_activation='relu', + task='binary'): + """Instantiates the Enhanced Deep&Cross Network architecture. + :param linear_feature_columns: An iterable containing all the features used by linear part of the model. + :param dnn_feature_columns: An iterable containing all the features used by deep part of the model. + :param bridge_type: The type of bridge interaction, one of 'pointwise_addition', 'hadamard_product', 'concatenation', 'attention_pooling' + :param tau: Positive float, the temperature coefficient to control distribution of field-wise gating unit + :param use_dense_features: Whether to use dense features, if True, dense feature will be projected to sparse embedding space + :param cross_num: positive integet,cross layer number + :param cross_parameterization: str, ``"vector"`` or ``"matrix"``, how to parameterize the cross network. + :param l2_reg_linear: float. L2 regularizer strength applied to linear part + :param l2_reg_embedding: float. L2 regularizer strength applied to embedding vector + :param l2_reg_cross: float. L2 regularizer strength applied to cross net + :param l2_reg_dnn: float. L2 regularizer strength applied to DNN + :param seed: integer ,to use as random seed. + :param dnn_dropout: float in [0,1), the probability we will drop out a given DNN coordinate. + :param dnn_use_bn: bool. Whether use BatchNormalization before activation or not DNN + :param dnn_activation: Activation function to use in DNN + :param task: str, ``"binary"`` for binary logloss or ``"regression"`` for regression loss + :return: A Keras model instance. + + """ + if cross_num == 0: + raise ValueError("Cross layer num must > 0") + + print('EDCN brige type: ', bridge_type) + + features = build_input_features(dnn_feature_columns) + inputs_list = list(features.values()) + + linear_logit = get_linear_logit(features, + linear_feature_columns, + seed=seed, + prefix='linear', + l2_reg=l2_reg_linear) + + sparse_embedding_list, dense_value_list = input_from_feature_columns( + features, dnn_feature_columns, l2_reg_embedding, seed) + + # project dense value to sparse embedding space, generate a new field feature + sparse_embedding_dim = int(sparse_embedding_list[0].shape[-1]) + if use_dense_features: + dense_value_feild = concat_func(dense_value_list) + dense_value_feild = Dense(sparse_embedding_dim, dnn_activation)(dense_value_feild) + dense_value_feild = Lambda(lambda x: tf.expand_dims(x, axis=1))(dense_value_feild) + sparse_embedding_list.append(dense_value_feild) + + deep_in = concat_func(sparse_embedding_list, axis=1) + cross_in = concat_func(sparse_embedding_list, axis=1) + field_size = len(sparse_embedding_list) + cross_dim = field_size * int(cross_in[0].shape[-1]) + + for i in range(cross_num): + deep_in = RegulationLayer(tau)(deep_in) + cross_in = RegulationLayer(tau)(cross_in) + cross_out = CrossNet(1, parameterization=cross_parameterization, + l2_reg=l2_reg_cross)(deep_in) + deep_out = DNN([cross_dim], dnn_activation, l2_reg_dnn, + dnn_dropout, dnn_use_bn, seed=seed)(cross_in) + + bridge_out = BridgeLayer(bridge_type)([cross_out, deep_out]) + bridge_out_list = Reshape([field_size, sparse_embedding_dim])(bridge_out) + + deep_in = bridge_out_list + cross_in = bridge_out_list + + stack_out = Concatenate()([cross_out, deep_out, bridge_out]) + final_logit = Dense(1, use_bias=False)(stack_out) + + final_logit = add_func([final_logit, linear_logit]) + output = PredictionLayer(task)(final_logit) + + model = Model(inputs=inputs_list, outputs=final_logit) + + return model diff --git a/tests/models/EDCN_test.py b/tests/models/EDCN_test.py new file mode 100644 index 00000000..dc9c5014 --- /dev/null +++ b/tests/models/EDCN_test.py @@ -0,0 +1,31 @@ +import pytest +import tensorflow as tf + +from deepctr.models import EDCN +from ..utils import check_model, get_test_data, SAMPLE_SIZE, get_test_data_estimator, check_estimator, \ + TEST_Estimator + + +@pytest.mark.parametrize( + 'bridge_type, tau, use_dense_features, cross_num, cross_parameterization, sparse_feature_num', + [ + ('pointwise_addition', 1, True, 2, 'vector', 3), + ('hadamard_product', 1, False, 2, 'vector', 4), + ('concatenation', 1, True, 3, 'vector', 5), + ('attention_pooling', 1, True, 2, 'matrix', 6), + ] +) +def test_EDCN(bridge_type, tau, use_dense_features, cross_num, cross_parameterization, sparse_feature_num): + model_name = "EDCN" + + sample_size = SAMPLE_SIZE + x, y, feature_columns = get_test_data(sample_size, sparse_feature_num=sparse_feature_num, + dense_feature_num=sparse_feature_num) + + model = EDCN(feature_columns, feature_columns, + bridge_type, tau, use_dense_features, cross_num, cross_parameterization) + check_model(model, model_name, x, y) + + +if __name__ == "__main__": + pass From 91dc7c63dd65af331f7ccc6c6bcdc106bae71bab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=85=E6=A2=A6?= Date: Wed, 9 Nov 2022 23:30:00 +0800 Subject: [PATCH 2/4] update EDCN &fix typo update EDCN &fix typo --- .github/workflows/ci.yml | 66 +++++++++---------- .github/workflows/ci2.yml | 96 ++++++++++++++++++++++++++++ deepctr/__init__.py | 2 +- deepctr/layers/__init__.py | 14 ++-- deepctr/layers/core.py | 26 ++++---- deepctr/layers/interaction.py | 43 ++++++------- deepctr/layers/sequence.py | 60 ++--------------- deepctr/layers/utils.py | 64 ++++++++++++++++--- deepctr/models/edcn.py | 71 +++++++++----------- deepctr/models/sequence/din.py | 6 +- deepctr/models/sequence/dsin.py | 2 +- docs/pics/EDCN.png | Bin 0 -> 184140 bytes docs/source/FAQ.md | 2 +- docs/source/Features.md | 13 ++++ docs/source/History.md | 5 +- docs/source/Models.rst | 1 + docs/source/conf.py | 2 +- docs/source/deepctr.models.edcn.rst | 7 ++ docs/source/deepctr.models.rst | 1 + docs/source/index.rst | 6 +- setup.py | 11 ++-- tests/models/EDCN_test.py | 21 +++--- tests/models/xDeepFM_test.py | 8 +-- 23 files changed, 309 insertions(+), 218 deletions(-) create mode 100644 .github/workflows/ci2.yml create mode 100644 docs/pics/EDCN.png create mode 100644 docs/source/deepctr.models.edcn.rst diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7ed5bd15..3001b2e0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,6 +1,6 @@ -name: CI +name: CI_TF2 -on: +on: push: path: - 'deepctr/*' @@ -9,7 +9,7 @@ on: path: - 'deepctr/*' - 'tests/*' - + jobs: build: @@ -17,9 +17,9 @@ jobs: timeout-minutes: 180 strategy: matrix: - python-version: [3.6,3.7,3.8,3.9,3.10.7] - tf-version: [1.4.0,1.15.0,2.6.0,2.7.0,2.8.0,2.9.0,2.10.0] - + python-version: [ 3.6,3.7,3.8, 3.9,3.10.7 ] + tf-version: [ 2.6.0,2.7.0,2.8.0,2.9.0,2.10.0 ] + exclude: - python-version: 3.7 tf-version: 1.4.0 @@ -64,31 +64,31 @@ jobs: - python-version: 3.10.7 tf-version: 2.7.0 steps: - - - uses: actions/checkout@v3 - - - name: Setup python environment - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python-version }} - - name: Install dependencies - run: | - pip3 install -q tensorflow==${{ matrix.tf-version }} - pip install -q protobuf==3.19.0 - pip install -q requests - pip install -e . - - name: Test with pytest - timeout-minutes: 180 - run: | - pip install -q pytest - pip install -q pytest-cov - pip install -q python-coveralls - pytest --cov=deepctr --cov-report=xml - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v3.1.0 - with: - token: ${{secrets.CODECOV_TOKEN}} - file: ./coverage.xml - flags: pytest - name: py${{ matrix.python-version }}-tf${{ matrix.tf-version }} + - uses: actions/checkout@v3 + + - name: Setup python environment + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies + run: | + pip3 install -q tensorflow==${{ matrix.tf-version }} + pip install -q protobuf==3.19.0 + pip install -q requests + pip install -e . + - name: Test with pytest + timeout-minutes: 180 + run: | + pip install -q pytest + pip install -q pytest-cov + pip install -q python-coveralls + pytest --cov=deepctr --cov-report=xml + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v3.1.0 + with: + token: ${{secrets.CODECOV_TOKEN}} + file: ./coverage.xml + flags: pytest + name: py${{ matrix.python-version }}-tf${{ matrix.tf-version }} diff --git a/.github/workflows/ci2.yml b/.github/workflows/ci2.yml new file mode 100644 index 00000000..e9901cb1 --- /dev/null +++ b/.github/workflows/ci2.yml @@ -0,0 +1,96 @@ +name: CI_TF1 + +on: + push: + path: + - 'deepctr/*' + - 'tests/*' + pull_request: + path: + - 'deepctr/*' + - 'tests/*' + +jobs: + build: + + runs-on: ubuntu-latest + timeout-minutes: 180 + strategy: + matrix: + python-version: [ 3.6,3.7 ] + tf-version: [ 1.15.0 ] + + exclude: + - python-version: 3.7 + tf-version: 1.4.0 + - python-version: 3.7 + tf-version: 1.12.0 + - python-version: 3.7 + tf-version: 1.15.0 + - python-version: 3.8 + tf-version: 1.4.0 + - python-version: 3.8 + tf-version: 1.14.0 + - python-version: 3.8 + tf-version: 1.15.0 + - python-version: 3.6 + tf-version: 2.7.0 + - python-version: 3.6 + tf-version: 2.8.0 + - python-version: 3.6 + tf-version: 2.9.0 + - python-version: 3.6 + tf-version: 2.10.0 + - python-version: 3.9 + tf-version: 1.4.0 + - python-version: 3.9 + tf-version: 1.15.0 + - python-version: 3.9 + tf-version: 2.2.0 + - python-version: 3.9 + tf-version: 2.5.0 + - python-version: 3.9 + tf-version: 2.6.0 + - python-version: 3.9 + tf-version: 2.7.0 + - python-version: 3.10.7 + tf-version: 1.4.0 + - python-version: 3.10.7 + tf-version: 1.15.0 + - python-version: 3.10.7 + tf-version: 2.2.0 + - python-version: 3.10.7 + tf-version: 2.5.0 + - python-version: 3.10.7 + tf-version: 2.6.0 + - python-version: 3.10.7 + tf-version: 2.7.0 + steps: + + - uses: actions/checkout@v3 + + - name: Setup python environment + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies + run: | + pip3 install -q tensorflow==${{ matrix.tf-version }} + pip install -q protobuf==3.19.0 + pip install -q requests + pip install -e . + - name: Test with pytest + timeout-minutes: 180 + run: | + pip install -q pytest + pip install -q pytest-cov + pip install -q python-coveralls + pytest --cov=deepctr --cov-report=xml + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v3.1.0 + with: + token: ${{secrets.CODECOV_TOKEN}} + file: ./coverage.xml + flags: pytest + name: py${{ matrix.python-version }}-tf${{ matrix.tf-version }} diff --git a/deepctr/__init__.py b/deepctr/__init__.py index 3c6d40b5..7eaabe48 100644 --- a/deepctr/__init__.py +++ b/deepctr/__init__.py @@ -1,4 +1,4 @@ from .utils import check_version -__version__ = '0.9.2' +__version__ = '0.9.3' check_version(__version__) diff --git a/deepctr/layers/__init__.py b/deepctr/layers/__init__.py index 108cd7f2..18e45011 100644 --- a/deepctr/layers/__init__.py +++ b/deepctr/layers/__init__.py @@ -1,17 +1,16 @@ import tensorflow as tf from .activation import Dice -from .core import DNN, LocalActivationUnit, PredictionLayer, RegulationLayer +from .core import DNN, LocalActivationUnit, PredictionLayer, RegulationModule from .interaction import (CIN, FM, AFMLayer, BiInteractionPooling, CrossNet, CrossNetMix, InnerProductLayer, InteractingLayer, OutterProductLayer, FGCNNLayer, SENETLayer, BilinearInteraction, - FieldWiseBiInteraction, FwFMLayer, FEFMLayer, BridgeLayer) + FieldWiseBiInteraction, FwFMLayer, FEFMLayer, BridgeModule) from .normalization import LayerNormalization from .sequence import (AttentionSequencePoolingLayer, BiasEncoding, BiLSTM, KMaxPooling, SequencePoolingLayer, WeightedSequenceLayer, - Transformer, DynamicGRU,PositionEncoding) - -from .utils import NoMask, Hash, Linear, _Add, combined_dnn_input, softmax, reduce_sum + Transformer, DynamicGRU, PositionEncoding) +from .utils import NoMask, Hash, Linear, _Add, combined_dnn_input, softmax, reduce_sum, Concat custom_objects = {'tf': tf, 'InnerProductLayer': InnerProductLayer, @@ -28,7 +27,6 @@ 'SequencePoolingLayer': SequencePoolingLayer, 'AttentionSequencePoolingLayer': AttentionSequencePoolingLayer, 'CIN': CIN, - 'RegulationLayer': RegulationLayer, 'InteractingLayer': InteractingLayer, 'LayerNormalization': LayerNormalization, 'BiLSTM': BiLSTM, @@ -39,6 +37,7 @@ 'FGCNNLayer': FGCNNLayer, 'Hash': Hash, 'Linear': Linear, + 'Concat': Concat, 'DynamicGRU': DynamicGRU, 'SENETLayer': SENETLayer, 'BilinearInteraction': BilinearInteraction, @@ -50,5 +49,6 @@ 'FEFMLayer': FEFMLayer, 'reduce_sum': reduce_sum, 'PositionEncoding': PositionEncoding, - 'BridgeLayer': BridgeLayer + 'RegulationModule': RegulationModule, + 'BridgeModule': BridgeModule } diff --git a/deepctr/layers/core.py b/deepctr/layers/core.py index 6eb64726..ad249473 100644 --- a/deepctr/layers/core.py +++ b/deepctr/layers/core.py @@ -267,41 +267,39 @@ def get_config(self, ): return dict(list(base_config.items()) + list(config.items())) -class RegulationLayer(Layer): +class RegulationModule(Layer): """Regulation module used in EDCN. Input shape - - A list of 3D tensor with shape: ``(batch_size,1,embedding_size)``. + - 3D tensor with shape: ``(batch_size,field_size,embedding_size)``. Output shape - - 2D tensor with shape: ``(batch_size, embedding_size * field_num)``. + - 2D tensor with shape: ``(batch_size,field_size * embedding_size)``. Arguments - **tau** : Positive float, the temperature coefficient to control distribution of field-wise gating unit. - - **seed** : A Python integer to use as random seed. - References - [Enhancing Explicit and Implicit Feature Interactions via Information Sharing for Parallel Deep CTR Models.](https://dlp-kdd.github.io/assets/pdf/DLP-KDD_2021_paper_12.pdf) """ - def __init__(self, tau=0.1, **kwargs): + def __init__(self, tau=1.0, **kwargs): if tau == 0: - raise ValueError("RegulationLayer tau can not be zero.") + raise ValueError("RegulationModule tau can not be zero.") self.tau = 1.0 / tau - super(RegulationLayer, self).__init__(**kwargs) + super(RegulationModule, self).__init__(**kwargs) def build(self, input_shape): - self.field_num = int(input_shape[1]) + self.field_size = int(input_shape[1]) self.embedding_size = int(input_shape[2]) self.g = self.add_weight( - shape=(1, self.field_num, 1), + shape=(1, self.field_size, 1), initializer=Ones(), name=self.name + '_field_weight') # Be sure to call this somewhere! - super(RegulationLayer, self).build(input_shape) + super(RegulationModule, self).build(input_shape) def call(self, inputs, **kwargs): @@ -311,13 +309,13 @@ def call(self, inputs, **kwargs): feild_gating_score = tf.nn.softmax(self.g * self.tau, 1) E = inputs * feild_gating_score - return tf.reshape(E, [-1, self.field_num * self.embedding_size]) + return tf.reshape(E, [-1, self.field_size * self.embedding_size]) def compute_output_shape(self, input_shape): - return (None, self.field_num * self.embedding_size) + return (None, self.field_size * self.embedding_size) def get_config(self): config = {'tau': self.tau} - base_config = super(RegulationLayer, self).get_config() + base_config = super(RegulationModule, self).get_config() base_config.update(config) return base_config diff --git a/deepctr/layers/interaction.py b/deepctr/layers/interaction.py index a050a14a..f76eda32 100644 --- a/deepctr/layers/interaction.py +++ b/deepctr/layers/interaction.py @@ -1493,48 +1493,45 @@ def get_config(self): return config -class BridgeLayer(Layer): # ridge - """AttentionPoolingLayer layer used in EDCN +class BridgeModule(Layer): + """Bridge Module used in EDCN Input shape - - A list of 3D tensor with shape: ``(batch_size,1,embedding_size)``. Its length is ``number of subnetworks``. + - A list of two 2D tensor with shape: ``(batch_size, units)``. Output shape - - 2D tensor with shape: ``(batch_size, embedding_size)``. + - 2D tensor with shape: ``(batch_size, units)``. Arguments - - **activation**: Activation function to use. - - - **l2_reg**: float between 0 and 1. L2 regularizer strength applied to the kernel weights matrix. + - **bridge_type**: The type of bridge interaction, one of 'pointwise_addition', 'hadamard_product', 'concatenation', 'attention_pooling' - - **seed**: A Python integer to use as random seed. + - **activation**: Activation function to use. References - [Enhancing Explicit and Implicit Feature Interactions via Information Sharing for Parallel Deep CTR Models.](https://dlp-kdd.github.io/assets/pdf/DLP-KDD_2021_paper_12.pdf) """ - def __init__(self, bridge_type='attention_pooling', activation='relu', l2_reg=0, seed=1024, **kwargs): + def __init__(self, bridge_type='hadamard_product', activation='relu', **kwargs): self.bridge_type = bridge_type self.activation = activation - self.l2_reg = l2_reg - self.seed = seed - super(BridgeLayer, self).__init__(**kwargs) + super(BridgeModule, self).__init__(**kwargs) def build(self, input_shape): if not isinstance(input_shape, list) or len(input_shape) < 2: raise ValueError( - 'A `AttentionPoolingLayer` layer should be called ' - 'on a list of at least 2 inputs') + 'A `BridgeModule` layer should be called ' + 'on a list of 2 inputs') self.dnn_dim = int(input_shape[0][-1]) + if self.bridge_type == "concatenation": + self.dense = Dense(self.dnn_dim, self.activation) + elif self.bridge_type == "attention_pooling": + self.dense_x = DNN([self.dnn_dim, self.dnn_dim], self.activation, output_activation='softmax') + self.dense_h = DNN([self.dnn_dim, self.dnn_dim], self.activation, output_activation='softmax') - self.dense = Dense(self.dnn_dim, self.activation) - self.dense_x = DNN([self.dnn_dim, self.dnn_dim], output_activation='softmax') - self.dense_h = DNN([self.dnn_dim, self.dnn_dim], output_activation='softmax') - - super(BridgeLayer, self).build(input_shape) # Be sure to call this somewhere! + super(BridgeModule, self).build(input_shape) # Be sure to call this somewhere! def call(self, inputs, **kwargs): x, h = inputs @@ -1543,7 +1540,7 @@ def call(self, inputs, **kwargs): elif self.bridge_type == "hadamard_product": return x * h elif self.bridge_type == "concatenation": - return self.dense(tf.concat(inputs, axis=-1)) + return self.dense(tf.concat([x, h], axis=-1)) elif self.bridge_type == "attention_pooling": a_x = self.dense_x(x) a_h = self.dense_h(h) @@ -1553,12 +1550,10 @@ def compute_output_shape(self, input_shape): return (None, self.dnn_dim) def get_config(self): - base_config = super(BridgeLayer, self).get_config().copy() + base_config = super(BridgeModule, self).get_config().copy() config = { 'bridge_type': self.bridge_type, - 'l2_reg': self.l2_reg, - 'activation': self.activation, - 'seed': self.seed + 'activation': self.activation } config.update(base_config) return config diff --git a/deepctr/layers/sequence.py b/deepctr/layers/sequence.py index 93866640..6b8b93b6 100644 --- a/deepctr/layers/sequence.py +++ b/deepctr/layers/sequence.py @@ -11,10 +11,9 @@ from tensorflow.python.keras import backend as K try: - from tensorflow.python.ops.init_ops import TruncatedNormal, glorot_uniform_initializer as glorot_uniform, \ - identity_initializer as identity + from tensorflow.python.ops.init_ops import TruncatedNormal, Constant, glorot_uniform_initializer as glorot_uniform except ImportError: - from tensorflow.python.ops.init_ops_v2 import TruncatedNormal, glorot_uniform, identity + from tensorflow.python.ops.init_ops_v2 import TruncatedNormal, Constant, glorot_uniform from tensorflow.python.keras.layers import LSTM, Lambda, Layer, Dropout @@ -387,7 +386,7 @@ def call(self, inputs, mask=None, **kwargs): elif self.merge_mode == "bw": output = output_bw elif self.merge_mode == 'concat': - output = K.concatenate([output_fw, output_bw]) + output = tf.concat([output_fw, output_bw], axis=-1) elif self.merge_mode == 'sum': output = output_fw + output_bw elif self.merge_mode == 'ave': @@ -530,7 +529,7 @@ def call(self, inputs, mask=None, training=None, **kwargs): if self.use_positional_encoding: queries = self.query_pe(queries) - keys = self.key_pe(queries) + keys = self.key_pe(keys) Q = tf.tensordot(queries, self.W_Query, axes=(-1, 0)) # N T_q D*h @@ -665,7 +664,7 @@ def build(self, input_shape): if self.zero_pad: position_enc[0, :] = np.zeros(num_units) self.lookup_table = self.add_weight("lookup_table", (T, num_units), - initializer=identity(position_enc), + initializer=Constant(position_enc), trainable=self.pos_embedding_trainable) # Be sure to call this somewhere! @@ -867,52 +866,3 @@ def get_config(self, ): config = {'k': self.k, 'axis': self.axis} base_config = super(KMaxPooling, self).get_config() return dict(list(base_config.items()) + list(config.items())) - -# def positional_encoding(inputs, -# pos_embedding_trainable=True, -# zero_pad=False, -# scale=True, -# ): -# '''Sinusoidal Positional_Encoding. -# -# Args: -# -# - inputs: A 2d Tensor with shape of (N, T). -# - num_units: Output dimensionality -# - zero_pad: Boolean. If True, all the values of the first row (id = 0) should be constant zero -# - scale: Boolean. If True, the output will be multiplied by sqrt num_units(check details from paper) -# - scope: Optional scope for `variable_scope`. -# - reuse: Boolean, whether to reuse the weights of a previous layer by the same name. -# -# Returns: -# -# - A 'Tensor' with one more rank than inputs's, with the dimensionality should be 'num_units' -# ''' -# -# _, T, num_units = inputs.get_shape().as_list() -# # with tf.variable_scope(scope, reuse=reuse): -# position_ind = tf.expand_dims(tf.range(T), 0) -# # First part of the PE function: sin and cos argument -# position_enc = np.array([ -# [pos / np.power(10000, 2. * i / num_units) -# for i in range(num_units)] -# for pos in range(T)]) -# -# # Second part, apply the cosine to even columns and sin to odds. -# position_enc[:, 0::2] = np.sin(position_enc[:, 0::2]) # dim 2i -# position_enc[:, 1::2] = np.cos(position_enc[:, 1::2]) # dim 2i+1 -# -# # Convert to a tensor -# -# if pos_embedding_trainable: -# lookup_table = K.variable(position_enc, dtype=tf.float32) -# -# if zero_pad: -# lookup_table = tf.concat((tf.zeros(shape=[1, num_units]), -# lookup_table[1:, :]), 0) -# -# outputs = tf.nn.embedding_lookup(lookup_table, position_ind) -# -# if scale: -# outputs = outputs * num_units ** 0.5 -# return outputs + inputs diff --git a/deepctr/layers/utils.py b/deepctr/layers/utils.py index 2be8f3fe..07eec6e0 100644 --- a/deepctr/layers/utils.py +++ b/deepctr/layers/utils.py @@ -6,7 +6,8 @@ """ import tensorflow as tf -from tensorflow.python.keras.layers import Flatten, Concatenate, Layer, Add +from tensorflow.python.keras import backend as K +from tensorflow.python.keras.layers import Flatten, Layer, Add from tensorflow.python.ops.lookup_ops import TextFileInitializer try: @@ -185,13 +186,60 @@ def get_config(self, ): return dict(list(base_config.items()) + list(config.items())) +class Concat(Layer): + def __init__(self, axis, supports_masking=True, **kwargs): + super(Concat, self).__init__(**kwargs) + self.axis = axis + self.supports_masking = supports_masking + + def call(self, inputs): + return tf.concat(inputs, axis=self.axis) + + def compute_mask(self, inputs, mask=None): + if not self.supports_masking: + return None + if mask is None: + mask = [inputs_i._keras_mask if hasattr(inputs_i, "_keras_mask") else None for inputs_i in inputs] + if mask is None: + return None + if not isinstance(mask, list): + raise ValueError('`mask` should be a list.') + if not isinstance(inputs, list): + raise ValueError('`inputs` should be a list.') + if len(mask) != len(inputs): + raise ValueError('The lists `inputs` and `mask` ' + 'should have the same length.') + if all([m is None for m in mask]): + return None + # Make a list of masks while making sure + # the dimensionality of each mask + # is the same as the corresponding input. + masks = [] + for input_i, mask_i in zip(inputs, mask): + if mask_i is None: + # Input is unmasked. Append all 1s to masks, + masks.append(tf.ones_like(input_i, dtype='bool')) + elif K.ndim(mask_i) < K.ndim(input_i): + # Mask is smaller than the input, expand it + masks.append(tf.expand_dims(mask_i, axis=-1)) + else: + masks.append(mask_i) + concatenated = K.concatenate(masks, axis=self.axis) + return K.all(concatenated, axis=-1, keepdims=False) + + def get_config(self, ): + config = {'axis': self.axis, 'supports_masking': self.supports_masking} + base_config = super(Concat, self).get_config() + return dict(list(base_config.items()) + list(config.items())) + + def concat_func(inputs, axis=-1, mask=False): - if not mask: - inputs = list(map(NoMask(), inputs)) if len(inputs) == 1: - return inputs[0] - else: - return Concatenate(axis=axis)(inputs) + input = inputs[0] + if not mask: + input = NoMask()(input) + return input + return Concat(axis, supports_masking=mask)(inputs) def reduce_mean(input_tensor, @@ -271,10 +319,6 @@ def build(self, input_shape): super(_Add, self).build(input_shape) def call(self, inputs, **kwargs): - # if not isinstance(inputs, list): - # return inputs - # if len(inputs) == 1: - # return inputs[0] if len(inputs) == 0: return tf.constant([[0.0]]) diff --git a/deepctr/models/edcn.py b/deepctr/models/edcn.py index 09dfe9f2..973d6391 100644 --- a/deepctr/models/edcn.py +++ b/deepctr/models/edcn.py @@ -6,40 +6,38 @@ Reference: [1] Chen, B., Wang, Y., Liu, et al. Enhancing Explicit and Implicit Feature Interactions via Information Sharing for Parallel Deep CTR Models. CIKM, 2021, October (https://dlp-kdd.github.io/assets/pdf/DLP-KDD_2021_paper_12.pdf) """ -import tensorflow as tf -from tensorflow.python.keras.layers import Dense, Lambda, Reshape, Concatenate +from tensorflow.python.keras.layers import Dense, Reshape, Concatenate from tensorflow.python.keras.models import Model from ..feature_column import build_input_features, get_linear_logit, input_from_feature_columns -from ..layers.core import PredictionLayer, DNN, RegulationLayer -from ..layers.interaction import CrossNet, BridgeLayer +from ..layers.core import PredictionLayer, DNN, RegulationModule +from ..layers.interaction import CrossNet, BridgeModule from ..layers.utils import add_func, concat_func def EDCN(linear_feature_columns, dnn_feature_columns, - bridge_type='attention_pooling', - tau=0.1, - use_dense_features=True, cross_num=2, cross_parameterization='vector', + bridge_type='concatenation', + tau=1.0, l2_reg_linear=1e-5, l2_reg_embedding=1e-5, l2_reg_cross=1e-5, l2_reg_dnn=0, - seed=10000, + seed=1024, dnn_dropout=0, dnn_use_bn=False, dnn_activation='relu', task='binary'): """Instantiates the Enhanced Deep&Cross Network architecture. + :param linear_feature_columns: An iterable containing all the features used by linear part of the model. :param dnn_feature_columns: An iterable containing all the features used by deep part of the model. - :param bridge_type: The type of bridge interaction, one of 'pointwise_addition', 'hadamard_product', 'concatenation', 'attention_pooling' - :param tau: Positive float, the temperature coefficient to control distribution of field-wise gating unit - :param use_dense_features: Whether to use dense features, if True, dense feature will be projected to sparse embedding space :param cross_num: positive integet,cross layer number :param cross_parameterization: str, ``"vector"`` or ``"matrix"``, how to parameterize the cross network. + :param bridge_type: The type of bridge interaction, one of ``"pointwise_addition"``, ``"hadamard_product"``, ``"concatenation"`` , ``"attention_pooling"`` + :param tau: Positive float, the temperature coefficient to control distribution of field-wise gating unit :param l2_reg_linear: float. L2 regularizer strength applied to linear part :param l2_reg_embedding: float. L2 regularizer strength applied to embedding vector :param l2_reg_cross: float. L2 regularizer strength applied to cross net @@ -60,41 +58,30 @@ def EDCN(linear_feature_columns, features = build_input_features(dnn_feature_columns) inputs_list = list(features.values()) - linear_logit = get_linear_logit(features, - linear_feature_columns, - seed=seed, - prefix='linear', - l2_reg=l2_reg_linear) - - sparse_embedding_list, dense_value_list = input_from_feature_columns( - features, dnn_feature_columns, l2_reg_embedding, seed) - - # project dense value to sparse embedding space, generate a new field feature - sparse_embedding_dim = int(sparse_embedding_list[0].shape[-1]) - if use_dense_features: - dense_value_feild = concat_func(dense_value_list) - dense_value_feild = Dense(sparse_embedding_dim, dnn_activation)(dense_value_feild) - dense_value_feild = Lambda(lambda x: tf.expand_dims(x, axis=1))(dense_value_feild) - sparse_embedding_list.append(dense_value_feild) - - deep_in = concat_func(sparse_embedding_list, axis=1) - cross_in = concat_func(sparse_embedding_list, axis=1) + linear_logit = get_linear_logit(features, linear_feature_columns, seed=seed, prefix='linear', l2_reg=l2_reg_linear) + + sparse_embedding_list, _ = input_from_feature_columns( + features, dnn_feature_columns, l2_reg_embedding, seed, support_dense=False) + + emb_input = concat_func(sparse_embedding_list, axis=1) + deep_in = RegulationModule(tau)(emb_input) + cross_in = RegulationModule(tau)(emb_input) + field_size = len(sparse_embedding_list) - cross_dim = field_size * int(cross_in[0].shape[-1]) + embedding_size = int(sparse_embedding_list[0].shape[-1]) + cross_dim = field_size * embedding_size for i in range(cross_num): - deep_in = RegulationLayer(tau)(deep_in) - cross_in = RegulationLayer(tau)(cross_in) cross_out = CrossNet(1, parameterization=cross_parameterization, - l2_reg=l2_reg_cross)(deep_in) + l2_reg=l2_reg_cross)(cross_in) deep_out = DNN([cross_dim], dnn_activation, l2_reg_dnn, - dnn_dropout, dnn_use_bn, seed=seed)(cross_in) - - bridge_out = BridgeLayer(bridge_type)([cross_out, deep_out]) - bridge_out_list = Reshape([field_size, sparse_embedding_dim])(bridge_out) - - deep_in = bridge_out_list - cross_in = bridge_out_list + dnn_dropout, dnn_use_bn, seed=seed)(deep_in) + print(cross_out, deep_out) + bridge_out = BridgeModule(bridge_type)([cross_out, deep_out]) + if i + 1 < cross_num: + bridge_out_list = Reshape([field_size, embedding_size])(bridge_out) + deep_in = RegulationModule(tau)(bridge_out_list) + cross_in = RegulationModule(tau)(bridge_out_list) stack_out = Concatenate()([cross_out, deep_out, bridge_out]) final_logit = Dense(1, use_bias=False)(stack_out) @@ -102,6 +89,6 @@ def EDCN(linear_feature_columns, final_logit = add_func([final_logit, linear_logit]) output = PredictionLayer(task)(final_logit) - model = Model(inputs=inputs_list, outputs=final_logit) + model = Model(inputs=inputs_list, outputs=output) return model diff --git a/deepctr/models/sequence/din.py b/deepctr/models/sequence/din.py index 14877a7a..84b7b432 100644 --- a/deepctr/models/sequence/din.py +++ b/deepctr/models/sequence/din.py @@ -6,15 +6,15 @@ Reference: [1] Zhou G, Zhu X, Song C, et al. Deep interest network for click-through rate prediction[C]//Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. ACM, 2018: 1059-1068. (https://arxiv.org/pdf/1706.06978.pdf) """ +from tensorflow.python.keras.layers import Dense, Flatten from tensorflow.python.keras.models import Model -from tensorflow.python.keras.layers import Dense, Concatenate, Flatten from ...feature_column import SparseFeat, VarLenSparseFeat, DenseFeat, build_input_features from ...inputs import create_embedding_matrix, embedding_lookup, get_dense_input, varlen_embedding_lookup, \ get_varlen_pooling_list from ...layers.core import DNN, PredictionLayer from ...layers.sequence import AttentionSequencePoolingLayer -from ...layers.utils import concat_func, NoMask, combined_dnn_input +from ...layers.utils import concat_func, combined_dnn_input def DIN(dnn_feature_columns, history_feature_list, dnn_use_bn=False, @@ -84,7 +84,7 @@ def DIN(dnn_feature_columns, history_feature_list, dnn_use_bn=False, weight_normalization=att_weight_normalization, supports_masking=True)([ query_emb, keys_emb]) - deep_input_emb = Concatenate()([NoMask()(deep_input_emb), hist]) + deep_input_emb = concat_func([deep_input_emb, hist]) deep_input_emb = Flatten()(deep_input_emb) dnn_input = combined_dnn_input([deep_input_emb], dense_value_list) output = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seed=seed)(dnn_input) diff --git a/deepctr/models/sequence/dsin.py b/deepctr/models/sequence/dsin.py index c7c2ea1a..f02f89cb 100644 --- a/deepctr/models/sequence/dsin.py +++ b/deepctr/models/sequence/dsin.py @@ -24,7 +24,7 @@ def DSIN(dnn_feature_columns, sess_feature_list, sess_max_count=5, bias_encoding=False, - att_embedding_size=1, att_head_num=8, dnn_hidden_units=(256, 128, 64), dnn_activation='sigmoid', dnn_dropout=0, + att_embedding_size=1, att_head_num=8, dnn_hidden_units=(256, 128, 64), dnn_activation='relu', dnn_dropout=0, dnn_use_bn=False, l2_reg_dnn=0, l2_reg_embedding=1e-6, seed=1024, task='binary', ): """Instantiates the Deep Session Interest Network architecture. diff --git a/docs/pics/EDCN.png b/docs/pics/EDCN.png new file mode 100644 index 0000000000000000000000000000000000000000..fea8cd5e24ce30bf08562197954b039b7a697048 GIT binary patch literal 184140 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

Ke->HUOV6K^A5L#KtUYb8nOC;T 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 Qzfi&YfAPLx{ju;r0KfI@_5c6? literal 0 HcmV?d00001 diff --git a/docs/source/FAQ.md b/docs/source/FAQ.md index 41cbc3b6..5e7dfdf6 100644 --- a/docs/source/FAQ.md +++ b/docs/source/FAQ.md @@ -128,7 +128,7 @@ from deepctr.models import DeepFM from deepctr.feature_column import SparseFeat,get_feature_names pretrained_item_weights = np.random.randn(60,4) -pretrained_weights_initializer = tf.initializers.identity(pretrained_item_weights) +pretrained_weights_initializer = tf.initializers.constant(pretrained_item_weights) feature_columns = [SparseFeat('user_id',120,),SparseFeat('item_id',60,embedding_dim=4,embeddings_initializer=pretrained_weights_initializer,trainable=False)] fixlen_feature_names = get_feature_names(feature_columns) diff --git a/docs/source/Features.md b/docs/source/Features.md index c9a9a550..6acee071 100644 --- a/docs/source/Features.md +++ b/docs/source/Features.md @@ -304,6 +304,17 @@ feature. FEFM has significantly lower model complexity than FFM and roughly the [Pande H. Field-Embedded Factorization Machines for Click-through rate prediction[J]. arXiv preprint arXiv:2009.09931, 2020.](https://arxiv.org/pdf/2009.09931) +### EDCN(Enhancing Explicit and Implicit Feature Interactions DCN) + +EDCN introduces two advanced modules, namelybridge moduleandregulation module, which work collaboratively tocapture the layer-wise interactive signals and learn discriminativefeature distributions for each hidden layer of the parallel networks. + +[**EDCN Model API**](./deepctr.models.edcn.html) + +![EDCN](../pics/EDCN.png) + +[Chen B, Wang Y, Liu Z, et al. Enhancing explicit and implicit feature interactions via information sharing for parallel deep ctr models[C]//Proceedings of the 30th ACM International Conference on Information & Knowledge Management. 2021: 3757-3766.](https://dlp-kdd.github.io/assets/pdf/DLP-KDD_2021_paper_12.pdf) + + ## Sequence Models ### DIN (Deep Interest Network) @@ -413,6 +424,8 @@ information routing across tasks in a general setup. [Tang H, Liu J, Zhao M, et al. Progressive layered extraction (ple): A novel multi-task learning (mtl) model for personalized recommendations[C]//Fourteenth ACM Conference on Recommender Systems. 2020.](https://dl.acm.org/doi/10.1145/3383313.3412236) + + ## Layers The models of deepctr are modular, so you can use different modules to build your own models. diff --git a/docs/source/History.md b/docs/source/History.md index 2e19942a..f7183db3 100644 --- a/docs/source/History.md +++ b/docs/source/History.md @@ -1,4 +1,5 @@ # History +- 11/09/2022 : [v0.9.3](https://github.com/shenweichen/DeepCTR/releases/tag/v0.9.3) released.Add [EDCN](./Features.html#edcn-enhancing-explicit-and-implicit-feature-interactions-dcn). - 10/15/2022 : [v0.9.2](https://github.com/shenweichen/DeepCTR/releases/tag/v0.9.2) released.Support python `3.9`,`3.10`. - 06/11/2022 : [v0.9.1](https://github.com/shenweichen/DeepCTR/releases/tag/v0.9.1) released.Improve compatibility with tensorflow `2.x`. - 09/03/2021 : [v0.9.0](https://github.com/shenweichen/DeepCTR/releases/tag/v0.9.0) released.Add multitask learning models:[SharedBottom](./Features.html#sharedbottom),[ESMM](./Features.html#esmm-entire-space-multi-task-model),[MMOE](./Features.html#mmoe-multi-gate-mixture-of-experts) and [PLE](./Features.html#ple-progressive-layered-extraction). [running example](./Examples.html#multitask-learning-mmoe) @@ -10,8 +11,8 @@ - 10/11/2020 : [v0.8.2](https://github.com/shenweichen/DeepCTR/releases/tag/v0.8.2) released.Refactor `DNN` Layer. - 09/12/2020 : [v0.8.1](https://github.com/shenweichen/DeepCTR/releases/tag/v0.8.1) released.Improve the reproducibility & fix some bugs. - 06/27/2020 : [v0.8.0](https://github.com/shenweichen/DeepCTR/releases/tag/v0.8.0) released. - - Support `Tensorflow Estimator` for large scale data and distributed training. [example: Estimator with TFRecord](https://deepctr-doc.readthedocs.io/en/latest/Examples.html#estimator-with-tfrecord-classification-criteo) - - Support different initializers for different embedding weights and loading pretrained embeddings. [example](https://deepctr-doc.readthedocs.io/en/latest/FAQ.html#how-to-use-pretrained-weights-to-initialize-embedding-weights-and-frozen-embedding-weights) + - Support `Tensorflow Estimator` for large scale data and distributed training. [example: Estimator with TFRecord](./Examples.html#estimator-with-tfrecord-classification-criteo) + - Support different initializers for different embedding weights and loading pretrained embeddings. [example](./FAQ.html#how-to-use-pretrained-weights-to-initialize-embedding-weights-and-frozen-embedding-weights) - Add new model `FwFM`. - 05/17/2020 : [v0.7.5](https://github.com/shenweichen/DeepCTR/releases/tag/v0.7.5) released.Fix numerical instability in `LayerNormalization`. - 03/15/2020 : [v0.7.4](https://github.com/shenweichen/DeepCTR/releases/tag/v0.7.4) released.Add [FLEN](./Features.html#flen-field-leveraged-embedding-network) and `FieldWiseBiInteraction`. diff --git a/docs/source/Models.rst b/docs/source/Models.rst index a3f5691e..4f864184 100644 --- a/docs/source/Models.rst +++ b/docs/source/Models.rst @@ -30,5 +30,6 @@ DeepCTR Models API ESMM MMOE PLE + EDCN \ No newline at end of file diff --git a/docs/source/conf.py b/docs/source/conf.py index d0f0df24..e0ae9c06 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -26,7 +26,7 @@ # The short X.Y version version = '' # The full version, including alpha/beta/rc tags -release = '0.9.2' +release = '0.9.3' # -- General configuration --------------------------------------------------- diff --git a/docs/source/deepctr.models.edcn.rst b/docs/source/deepctr.models.edcn.rst new file mode 100644 index 00000000..3772f3b5 --- /dev/null +++ b/docs/source/deepctr.models.edcn.rst @@ -0,0 +1,7 @@ +deepctr.models.edcn module +========================= + +.. automodule:: deepctr.models.edcn + :members: + :no-undoc-members: + :no-show-inheritance: diff --git a/docs/source/deepctr.models.rst b/docs/source/deepctr.models.rst index 2b4e9e18..4acf2a12 100644 --- a/docs/source/deepctr.models.rst +++ b/docs/source/deepctr.models.rst @@ -11,6 +11,7 @@ Submodules deepctr.models.ccpm deepctr.models.dcn deepctr.models.dcnmix + deepctr.models.edcn deepctr.models.deepfm deepctr.models.dien deepctr.models.din diff --git a/docs/source/index.rst b/docs/source/index.rst index 0330a10d..64a809e1 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -42,11 +42,11 @@ You can read the latest code and related projects News ----- -10/15/2022 : Support python `3.9`,`3.10`. `Changelog `_ +11/09/2022 : Add `EDCN` . `Changelog `_ -06/11/2022 : Improve compatibility with tensorflow `2.x`. `Changelog `_ +10/15/2022 : Support python `3.9` , `3.10` . `Changelog `_ -09/03/2021 : Add multitask learning models: `SharedBottom <./Features.html#sharedbottom>`_ , `ESMM <./Features.html#esmm-entire-space-multi-task-model>`_ , `MMOE <./Features.html#mmoe-multi-gate-mixture-of-experts>`_ , `PLE <./Features.html#ple-progressive-layered-extraction>`_ . `running example <./Examples.html#multitask-learning-mmoe>`_ `Changelog `_ +06/11/2022 : Improve compatibility with tensorflow `2.x`. `Changelog `_ DisscussionGroup ----------------------- diff --git a/setup.py b/setup.py index 43eee556..9c01cef1 100644 --- a/setup.py +++ b/setup.py @@ -1,21 +1,22 @@ +import sys + import setuptools -with open("README.md", "r",encoding='utf-8') as fh: +with open("README.md", "r") as fh: long_description = fh.read() -import sys if sys.version_info < (3, 9): REQUIRED_PACKAGES = [ - 'h5py==2.10.0', 'requests' + 'h5py==2.10.0', 'requests' ] else: REQUIRED_PACKAGES = [ - 'h5py==3.7.0', 'requests' + 'h5py==3.7.0', 'requests' ] setuptools.setup( name="deepctr", - version="0.9.2", + version="0.9.3", author="Weichen Shen", author_email="weichenswc@163.com", description="Easy-to-use,Modular and Extendible package of deep learning based CTR(Click Through Rate) prediction models with tensorflow 1.x and 2.x .", diff --git a/tests/models/EDCN_test.py b/tests/models/EDCN_test.py index dc9c5014..f01f7fe0 100644 --- a/tests/models/EDCN_test.py +++ b/tests/models/EDCN_test.py @@ -1,29 +1,26 @@ import pytest -import tensorflow as tf from deepctr.models import EDCN -from ..utils import check_model, get_test_data, SAMPLE_SIZE, get_test_data_estimator, check_estimator, \ - TEST_Estimator +from ..utils import check_model, get_test_data, SAMPLE_SIZE @pytest.mark.parametrize( - 'bridge_type, tau, use_dense_features, cross_num, cross_parameterization, sparse_feature_num', + 'bridge_type, cross_num, cross_parameterization, sparse_feature_num', [ - ('pointwise_addition', 1, True, 2, 'vector', 3), - ('hadamard_product', 1, False, 2, 'vector', 4), - ('concatenation', 1, True, 3, 'vector', 5), - ('attention_pooling', 1, True, 2, 'matrix', 6), + ('pointwise_addition', 2, 'vector', 3), + ('hadamard_product', 2, 'vector', 4), + ('concatenation', 1, 'vector', 5), + ('attention_pooling', 2, 'matrix', 6), ] ) -def test_EDCN(bridge_type, tau, use_dense_features, cross_num, cross_parameterization, sparse_feature_num): +def test_EDCN(bridge_type, cross_num, cross_parameterization, sparse_feature_num): model_name = "EDCN" sample_size = SAMPLE_SIZE x, y, feature_columns = get_test_data(sample_size, sparse_feature_num=sparse_feature_num, - dense_feature_num=sparse_feature_num) + dense_feature_num=0) - model = EDCN(feature_columns, feature_columns, - bridge_type, tau, use_dense_features, cross_num, cross_parameterization) + model = EDCN(feature_columns, feature_columns, cross_num, cross_parameterization, bridge_type) check_model(model, model_name, x, y) diff --git a/tests/models/xDeepFM_test.py b/tests/models/xDeepFM_test.py index 3981e229..db8619a5 100644 --- a/tests/models/xDeepFM_test.py +++ b/tests/models/xDeepFM_test.py @@ -1,7 +1,8 @@ import pytest +import tensorflow as tf from deepctr.models import xDeepFM -from ..utils import check_model, get_test_data, SAMPLE_SIZE, get_test_data_estimator, check_estimator, TEST_Estimator +from ..utils import check_model, get_test_data, SAMPLE_SIZE, get_test_data_estimator, check_estimator @pytest.mark.parametrize( @@ -14,6 +15,8 @@ ) def test_xDeepFM(dnn_hidden_units, cin_layer_size, cin_split_half, cin_activation, sparse_feature_num, dense_feature_dim): + if tf.__version__ == "1.15.0" or tf.__version__ == "1.4.0": # slow in tf 1.15 + return model_name = "xDeepFM" sample_size = SAMPLE_SIZE @@ -43,9 +46,6 @@ def test_xDeepFM(dnn_hidden_units, cin_layer_size, cin_split_half, cin_activatio ) def test_xDeepFMEstimator(dnn_hidden_units, cin_layer_size, cin_split_half, cin_activation, sparse_feature_num, dense_feature_dim): - import tensorflow as tf - if not TEST_Estimator or tf.__version__ == "1.4.0": - return from deepctr.estimator import xDeepFMEstimator sample_size = SAMPLE_SIZE From e756480ff56e2e6c407de3aab02ed9f442a39eac Mon Sep 17 00:00:00 2001 From: Or Levi Date: Wed, 9 Nov 2022 17:42:59 +0200 Subject: [PATCH 3/4] fix: h5py version in python>=3.9 (#500) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: h5py version in python>=3.9 Co-authored-by: 浅梦 --- setup.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/setup.py b/setup.py index 9c01cef1..c389ea41 100644 --- a/setup.py +++ b/setup.py @@ -5,14 +5,11 @@ with open("README.md", "r") as fh: long_description = fh.read() -if sys.version_info < (3, 9): - REQUIRED_PACKAGES = [ - 'h5py==2.10.0', 'requests' - ] -else: - REQUIRED_PACKAGES = [ - 'h5py==3.7.0', 'requests' - ] +REQUIRED_PACKAGES = [ + 'requests', + 'h5py==3.7.0; python_version>="3.9"', + 'h5py==2.10.0; python_version<"3.9"' +] setuptools.setup( name="deepctr", From 67895978567846d975f8258303df3cb20624895e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=85=E6=A2=A6?= Date: Thu, 10 Nov 2022 00:32:45 +0800 Subject: [PATCH 4/4] update doc --- docs/source/History.md | 2 +- docs/source/index.rst | 2 +- tests/models/xDeepFM_test.py | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/source/History.md b/docs/source/History.md index f7183db3..8735d457 100644 --- a/docs/source/History.md +++ b/docs/source/History.md @@ -1,5 +1,5 @@ # History -- 11/09/2022 : [v0.9.3](https://github.com/shenweichen/DeepCTR/releases/tag/v0.9.3) released.Add [EDCN](./Features.html#edcn-enhancing-explicit-and-implicit-feature-interactions-dcn). +- 11/10/2022 : [v0.9.3](https://github.com/shenweichen/DeepCTR/releases/tag/v0.9.3) released.Add [EDCN](./Features.html#edcn-enhancing-explicit-and-implicit-feature-interactions-dcn). - 10/15/2022 : [v0.9.2](https://github.com/shenweichen/DeepCTR/releases/tag/v0.9.2) released.Support python `3.9`,`3.10`. - 06/11/2022 : [v0.9.1](https://github.com/shenweichen/DeepCTR/releases/tag/v0.9.1) released.Improve compatibility with tensorflow `2.x`. - 09/03/2021 : [v0.9.0](https://github.com/shenweichen/DeepCTR/releases/tag/v0.9.0) released.Add multitask learning models:[SharedBottom](./Features.html#sharedbottom),[ESMM](./Features.html#esmm-entire-space-multi-task-model),[MMOE](./Features.html#mmoe-multi-gate-mixture-of-experts) and [PLE](./Features.html#ple-progressive-layered-extraction). [running example](./Examples.html#multitask-learning-mmoe) diff --git a/docs/source/index.rst b/docs/source/index.rst index 64a809e1..93316678 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -42,7 +42,7 @@ You can read the latest code and related projects News ----- -11/09/2022 : Add `EDCN` . `Changelog `_ +11/10/2022 : Add `EDCN` . `Changelog `_ 10/15/2022 : Support python `3.9` , `3.10` . `Changelog `_ diff --git a/tests/models/xDeepFM_test.py b/tests/models/xDeepFM_test.py index db8619a5..b350ad28 100644 --- a/tests/models/xDeepFM_test.py +++ b/tests/models/xDeepFM_test.py @@ -1,8 +1,7 @@ import pytest -import tensorflow as tf from deepctr.models import xDeepFM -from ..utils import check_model, get_test_data, SAMPLE_SIZE, get_test_data_estimator, check_estimator +from ..utils import check_model, get_test_data, SAMPLE_SIZE, get_test_data_estimator, check_estimator, TEST_Estimator @pytest.mark.parametrize( @@ -15,8 +14,6 @@ ) def test_xDeepFM(dnn_hidden_units, cin_layer_size, cin_split_half, cin_activation, sparse_feature_num, dense_feature_dim): - if tf.__version__ == "1.15.0" or tf.__version__ == "1.4.0": # slow in tf 1.15 - return model_name = "xDeepFM" sample_size = SAMPLE_SIZE @@ -46,6 +43,9 @@ def test_xDeepFM(dnn_hidden_units, cin_layer_size, cin_split_half, cin_activatio ) def test_xDeepFMEstimator(dnn_hidden_units, cin_layer_size, cin_split_half, cin_activation, sparse_feature_num, dense_feature_dim): + import tensorflow as tf + if not TEST_Estimator or tf.__version__ == "1.4.0": + return from deepctr.estimator import xDeepFMEstimator sample_size = SAMPLE_SIZE @@ -61,4 +61,4 @@ def test_xDeepFMEstimator(dnn_hidden_units, cin_layer_size, cin_split_half, cin_ if __name__ == "__main__": - pass + pass \ No newline at end of file