From 9564e05ce9b33d6bf2a15779ef6a42831869c390 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=85=E6=A2=A6?= Date: Sat, 11 Jun 2022 15:07:46 +0800 Subject: [PATCH 1/7] improve compatibility improve compatibility with tensorflow 2.x --- .github/workflows/ci.yml | 31 ++++++++++---- README.md | 13 +++--- deepctr/__init__.py | 2 +- deepctr/layers/__init__.py | 4 +- deepctr/layers/activation.py | 17 ++++++-- deepctr/layers/core.py | 22 +++++++--- deepctr/layers/interaction.py | 48 ++++++++++++---------- deepctr/layers/normalization.py | 6 ++- deepctr/layers/sequence.py | 32 +++++++++------ deepctr/layers/utils.py | 49 ++++++++++++++--------- deepctr/models/afm.py | 5 +-- deepctr/models/autoint.py | 18 ++++----- deepctr/models/ccpm.py | 14 ++++--- deepctr/models/dcn.py | 16 ++++---- deepctr/models/dcnmix.py | 16 ++++---- deepctr/models/deepfefm.py | 20 ++++----- deepctr/models/deepfm.py | 8 ++-- deepctr/models/difm.py | 15 ++++--- deepctr/models/fgcnn.py | 17 ++++---- deepctr/models/fibinet.py | 11 +++-- deepctr/models/flen.py | 8 ++-- deepctr/models/fnn.py | 9 ++--- deepctr/models/fwfm.py | 8 ++-- deepctr/models/ifm.py | 8 ++-- deepctr/models/multitask/esmm.py | 11 ++--- deepctr/models/multitask/mmoe.py | 18 +++++---- deepctr/models/multitask/ple.py | 22 +++++----- deepctr/models/multitask/sharedbottom.py | 7 ++-- deepctr/models/nfm.py | 10 ++--- deepctr/models/onn.py | 18 +++++---- deepctr/models/pnn.py | 23 +++++------ deepctr/models/sequence/bst.py | 6 +-- deepctr/models/sequence/dien.py | 7 ++-- deepctr/models/sequence/din.py | 12 +++--- deepctr/models/sequence/dsin.py | 5 +-- deepctr/models/wdl.py | 8 ++-- deepctr/models/xdeepfm.py | 10 ++--- docs/pics/code2.jpg | Bin 0 -> 53499 bytes docs/pics/deepctrbot.png | Bin 228652 -> 38959 bytes docs/pics/planet_github.png | Bin 0 -> 8309 bytes docs/requirements.readthedocs.txt | 2 +- docs/source/History.md | 1 + docs/source/conf.py | 2 +- docs/source/index.rst | 10 +++-- setup.py | 3 +- tests/layers/activations_test.py | 4 +- tests/layers/core_test.py | 4 +- tests/layers/interaction_test.py | 4 +- tests/layers/normalization_test.py | 4 +- tests/layers/sequence_test.py | 11 +++-- tests/layers/utils_test.py | 4 +- tests/models/AFM_test.py | 8 ++-- tests/models/AutoInt_test.py | 6 +-- tests/models/CCPM_test.py | 7 ++-- tests/models/DCN_test.py | 9 ++--- tests/models/DIEN_test.py | 1 + tests/models/DIN_test.py | 9 ++++- tests/models/DeepFEFM_test.py | 9 +++-- tests/models/DeepFM_test.py | 8 ++-- tests/models/FLEN_test.py | 2 +- tests/models/FNN_test.py | 8 ++-- tests/models/FiBiNET_test.py | 9 ++--- tests/models/FwFM_test.py | 9 ++--- tests/models/NFM_test.py | 9 ++--- tests/models/ONN_test.py | 2 +- tests/models/PNN_test.py | 13 +++--- tests/models/WDL_test.py | 8 ++-- tests/models/xDeepFM_test.py | 10 ++--- tests/utils.py | 14 ++++++- 69 files changed, 411 insertions(+), 333 deletions(-) create mode 100644 docs/pics/code2.jpg create mode 100644 docs/pics/planet_github.png diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 878f372b..44bcc9a5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,28 +17,45 @@ jobs: timeout-minutes: 180 strategy: matrix: - python-version: [3.6,3.7] - tf-version: [1.4.0,1.15.0,2.2.0,2.5.0] + python-version: [3.6,3.7,3.8] + tf-version: [1.4.0,1.15.0,2.5.0,2.6.0,2.7.0,2.8.0,2.9.0] exclude: - python-version: 3.7 tf-version: 1.4.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.9 + tf-version: 1.4.0 + - python-version: 3.9 + tf-version: 1.15.0 + - python-version: 3.9 + tf-version: 2.2.0 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Setup python environment - uses: actions/setup-python@v2.2.2 + 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 numpy==1.19.5 + pip install -q protobuf==3.19.0 pip install -q requests pip install -e . - name: Test with pytest @@ -49,7 +66,7 @@ jobs: pip install -q python-coveralls pytest --cov=deepctr --cov-report=xml - name: Upload coverage to Codecov - uses: codecov/codecov-action@v2.0.3 + uses: codecov/codecov-action@v3.1.0 with: token: ${{secrets.CODECOV_TOKEN}} file: ./coverage.xml diff --git a/README.md b/README.md index f3adc32b..70ec4e28 100644 --- a/README.md +++ b/README.md @@ -89,11 +89,12 @@ If you find this code useful in your research, please cite it using the followin ## DisscussionGroup -- [Discussions](https://github.com/shenweichen/DeepCTR/discussions) -- 公众号:**浅梦学习笔记** -- wechat ID: **deepctrbot** +- [Github Discussions](https://github.com/shenweichen/DeepCTR/discussions) +- Wechat Discussions - ![wechat](./docs/pics/code.png) +|公众号:浅梦学习笔记|微信:deepctrbot|学习小组 [加入](https://t.zsxq.com/026UJEuzv) [主题集合](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MjM5MzY4NzE3MA==&action=getalbum&album_id=1361647041096843265&scene=126#wechat_redirect)| +|:--:|:--:|:--:| +| [![公众号](./docs/pics/code.png)](https://github.com/shenweichen/AlgoNotes)| [![微信](./docs/pics/deepctrbot.png)](https://github.com/shenweichen/AlgoNotes)|[![学习小组](./docs/pics/planet_github.png)](https://t.zsxq.com/026UJEuzv)| ## Main contributors([welcome to join us!](./CONTRIBUTING.md)) @@ -119,12 +120,12 @@ If you find this code useful in your research, please cite it using the followin ​ pic
Lai Mincai -

ShanghaiTech University

​ +

ByteDance

​ ​ pic
Li Zichao -

Peking University

​ +

ByteDance

​ ​ pic
diff --git a/deepctr/__init__.py b/deepctr/__init__.py index 7a33ef1d..d42e620d 100644 --- a/deepctr/__init__.py +++ b/deepctr/__init__.py @@ -1,4 +1,4 @@ from .utils import check_version -__version__ = '0.9.0' +__version__ = '0.9.1' check_version(__version__) diff --git a/deepctr/layers/__init__.py b/deepctr/layers/__init__.py index 324f4040..1bfd40ef 100644 --- a/deepctr/layers/__init__.py +++ b/deepctr/layers/__init__.py @@ -11,7 +11,7 @@ KMaxPooling, SequencePoolingLayer, WeightedSequenceLayer, Transformer, DynamicGRU,PositionEncoding) -from .utils import NoMask, Hash, Linear, Add, combined_dnn_input, softmax, reduce_sum +from .utils import NoMask, Hash, Linear, _Add, combined_dnn_input, softmax, reduce_sum custom_objects = {'tf': tf, 'InnerProductLayer': InnerProductLayer, @@ -42,7 +42,7 @@ 'SENETLayer': SENETLayer, 'BilinearInteraction': BilinearInteraction, 'WeightedSequenceLayer': WeightedSequenceLayer, - 'Add': Add, + '_Add': _Add, 'FieldWiseBiInteraction': FieldWiseBiInteraction, 'FwFMLayer': FwFMLayer, 'softmax': softmax, diff --git a/deepctr/layers/activation.py b/deepctr/layers/activation.py index 5e55945f..1b953bff 100644 --- a/deepctr/layers/activation.py +++ b/deepctr/layers/activation.py @@ -7,8 +7,17 @@ """ import tensorflow as tf -from tensorflow.python.keras.initializers import Zeros -from tensorflow.python.keras.layers import Layer + +try: + from tensorflow.python.ops.init_ops import Zeros +except ImportError: + from tensorflow.python.ops.init_ops_v2 import Zeros +from tensorflow.python.keras.layers import Layer, Activation + +try: + from tensorflow.python.keras.layers import BatchNormalization +except ImportError: + BatchNormalization = tf.keras.layers.BatchNormalization try: unicode @@ -40,7 +49,7 @@ def __init__(self, axis=-1, epsilon=1e-9, **kwargs): super(Dice, self).__init__(**kwargs) def build(self, input_shape): - self.bn = tf.keras.layers.BatchNormalization( + self.bn = BatchNormalization( axis=self.axis, epsilon=self.epsilon, center=False, scale=False) self.alphas = self.add_weight(shape=(input_shape[-1],), initializer=Zeros( ), dtype=tf.float32, name='dice_alpha') # name='alpha_'+self.name @@ -67,7 +76,7 @@ def activation_layer(activation): if activation in ("dice", "Dice"): act_layer = Dice() elif isinstance(activation, (str, unicode)): - act_layer = tf.keras.layers.Activation(activation) + act_layer = Activation(activation) elif issubclass(activation, Layer): act_layer = activation() else: diff --git a/deepctr/layers/core.py b/deepctr/layers/core.py index 2b9188b5..668348d2 100644 --- a/deepctr/layers/core.py +++ b/deepctr/layers/core.py @@ -8,8 +8,18 @@ import tensorflow as tf from tensorflow.python.keras import backend as K -from tensorflow.python.keras.initializers import Zeros, glorot_normal -from tensorflow.python.keras.layers import Layer + +try: + from tensorflow.python.ops.init_ops_v2 import Zeros, glorot_normal +except ImportError: + from tensorflow.python.ops.init_ops import Zeros, glorot_normal_initializer as glorot_normal + +from tensorflow.python.keras.layers import Layer, Dropout + +try: + from tensorflow.python.keras.layers import BatchNormalization +except ImportError: + BatchNormalization = tf.keras.layers.BatchNormalization from tensorflow.python.keras.regularizers import l2 from .activation import activation_layer @@ -68,8 +78,8 @@ def build(self, input_shape): 'inputs of a two inputs with shape (None,1,embedding_size) and (None,T,embedding_size)' 'Got different shapes: %s,%s' % (input_shape[0], input_shape[1])) size = 4 * \ - int(input_shape[0][-1] - ) if len(self.hidden_units) == 0 else self.hidden_units[-1] + int(input_shape[0][-1] + ) if len(self.hidden_units) == 0 else self.hidden_units[-1] self.kernel = self.add_weight(shape=(size, 1), initializer=glorot_normal( seed=self.seed), @@ -164,9 +174,9 @@ def build(self, input_shape): initializer=Zeros(), trainable=True) for i in range(len(self.hidden_units))] if self.use_bn: - self.bn_layers = [tf.keras.layers.BatchNormalization() for _ in range(len(self.hidden_units))] + self.bn_layers = [BatchNormalization() for _ in range(len(self.hidden_units))] - self.dropout_layers = [tf.keras.layers.Dropout(self.dropout_rate, seed=self.seed + i) for i in + self.dropout_layers = [Dropout(self.dropout_rate, seed=self.seed + i) for i in range(len(self.hidden_units))] self.activation_layers = [activation_layer(self.activation) for _ in range(len(self.hidden_units))] diff --git a/deepctr/layers/interaction.py b/deepctr/layers/interaction.py index 3be2acb4..d26eb2c1 100644 --- a/deepctr/layers/interaction.py +++ b/deepctr/layers/interaction.py @@ -12,9 +12,15 @@ import tensorflow as tf from tensorflow.python.keras import backend as K from tensorflow.python.keras.backend import batch_dot -from tensorflow.python.keras.initializers import (Zeros, glorot_normal, - glorot_uniform, TruncatedNormal) -from tensorflow.python.keras.layers import Layer + +try: + from tensorflow.python.ops.init_ops import Zeros, Ones, Constant, TruncatedNormal, \ + glorot_normal_initializer as glorot_normal, \ + glorot_uniform_initializer as glorot_uniform +except ImportError: + from tensorflow.python.ops.init_ops_v2 import Zeros, Ones, Constant, TruncatedNormal, glorot_normal, glorot_uniform + +from tensorflow.python.keras.layers import Layer, MaxPooling2D, Conv2D, Dropout, Lambda, Dense, Flatten from tensorflow.python.keras.regularizers import l2 from tensorflow.python.layers import utils @@ -90,10 +96,10 @@ def build(self, input_shape): initializer=glorot_normal(seed=self.seed), name="projection_h") self.projection_p = self.add_weight(shape=( embedding_size, 1), initializer=glorot_normal(seed=self.seed), name="projection_p") - self.dropout = tf.keras.layers.Dropout( + self.dropout = Dropout( self.dropout_rate, seed=self.seed) - self.tensordot = tf.keras.layers.Lambda( + self.tensordot = Lambda( lambda x: tf.tensordot(x[0], x[1], axes=(-1, 0))) # Be sure to call this somewhere! @@ -244,7 +250,7 @@ def build(self, input_shape): regularizer=l2(self.l2_reg))) self.bias.append(self.add_weight(name='bias' + str(i), shape=[size], dtype=tf.float32, - initializer=tf.keras.initializers.Zeros())) + initializer=Zeros())) if self.split_half: if i != len(self.layer_size) - 1 and size % 2 > 0: @@ -485,7 +491,7 @@ def build(self, input_shape): regularizer=l2(self.l2_reg), trainable=True) for i in range(self.layer_num)] - self.gating = [tf.keras.layers.Dense(1, use_bias=False) for i in range(self.num_experts)] + self.gating = [Dense(1, use_bias=False) for i in range(self.num_experts)] self.bias = [self.add_weight(name='bias' + str(i), shape=(dim, 1), @@ -717,17 +723,17 @@ def build(self, input_shape): embedding_size = int(input_shape[-1]) self.W_Query = self.add_weight(name='query', shape=[embedding_size, self.att_embedding_size * self.head_num], dtype=tf.float32, - initializer=tf.keras.initializers.TruncatedNormal(seed=self.seed)) + initializer=TruncatedNormal(seed=self.seed)) self.W_key = self.add_weight(name='key', shape=[embedding_size, self.att_embedding_size * self.head_num], dtype=tf.float32, - initializer=tf.keras.initializers.TruncatedNormal(seed=self.seed + 1)) + initializer=TruncatedNormal(seed=self.seed + 1)) self.W_Value = self.add_weight(name='value', shape=[embedding_size, self.att_embedding_size * self.head_num], dtype=tf.float32, - initializer=tf.keras.initializers.TruncatedNormal(seed=self.seed + 2)) + initializer=TruncatedNormal(seed=self.seed + 2)) if self.use_res: self.W_Res = self.add_weight(name='res', shape=[embedding_size, self.att_embedding_size * self.head_num], dtype=tf.float32, - initializer=tf.keras.initializers.TruncatedNormal(seed=self.seed)) + initializer=TruncatedNormal(seed=self.seed)) # Be sure to call this somewhere! super(InteractingLayer, self).build(input_shape) @@ -964,15 +970,15 @@ def build(self, input_shape): pooling_shape, (width, 1)) pooling_shape = self._pooling_output_shape( conv_output_shape, (pooling_width, 1)) - self.conv_layers.append(tf.keras.layers.Conv2D(filters=filters, kernel_size=(width, 1), strides=(1, 1), - padding='same', - activation='tanh', use_bias=True, )) + self.conv_layers.append(Conv2D(filters=filters, kernel_size=(width, 1), strides=(1, 1), + padding='same', + activation='tanh', use_bias=True, )) self.pooling_layers.append( - tf.keras.layers.MaxPooling2D(pool_size=(pooling_width, 1))) - self.dense_layers.append(tf.keras.layers.Dense(pooling_shape[1] * embedding_size * new_filters, - activation='tanh', use_bias=True)) + MaxPooling2D(pool_size=(pooling_width, 1))) + self.dense_layers.append(Dense(pooling_shape[1] * embedding_size * new_filters, + activation='tanh', use_bias=True)) - self.flatten = tf.keras.layers.Flatten() + self.flatten = Flatten() super(FGCNNLayer, self).build( input_shape) # Be sure to call this somewhere! @@ -1090,7 +1096,7 @@ def build(self, input_shape): self.W_2 = self.add_weight(shape=( reduction_size, self.filed_size), initializer=glorot_normal(seed=self.seed), name="W_2") - self.tensordot = tf.keras.layers.Lambda( + self.tensordot = Lambda( lambda x: tf.tensordot(x[0], x[1], axes=(-1, 0))) # Be sure to call this somewhere! @@ -1245,14 +1251,14 @@ def build(self, input_shape): self.kernel_mf = self.add_weight( name='kernel_mf', shape=(int(self.num_fields * (self.num_fields - 1) / 2), 1), - initializer=tf.keras.initializers.Ones(), + initializer=Ones(), regularizer=None, trainable=True) self.kernel_fm = self.add_weight( name='kernel_fm', shape=(self.num_fields, 1), - initializer=tf.keras.initializers.Constant(value=0.5), + initializer=Constant(value=0.5), regularizer=None, trainable=True) if self.use_bias: diff --git a/deepctr/layers/normalization.py b/deepctr/layers/normalization.py index aa9d392c..3fceb125 100644 --- a/deepctr/layers/normalization.py +++ b/deepctr/layers/normalization.py @@ -7,9 +7,13 @@ """ from tensorflow.python.keras import backend as K -from tensorflow.python.keras.initializers import Ones, Zeros from tensorflow.python.keras.layers import Layer +try: + from tensorflow.python.ops.init_ops import Zeros, Ones +except ImportError: + from tensorflow.python.ops.init_ops_v2 import Zeros, Ones + class LayerNormalization(Layer): def __init__(self, axis=-1, eps=1e-9, center=True, diff --git a/deepctr/layers/sequence.py b/deepctr/layers/sequence.py index c9869853..45a65915 100644 --- a/deepctr/layers/sequence.py +++ b/deepctr/layers/sequence.py @@ -9,8 +9,14 @@ import numpy as np import tensorflow as tf from tensorflow.python.keras import backend as K -from tensorflow.python.keras.initializers import TruncatedNormal -from tensorflow.python.keras.layers import LSTM, Lambda, Layer + +try: + from tensorflow.python.ops.init_ops import TruncatedNormal, glorot_uniform_initializer as glorot_uniform, \ + identity_initializer as identity +except ImportError: + from tensorflow.python.ops.init_ops_v2 import TruncatedNormal, glorot_uniform, identity + +from tensorflow.python.keras.layers import LSTM, Lambda, Layer, Dropout from .core import LocalActivationUnit from .normalization import LayerNormalization @@ -472,28 +478,28 @@ def build(self, input_shape): self.seq_len_max = int(input_shape[0][-2]) self.W_Query = self.add_weight(name='query', shape=[embedding_size, self.att_embedding_size * self.head_num], dtype=tf.float32, - initializer=tf.keras.initializers.TruncatedNormal(seed=self.seed)) + initializer=TruncatedNormal(seed=self.seed)) self.W_key = self.add_weight(name='key', shape=[embedding_size, self.att_embedding_size * self.head_num], dtype=tf.float32, - initializer=tf.keras.initializers.TruncatedNormal(seed=self.seed + 1)) + initializer=TruncatedNormal(seed=self.seed + 1)) self.W_Value = self.add_weight(name='value', shape=[embedding_size, self.att_embedding_size * self.head_num], dtype=tf.float32, - initializer=tf.keras.initializers.TruncatedNormal(seed=self.seed + 2)) + initializer=TruncatedNormal(seed=self.seed + 2)) if self.attention_type == "additive": self.b = self.add_weight('b', shape=[self.att_embedding_size], dtype=tf.float32, - initializer=tf.keras.initializers.glorot_uniform(seed=self.seed)) + initializer=glorot_uniform(seed=self.seed)) self.v = self.add_weight('v', shape=[self.att_embedding_size], dtype=tf.float32, - initializer=tf.keras.initializers.glorot_uniform(seed=self.seed)) + initializer=glorot_uniform(seed=self.seed)) # if self.use_res: # self.W_Res = self.add_weight(name='res', shape=[embedding_size, self.att_embedding_size * self.head_num], dtype=tf.float32, - # initializer=tf.keras.initializers.TruncatedNormal(seed=self.seed)) + # initializer=TruncatedNormal(seed=self.seed)) if self.use_feed_forward: self.fw1 = self.add_weight('fw1', shape=[self.num_units, 4 * self.num_units], dtype=tf.float32, - initializer=tf.keras.initializers.glorot_uniform(seed=self.seed)) + initializer=glorot_uniform(seed=self.seed)) self.fw2 = self.add_weight('fw2', shape=[4 * self.num_units, self.num_units], dtype=tf.float32, - initializer=tf.keras.initializers.glorot_uniform(seed=self.seed)) + initializer=glorot_uniform(seed=self.seed)) - self.dropout = tf.keras.layers.Dropout( + self.dropout = Dropout( self.dropout_rate, seed=self.seed) self.ln = LayerNormalization() if self.use_positional_encoding: @@ -642,7 +648,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=tf.initializers.identity(position_enc), + initializer=identity(position_enc), trainable=self.pos_embedding_trainable) # Be sure to call this somewhere! @@ -748,7 +754,7 @@ def build(self, input_shape): self.gru_cell = VecAttGRUCell(self.num_units) else: try: - self.gru_cell = tf.nn.rnn_cell.GRUCell(self.num_units) # tf.keras.layers.GRUCell + self.gru_cell = tf.nn.rnn_cell.GRUCell(self.num_units) # GRUCell except AttributeError: self.gru_cell = tf.compat.v1.nn.rnn_cell.GRUCell(self.num_units) diff --git a/deepctr/layers/utils.py b/deepctr/layers/utils.py index 7d8fa0d0..2be8f3fe 100644 --- a/deepctr/layers/utils.py +++ b/deepctr/layers/utils.py @@ -6,16 +6,23 @@ """ import tensorflow as tf -from tensorflow.python.keras.layers import Flatten +from tensorflow.python.keras.layers import Flatten, Concatenate, Layer, Add from tensorflow.python.ops.lookup_ops import TextFileInitializer +try: + from tensorflow.python.ops.init_ops import Zeros, glorot_normal_initializer as glorot_normal +except ImportError: + from tensorflow.python.ops.init_ops_v2 import Zeros, glorot_normal + +from tensorflow.python.keras.regularizers import l2 + try: from tensorflow.python.ops.lookup_ops import StaticHashTable except ImportError: from tensorflow.python.ops.lookup_ops import HashTable as StaticHashTable -class NoMask(tf.keras.layers.Layer): +class NoMask(Layer): def __init__(self, **kwargs): super(NoMask, self).__init__(**kwargs) @@ -30,7 +37,7 @@ def compute_mask(self, inputs, mask): return None -class Hash(tf.keras.layers.Layer): +class Hash(Layer): """Looks up keys in a table when setup `vocabulary_path`, which outputs the corresponding values. If `vocabulary_path` is not set, `Hash` will hash the input to [0,num_buckets). When `mask_zero` = True, input value `0` or `0.0` will be set to `0`, and other value will be set in range [1,num_buckets). @@ -113,7 +120,7 @@ def get_config(self, ): return dict(list(base_config.items()) + list(config.items())) -class Linear(tf.keras.layers.Layer): +class Linear(Layer): def __init__(self, l2_reg=0.0, mode=0, use_bias=False, seed=1024, **kwargs): @@ -130,21 +137,21 @@ def build(self, input_shape): if self.use_bias: self.bias = self.add_weight(name='linear_bias', shape=(1,), - initializer=tf.keras.initializers.Zeros(), + initializer=Zeros(), trainable=True) if self.mode == 1: self.kernel = self.add_weight( 'linear_kernel', shape=[int(input_shape[-1]), 1], - initializer=tf.keras.initializers.glorot_normal(self.seed), - regularizer=tf.keras.regularizers.l2(self.l2_reg), + initializer=glorot_normal(self.seed), + regularizer=l2(self.l2_reg), trainable=True) elif self.mode == 2: self.kernel = self.add_weight( 'linear_kernel', shape=[int(input_shape[1][-1]), 1], - initializer=tf.keras.initializers.glorot_normal(self.seed), - regularizer=tf.keras.regularizers.l2(self.l2_reg), + initializer=glorot_normal(self.seed), + regularizer=l2(self.l2_reg), trainable=True) super(Linear, self).build(input_shape) # Be sure to call this somewhere! @@ -184,7 +191,7 @@ def concat_func(inputs, axis=-1, mask=False): if len(inputs) == 1: return inputs[0] else: - return tf.keras.layers.Concatenate(axis=axis)(inputs) + return Concatenate(axis=axis)(inputs) def reduce_mean(input_tensor, @@ -255,27 +262,31 @@ def softmax(logits, dim=-1, name=None): return tf.nn.softmax(logits, axis=dim, name=name) -class Add(tf.keras.layers.Layer): +class _Add(Layer): def __init__(self, **kwargs): - super(Add, self).__init__(**kwargs) + super(_Add, self).__init__(**kwargs) def build(self, input_shape): # Be sure to call this somewhere! - super(Add, self).build(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 not isinstance(inputs, list): + # return inputs + # if len(inputs) == 1: + # return inputs[0] if len(inputs) == 0: return tf.constant([[0.0]]) - return tf.keras.layers.add(inputs) + return Add()(inputs) def add_func(inputs): - return Add()(inputs) + if not isinstance(inputs, list): + return inputs + if len(inputs) == 1: + return inputs[0] + return _Add()(inputs) def combined_dnn_input(sparse_embedding_list, dense_value_list): diff --git a/deepctr/models/afm.py b/deepctr/models/afm.py index 3f5ea7d1..32ce6ac8 100644 --- a/deepctr/models/afm.py +++ b/deepctr/models/afm.py @@ -9,8 +9,7 @@ (https://arxiv.org/abs/1708.04617) """ -import tensorflow as tf - +from tensorflow.python.keras.models import Model from ..feature_column import build_input_features, get_linear_logit, DEFAULT_GROUP_NAME, input_from_feature_columns from ..layers.core import PredictionLayer from ..layers.interaction import AFMLayer, FM @@ -58,5 +57,5 @@ def AFM(linear_feature_columns, dnn_feature_columns, fm_group=DEFAULT_GROUP_NAME final_logit = add_func([linear_logit, fm_logit]) output = PredictionLayer(task)(final_logit) - model = tf.keras.models.Model(inputs=inputs_list, outputs=output) + model = Model(inputs=inputs_list, outputs=output) return model diff --git a/deepctr/models/autoint.py b/deepctr/models/autoint.py index 88a9d5ce..afe2b465 100644 --- a/deepctr/models/autoint.py +++ b/deepctr/models/autoint.py @@ -9,7 +9,8 @@ """ -import tensorflow as tf +from tensorflow.python.keras.models import Model +from tensorflow.python.keras.layers import Flatten, Concatenate, Dense from ..feature_column import build_input_features, get_linear_logit, input_from_feature_columns from ..layers.core import PredictionLayer, DNN @@ -59,28 +60,25 @@ def AutoInt(linear_feature_columns, dnn_feature_columns, att_layer_num=3, att_em for _ in range(att_layer_num): att_input = InteractingLayer( att_embedding_size, att_head_num, att_res)(att_input) - att_output = tf.keras.layers.Flatten()(att_input) + att_output = Flatten()(att_input) dnn_input = combined_dnn_input(sparse_embedding_list, dense_value_list) if len(dnn_hidden_units) > 0 and att_layer_num > 0: # Deep & Interacting Layer deep_out = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seed=seed)(dnn_input) - stack_out = tf.keras.layers.Concatenate()([att_output, deep_out]) - final_logit = tf.keras.layers.Dense( - 1, use_bias=False, kernel_initializer=tf.keras.initializers.glorot_normal(seed))(stack_out) + stack_out = Concatenate()([att_output, deep_out]) + final_logit = Dense(1, use_bias=False)(stack_out) elif len(dnn_hidden_units) > 0: # Only Deep deep_out = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seed=seed)(dnn_input, ) - final_logit = tf.keras.layers.Dense( - 1, use_bias=False, kernel_initializer=tf.keras.initializers.glorot_normal(seed))(deep_out) + final_logit = Dense(1, use_bias=False)(deep_out) elif att_layer_num > 0: # Only Interacting Layer - final_logit = tf.keras.layers.Dense( - 1, use_bias=False, kernel_initializer=tf.keras.initializers.glorot_normal(seed))(att_output) + final_logit = Dense(1, use_bias=False)(att_output) else: # Error raise NotImplementedError final_logit = add_func([final_logit, linear_logit]) output = PredictionLayer(task)(final_logit) - model = tf.keras.models.Model(inputs=inputs_list, outputs=output) + model = Model(inputs=inputs_list, outputs=output) return model diff --git a/deepctr/models/ccpm.py b/deepctr/models/ccpm.py index 8b886585..90abfd67 100644 --- a/deepctr/models/ccpm.py +++ b/deepctr/models/ccpm.py @@ -10,6 +10,8 @@ """ import tensorflow as tf +from tensorflow.python.keras.models import Model +from tensorflow.python.keras.layers import Dense, Flatten, Conv2D, Lambda from ..feature_column import build_input_features, get_linear_logit, input_from_feature_columns from ..layers.core import DNN, PredictionLayer @@ -54,7 +56,7 @@ def CCPM(linear_feature_columns, dnn_feature_columns, conv_kernel_width=(6, 5), l = len(conv_filters) conv_input = concat_func(sparse_embedding_list, axis=1) - pooling_result = tf.keras.layers.Lambda( + pooling_result = Lambda( lambda x: tf.expand_dims(x, axis=3))(conv_input) for i in range(1, l + 1): @@ -62,18 +64,18 @@ def CCPM(linear_feature_columns, dnn_feature_columns, conv_kernel_width=(6, 5), width = conv_kernel_width[i - 1] k = max(1, int((1 - pow(i / l, l - i)) * n)) if i < l else 3 - conv_result = tf.keras.layers.Conv2D(filters=filters, kernel_size=(width, 1), strides=(1, 1), padding='same', - activation='tanh', use_bias=True, )(pooling_result) + conv_result = Conv2D(filters=filters, kernel_size=(width, 1), strides=(1, 1), padding='same', + activation='tanh', use_bias=True, )(pooling_result) pooling_result = KMaxPooling( k=min(k, int(conv_result.shape[1])), axis=1)(conv_result) - flatten_result = tf.keras.layers.Flatten()(pooling_result) + flatten_result = Flatten()(pooling_result) dnn_out = DNN(dnn_hidden_units, l2_reg=l2_reg_dnn, dropout_rate=dnn_dropout)(flatten_result) - dnn_logit = tf.keras.layers.Dense(1, use_bias=False, kernel_initializer=tf.keras.initializers.glorot_normal(seed))( + dnn_logit = Dense(1, use_bias=False)( dnn_out) final_logit = add_func([dnn_logit, linear_logit]) output = PredictionLayer(task)(final_logit) - model = tf.keras.models.Model(inputs=inputs_list, outputs=output) + model = Model(inputs=inputs_list, outputs=output) return model diff --git a/deepctr/models/dcn.py b/deepctr/models/dcn.py index cc7378da..9d944972 100644 --- a/deepctr/models/dcn.py +++ b/deepctr/models/dcn.py @@ -10,7 +10,8 @@ [2] Wang R, Shivanna R, Cheng D Z, et al. DCN-M: Improved Deep & Cross Network for Feature Cross Learning in Web-scale Learning to Rank Systems[J]. 2020. (https://arxiv.org/abs/2008.13535) """ -import tensorflow as tf +from tensorflow.python.keras.models import Model +from tensorflow.python.keras.layers import Dense, Concatenate from ..feature_column import build_input_features, get_linear_logit, input_from_feature_columns from ..layers.core import PredictionLayer, DNN @@ -58,23 +59,20 @@ def DCN(linear_feature_columns, dnn_feature_columns, cross_num=2, cross_paramete if len(dnn_hidden_units) > 0 and cross_num > 0: # Deep & Cross deep_out = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seed=seed)(dnn_input) cross_out = CrossNet(cross_num, parameterization=cross_parameterization, l2_reg=l2_reg_cross)(dnn_input) - stack_out = tf.keras.layers.Concatenate()([cross_out, deep_out]) - final_logit = tf.keras.layers.Dense( - 1, use_bias=False, kernel_initializer=tf.keras.initializers.glorot_normal(seed))(stack_out) + stack_out = Concatenate()([cross_out, deep_out]) + final_logit = Dense(1, use_bias=False)(stack_out) elif len(dnn_hidden_units) > 0: # Only Deep deep_out = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seed=seed)(dnn_input) - final_logit = tf.keras.layers.Dense( - 1, use_bias=False, kernel_initializer=tf.keras.initializers.glorot_normal(seed))(deep_out) + final_logit = Dense(1, use_bias=False)(deep_out) elif cross_num > 0: # Only Cross cross_out = CrossNet(cross_num, parameterization=cross_parameterization, l2_reg=l2_reg_cross)(dnn_input) - final_logit = tf.keras.layers.Dense( - 1, use_bias=False, kernel_initializer=tf.keras.initializers.glorot_normal(seed))(cross_out) + final_logit = Dense(1, use_bias=False)(cross_out) else: # Error raise NotImplementedError final_logit = add_func([final_logit, linear_logit]) output = PredictionLayer(task)(final_logit) - model = tf.keras.models.Model(inputs=inputs_list, outputs=output) + model = Model(inputs=inputs_list, outputs=output) return model diff --git a/deepctr/models/dcnmix.py b/deepctr/models/dcnmix.py index 20ed122b..962d3b87 100644 --- a/deepctr/models/dcnmix.py +++ b/deepctr/models/dcnmix.py @@ -10,7 +10,8 @@ [2] Wang R, Shivanna R, Cheng D Z, et al. DCN V2: Improved Deep & Cross Network and Practical Lessons for Web-scale Learning to Rank Systems[J]. 2020. (https://arxiv.org/abs/2008.13535) """ -import tensorflow as tf +from tensorflow.python.keras.models import Model +from tensorflow.python.keras.layers import Dense, Concatenate from ..feature_column import build_input_features, get_linear_logit, input_from_feature_columns from ..layers.core import PredictionLayer, DNN @@ -60,24 +61,21 @@ def DCNMix(linear_feature_columns, dnn_feature_columns, cross_num=2, deep_out = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seed=seed)(dnn_input) cross_out = CrossNetMix(low_rank=low_rank, num_experts=num_experts, layer_num=cross_num, l2_reg=l2_reg_cross)(dnn_input) - stack_out = tf.keras.layers.Concatenate()([cross_out, deep_out]) - final_logit = tf.keras.layers.Dense( - 1, use_bias=False, kernel_initializer=tf.keras.initializers.glorot_normal(seed))(stack_out) + stack_out = Concatenate()([cross_out, deep_out]) + final_logit = Dense(1, use_bias=False)(stack_out) elif len(dnn_hidden_units) > 0: # Only Deep deep_out = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seed=seed)(dnn_input) - final_logit = tf.keras.layers.Dense( - 1, use_bias=False, kernel_initializer=tf.keras.initializers.glorot_normal(seed))(deep_out) + final_logit = Dense(1, use_bias=False,)(deep_out) elif cross_num > 0: # Only Cross cross_out = CrossNetMix(low_rank=low_rank, num_experts=num_experts, layer_num=cross_num, l2_reg=l2_reg_cross)(dnn_input) - final_logit = tf.keras.layers.Dense( - 1, use_bias=False, kernel_initializer=tf.keras.initializers.glorot_normal(seed))(cross_out) + final_logit = Dense(1, use_bias=False, )(cross_out) else: # Error raise NotImplementedError final_logit = add_func([final_logit, linear_logit]) output = PredictionLayer(task)(final_logit) - model = tf.keras.models.Model(inputs=inputs_list, outputs=output) + model = Model(inputs=inputs_list, outputs=output) return model diff --git a/deepctr/models/deepfefm.py b/deepctr/models/deepfefm.py index 2a3f40ac..af504f2b 100644 --- a/deepctr/models/deepfefm.py +++ b/deepctr/models/deepfefm.py @@ -13,12 +13,13 @@ from itertools import chain -import tensorflow as tf +from tensorflow.python.keras.models import Model +from tensorflow.python.keras.layers import Dense, Lambda from ..feature_column import input_from_feature_columns, get_linear_logit, build_input_features, DEFAULT_GROUP_NAME from ..layers.core import PredictionLayer, DNN from ..layers.interaction import FEFMLayer -from ..layers.utils import concat_func, combined_dnn_input, reduce_sum +from ..layers.utils import concat_func, combined_dnn_input, reduce_sum, add_func def DeepFEFM(linear_feature_columns, dnn_feature_columns, use_fefm=True, @@ -76,28 +77,27 @@ def DeepFEFM(linear_feature_columns, dnn_feature_columns, use_fefm=True, dnn_out = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seed=seed)(dnn_input) - dnn_logit = tf.keras.layers.Dense( - 1, use_bias=False, kernel_initializer=tf.keras.initializers.glorot_normal(seed))(dnn_out) + dnn_logit = Dense(1, use_bias=False, )(dnn_out) - fefm_logit = tf.keras.layers.Lambda(lambda x: reduce_sum(x, axis=1, keep_dims=True))(fefm_interaction_embedding) + fefm_logit = Lambda(lambda x: reduce_sum(x, axis=1, keep_dims=True))(fefm_interaction_embedding) if len(dnn_hidden_units) == 0 and use_fefm is False and use_linear is True: # only linear final_logit = linear_logit elif len(dnn_hidden_units) == 0 and use_fefm is True and use_linear is True: # linear + FEFM - final_logit = tf.keras.layers.add([linear_logit, fefm_logit]) + final_logit = add_func([linear_logit, fefm_logit]) elif len(dnn_hidden_units) > 0 and use_fefm is False and use_linear is True: # linear + Deep # Ablation1 - final_logit = tf.keras.layers.add([linear_logit, dnn_logit]) + final_logit = add_func([linear_logit, dnn_logit]) elif len(dnn_hidden_units) > 0 and use_fefm is True and use_linear is True: # linear + FEFM + Deep - final_logit = tf.keras.layers.add([linear_logit, fefm_logit, dnn_logit]) + final_logit = add_func([linear_logit, fefm_logit, dnn_logit]) elif len(dnn_hidden_units) == 0 and use_fefm is True and use_linear is False: # only FEFM (shallow) final_logit = fefm_logit elif len(dnn_hidden_units) > 0 and use_fefm is False and use_linear is False: # only Deep final_logit = dnn_logit elif len(dnn_hidden_units) > 0 and use_fefm is True and use_linear is False: # FEFM + Deep # Ablation2 - final_logit = tf.keras.layers.add([fefm_logit, dnn_logit]) + final_logit = add_func([fefm_logit, dnn_logit]) else: raise NotImplementedError output = PredictionLayer(task)(final_logit) - model = tf.keras.models.Model(inputs=inputs_list, outputs=output) + model = Model(inputs=inputs_list, outputs=output) return model diff --git a/deepctr/models/deepfm.py b/deepctr/models/deepfm.py index 19d11f2b..49456f4f 100644 --- a/deepctr/models/deepfm.py +++ b/deepctr/models/deepfm.py @@ -10,7 +10,8 @@ from itertools import chain -import tensorflow as tf +from tensorflow.python.keras.models import Model +from tensorflow.python.keras.layers import Dense from ..feature_column import build_input_features, get_linear_logit, DEFAULT_GROUP_NAME, input_from_feature_columns from ..layers.core import PredictionLayer, DNN @@ -55,11 +56,10 @@ def DeepFM(linear_feature_columns, dnn_feature_columns, fm_group=(DEFAULT_GROUP_ dnn_input = combined_dnn_input(list(chain.from_iterable( group_embedding_dict.values())), dense_value_list) dnn_output = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seed=seed)(dnn_input) - dnn_logit = tf.keras.layers.Dense( - 1, use_bias=False, kernel_initializer=tf.keras.initializers.glorot_normal(seed=seed))(dnn_output) + dnn_logit = Dense(1, use_bias=False)(dnn_output) final_logit = add_func([linear_logit, fm_logit, dnn_logit]) output = PredictionLayer(task)(final_logit) - model = tf.keras.models.Model(inputs=inputs_list, outputs=output) + model = Model(inputs=inputs_list, outputs=output) return model diff --git a/deepctr/models/difm.py b/deepctr/models/difm.py index fd302c3d..6f0ae671 100644 --- a/deepctr/models/difm.py +++ b/deepctr/models/difm.py @@ -6,8 +6,9 @@ [1] Lu W, Yu Y, Chang Y, et al. A Dual Input-aware Factorization Machine for CTR Prediction[C] //IJCAI. 2020: 3139-3145.(https://www.ijcai.org/Proceedings/2020/0434.pdf) """ - import tensorflow as tf +from tensorflow.python.keras.models import Model +from tensorflow.python.keras.layers import Dense, Lambda, Flatten from ..feature_column import build_input_features, get_linear_logit, input_from_feature_columns, SparseFeat, \ VarLenSparseFeat @@ -57,14 +58,12 @@ def DIFM(linear_feature_columns, dnn_feature_columns, att_input = concat_func(sparse_embedding_list, axis=1) att_out = InteractingLayer(att_embedding_size, att_head_num, att_res, scaling=True)(att_input) - att_out = tf.keras.layers.Flatten()(att_out) - m_vec = tf.keras.layers.Dense( - sparse_feat_num, use_bias=False, kernel_initializer=tf.keras.initializers.glorot_normal(seed=seed))(att_out) + att_out = Flatten()(att_out) + m_vec = Dense(sparse_feat_num, use_bias=False)(att_out) dnn_input = combined_dnn_input(sparse_embedding_list, []) dnn_output = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seed=seed)(dnn_input) - m_bit = tf.keras.layers.Dense( - sparse_feat_num, use_bias=False, kernel_initializer=tf.keras.initializers.glorot_normal(seed=seed))(dnn_output) + m_bit = Dense(sparse_feat_num, use_bias=False)(dnn_output) input_aware_factor = add_func([m_vec, m_bit]) # the complete input-aware factor m_x @@ -72,12 +71,12 @@ def DIFM(linear_feature_columns, dnn_feature_columns, l2_reg=l2_reg_linear, sparse_feat_refine_weight=input_aware_factor) fm_input = concat_func(sparse_embedding_list, axis=1) - refined_fm_input = tf.keras.layers.Lambda(lambda x: x[0] * tf.expand_dims(x[1], axis=-1))( + refined_fm_input = Lambda(lambda x: x[0] * tf.expand_dims(x[1], axis=-1))( [fm_input, input_aware_factor]) fm_logit = FM()(refined_fm_input) final_logit = add_func([linear_logit, fm_logit]) output = PredictionLayer(task)(final_logit) - model = tf.keras.models.Model(inputs=inputs_list, outputs=output) + model = Model(inputs=inputs_list, outputs=output) return model diff --git a/deepctr/models/fgcnn.py b/deepctr/models/fgcnn.py index 6a9918a5..8806a70b 100644 --- a/deepctr/models/fgcnn.py +++ b/deepctr/models/fgcnn.py @@ -10,6 +10,8 @@ """ import tensorflow as tf +from tensorflow.python.keras.models import Model +from tensorflow.python.keras.layers import Dense, Lambda, Flatten, Concatenate from ..feature_column import build_input_features, get_linear_logit, input_from_feature_columns from ..layers.core import PredictionLayer, DNN @@ -71,18 +73,17 @@ def FGCNN(linear_feature_columns, dnn_feature_columns, conv_kernel_width=(7, 7, combined_input = concat_func([origin_input, new_features], axis=1) else: combined_input = origin_input - inner_product = tf.keras.layers.Flatten()(InnerProductLayer()( - tf.keras.layers.Lambda(unstack, mask=[None] * int(combined_input.shape[1]))(combined_input))) - linear_signal = tf.keras.layers.Flatten()(combined_input) - dnn_input = tf.keras.layers.Concatenate()([linear_signal, inner_product]) - dnn_input = tf.keras.layers.Flatten()(dnn_input) + inner_product = Flatten()( + InnerProductLayer()(Lambda(unstack, mask=[None] * int(combined_input.shape[1]))(combined_input))) + linear_signal = Flatten()(combined_input) + dnn_input = Concatenate()([linear_signal, inner_product]) + dnn_input = Flatten()(dnn_input) final_logit = DNN(dnn_hidden_units, l2_reg=l2_reg_dnn, dropout_rate=dnn_dropout)(dnn_input) - final_logit = tf.keras.layers.Dense(1, use_bias=False, - kernel_initializer=tf.keras.initializers.glorot_normal(seed))(final_logit) + final_logit = Dense(1, use_bias=False)(final_logit) final_logit = add_func([final_logit, linear_logit]) output = PredictionLayer(task)(final_logit) - model = tf.keras.models.Model(inputs=inputs_list, outputs=output) + model = Model(inputs=inputs_list, outputs=output) return model diff --git a/deepctr/models/fibinet.py b/deepctr/models/fibinet.py index 21416b0e..912c1eb2 100644 --- a/deepctr/models/fibinet.py +++ b/deepctr/models/fibinet.py @@ -7,7 +7,8 @@ [1] Huang T, Zhang Z, Zhang J. FiBiNET: Combining Feature Importance and Bilinear feature Interaction for Click-Through Rate Prediction[J]. arXiv preprint arXiv:1905.09433, 2019. """ -import tensorflow as tf +from tensorflow.python.keras.models import Model +from tensorflow.python.keras.layers import Dense, Flatten from ..feature_column import build_input_features, get_linear_logit, input_from_feature_columns from ..layers.core import PredictionLayer, DNN @@ -54,14 +55,12 @@ def FiBiNET(linear_feature_columns, dnn_feature_columns, bilinear_type='interact bilinear_out = BilinearInteraction( bilinear_type=bilinear_type, seed=seed)(sparse_embedding_list) - dnn_input = combined_dnn_input( - [tf.keras.layers.Flatten()(concat_func([senet_bilinear_out, bilinear_out]))], dense_value_list) + dnn_input = combined_dnn_input([Flatten()(concat_func([senet_bilinear_out, bilinear_out]))], dense_value_list) dnn_out = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, False, seed=seed)(dnn_input) - dnn_logit = tf.keras.layers.Dense( - 1, use_bias=False, kernel_initializer=tf.keras.initializers.glorot_normal(seed))(dnn_out) + dnn_logit = Dense(1, use_bias=False)(dnn_out) final_logit = add_func([linear_logit, dnn_logit]) output = PredictionLayer(task)(final_logit) - model = tf.keras.models.Model(inputs=inputs_list, outputs=output) + model = Model(inputs=inputs_list, outputs=output) return model diff --git a/deepctr/models/flen.py b/deepctr/models/flen.py index 2684b2a2..8ea6663a 100644 --- a/deepctr/models/flen.py +++ b/deepctr/models/flen.py @@ -10,7 +10,8 @@ from itertools import chain -import tensorflow as tf +from tensorflow.python.keras.models import Model +from tensorflow.python.keras.layers import Dense from ..feature_column import build_input_features, get_linear_logit, input_from_feature_columns from ..layers.core import PredictionLayer, DNN @@ -71,11 +72,10 @@ def FLEN(linear_feature_columns, dense_value_list) dnn_output = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seed=seed)(dnn_input) - dnn_logit = tf.keras.layers.Dense(1, use_bias=False, kernel_initializer=tf.keras.initializers.glorot_normal(seed))( - concat_func([fm_mf_out, dnn_output])) + dnn_logit = Dense(1, use_bias=False)(concat_func([fm_mf_out, dnn_output])) final_logit = add_func([linear_logit, dnn_logit]) output = PredictionLayer(task)(final_logit) - model = tf.keras.models.Model(inputs=inputs_list, outputs=output) + model = Model(inputs=inputs_list, outputs=output) return model diff --git a/deepctr/models/fnn.py b/deepctr/models/fnn.py index 72014ed0..f21f5310 100644 --- a/deepctr/models/fnn.py +++ b/deepctr/models/fnn.py @@ -6,7 +6,8 @@ Reference: [1] Zhang W, Du T, Wang J. Deep learning over multi-field categorical data[C]//European conference on information retrieval. Springer, Cham, 2016: 45-57.(https://arxiv.org/pdf/1601.02376.pdf) """ -import tensorflow as tf +from tensorflow.python.keras.models import Model +from tensorflow.python.keras.layers import Dense from ..feature_column import build_input_features, get_linear_logit, input_from_feature_columns from ..layers.core import PredictionLayer, DNN @@ -43,12 +44,10 @@ def FNN(linear_feature_columns, dnn_feature_columns, dnn_hidden_units=(256, 128, dnn_input = combined_dnn_input(sparse_embedding_list, dense_value_list) deep_out = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, False, seed=seed)(dnn_input) - dnn_logit = tf.keras.layers.Dense( - 1, use_bias=False, kernel_initializer=tf.keras.initializers.glorot_normal(seed))(deep_out) + dnn_logit = Dense(1, use_bias=False)(deep_out) final_logit = add_func([dnn_logit, linear_logit]) output = PredictionLayer(task)(final_logit) - model = tf.keras.models.Model(inputs=inputs_list, - outputs=output) + model = Model(inputs=inputs_list, outputs=output) return model diff --git a/deepctr/models/fwfm.py b/deepctr/models/fwfm.py index 1c680dfa..293e9b86 100644 --- a/deepctr/models/fwfm.py +++ b/deepctr/models/fwfm.py @@ -11,7 +11,8 @@ from itertools import chain -import tensorflow as tf +from tensorflow.python.keras.models import Model +from tensorflow.python.keras.layers import Dense from ..feature_column import build_input_features, get_linear_logit, DEFAULT_GROUP_NAME, input_from_feature_columns from ..layers.core import PredictionLayer, DNN @@ -61,12 +62,11 @@ def FwFM(linear_feature_columns, dnn_feature_columns, fm_group=(DEFAULT_GROUP_NA dnn_input = combined_dnn_input(list(chain.from_iterable( group_embedding_dict.values())), dense_value_list) dnn_output = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seed=seed)(dnn_input) - dnn_logit = tf.keras.layers.Dense( - 1, use_bias=False, kernel_initializer=tf.keras.initializers.glorot_normal(seed))(dnn_output) + dnn_logit = Dense(1, use_bias=False)(dnn_output) final_logit_components.append(dnn_logit) final_logit = add_func(final_logit_components) output = PredictionLayer(task)(final_logit) - model = tf.keras.models.Model(inputs=inputs_list, outputs=output) + model = Model(inputs=inputs_list, outputs=output) return model diff --git a/deepctr/models/ifm.py b/deepctr/models/ifm.py index cbb6f504..f6af4f9f 100644 --- a/deepctr/models/ifm.py +++ b/deepctr/models/ifm.py @@ -8,7 +8,8 @@ """ import tensorflow as tf -from tensorflow.python.keras.layers import Lambda +from tensorflow.python.keras.models import Model +from tensorflow.python.keras.layers import Dense, Lambda from ..feature_column import build_input_features, get_linear_logit, input_from_feature_columns, SparseFeat, \ VarLenSparseFeat @@ -54,8 +55,7 @@ def IFM(linear_feature_columns, dnn_feature_columns, dnn_hidden_units=(256, 128, dnn_input = combined_dnn_input(sparse_embedding_list, []) dnn_output = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seed=seed)(dnn_input) # here, dnn_output is the m'_{x} - dnn_output = tf.keras.layers.Dense( - sparse_feat_num, use_bias=False, kernel_initializer=tf.keras.initializers.glorot_normal(seed=seed))(dnn_output) + dnn_output = Dense(sparse_feat_num, use_bias=False)(dnn_output) # input_aware_factor m_{x,i} input_aware_factor = Lambda(lambda x: tf.cast(tf.shape(x)[-1], tf.float32) * softmax(x, dim=1))(dnn_output) @@ -70,5 +70,5 @@ def IFM(linear_feature_columns, dnn_feature_columns, dnn_hidden_units=(256, 128, final_logit = add_func([linear_logit, fm_logit]) output = PredictionLayer(task)(final_logit) - model = tf.keras.models.Model(inputs=inputs_list, outputs=output) + model = Model(inputs=inputs_list, outputs=output) return model diff --git a/deepctr/models/multitask/esmm.py b/deepctr/models/multitask/esmm.py index 45b3a633..2cdf5c62 100644 --- a/deepctr/models/multitask/esmm.py +++ b/deepctr/models/multitask/esmm.py @@ -8,7 +8,8 @@ [1] Ma X, Zhao L, Huang G, et al. Entire space multi-task model: An effective approach for estimating post-click conversion rate[C]//The 41st International ACM SIGIR Conference on Research & Development in Information Retrieval. 2018.(https://arxiv.org/abs/1804.07931) """ -import tensorflow as tf +from tensorflow.python.keras.models import Model +from tensorflow.python.keras.layers import Dense, Multiply from ...feature_column import build_input_features, input_from_feature_columns from ...layers.core import PredictionLayer, DNN @@ -53,13 +54,13 @@ def ESMM(dnn_feature_columns, tower_dnn_hidden_units=(256, 128, 64), l2_reg_embe cvr_output = DNN(tower_dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seed=seed)( dnn_input) - ctr_logit = tf.keras.layers.Dense(1, use_bias=False, activation=None)(ctr_output) - cvr_logit = tf.keras.layers.Dense(1, use_bias=False, activation=None)(cvr_output) + ctr_logit = Dense(1, use_bias=False)(ctr_output) + cvr_logit = Dense(1, use_bias=False)(cvr_output) ctr_pred = PredictionLayer('binary', name=task_names[0])(ctr_logit) cvr_pred = PredictionLayer('binary')(cvr_logit) - ctcvr_pred = tf.keras.layers.Multiply(name=task_names[1])([ctr_pred, cvr_pred]) # CTCVR = CTR * CVR + ctcvr_pred = Multiply(name=task_names[1])([ctr_pred, cvr_pred]) # CTCVR = CTR * CVR - model = tf.keras.models.Model(inputs=inputs_list, outputs=[ctr_pred, ctcvr_pred]) + model = Model(inputs=inputs_list, outputs=[ctr_pred, ctcvr_pred]) return model diff --git a/deepctr/models/multitask/mmoe.py b/deepctr/models/multitask/mmoe.py index b00e79a0..f60d50ae 100644 --- a/deepctr/models/multitask/mmoe.py +++ b/deepctr/models/multitask/mmoe.py @@ -9,6 +9,8 @@ """ import tensorflow as tf +from tensorflow.python.keras.models import Model +from tensorflow.python.keras.layers import Dense, Lambda from ...feature_column import build_input_features, input_from_feature_columns from ...layers.core import PredictionLayer, DNN @@ -65,20 +67,20 @@ def MMOE(dnn_feature_columns, num_experts=3, expert_dnn_hidden_units=(256, 128), name='expert_' + str(i))(dnn_input) expert_outs.append(expert_network) - expert_concat = tf.keras.layers.Lambda(lambda x: tf.stack(x, axis=1))(expert_outs) # None,num_experts,dim + expert_concat = Lambda(lambda x: tf.stack(x, axis=1))(expert_outs) # None,num_experts,dim mmoe_outs = [] for i in range(num_tasks): # one mmoe layer: nums_tasks = num_gates # build gate layers gate_input = DNN(gate_dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seed=seed, name='gate_' + task_names[i])(dnn_input) - gate_out = tf.keras.layers.Dense(num_experts, use_bias=False, activation='softmax', - name='gate_softmax_' + task_names[i])(gate_input) - gate_out = tf.keras.layers.Lambda(lambda x: tf.expand_dims(x, axis=-1))(gate_out) + gate_out = Dense(num_experts, use_bias=False, activation='softmax', + name='gate_softmax_' + task_names[i])(gate_input) + gate_out = Lambda(lambda x: tf.expand_dims(x, axis=-1))(gate_out) # gate multiply the expert - gate_mul_expert = tf.keras.layers.Lambda(lambda x: reduce_sum(x[0] * x[1], axis=1, keep_dims=False), - name='gate_mul_expert_' + task_names[i])([expert_concat, gate_out]) + gate_mul_expert = Lambda(lambda x: reduce_sum(x[0] * x[1], axis=1, keep_dims=False), + name='gate_mul_expert_' + task_names[i])([expert_concat, gate_out]) mmoe_outs.append(gate_mul_expert) task_outs = [] @@ -87,9 +89,9 @@ def MMOE(dnn_feature_columns, num_experts=3, expert_dnn_hidden_units=(256, 128), tower_output = DNN(tower_dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seed=seed, name='tower_' + task_name)(mmoe_out) - logit = tf.keras.layers.Dense(1, use_bias=False, activation=None)(tower_output) + logit = Dense(1, use_bias=False)(tower_output) output = PredictionLayer(task_type, name=task_name)(logit) task_outs.append(output) - model = tf.keras.models.Model(inputs=inputs_list, outputs=task_outs) + model = Model(inputs=inputs_list, outputs=task_outs) return model diff --git a/deepctr/models/multitask/ple.py b/deepctr/models/multitask/ple.py index 90391090..63df2e13 100644 --- a/deepctr/models/multitask/ple.py +++ b/deepctr/models/multitask/ple.py @@ -9,6 +9,8 @@ """ import tensorflow as tf +from tensorflow.python.keras.models import Model +from tensorflow.python.keras.layers import Dense, Lambda from ...feature_column import build_input_features, input_from_feature_columns from ...layers.core import PredictionLayer, DNN @@ -89,19 +91,19 @@ def cgc_net(inputs, level_name, is_last=False): cur_experts = specific_expert_outputs[ i * specific_expert_num:(i + 1) * specific_expert_num] + shared_expert_outputs - expert_concat = tf.keras.layers.Lambda(lambda x: tf.stack(x, axis=1))(cur_experts) + expert_concat = Lambda(lambda x: tf.stack(x, axis=1))(cur_experts) # build gate layers gate_input = DNN(gate_dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seed=seed, name=level_name + 'gate_specific_' + task_names[i])( inputs[i]) # gate[i] for task input[i] - gate_out = tf.keras.layers.Dense(cur_expert_num, use_bias=False, activation='softmax', + gate_out = Dense(cur_expert_num, use_bias=False, activation='softmax', name=level_name + 'gate_softmax_specific_' + task_names[i])(gate_input) - gate_out = tf.keras.layers.Lambda(lambda x: tf.expand_dims(x, axis=-1))(gate_out) + gate_out = Lambda(lambda x: tf.expand_dims(x, axis=-1))(gate_out) # gate multiply the expert - gate_mul_expert = tf.keras.layers.Lambda(lambda x: reduce_sum(x[0] * x[1], axis=1, keep_dims=False), + gate_mul_expert = Lambda(lambda x: reduce_sum(x[0] * x[1], axis=1, keep_dims=False), name=level_name + 'gate_mul_expert_specific_' + task_names[i])( [expert_concat, gate_out]) cgc_outs.append(gate_mul_expert) @@ -111,19 +113,19 @@ def cgc_net(inputs, level_name, is_last=False): cur_expert_num = num_tasks * specific_expert_num + shared_expert_num cur_experts = specific_expert_outputs + shared_expert_outputs # all the expert include task-specific expert and task-shared expert - expert_concat = tf.keras.layers.Lambda(lambda x: tf.stack(x, axis=1))(cur_experts) + expert_concat = Lambda(lambda x: tf.stack(x, axis=1))(cur_experts) # build gate layers gate_input = DNN(gate_dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seed=seed, name=level_name + 'gate_shared')(inputs[-1]) # gate for shared task input - gate_out = tf.keras.layers.Dense(cur_expert_num, use_bias=False, activation='softmax', + gate_out = Dense(cur_expert_num, use_bias=False, activation='softmax', name=level_name + 'gate_softmax_shared')(gate_input) - gate_out = tf.keras.layers.Lambda(lambda x: tf.expand_dims(x, axis=-1))(gate_out) + gate_out = Lambda(lambda x: tf.expand_dims(x, axis=-1))(gate_out) # gate multiply the expert - gate_mul_expert = tf.keras.layers.Lambda(lambda x: reduce_sum(x[0] * x[1], axis=1, keep_dims=False), + gate_mul_expert = Lambda(lambda x: reduce_sum(x[0] * x[1], axis=1, keep_dims=False), name=level_name + 'gate_mul_expert_shared')( [expert_concat, gate_out]) @@ -145,9 +147,9 @@ def cgc_net(inputs, level_name, is_last=False): # build tower layer tower_output = DNN(tower_dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seed=seed, name='tower_' + task_name)(ple_out) - logit = tf.keras.layers.Dense(1, use_bias=False, activation=None)(tower_output) + logit = Dense(1, use_bias=False)(tower_output) output = PredictionLayer(task_type, name=task_name)(logit) task_outs.append(output) - model = tf.keras.models.Model(inputs=inputs_list, outputs=task_outs) + model = Model(inputs=inputs_list, outputs=task_outs) return model diff --git a/deepctr/models/multitask/sharedbottom.py b/deepctr/models/multitask/sharedbottom.py index 45aac73f..2b3077b2 100644 --- a/deepctr/models/multitask/sharedbottom.py +++ b/deepctr/models/multitask/sharedbottom.py @@ -8,7 +8,8 @@ [1] Ruder S. An overview of multi-task learning in deep neural networks[J]. arXiv preprint arXiv:1706.05098, 2017.(https://arxiv.org/pdf/1706.05098.pdf) """ -import tensorflow as tf +from tensorflow.python.keras.models import Model +from tensorflow.python.keras.layers import Dense from ...feature_column import build_input_features, input_from_feature_columns from ...layers.core import PredictionLayer, DNN @@ -59,9 +60,9 @@ def SharedBottom(dnn_feature_columns, bottom_dnn_hidden_units=(256, 128), tower_ tower_output = DNN(tower_dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seed=seed, name='tower_' + task_name)(shared_bottom_output) - logit = tf.keras.layers.Dense(1, use_bias=False, activation=None)(tower_output) + logit = Dense(1, use_bias=False)(tower_output) output = PredictionLayer(task_type, name=task_name)(logit) tasks_output.append(output) - model = tf.keras.models.Model(inputs=inputs_list, outputs=tasks_output) + model = Model(inputs=inputs_list, outputs=tasks_output) return model diff --git a/deepctr/models/nfm.py b/deepctr/models/nfm.py index d3725bed..c241feeb 100644 --- a/deepctr/models/nfm.py +++ b/deepctr/models/nfm.py @@ -6,7 +6,8 @@ Reference: [1] He X, Chua T S. Neural factorization machines for sparse predictive analytics[C]//Proceedings of the 40th International ACM SIGIR conference on Research and Development in Information Retrieval. ACM, 2017: 355-364. (https://arxiv.org/abs/1708.05027) """ -import tensorflow as tf +from tensorflow.python.keras.models import Model +from tensorflow.python.keras.layers import Dense, Dropout from ..feature_column import build_input_features, get_linear_logit, input_from_feature_columns from ..layers.core import PredictionLayer, DNN @@ -47,15 +48,14 @@ def NFM(linear_feature_columns, dnn_feature_columns, dnn_hidden_units=(256, 128, fm_input = concat_func(sparse_embedding_list, axis=1) bi_out = BiInteractionPooling()(fm_input) if bi_dropout: - bi_out = tf.keras.layers.Dropout(bi_dropout)(bi_out, training=None) + bi_out = Dropout(bi_dropout)(bi_out, training=None) dnn_input = combined_dnn_input([bi_out], dense_value_list) dnn_output = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, False, seed=seed)(dnn_input) - dnn_logit = tf.keras.layers.Dense( - 1, use_bias=False, kernel_initializer=tf.keras.initializers.glorot_normal(seed))(dnn_output) + dnn_logit = Dense(1, use_bias=False)(dnn_output) final_logit = add_func([linear_logit, dnn_logit]) output = PredictionLayer(task)(final_logit) - model = tf.keras.models.Model(inputs=inputs_list, outputs=output) + model = Model(inputs=inputs_list, outputs=output) return model diff --git a/deepctr/models/onn.py b/deepctr/models/onn.py index 24fbfd09..d265676d 100644 --- a/deepctr/models/onn.py +++ b/deepctr/models/onn.py @@ -11,11 +11,14 @@ import itertools -import tensorflow as tf from tensorflow.python.keras import backend as K -from tensorflow.python.keras.initializers import RandomNormal from tensorflow.python.keras.layers import (Dense, Embedding, Lambda, - multiply) + multiply, Flatten) +try: + from tensorflow.python.keras.layers import BatchNormalization +except ImportError: + import tensorflow as tf + BatchNormalization = tf.keras.layers.BatchNormalization from tensorflow.python.keras.models import Model from tensorflow.python.keras.regularizers import l2 @@ -59,8 +62,7 @@ def ONN(linear_feature_columns, dnn_feature_columns, dnn_hidden_units=(256, 128, filter(lambda x: isinstance(x, VarLenSparseFeat), dnn_feature_columns)) if dnn_feature_columns else [] sparse_embedding = {fc_j.embedding_name: {fc_i.embedding_name: Embedding(fc_j.vocabulary_size, fc_j.embedding_dim, - embeddings_initializer=RandomNormal( - mean=0.0, stddev=0.0001, seed=seed), + embeddings_initializer=fc_j.embeddings_initializer, embeddings_regularizer=l2( l2_reg_embedding), mask_zero=isinstance(fc_j, @@ -91,12 +93,12 @@ def ONN(linear_feature_columns, dnn_feature_columns, dnn_hidden_units=(256, 128, element_wise_prod, axis=-1))(element_wise_prod) embed_list.append(element_wise_prod) - ffm_out = tf.keras.layers.Flatten()(concat_func(embed_list, axis=1)) + ffm_out = Flatten()(concat_func(embed_list, axis=1)) if use_bn: - ffm_out = tf.keras.layers.BatchNormalization()(ffm_out) + ffm_out = BatchNormalization()(ffm_out) dnn_input = combined_dnn_input([ffm_out], dense_value_list) dnn_out = DNN(dnn_hidden_units, l2_reg=l2_reg_dnn, dropout_rate=dnn_dropout)(dnn_input) - dnn_logit = Dense(1, use_bias=False, kernel_initializer=tf.keras.initializers.glorot_normal(seed))(dnn_out) + dnn_logit = Dense(1, use_bias=False)(dnn_out) final_logit = add_func([dnn_logit, linear_logit]) diff --git a/deepctr/models/pnn.py b/deepctr/models/pnn.py index a9304284..6a75271c 100644 --- a/deepctr/models/pnn.py +++ b/deepctr/models/pnn.py @@ -7,7 +7,8 @@ [1] Qu Y, Cai H, Ren K, et al. Product-based neural networks for user response prediction[C]//Data Mining (ICDM), 2016 IEEE 16th International Conference on. IEEE, 2016: 1149-1154.(https://arxiv.org/pdf/1611.00144.pdf) """ -import tensorflow as tf +from tensorflow.python.keras.models import Model +from tensorflow.python.keras.layers import Dense, Reshape, Flatten from ..feature_column import build_input_features, input_from_feature_columns from ..layers.core import PredictionLayer, DNN @@ -43,33 +44,29 @@ def PNN(dnn_feature_columns, dnn_hidden_units=(256, 128, 64), l2_reg_embedding=0 sparse_embedding_list, dense_value_list = input_from_feature_columns(features, dnn_feature_columns, l2_reg_embedding, seed) - inner_product = tf.keras.layers.Flatten()( + inner_product = Flatten()( InnerProductLayer()(sparse_embedding_list)) outter_product = OutterProductLayer(kernel_type)(sparse_embedding_list) # ipnn deep input - linear_signal = tf.keras.layers.Reshape( + linear_signal = Reshape( [sum(map(lambda x: int(x.shape[-1]), sparse_embedding_list))])(concat_func(sparse_embedding_list)) if use_inner and use_outter: - deep_input = tf.keras.layers.Concatenate()( - [linear_signal, inner_product, outter_product]) + deep_input = concat_func([linear_signal, inner_product, outter_product]) elif use_inner: - deep_input = tf.keras.layers.Concatenate()( - [linear_signal, inner_product]) + deep_input = concat_func([linear_signal, inner_product]) elif use_outter: - deep_input = tf.keras.layers.Concatenate()( - [linear_signal, outter_product]) + deep_input = concat_func([linear_signal, outter_product]) else: deep_input = linear_signal dnn_input = combined_dnn_input([deep_input], dense_value_list) dnn_out = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, False, seed=seed)(dnn_input) - dnn_logit = tf.keras.layers.Dense( - 1, use_bias=False, kernel_initializer=tf.keras.initializers.glorot_normal(seed))(dnn_out) + dnn_logit = Dense(1, use_bias=False)(dnn_out) output = PredictionLayer(task)(dnn_logit) - model = tf.keras.models.Model(inputs=inputs_list, - outputs=output) + model = Model(inputs=inputs_list, + outputs=output) return model diff --git a/deepctr/models/sequence/bst.py b/deepctr/models/sequence/bst.py index 05179653..b2d82975 100644 --- a/deepctr/models/sequence/bst.py +++ b/deepctr/models/sequence/bst.py @@ -7,7 +7,7 @@ Qiwei Chen, Huan Zhao, Wei Li, Pipei Huang, and Wenwu Ou. 2019. Behavior sequence transformer for e-commerce recommendation in Alibaba. In Proceedings of the 1st International Workshop on Deep Learning Practice for High-Dimensional Sparse Data (DLP-KDD '19). Association for Computing Machinery, New York, NY, USA, Article 12, 1–4. DOI:https://doi.org/10.1145/3326937.3341261 """ -import tensorflow as tf +from tensorflow.python.keras.models import Model from tensorflow.python.keras.layers import (Dense, Flatten) from ...feature_column import SparseFeat, VarLenSparseFeat, DenseFeat, build_input_features @@ -99,9 +99,9 @@ def BST(dnn_feature_columns, history_feature_list, transformer_num=1, att_head_n dnn_input = combined_dnn_input([deep_input_emb], dense_value_list) output = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, use_bn, seed=seed)(dnn_input) - final_logit = Dense(1, use_bias=False, kernel_initializer=tf.keras.initializers.glorot_normal(seed))(output) + final_logit = Dense(1, use_bias=False)(output) output = PredictionLayer(task)(final_logit) - model = tf.keras.models.Model(inputs=inputs_list, outputs=output) + model = Model(inputs=inputs_list, outputs=output) return model diff --git a/deepctr/models/sequence/dien.py b/deepctr/models/sequence/dien.py index b0b5719f..ca208920 100644 --- a/deepctr/models/sequence/dien.py +++ b/deepctr/models/sequence/dien.py @@ -8,7 +8,8 @@ """ import tensorflow as tf -from tensorflow.python.keras.layers import (Concatenate, Dense, Permute, multiply) +from tensorflow.python.keras.models import Model +from tensorflow.python.keras.layers import (Concatenate, Dense, Permute, multiply, Flatten) from ...feature_column import SparseFeat, VarLenSparseFeat, DenseFeat, build_input_features from ...inputs import get_varlen_pooling_list, create_embedding_matrix, embedding_lookup, varlen_embedding_lookup, \ @@ -199,14 +200,14 @@ def DIEN(dnn_feature_columns, history_feature_list, deep_input_emb = Concatenate()([deep_input_emb, hist]) - deep_input_emb = tf.keras.layers.Flatten()(deep_input_emb) + 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, use_bn, seed=seed)(dnn_input) final_logit = Dense(1, use_bias=False, kernel_initializer=tf.keras.initializers.glorot_normal(seed))(output) output = PredictionLayer(task)(final_logit) - model = tf.keras.models.Model(inputs=inputs_list, outputs=output) + model = Model(inputs=inputs_list, outputs=output) if use_negsampling: model.add_loss(alpha * aux_loss_1) diff --git a/deepctr/models/sequence/din.py b/deepctr/models/sequence/din.py index e8dc0ee8..14877a7a 100644 --- a/deepctr/models/sequence/din.py +++ b/deepctr/models/sequence/din.py @@ -6,7 +6,8 @@ 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) """ -import tensorflow as tf +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, \ @@ -83,14 +84,13 @@ 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 = tf.keras.layers.Concatenate()([NoMask()(deep_input_emb), hist]) - deep_input_emb = tf.keras.layers.Flatten()(deep_input_emb) + deep_input_emb = Concatenate()([NoMask()(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) - final_logit = tf.keras.layers.Dense(1, use_bias=False, - kernel_initializer=tf.keras.initializers.glorot_normal(seed))(output) + final_logit = Dense(1, use_bias=False)(output) output = PredictionLayer(task)(final_logit) - model = tf.keras.models.Model(inputs=inputs_list, outputs=output) + model = Model(inputs=inputs_list, outputs=output) return model diff --git a/deepctr/models/sequence/dsin.py b/deepctr/models/sequence/dsin.py index 4f2cb14a..c7c2ea1a 100644 --- a/deepctr/models/sequence/dsin.py +++ b/deepctr/models/sequence/dsin.py @@ -10,10 +10,9 @@ from collections import OrderedDict -import tensorflow as tf +from tensorflow.python.keras.models import Model from tensorflow.python.keras.layers import (Concatenate, Dense, Embedding, Flatten, Input) -from tensorflow.python.keras.models import Model from tensorflow.python.keras.regularizers import l2 from ...feature_column import SparseFeat, VarLenSparseFeat, DenseFeat, build_input_features @@ -129,7 +128,7 @@ def DSIN(dnn_feature_columns, sess_feature_list, sess_max_count=5, bias_encoding dnn_input_emb = combined_dnn_input([dnn_input_emb], dense_value_list) output = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seed=seed)(dnn_input_emb) - output = Dense(1, use_bias=False, kernel_initializer=tf.keras.initializers.glorot_normal(seed))(output) + output = Dense(1, use_bias=False)(output) output = PredictionLayer(task)(output) sess_input_list = [] diff --git a/deepctr/models/wdl.py b/deepctr/models/wdl.py index c8bd79ab..5958b0c9 100644 --- a/deepctr/models/wdl.py +++ b/deepctr/models/wdl.py @@ -7,7 +7,8 @@ [1] Cheng H T, Koc L, Harmsen J, et al. Wide & deep learning for recommender systems[C]//Proceedings of the 1st Workshop on Deep Learning for Recommender Systems. ACM, 2016: 7-10.(https://arxiv.org/pdf/1606.07792.pdf) """ -import tensorflow as tf +from tensorflow.python.keras.models import Model +from tensorflow.python.keras.layers import Dense from ..feature_column import build_input_features, get_linear_logit, input_from_feature_columns from ..layers.core import PredictionLayer, DNN @@ -45,12 +46,11 @@ def WDL(linear_feature_columns, dnn_feature_columns, dnn_hidden_units=(256, 128, dnn_input = combined_dnn_input(sparse_embedding_list, dense_value_list) dnn_out = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, False, seed=seed)(dnn_input) - dnn_logit = tf.keras.layers.Dense( - 1, use_bias=False, kernel_initializer=tf.keras.initializers.glorot_normal(seed))(dnn_out) + dnn_logit = Dense(1, use_bias=False)(dnn_out) final_logit = add_func([dnn_logit, linear_logit]) output = PredictionLayer(task)(final_logit) - model = tf.keras.models.Model(inputs=inputs_list, outputs=output) + model = Model(inputs=inputs_list, outputs=output) return model diff --git a/deepctr/models/xdeepfm.py b/deepctr/models/xdeepfm.py index 461a931f..ba702de2 100644 --- a/deepctr/models/xdeepfm.py +++ b/deepctr/models/xdeepfm.py @@ -6,7 +6,8 @@ Reference: [1] Lian J, Zhou X, Zhang F, et al. xDeepFM: Combining Explicit and Implicit Feature Interactions for Recommender Systems[J]. arXiv preprint arXiv:1803.05170, 2018.(https://arxiv.org/pdf/1803.05170.pdf) """ -import tensorflow as tf +from tensorflow.python.keras.models import Model +from tensorflow.python.keras.layers import Dense from ..feature_column import build_input_features, get_linear_logit, input_from_feature_columns from ..layers.core import PredictionLayer, DNN @@ -53,18 +54,17 @@ def xDeepFM(linear_feature_columns, dnn_feature_columns, dnn_hidden_units=(256, dnn_input = combined_dnn_input(sparse_embedding_list, dense_value_list) dnn_output = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seed=seed)(dnn_input) - dnn_logit = tf.keras.layers.Dense( - 1, use_bias=False, kernel_initializer=tf.keras.initializers.glorot_normal(seed))(dnn_output) + dnn_logit = Dense(1, use_bias=False)(dnn_output) final_logit = add_func([linear_logit, dnn_logit]) if len(cin_layer_size) > 0: exFM_out = CIN(cin_layer_size, cin_activation, cin_split_half, l2_reg_cin, seed)(fm_input) - exFM_logit = tf.keras.layers.Dense(1, kernel_initializer=tf.keras.initializers.glorot_normal(seed))(exFM_out) + exFM_logit = Dense(1, use_bias=False)(exFM_out) final_logit = add_func([final_logit, exFM_logit]) output = PredictionLayer(task)(final_logit) - model = tf.keras.models.Model(inputs=inputs_list, outputs=output) + model = Model(inputs=inputs_list, outputs=output) return model diff --git a/docs/pics/code2.jpg b/docs/pics/code2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e191f2971ebdfcc60981e4b680e3331735874744 GIT binary patch literal 53499 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 DQr=M~ literal 0 HcmV?d00001 diff --git a/docs/pics/deepctrbot.png b/docs/pics/deepctrbot.png index 780e614191a6083cd92d5084d3dfedc5bdb43480..d3302d2b961f64ca20958a1ef16b225c9395922d 100644 GIT binary patch literal 38959 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 PFphh74YVunSikxo)O^9J literal 228652 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�Jnj>dRApq1+pN`H~YdrNU9M=5<_wG1hHUNcnPf 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
K(m<$P<{&Xm-o1Y&tb{ z&JDNJ`#Lehz25A3@_%!p4^m#qJCjm)FMhyA%G)zF(fou^Qdy{6 z?B6AiB>n_{y`=7%_83**a};JboBWft*vin}#uFu%r@WFua+0=^;c893^cfi9gTXFG zLlnbBrxUNt$U2@vIG5fw8)IqB^qp|J>sDu|0?+xy6*n`xL^546cMsPtlzaQ z#g%-kLn773`-=ze&4$dhhbmEAD4go-HSOi4Dy;E0GYk2l=A<{@zJz251e>WNO@1h* zQiQIk@#ebyE?sBBfiQl=`O_|T(O*tD!dOjA*pw2=#SFxOori^9FS?D9NYryWzf$1M z=L3nmy{-iu6#hKHiU7#6P*M7-MgFqrtS;3z%b&Z)(Fz^49Hc%2S~qqhf#`}}0DAHz zzC6tSErXFx;ZrXkDK5dhB_)#aOpReB*&zSAoaZlI!B^z6kcuE55w%^dX)OD4jrFWFMgHu`KVr9QM( z&oDJlYx&TZIs`#UX$7Q4m!hO}Zgh8d zd7oU@{e141&r3dRJGbLJj`QE&U%Z7;h;-#A;+%gJq5vs-mC(pRa0)cp`No4@BJV&* zVlci6*itwkHUm#nhmnK|T_#Cyb!6r88t3|_!yKz8CTnu`bf6$8)i60ey?zM3XF;FY zt8%Dn%7yz|BW=G#CUr3VZ2c-5PH=#8f;;Ux$K!ot9BpOw7kzJEa&Ne>%WD-wlHHyc zK2{_p8YLY5&Ha(-K#xi9_Q`Z=v^Aot5}z!!iI=y=jUz8cTbdU}89o^C|?pM^kU@ zk0b#-VIN;&M9SoEgoeRsM9gz>okt|@n*_heN+u0EW3+QXzwtwhUZ+Pj#UW`E zYq^9 z!C^bV(1$mh@k(LEpqCfPcNXkItcYGdHdt77_`_X;HI){3pG)o!|M|%ei1bDMiWHu3 zT(Lr&g^$<*MQ8`XTu0xW!m;lG!chAO{d~aAPdTw^sWfb=)&ejCPXXMO1Ht4OX6|AOWz(?4i;MJ7!Y% zDly|Q&G}}{RIHLPFfncw=n9eKjh>$~W zn>SbJw54>PGV;8zg*)ovy<0_+`$p@>IJA~PID$Whq6P;z6p=q%!l=w+VgO@jJ5TBO zU0D8Y!W=!UZ+QQ?UByP=6-^%_YbD zcPoqSXMdE)$l*5~N}Q>m=8d5|dW=gH8sQ@j{tow82voE|F zetFR%5_%pEN>;FL;b>#ESc=*ny?|%QAE|PI__^54u$&IrZQSY=ziI#w(Ulj~%)2>Z z-S8cCgz(g?1ilSGtaczC=~YIHd2_S;O|tr=D^OAf2;IB|^g!dGan+Bp&1->RE(N82 zZ6%X+sF`AHMB(cJ1DDX+t0V`g+&q)LvG)c`fjuG|xnjQH7|s2BGfAT_1>`U@^?p$& z#l)z{ugP2Ikg;dQ#*BuOSp#4(G==k^0^@W)j^Rf^?up(U?Jl83w^13# zc9a`>2Qi-jeS+Q}UxvHLgO1#^9}5pBW_^GI(uMS9UF_G^oFCmRv#a+xBk%NH;6Dlr z0KKKh;g)!k7PIFr=B_H$Y=%t1CF1p=Hb?**-%7h&T;*qPv5}&@5+;{U!B75H)r4dx zbR{zIQ+Qd@J04;)91hqDWQ)(9sG< znQG78(GxE3#B_9FxVWoh}y zYx5*1?@^ZGA$1jE`Ux*kJBc% zC8u3@B&WC^UmC@4S+xCdrbr?j=wE^8^|=a0JDZG(zVbWbJfRG~U9vZsf6+ETRZRB4 zelcoq8<5m7!hdwdWP$|nM6JiRMcdEGd&OybamGr2WO9sX3Vr`YaYsM}p8X#B8A7Bg zoo9e}_P-WzD{<$NMa!plp(yF}H44emy>LZ5Yv?0Kw`fPGGcsF&_E4$Qq=WfTL2c8M z&vt&f^NnqhUzdSlOOsOfcd#72F7$eqiHUn7k*g~5_uD%?#(D9lCo*2IsmlsiOe`pQ zhu?tw0ewjSOai|}=08nrdDmVMGz!{24hBwqf%_pW$(L;q96gVC#A$JWVR%Q0(D&~k z?LX}5uaz+1*-_sXKBeXr%uGk{brmwEf$%E{!i|n>ln)qj?BHyTDMD%2>piRHE%NAe zNkKmCsNB>}*9IG<#20dO5W){WU&=QC@HdGlsz|w8H5;X#ATfH>2wyy8-gkTY-ZvH{ zwF>?@w*=QBvZtp~xgaVyP$?ajjk?rqHp)u+?HBCW5q+uP4~C$1UStrdV-}?^4L4~{ zhyvAhZ&gR{1n0;?NzF2ZvKL2aX`i2eU%V?zK0VB|puTXY4Lk9n{`Elk+x3G7 zdA}ASDkwC8-c9ojEu*IhH5KNpZKrUY}P# z;?K0ro*oY6L3KYXwU1;;W~w0U%oD-R=&WqoL$Y1hgBS6{w##kEO9ql%CdUn1fofv> zPC&M7bR@dk;XY&MpMN)V|4uH7;k|5P2{cI@kmln=-H2-N30JNM(CjWvA?74%SMdaPth%He-*Lu+9Tu;xGrj)|L@yK~ z=h${sauX(>T=iyu0Im4+C}Z;y_tCqCgv1k#^rdzmKBZF_CUPveS;B|6f(1s?-Zmw6 zkk9y??9O1$*z+h(!6vY}#jme(XmL&x%3{MT4*_Q3N7iz%<9CSstyClu4bWWHF^@luDHE@ZD38m_IO-I}zfxg45j3XdwkxacV(oD|D+<~VR zUefR81XY%cgZyFRcYwq&Dcu1Fl|fKJI>{(0x0imT#F{ zOSw>i%DAHoRn~3F#8a+EIi1_Y6{JTb6K?twp(JsIQy-oa_z$qfmjaC4BQ}NGN|GZD zc46IW$Lsr}`jI%N`pgT0hj}D*6!EOxxqfVr{d4IlX)%!R zZ#>L%V6__AiS+v)MSb8kH0utT+&Ur8t_0LsUSP+Lpd#OV3NSIuDAd*aN1@+%XJZK% z#7R{iPU_-hFOAMfk(6t)$9)v>RR}2nyG3-$irP48I=o|kAFe`!PE`5Jc&~pCm~$E+ z7E*$}07Si@8qB(`GE7lcuNBgD$JAew9_VMp`>lD=Mv1s;Qv>}_Y1Q27Q@GD51OLtn z;;48(3#aGf(H*1diIE2B+KQz{*vf|S5d%|dqms#=i*AAtzjd>lyjg@8qg@juA`TP* z>bq^CPWk{C%d!iYhaY;<|J^#_TDhipka_c-WAu_n*4guJ1Hs2pc1ys-=;6k^xUD{Z z;(=P?1OrGZ4-Aha-l)_8X!+kxIl=S*GvOkX{}{eCUV1da-787+Bg`*p&9(V;M?MJqw{OK7NHy`pd2N=Rm+|)egPzmWU!f-Bvdl z!Eik=y<3;VZ)^CggBt2&rA-U!iVN2P0CZ$wXAHr3+{3-KRiy%5T-U#KrU3Bdz-zF) z?7hZ^fjysG^UR19HkIqNGZxHC)5$(2WV=#4SB(w@#+N%m0IfOC?E2r-6>(cbEZ+dj zT=2}?t;bpIQPxb_MrP*BM%wDG){*;wNLZR=hR*P-)ehP!CXAqxR%BY*TdUsJR;aEN zTs%R|(~F71%viGk?>#_mtv4;8^R{HSx!h?%vaqFg^F3J#5t8S9*&xddMNgZ|v_^>t ze1`0Pt*)O!ue#X@7LZfEQfxebun0;OTWE3F)NIHb%eelCOvFM@*gU;mNGo1RmKJUt2jHIIfy%5M= zS)--F8XYi=12H94M-%vTZvFy#l^ie6)wRVzNX;&(^bOB3V)319GYln1?#x3`dR!IU zCqjt9Hq(o-C)ZePABJAL(~AAsrKbxo4aY-9J$PkB`sR-p4%U!s0t-xykY}TUi9muW zWwp1rS8C+xD@>!TF#{6AeH=#iR6g)1qO9ZZmTOSmPT-N9ce3VMR{rL_hfKM1 zT_F*0LpcadvJA*CW9fa%I#Jo64&#y;s{2>-ydnYOM{bKi)5!!TGn|YGoko4(b(Sg) z>QOXJls#P|>v2N2$TP~raV|9+>CZKADzkSMdkf5M7z|iAbCYAL)q5NLo3JQWn4kaE z#oX7w8jP2o!~^Lc?mIa<>oJ$oU{W<)<(~I4r30g~Xrxc;sotP6@3aHu?MuS2*(i{czOIIwiQjXk*TrYe$ne zGb2l&@lP`z>0vPXgNmoY{yF1_Lc6l@&!h@kN|++cv$l9aJ5+sp7C!$I=qX`jIjovD zC%VJnt7oK*=RJj0grW5J(4={V;N4~48klqN;EH;Wiku#NPxdIRg&O$gfjib;P|)ew z_s0Yq!tVGo3%0|M&x1O4sv3{i;i!!_H!E+X_Th|;ilPklkkJWVF{l@CK*EN70_S5)ty*vS( zw0oN(fsu3ld2qDrKU%1+8J_?4FGu1UCR~qP$Dd*c-gdK8dxu^)&1|~N*KDMPL=zu}#F;~G|7y`85X2(D%-Cnu&Hnx)WRyE{MrVAkoLZ~JXYm^pD6U^Q!VMML5Ub+KYuDno0`UzKb88?T<-kYECf)oCDY{L@z$(BLkiAH zGr<3W#sE14nZRsm(91Fh!FMDn?mkaD<#S^(ROr;>8h>AQbl|N#!vWVlJQIZc3oZg= zxtrPfgEP;~9NW`mq@A>TyUYOM(!t(Orl0j!Z)W!duBFS6Y0h86f97C_vw0KallbE7 zK&Zri*yGYb<81yqcnk)PN6zdppxW^D*SgG4&Bc@E{5b>p;M z!Han>aItf5RIjmc@FtJOQste1n@YZas-8?Yhh~!dl}B`&A|!;6FqcV$xzcwT~eMC1j{v#aIdcso!g#(PBltfjz{cZEHg@aszc z6f|hvNc!dHIYL1_#4wvz=riNFwzMolLD3Q*q!L{b@rg*{n+1pyL@e>$-k#wh9yVYrxoJaX;tb+9KhKdHVvskB&EfS+>lhO? z4s3iJ=&76`k$Wo`53{e6Q~eKfbfl#xm~v$HZ_p8bQ$(#fu=3hL zkL>6?O`wwy9MR;cY|TS)86`wf(qC)=p7eP8Hji^=bjmcYsr@%9#d2@9IYSl+DJ-^d z=LG5Ws7=ney?3?bRD(5wNNDRq9`uyx4V~q`x?i?{;4CgK_VA!w%ntwiOMzCnQ}RzV zN53j58P3X448i>hDLwq|UqX2~;oog9amd1i7Fbzr@|25=Gn=V~^&|3f9k=|iU11}K z_?x-q1&ZrRc!Hc?(f@AeHJbvtSxS3X`jNxmcir>*Nq#H?jjO$zL8zzKpB>3zb&t z>E8rlwfk2+224geK+VqM#afEQS^43tjy+m8X1S3?vf%52+D~Au`|>dL5Mu2;cmH6& zI=$tjGW2QaXxcFjR_o8n()aM}zGy;Y*IZ7X;Qub={UX6{3cO~Wg(^X>-9)2vmp)+! zd(OPl>a)0@pFD2S!wq2#A<;bgQoeG8AId%Z(M$$tJ{(VQsVNCjVx1>>=kw*;#)bps zN#j#RpV0_0L`D&2JQZhR;~ZOYwy)zUgvz|^%t_bzoD#4U_y{EdKx)p*M?V+mK_@~b z-tkN#gzBc(GkeH*@6b#=XU9eyaY@jh;b;Y^$+*E9rYG=eEh7q{UaRmcJR!S}9^~8u z<`z-fH0>(pji>mbCVFVoorL@VMY#9reUQQ>5jHj}knBllnU%=vkT4}ElsUo5Sv+{)e7$^7$YMojvT#hx6pWHvsBmX^l&X?;y&8YMibeP-|X1iN} zT3LZ2Rp6F6+|uB|Uz3M+!w2+PD3ZUiE3l!%>hN|HGpeCX9OB{=l$t5P#;IEAh6P$`V4M27mdD_YoINpa*oJ4{&n~5oqVnTc_>!GRft8vg{8W#ZY{YKE;gJd z#|+ece(qHdBw4p#5*@7cN=+X#6T~mwA-lyO&8~**2>hU4s$o60qK$b8!Ux!}|}o2+%1LYuSO#SU$lrL%Nd>pj}~Ohbz6M+I0<^#7!QN zr|o5fZ!B1nKYg;XmgeEr^a>6l`_s`edCJW{oL71`xQTJE_&Xcqn!t5)0r__b5zE3Q z22>ul8g8fwy0X|P@*Q4yzo8Gr12)Ahj?7~YWbLj}Bks&4F= z$IC{PU}fr$hdJg)F)=XsMwXx9x@QPRwk&0gHPr;+?>%RF>7C`VL26^*2cl`N#>WJq z?qGn!qj5EI=%zx(%AR>*L{ z?d(#i_~GH9gPgn~9s7{y@n?5=y|UQ*kv25%m9U`Myrb&u+rk8Iyd+4P6@ML6G7*4u zNba@MsuQ>KP%sj7zI#Vc{?(+}r-ljUm%s6|`SACF!(2;q)%1+HPn$`J9yMo-0AZ_H zyRE$%n&etSGXrZhc-u7xafaVT*q?Y=Bo8ZQ$T@A5yECY0(~;IM`QBxhU?tF#OXeYu z5uwKk<9?!Y=+Us-vO3E57K)U6O-DKyXJb1Q?s{9_eD8J?b08oU^u5fTQ^5Q6l;d!o z`p-Tt$8WtE=D}EkoSeT4a(2p4Xj2=Omr;F;_5RU7v;yq(53q+Wy+s_Lx>`3qE2_=) z0a+iS`SlQaNjr)ni`N5t?Gsuk6wwyj2}}g=ca^a=!;eMTJl||DilX-ZPfK zO0lCjS~t4?a5L}3LYR?Nn1M&`Pku-R^mX9;W6B7^NLHEQaS=(C2D^1AXkPw#`l#h+ z`D~KD?9J>(w>2G8meAwsfLnR*C$7;3_^+q}wo2E7MwKhTNs zu}ib@ggY+&%&Kd({|8Q0f<0o-i#mOlmmyVZ%#@8+_R8um=6tqFQB5QT z8jSvufix|f+lq+i2y=Y9U4+NcDYu<4`t|{r){iv<*bzS4!0X)`FjcAd$GGIe%tY0digZ-Hgo?EdoN9QCn78?(R__OH180=)cpZ`L1`4bXALhu2OcisK`d(uwljqX<2BI&Y>cr)Y$V%_k^;pbLMoYdb9xP3kADcJ{z-p7g7;cb;d}p=%|Jjomw54GQo6>lk@EiS-Ept&`@}GaG^0mW7FHh zmJ7E6{9xPi%xY&=8=s&tt}&Wy)E2pu8C>2_7c@rIAC|XO!ep8Kk1%-rfejsDgk6Jda*Q;=0+O<0bUdBZmm*X%gQun?aYQYWi8=G zZW8&p*29w1w1?SA#UX)uz9f`Gkn;atzga+HfX}Al0Viduw51cAGfJg;Y;)pI7{_) zjzuTH^`f!|-or%HU^tPdmhs4d3l23Hqz18w7rCC5dENa$|DgcrZci8jtFX3+${81~ z6A1*q@jF}D|9ekfYov{Ha8V{}3Gcc(@E@KT;0mHdGz2XV=NKLXmd?!uqqhZoGa7{~ z+(;YX*HZ5EvQpd}cGu{@#!xp{`Z5ZJ#^?NMu#jPMLQ4Iw?}Fzw|39mAEKXsBIl&+E z43sA@vNkl95dY7+FOs-(o2f+cLLufwzYwH+ATL7MEC!gGD*SoB<}!sSi1Y;0?57iZ z)J)n-gN#@>qFe@Kh%oNQE2GU+6VGdyK%P?Z``E9jdOD)w3$;I6^-gEds8_68>56~bx z!|ttpYq_)^$b2uG=iu-yUf^f;I@25jGW=2jt9dXdwq@UT-Rlsu@wu7I~}@xnp?2ec$y6Ww)(8UEV|WgMi{{-3tAXGd)3sK>a&Oa z8Yp{$|8dFQM$oJ$m7(&#ZMDeXMi);8#Wt&XUJCFS>%4~@6A`K)hjOlI8S!wZ+S;&# zoteJ@CSI||~aWYxeK$xk;I{y+|fhpX{K&7AE zAO5FLP-f!Fb5lizTjz^SZ|{V>Urm}glK3JgKtkelto_370gb;l%*82P4C)Fn6w$6Z z45Q?QbOfW317ioJfuYq+7;Vg`Oj###kNh~bd`X~M`&!|MtqcIw&I;3>+Z|=zlNt`- z)V_?8{v^7gb8&%9MI-(g%1$&$2lw^~sq62n+hKIZ(q@osV`jW_4mchj!xL>;!}x?1bMM zu&jn(7dZ9`UP3|Z@Y)-2?qeC-Ku7XxVelKu+#F_ujE-GouS0nX++WluB5qy+GfIeE z+;T1gq;J(?P?oCsZ<68Un$l5WgxXoSu>eCeLY??%!`%6;iuCA6Br*Gw02i&-H{o4G0LZ zo*Kd#hKZM}{KNl!=cH@uE6Eq=W(nLmG6+;()5~KLzu+fc`!Ca^y(?qnEPEdM?zRQv z>@*uLb;i{i|F~8$yKy|jPN;<)3j%k?IxyQWNV?@9 z#(5HT#w_8BGiHiX*Tok;{ORQPu^Shvc41?`8}~*Xj?cT-bRB$s>1t~cCTl4#<8xee z!k#=~oK?q4b_u(_OHiPic3Jn#X`BH|H%cWCns)J+kFR=XYqJERC)Tp3E2ot%qRz&~ z)}ps}OI^c&&bs~E-;Z*Pn)TXB6917ezmJHGQV78_Vd?lyb+dAsL8+F3o8NjYF3@Ca zTH_p;&3vx^yW&l!gMXthg?!`ST$R<|%8eneV_qNC3w0Kj@0jz)i^aNDSswF@H!*sh z>OtibZb((XF~^_s^L~rA-UT`tc1nN5_>EcTX;??sMQ_T7lf;NL_JFX~_tEaWp}zjB z+TdE8Gj3a3+YI9lXi`o;(jOs9@`q1!UCh|kp)uqG1ca}OHyPfvDV9_2=7S9+1G-zt z_LC`I6PO%2k$?G2=JA-eMc{~40w1KfZ~ku(Gg7vm@2QC@it$) z`%_2|%)9d}T=Rn{Y0r1mGSeIlaw1jp$m#jBXIA)@NEOdi>fkbhy1`34MNcFTw5Zd} z^v|jUGXXu#khH{~wm^OY+0GNGQRlf9|BT+17Ia^j=V#wv6OsbAr_TSz|NMHku6t~x z#96q`+c|wOe>aAHLR@XhIvDZT>1yeyf%p65&GnkxUNxd8h{-ij5Nyfap)*zRC7I=B zjQE{9fla*`Jij43AZCr0wy;5XNRfdeZmgY2%45=oUd*i*{3!puZJzsBVnF?aNA?*bn+ZZeZ~jQ6xpP- z@rF+VNX&A6x_n{pEp=#Ib2q*{VEH$c5&~WPQq33qt|nzwRQrpo=kZS}#D~z?HT#C@ zRH#pA-L&)f6Zfkv4aL;iu8{T!kBPa-iE9W=dWs^x)XiV17I9>VY<3(pUdYRw7nUq? z{PTX!+@}@rz%EGL(Yf?%B8|Mif5uX-l;%;gdUtwCBlmlYhPUJldxR95nmIR*7!dip z+iw449Mu^v?SyI2kZH>X~8B$4ChjKwS~6Vvi1 zb5>{m2bO~#`w=Z%xp|tB6ikDJF7D~ZtRO&;eK$|((x=Z+^~)0)Ng%BG*$D9^I(zl- zGBX(I$i(5dGW8%{%%cspDJUN(ng!HIwq#evmu3M2dT{BgVt55okV{5301o;2y$ngt zQB*EOV)gFX5rL%4H66{En~aeDQNA-zP5?e}9T}S|!_Da*4HN%3Ph2PZ9%Yn4c;DG~ zKO9IE&wpL#T`bWVfk3IVadv5g{3+rBww$imch5UqcA|C(Tux97rAaBOaT};B2GqCO zhhRIYyh6-6#ZH_K2-_bN+tBbP1p?CTR6rJOKH4afBe{>py_q;|gSfS92K+Zxhu|tH zMxGF9WZ=99yK|%p z!3-Vln(OvL#kjMY>`Ui1_Su20shI%a))2cVb3)zQ9DT=(;cLhD)0u;8HUy8Oq`T!n z?(+ECZp=BKEdYlCPN`3I8FzegV!2*mN&{!j)Re7hdf{Bl+yaa=AQ0nYq9<;%CkNpc z93}5!SKEI-4J7XU*&w2o77wI`FdiUAxZ|$kO_m(smoO~jt`pA`?n!1jUK%?_#bcg) zs#}jOf-4uX?38yJrs70eY;W$odBN?jN?3jA$Dj4*tE`VH#YM>+n~Y}@%upBUcE11W zDyX1zcebHu&t$hIq)%*kV{3d9UqVce%c3GCqY{ASRkM@&DByZi>k z#$=3c!v*DCUP7jJ8}tTyw_+EWx#bkNWja^sZEtGli-#@j1Lgh3QQc^{9&3|vz2N#= ziWIT#6YV3PX{dYMZv6T9A#ezXji168yRvQz?tfT1ri13e^sjW5E<;kXJQc@YlkE6qE3 zYnV|vPP-}m5_=M7#YO1`)H4P;)Suf#5n}*v(UG6MRS5;N!9R7dl5uohDTRLCEU>_m(Qm4p*)J&i|fq=r2I;F{klJq{h zM10=XW;X@~=fS~1**6n~1J5go5x~XU6lL$C*_LD=__PLsJaP)$-GegN0HXGvArfc= zxQs$>`q!mrdNyv!&d;LC0p?1|y_@4gxsQ8(Yf`78B61hqy4%M3cPy5vJ>{b@j+X8L z*}WT*`z@;v30nGH6as?xo&TLWi@CRo#>tO292q(p&u5C9wTN800FV~c?(*N>W}M&w z@G0Kh)$G|e@3P?!+}*7ap^L{=QIJNxh`Z4KMgb<8Q8te<0AgWpz=&O${3km0ecUp< z4q+n_;YXXNCY{j2jOJXrNmw9%R)MZ?;;G=lp;L5f**Vms1~+4H#cO6Ypl6q|rYuNL zSFO}Ht3cLK>*~Iuvohurr#JJ9VgF5y%a)$)#a@9?Fc3u(UjX|>@AB#0aRDwFqIs0c zK5KhSLxC7^1=xSy>6v?3!au5(O<%mQBc#dxOXnAaYJBg1`BiFA0F3sKbfo<@-i~BBIPX#R74Il6~NA7=qvN*-gXh`e1@WqsFAfIr7?#JApezvw^ zp?@AyBr5A;&=55vM6-w}L#6E>ZVg>=RE;3}q|+wWqeaWnz7NAJnR7Do#!ZSzimcTc z;uq)dAK}}Gd1D=p#-m0-E_1>~RkjY{H^{C@n0UVKF;N%oz}02HI2HF#>I zLnBT1R~2_ua*@D9Ma4^B_PxQ9XWMsLaBtrXRsV!DeUjK3J9Hf%+vRzWl_^GZPj^`y zaTre*T75DNOp{LDW@lE1LA+`s#0LRA?ASjOZr*b1fj5CNd$=_hpY~5bJID8o6qM1B z=-U_7EL@~m+1lBlI+BJ_>6_x|Wg)AgX|E034MYu6b!JB*Jsu2%o$Xnj3q8pjyT;|G zdBLBKiP530{-m~C_;L~_8K+v045!DcuA(}f#gw&!ODM=t`zc+6^&%34impyo>AFxP~RjV~PmrgC)H-;a}{zB(%cOqv- z$Asg9z`@f6<@2)s4G+CCf8bo$%PT4>a`5r>1-$VDhL}%Rrhq}~B=bg(?%kP2%YU~w zuJdhJzQ1Xxs5k+|){lVj&J>+0Jlwlx0ct=a!3EcS+_-7XR~vU5Gy!ao zx#n>LC8C<3N=qr6WJ4=S+OH;(coFbE1An}wqXYoE_>_!Nxv^j7-W|?sfb<3YX!WM) zi15IiMgKPBZoJo|6xRHpnw294c{!I~ioK$~I6K7`K$W1ZI#$zy(%PSNzl#L+Y$P_%GeN$p+JxG_n6tATDf;7GFA~X*xm~9!uojto90#!8SFzNzbL=pkELi$v5qIkI0u(Pq3H4gtuNbu~4C|IPwa0se0d zJeYq`wJwzo0BWwWTMEkrUux_vIWcdJ2t*(oe*UuQP2o?v+H0K~rwA-K zImP!|kU5)Xw;%tWu!E^Jt?XPTtoj2Kh&)ac-$ZMNZVOvb9OkoM7hLLu`9`A(S-kA= zoO`|2b0W4)MXE`gFu!T4{ei4lFE5Z!82ITxL#7z!$Vj4c-=#g0Om)FE#l4$+MR?)@@3U6|KX=i#r{8n6o? z^47U`zxI~fZkt_CwZa~Sf*)yT=Fg<3L#5cCkGxap`Gz6cppZ1-Pc(easg5g3nSpr5 zCaj}r_#!McKQnPZnNrdU)b8OE2`l(0v7jC)grT70WLh939No!B)04dp6Ul(XFUkSx`42xDsvi{FNxlkz z2$X*uIa$lEtF$=O98hmBc6;hmpi*M@Ij^GFJe~B@Mp&{C2IE9<%vn`}w{FThU%T(J z{s`v2*b(W`O+B+gHne4*J+k@B9o~As;1%n6Wm=~E&h%B?=ZF;T8@yMZkvzAG{&=#l zwVgtV!fo45OA_= zt1nh!gL7&-nOq0EjZ$C_4=>4&{PsSS!t_OZObiKvmcDNoThYARO(yqB{mnpv?vM+( zu0tIAG~PS200T+X;wluWyOa9UH_KBgB-|P74{f-FNnIT|8(R1>)il4shY09(j|r8FPSR@^AKX`X(_&W`F;@-*23wE4?;L2@j7k4_4AVWfSCD zq|`J00~4C`OWags{8XBYttst zT?23HX~rl|xlGns3jm^Mzht3eicvsgF*tSNzjw_GoGC`$s~ziEeJZ zq}9^Y?j!N%S{bcFFPpVYe<)Z9O!8F8VmPX3oDwCYYP+U6O)YN|9fbm?o|#na1bv@! zgLy=7tGx&J6h8jEttBG-6M=9HkIqbeHWIv}^0zK?F;_8?2OZafi~U~bhc*Gla1^c8 z@KDZeDEgjQ_{`U>63omAOEZ?Y*P2qA*}hcHCG*c+N`16BP~m>_Cwk*pZU&4_x7N`3 za3VSVVtMtO|29zzeqiXp2qE^KNR18={A7H|Tw#Rh|M~yKcp)LEmvu3Ew^*LXMsbqXQ5N2mowUmPJ$hV_jj5z#Cj(gT;@7|sb%45 zSn!?vV=+T)cXZ6FN-y|_--$QHmDlnO-z7eQzmZvYZ?aESo~mU!Nc)+IF+EByRV99F zYLnw2_v|gY;kidRRd?C`>nR$44YH2puJ%a-SBVzGSgw@biscc?gs0#I+Z9T;>*#h{ zLT%oZQq@JvG1RY0Z{1HF`BZAZC6`j|Fww1o9Y5WRICIG8cE~7{$&FN}n1OD^G3&9f z_P8Z`4KcHgomWJYh3KN6{512Pir2B>GA8NPj5#}Wns{W4Ha7)Z!Z=v}erbTnW!Ww_ zMTcQ(sje@tqD^-lcwE4_=()T?4!A#y<>b(J+)KX}k|R6pLL~b>Za`tQKOsL3hJ;yz3#)Uc^71|9Gx*91ZBF9TVH^pK z-MQ`9uk2(ug)a5tAA}N7WO%_rN>;WlMMYhiaq9-R5;uUA`=UEDf@=bQZ*H}Pg9e{YuCqb7gqJW5y#T?Yh(JZn5eJIu@hW9&CU$N7pr{rXCe8n zXZXA;W#lO)(>DvQ_10}f_0EGt^?~~u-tX4!$Yozx9t{2%OPx=k__nf;5Nf}Ykg&C^ zkHZlA91<6cW{r!Pe)+3Y)iI^B(;wh8yRb0{C4p0LvOiPl?GhCfvUB_%ZNb9M;vD_) z;PdO{q`wtHwwhnGrczi(6cd3d@XFuT_--plO5T<0gDxhndGaY?)ZHI`Jg9_T=Y1!I zeAHejwA4JOo1%AlhEg@^=`VUb#bnCqyI5igH~Yw__B}B~eauy)UL`hvTpecB46_v1 zaMuZet&H`q{&1K|ea2Q1RznGY&i`s7-<3y9m#lMD19t85h^IK^uuA(W=4Ds7zUVG^ z#Stf?DpzF=TS1)&4DBA4&O+d>lcPqnUS7~J{3-*h*g+VL{mFqu;Krlt{I93^maK+y zs*_1{`c&vF-_hdQS>_=o(7)yGBr#I+)w6)-Nq%ZsLJLXz-tk5P&uXS;5pNh;b5D+N zWw=4d*LSsMpm=V9vq(?g%L5H5SXN|`{PWl4T`5REyML5H1C8B2;Vl!kRi|cvQQq4i zxzG9O3r_nYW3%1Fl7yz3fX>Hwg%9{?$@e`}-JfA&f6F6_S7il7D1_*02@%AT<&Y@? zHdK_k>gTqB2j`WvL(SU*#R1;*Xc78?r$%#p)6!3EKcrfW^Z7o|?e6%U0-T>LBDZjLC|-(qT*_K$i;Vg zVF-NK^$FzdzD?$Ry<~paabHP~dpD&}Zi;PG&s z=UVCa;Z#CWrNnVEA2B3#g@US5XfgVG-1n521Vp7|g97T0SXXQv*HqddPh(R0TW8m= z3eDS^w(%jhq^=TQ)fKBgbMn<1vBlP^zg75__k|*o*FJT9kt_0%2n`u-_;;&}1f_$p zN+}WT#bI3yk9J!n6^6W)jrW{iOC6bS6ek+670r&R|A_*u*>9>E$7P&)0^6C6V=m6{ zCDNLt-mq5pY1ae5>f+p4-8~6*)!1s=qO80Y^WeH^`VL$`hRz7;2fB^8#f^q{EO|%V zl|{#`pIV_GRt|{SHUxn5fUMc2Pi>@}&HwGg+^i!v+|C%mil*QSc3SB_VQ#_5*L^J{ zRjt`NRMxqJZ*J$IxxK+qL;n@3SOaUusWTv9(DBM6{76LBR#9y#BFL7Rh>=&f-_x44 zO_06A@(TX%1n$@vPu4NsDB~C0@G&{r9U2(A0&&kPkK{Sw&LrzY>oiq>9|_LBo#a~U z_hB~67Tt^~$t-euu&eR8{ubFJ7?5W6Z(FVYq^9_=>qq|KmT^Hh1pdWNZJDzEHbdF< zDCorXD1rgs zKl8i9>0JIe_39A)<%##N`2N~ejR4TcwZag^+S5HKg zw#^e8lS&e^Oui6fuHM11Vj%~|1`?30=nP zuJz-Y`om&yjvE|(H=+_!YC&ct*1hnBOEP_eEvM6z;~Lfo`{Izq6VjDS9ogj^ zU-Um@ePvWsUHGqbx6(B*2q+;ToijsAN=Sn+l!PE5sYnfibO=Z{(%neMNQVLvk^_>% z(BVD4_kZtNcipdNt@$wf?DOpB`PIJhQ{!qicA**dB*f%8W!?gzn)9ip2;D8v05t&*US>SB?+g}X#< z?Z!J&2r4sHenJk=Dh$u~YaJ_ghI+WyeBZZ|DKC)2sn)#Y#R*EPCu$%wv(zwa0#px+ z0N(b04q>r8qeR4*9~DPma9r7MsPJ1^e65*OYYR22RVn}O@60+0MKLw4UE9-oep+c&)1^Y?de72u)A+o2$Av8(S|F9bU*74D65UT0im9Q z_6du_73>WaRoUUxtGbGFk7K3+b7WRVBG>*XSxR(Dc4hT>*j)PB{n?M@B%^WM1mg*& z7HRBF9kS04n5%UT=>!@3=#r@l(mYonX{0wK5rm7o5b9dbMC`)rv z+_Ic)N56S*#ms1Ec|GY)NRK)_GRNlw~WO$jGT zC$*hJZq|5ic}ZtA)bm6Nq{#Ew5w_wm@3;w_C^|dVKj6HocZ?vn?~zI3+kQhR>64cm z9W6rW?i-2A*NW|2xj3|3!#P}P!mmq-Qn^P~AE*h#B2lgS3^gEgW!LZ3BKi4Z4@Z8E zs(BlFzEo{}wvZ+8+}n1f-h5v8m3G$mWq&idrBpY2C3$ImJ`!m=rPT1`;o53qV=6=5 z$Gv0>pGuOS>NeEMwOWV`%p!{}q~^cqaD#?VYdH%Qy$hcXEte}x#x3zhkP*qIuRK&C zS=>-n{L1_kSG2y_pywkQh~G7po@RiqK~2v+$~Niq${NYW3+I%;k(%td{GbT^L3!acGlPMqj_`jFgf9GQecI|JvO_gI=U66$^{oGTmg>YAC4_yuU z-M31XPFH?H(GDv#9`0A-?@q)U1q!~plwW>*XKgvmGdTY+%T%tSN$@r6YObyM`9n+C7lL^efDc;^RO#|EdhH?MwwzoX5>>=P2w3=A z>b6MnNg;giN_#yCa30tRiDoOXv*9b?g#>SDGVQLGxR=T!(cWrVbamph8i6(;f#ci8 z`8_QID(~8zt7MM4pS4_ma`ZT9JK2~E4i6Ph6G)Ad$a_7Q*Uu!HEHo(eF)VO zPg@c9S!?XhkaFiG3Jb6R=dK?7&fur&u7dYSGMVWBv&5sEY!U4+e4yBwKeKT!5*jLlu6FK zSUqB1jg8XVZ~is{GJ(b5ZU~+@9DFqI6DD+t z*_rlUoIS}g>%@&jJ!LN&;*nojH?-MiWnz~77;EjWG|+ZIY2jBDlP8#K8Q61Kr%fGM0F{`6If}LR7*}YDPz0% z{cWwkZH~LtN&ZwJZ@^kU^2ep*ma*}II9MTUmm&(!@kd65>`DNG0S6a%lxBF*vu&+K z?h;??fXLrl@nK%*zMOfFL1_^_qK?a6E|2MN1|I7ElyxpJ9 zM-S{h@pnU+zUkfA_x+9T1QoD-k4g$Yd1gQdBM;wVG%B%6_=~AzL^hyXqLv# zR`D$1_p1ar?s=rEYWyVA6#V_Lkv0i&|I7ft#wsD$?OuJiYM3Lp7xe>cl{;9_px#*S6_j zzB;DvN#@9)KwT26PT+sJa|NlhchbuB}0ODi8y%?6&E9R^yinsL?l z6`K+J;McZ&(^938o|MA>P$_V4t*uk-#6Ck9-4@grD$^>>Sq933C82$rLP+>=x^%;{ zD0O2_q}ShTQ6u4aJ7;c;_a%RAdELZ3h>Hey2xZJ?0Oja9t(qHhauA+8Nq4wq~E!X2uTis>~ zRun%`hxL)v<T|F<*WZCzSBHRrVd94D0h%->P z&c;o+gonDOMhu1zajtvQ?( zGGNT?yb2#xV4xO?4uQG{lrJ6)7=hr&cuBQ@Oz<#GPtLYACT zPU>sGxSiEghD{UT3umHftO>4IRJWc+ja<3vFnJM}XD$?G6rPpvz`F1(w-6p*42RF8 zk#qQsL18qHr6W;im<274R_*K+rO|zVatV__Wc= zR*KTC^u(2;F`(?0jG?5PDmwhg#Sa;cYIRy5UWjdY5|@%P8UU?rQt7=dv7kTv z>t8=ScyN=AUD9M~&&;~tU5rH~z>1CK&L+H8=Uq^WJn3Bch366j-6}P}C=g&j@M@N# zuhy3NCTVhT03m>m46#F&ymIhvy#Fav3CxU4`71torNp7l<(?VS8ZIVEJe5nK}<9V23kv4JWNM*Q1Ra`WrmeI4iv?(2<6weUE`n;D=fi}%zT=8I5{)hu#8=Ns0xHx5!s z`M!|MnSC%U0>d8Pl zweEyKeAqTW)u*R@qQXszQ(BGcFD(l9=xIA&=4n{cukog5b5jx+hg+;^s~FLj;h@}m!n>Wdj;lQ{80vYn@cBO_b|cr| zLug!v#*hBcMBAU~whVKMFcnWq-6z%>WgYUKBWKSvU{AlaaH`lHjwMU_qxq@KtGiU? zmTd6cIIKnWE;xK zbua3a6;vWZd1FRnpp+yb!IC?-#@B;S%6w#OW|842#c-%F0+o|m=8xja)lk2<1zzgc zR7%(oaVXVl)XdzxvK!WQ-$`;2$y(lGfo2+pc{WgUk!^;p`ct;mimZ`Zf;?raA0=D$ zsQUxxbt$R$YL^@#%XCLyE#X; zUbFP8PfL9}@!F0X;L=$VGE7}AWm*ia%-&qHAS#`+^pfW3NCYG<_yyI~6O6c_T=McO z)MTz0yZL*<-N{^C2KxFhUiSVI78r+|ihX}f=9RE=F(AJ8DwO{I=VU7;m9ID-pa}mhqPTHW<@%Qp4zTR^+TI~|zdKOts*2g35 zs!>0-R9+l07N67hy=ebyTprNOV~8&hnHr3w-b+Nw6o@)&ehjD=>zCt~_YC|&N;^DWf`U@#siDX!_uNPv>(rO+X*&XsHwfK|R-rdol=eucYQ97l3 zawdOI%BU*DW7=EQ~{QcX5{MFXa}=ZB{yT9*E()f z@yZ$S7PVCoQyJ)?wf|zYQ`$>{c9lS4#J*UqpDGhNt1#_~esS~=Rhq$}2vfIT^|x5H zFyIy~vTwej1^M7%Ho&~Y(sNe-bi0>W{yzlUA{SSwc2T)x7Qp5;3!1o~)9L5#aPOSjR1aUdEw1ahpVOKU4{~{BPBy)h1H8 zZ;|yMSa%|RxwF1e03xFF{ze>4Ld5q5~9=T%rb*+R!w>3mTzF~Hq0H}o%fcZT67txuW_Kf zd(>qx&xyJ_hhe$pd07XnK z9F&2176xm;#2GnS=RtYWi5a#=>TkHIWaEMWwD2tg6<;nUnX<@36^`&5Dw!WU|NapI z%a2;%de~*Gr`4!t=9&!N%#2t1+BkBYN9-uXJPl+=#YXZd#ICQe@8h*5V0$KzJlT8h z!hph)xg(Z6P0k{jGL-I{``HOx=C=Q5>gWwBfc=T00t36q`I1kzW(0}KRJTu=`6Z56 z#+NV7f5Nr7WCb2k?W(Z;WDbhBa=g8)r4sS1f5kp=<|=RI!tqg{L@*4c%NFz8azXQ& zB)4-2@8dW)c8OvA6sq$JzLe_HM zt3mOvC*6Usgi+Wv({;P&7c5*IpIx$_-m#X=R_y#!zYN{Fiuz2?&Wi6N$;Qd!uki)q z+QJ1=7v)XdB7uhH2gUiSa^1V>p;3>M5`K@9As1R!bjv99g!F)Os zP(2R5Zo1I{)nF|-QCrW|S_u-1`Mz=vrE)}CPFi`T2R1OP6rq@p!EH6a`YSJ8kM5*aZ;S_P&^*L3aS8qUeiQB^g9 zbt@SQGr{=tsdGF8Q|TL4es#=a&dK@4{M6~j+=I1FT%yHVkQ2tu7Zy>>NVnwb^$PD& zx!RohxJi69$w{8$`OVt5r((R1B<-($QBvB_p5<~)AKFQzG@k5F{aWDoG^#l@GsVa6 zqO2{|sir;TmOmI1{};2Z{NrwITsAj9vGctg^%^%Y;>bF4s$(a;Ey=g(?Jrn0+`--7`5y_OKiQI`oINja`%gxO@FNAu2=9>V} zZe~C0aj}A@|9KGWvkL*=G(BP8jz*lyKVxfT$+@qDe%Q72wJc|z=G0FB?n=hb1i&+y z2!v~`NM76old^L>6B!XOGirK7fpS(GbxrxH!a}kCp>lqzJR8rkhyvpnbZ`hudNM+> zxw6$2K-sH1Y2U+HHr7d1}OJRsnCbk44mu6kD;7AryI0@ zzzFzb57~3W-=h~ELLn-~)ae2?KZ-}1$tWlJps+WjShCB(SyZ~LCMI6xzo;iqsesA% ztl0@j)~dywNtn2=!+rhy4;ht95|lyH16-#YV>>%Mx#uUDU=xR=OHJRWOJ&c`BKVvR zZoS80BIwQnt6!aw1P+Z}b--vGA8pRhL9E{%>mTx_l%NL?7g-Q5YyqP{-Lhhf$A1L9 zIo0GH{wAQ-W~VYJ-e)}|r|PiziQfY6+ZrppWKwZ$fF;dOm@2!an5sm);34XGRQ5*inook?3F#Co`udIE0QY05yFpK9~bI+GoV|z`*Bov?l2D}_V8w(5tGA zpu(2Xv*~P=n5G3mK}F^LatG@WaAry3=Pw?{_4piq19hTq0{}7Cp*jH6s%`d6Kn4EK zXI%%R8R*_9uxnX<@BpB}1`Svn_HA)%!O0}ahxZP-xaOF^F{dCNQ>DvQ;{t?zJm+wCS0+cI2 z6?iZmgdn^=Y^^qC3arhniF3Kw1~4YG-<|e*_#+|~2l+q4Ka!~ViSPu7Sn7nJ za?76&g6V+GX(2#mZi7HcX~4e1HQEWJ6PaXGj|1FTg-57w?=bip$`tkt5GPgCZ|A_m z=NZgnZsNA}9U;+Ti-+UfUmU7on3IM@a2F<8l<9djY{uap^d0cu`Kj>IDRkUpFR{0E zDMI&w#kpUv2|Vxm&({EKo9i_x4_pE|AYP9%ul-LV{M=M|{|WAW=TuXmz%CBBivN7n z6uab@i;Fpk^%;>}_c8xMlv$0;OMI{O3*P-TZSPN7yPX2CIAQ+sCE^TtMEu9)7pKR!r!>+9y&QwUBv9H~;TrLPef?cvI`5r>alXfm)mkJeH= z;>E&y?!%nQ&=!L%m&LEGPt2yVde(Fu;_TAWBGWdViNaauz z_kQS5MR@44oIsyd#xEh)RJ?z0UhC(QBuyDip9oOq$WZ+q)*?A%&^gZqcL?f7mb8gh z)d9tcZi}@|g2rix8x^25ZLf>o+CG4)u~J{%t-U2tMO`DQrPX+}M<|SwU$W_814O)O zGk9j14tVpSqv3H07%83@`duDm#%>W|t1-jtJGHCaXy^FJiGW=)(m%9DX0@9?-e z3y3lW5CC~sPAeG)Cv+I|ozM2^rqqSvqXp^fk?}XQM98Yt3mQ%8Sw+~%qcP&_pFpkn zssejT5%%%i-R-r&slrdd;G&_p2rSCK;K2XBqid!lPC)Jt)6Z=5ZK{i39{AAdo<+$x>+#e!GLQrYhGDq2AP!(Ei$^AvI&q`i-?{9++s)NyR0AB3DLM zU;^CaDow=tehk?`A>v#X-~!XcS2DJuvnLIOw`ne{ww7^$l0|<#$VjP{vfnLJ>&oHy zmFHNz)Dl&H>zc;*;t-UF5wAM?XZVqO2>4LRrvS_?=YPJTvx;V|Lm);nhWYnfATKN% z;c-|j$lbWb7(V41GjpfL-=ltt3#s1PU_;`cVDUwd800+RnY9}a+F!Wav3n81NA@UezzLK#2RQi|SVX}w)OhNaZWN7uCrq+>`6 zsPZ|`&k7!X;L0N)mVsd$e$xR>SKfc_jpfVJ`vo-MJVoFi2BlOYcs`DIzM>3mpILs| zqrlD@u1WZ$`9Mm2ZS}jaub`lg@`VZIhZE1tkAfG%L39O^sYl7hBoz@%9PKhD{azb{ zr@KT{{WX&@7`*ERie>T@I?+mb2N@Ox?83v8VNGbT*0FUM2pay=Z?~V|w9v(Y0C5i# z(^*qvVY0YeP}wp-nMjg?V0|XdD=zytUgn8y@GlYP!e8Ulhir$Up>L{wNm^%jv$h~9 zk!}3mBTF=ACO?fQw9iaro;YU9Tnw}NI!rBVp^!TdVzuXOen$ng*5wEgg}t|cK(>{J zNKVLz%qd-ur|hZFBlhv=-ECd;0?_9L#)E)!y>sbUAz_)KtS*PGQZ)tZ@pIeNGJOq& z{e+uzQIhL|n^sYV4x#4*&Lg|voc6NFh(x*hbpFIfulBy6i0#eOX&;uR&%fg)S_nRp znsJyoBTz&DIak0(F6%hFJ@WYtD>_YQ8mMuFcp`ZjiC_7NmcG0l3r!A>HdIqpZ`f0< zs5y^3sBwrlPs2B^V6_!T9st4wy$L5BZe68Q>XheBkq&ohBN}!vP};pU;~zSL+hvam ziz??19upblNxe)0LBikPZN3w_+a7P-en$wvETO6SUz@Me!>(Xw zL^aQ2{w{XiW@tuv&c%HJfQ;G)}2_q`+|;YkIZqyP3H ziOEC2QK7>i7tqYlwhuv>%ehe!ph)&RB1;~3jubA=4E~TroUyq(AcuxjGm2wEf)!-A z5Cr7R&0vcCR0Re0JQJhaZv@xrU01V!Q|TXo9h3rSa-K?s-OW9aptG_HUG7TMVpn)} zk%wz}``I#ktYeYMen9D7Zq?lp{_Qf2L#Kpx zM~_eJW6{9Qhxz2RM~nW49rk~Q@FId_L%nk==zj_{ev))WI0S0!bHOlMbm7AxQ29jv zh^k$1p3kR<(4ct4vWRnp? zB2t;wO(3k6je!o`>ndeADr9*urDsKO?_G|g{&$ z^qywJ1Zakc5(Nt=;$m;d3udSEI+(8yq*)yWf0GPe{qyB9k=KX2oSu94s5U=KsXaKO z^6IQt^ocB4RH^5>-9C$4H0oS^tZDgr8ccDOszb#i=RTWzBKbqeX5gpa6u#8;CkN@* z(O88oExHQ}f21RM-VCY3*sf4-THN}aeBb|g@@WMgi87}-XWDCkVY0N(==XqqkorAb zYuQZ=)th)eod2BSg^bWXN09t&j*MhrSC|GQ8S#kd)FQ@+V?hnFt>T@a!dzU&4@tkPNSC|=Cyg)ULBZ4MZxO7f%5Re5wyT| zQ%*vbl?WTNmv92cMRWPE} zJ9^Y6`(|uPCP>fap1)q^;GokLu|RA0=?_b{KrG*QTAi1L-)PMgINaLy8?|bC@K|@g zRvE-qk*u-D37rZaI7M$AQY>#Cg{LGp&)8#7la0>h9=e8T3S5^AfcoFi>|F3+o?dAX zG(f2YAeTG*U6!Sm@jj$bR2Rg?rCNM>n~G#Ib2yoI7H4@cI3t4+=cnkZVFCQ`hX0TS zV8q+C$gLR_`eD`jK}x3abY${2^H$+o{E4Pl=WrD2-s(Q0vpjDsZl2)FLkLSl7J~JM z)cQ9+DbBLnA)$R6FXs*{N327e<*w^TG^;N|yNzO>kNwO3fMb09kmgx`)X6sqF26ff^*RR`QtdKzbIN)^cI8VH#m7;M{ zLnYy)0Ec*>^MYa*OmxCS=BR<$jmUu@Ab#Qp?cfkolnp<7?l-PnHc!6cKeabGvyOoZ zuvi~W7&Hp5)W?ehRprzm1<5+rJZvq%;f8BK!a%u{lhd`br4UGhHgasH4sa0wd{_CN znlz`sX0u?2`k9>}veOxg>%p{<1Ij0e6<2i#$_!<#iZA(~PBhL}^B)=YDcl+@F!}H0 zhK8^IYu}yqJQFC|72gG9mJnul>h?Ln!Lx96Aal=kEq1l|Ak!_K`l(Y z!xr*B)auA_O>uE?iLsnEFyd2N!qMTxE@uz>gmJ z@nZrI=w!+)=>cYEcmA&$L{3ahyng}Y?0LOVuYH|G>MQ|cS@na$9BmeK2#T`rFvZ^A z@+{w1$-U{$p(g~QVIqF{Zf7>es>NQoPTFjcz@IO`|l@^05D zg#vMLaqNRJEQx{FXY+88D>lh@otk5o4(*``R&~L6Q%gorY|INjiciLF@*Ts^wmY(! zF>0{G49{=C5TlT~;iWtyFxY16xge(jOMdT{2+WEG*t?n#OB2e?U;u!CLm`$s?73Bf zLSRqFFa3*1YChoL0D)&Hb?y=2rSc)Gkk#Os&c;${n5TWpI}X1mD{CB7{Gzb>p#&Wb zSZ|aq99Gj`HuTb%#S1dWAl$l4IZ0N-4SxkO=5FNvk`ULYHy^M6uubogt&da7o*I9m z>`o!jOAKW_gQ|->hP!zu?~PYBN+cL@s=OIfn>l_%ofV`fCjzU_DX(3h)l?=Ro!)cf z*rjH5P7Xv6ibVbF>-u}$g>(x#VUnI6zRm8s=oj4h(RJsw?H==AxCkcxmkJRTS7v2S z9ys>It@$_ptG0qa$gvt-JnuH!Vd{TzmgmZAmNgx~ZM4Q2oO@)|MyGYs-g|M}*#WiF z+>VR*9|qdYI6lU5z1zi`5v(Ko9UU1N-`p(0M8Po}n3ecYv$iRur7qzvXPq9F6a={H zGETK!ErP3qZv8H|-`&}3K)lYrT$Hbu)h7qm^4=DjTfDC({dsq_pmOm6mLI&&;aQ(L&)j1gLNGs~4hJyHDW&-~)SM5@q*1gMLX=YA@C7>+F z2epFh(acZ!PISD(m`8Z)es?q1Wk2U7@c7C{zNtSyKVjo*K%HU93wQv}XtKi!lc((H zw;CWYgCs(0qo2VGRZS%R3wksl1SctC*_rcA=M;3y|udC zh|$*r;+>O@_LNWT9On(+u@RcV@IMrh+-!W`?EVx6m{W>X4i~+6+jM&x=+W9O^mXie$Q8fEt<^mBLzxM5?A!kR*Zy>Kkr)j!a+owLxK2j4<-~p@F zuySv)HJ~8$M_X5WF8LB0Prg)8Q|} zNbkDuw|jo>$ETVA*7Fi0?2B2~Je$sldxk)DBz9wIzz!RJx~TC?r0J-lIH$?Y!8y|u z#?{PjsT=mpwHLk7IJ5#p1{`JJ`^{keNC$2rV5*DLapNEc9$p=M1V^14T7ZEkTzMfs z3M>^l(rpk9u1%3VxSn2p?i56y_~JeZ^{2e|vy(+`Sa}!r|K58fnQp{yjps#e{EJ73 zi=W!3OqY6Omn*kjYYiAnis~)$w4bWY4BJJ@OxjZE&ams^%_h8f!6}qhSo_usasNwM z?Mk|v2+ED)7cN7d z1>-V>VO|GESQ@nT`m}Vedvq6sEi`^O3uWH*W=BZ^cNdg~#MoB~PI=C1uN%F;a)t!N z`ezBET6VvxCI(Jfd8wQb;f@fh4Gz|5qpqO*iDv|h0H*mb0{Xwxf5a_LX?i0LFy6Egl_3&?!K^&3#x)I;I$!pzwTu_-LIFh#=2 zGq8oW9c)R=W}a-4fV%w}$wV3+oD=wU%n}bWx*E({D$p{4o`?Vfsgz~T8USUR*VxUN zn26Xver2?&wRLJDiq_Hfgi^PJ7lt`AQa0we`gt*WW}uOR(2{geD^VgKYJho;1o?iW z)bbI#&oL61d$v5m5W#=<y zD_=7LD$Qyz=GFi}eOe#(Lm^~Xr=e-Wwl3kM=Bd1F72^q1f9ilvFG-iFmXC_1ttKSY zb)@=`JhPb#`p{)GX?XEjvn;e|Zzy3$nhfiy?fvhfp)=HzID@y;ll?3(Pp`M}l-_8~t48Nd5#CBCcBLLjAMi0O4%iK*{El{E(y`oE(y=QEQp`kKbU3Un0c)T zB;IKRE#VD+ZDE(3r2~IOf3W@HlKNd_Kf!8Dldn9XKF=uGQD%w_zVkP*jhCNkEqu9}lsy z|I8(}gKAqfnfcuSIO;#0iG~sEe!qQ&4jJ}qHtO(${d?`fB_~$d^L(R&OzC3m@}rB_ zpAY=APvE#Qar3hHBwkshwDk`b39k_cC#HbAcYl-G`(SaZ8>NmotC4PYnxEuv;_F-m zqIfB_yG1jnA*zR3cmp5zA#bhn9QSMf(S^i7ATLKSRC^Z5R4nrKkYF?#Id3#bCk zW{1HsI+#e_EZHi~wm0}|0{q*q?d5Biq5ucP_P0|>;nywzSZ*x*)+>cnWHJAHjeCX% z{AR#8&1wjB@u?I&Ja9j)_Nk^_xb0AJTP?g1lvC%!xaQcC1`3Z0w;d@rHx~Y@(8=|s z&ZjOLz~8g@$mMxSVl$KGub%~k^aD=D*&1wPHbeFdPGY#JXZ)TJ81vdM48~HGP(brk z&k6xt`{*la@I&CiC%TPtU7D-Xft9r1yF)S~UF)DzKhHn0Num2r&=L|MImwWj9^Q(Mb$8wlO)i;QH>Bi?kr8 z%BOhw>yxgezuR5uBwyrD0;}?x4ygQSblrp_bIyq|f7Rz-_$ZwmM6UWDDVi8nR8@KJ zP&h~?A$H5F8u?EPwdH{D$`o0qlnBbH3X%7A(`c&%4r|2VGU{-hsw0@Ao416Ly|50}Y z%2h*wEz7++5x^<2z@n5?foIQCmU}lZ(|)6S$_ag~wL$>^cR~TCuZDVzB;|ejKD4uw zuPh`~*_8SUcp-5>(?>>x$4b51{eCtw9P!YEL(0lLh4g2fOPoy;C=W`i>^hWKgP-j@ zoLIVe0^f>}NrMw|Z@gLV%&yl6m z$&Fn##P#EJR25~F9nKuYW=ouV9}#&c0uz59!)=xxjJ9#3;hcHPB6&0C+5o2cFfGSS z@;@{PfQ2jpvZl~)m89>F0Km7q^HK%c?y~w?T?P4CEm*g##ElXZ2M2Cl$oalq$kO8Q z8+JyOM}cQD5OOw+!2lYAimKxT*r-6b;&&x%ryS%FaAwa^Y8?%r9Y|6`Klm687`Jyx zbwh|sUQXJGG0s5oIl|>GBvhjZjfmvkIj{t~y68J9_?O)eI2edDx ztQSCJ-bVyPjxE!Rmk5tir++&9Jp^Vh?3B7m2Jm~G!apd-0bR?keGP4D+ypt$2VzDy ziO}JowAFnBciK$c8D^YJ4fLx-J}Dy9f^AgyE7I@B-G6N0Ljx}^9iD%P{+R%_flS$= zm(4CQfPS{!S+2-zZXk8IXv1SZ!9%^VI7`^J?pe%zLv?-Qj=n6{_|Is=5bsFQ0?Z5D zHs%r6q^04f)YO(-U&(2QMnZgR1Kd)|CBN_zOd+{C(Czm{5gYmqjMxhgi%F3(E*HiP zJBd#DhRJpr#uH^*Cz*m-P2g#2og3_{Pvm~A1&%J;){Nug>$)1+%+n2xv7?t2GWU0g zVp&L1cTGC6ZKp*05+s0>YJj8Q{^$4+tEV6g0Wbj|mHOJaQi+3jX7$$!=JUa|)FCn) zsJZ$S0l{y9-jOY%Q=2v2SBEv-U7uCd_T)Fi>U+r`1=h@(ae#=nV{4J1xpFMQtIHt< z8t1**oA!UrRVJN35fPrZWM>GXvvq>`&u6m0kmBD);E{~4G)rl#i%Q!G0R+H& z1;9D2z$ZRuWnK$7ZZP?ugoFd$e2891;am49K+XiV2%kH|^L>jkHqxb?54k2z>%$6uJc*f88U5V-(K(E~C zH15R+!~xo9-rv?7)61LTiJ2}UIGyubqp1N2!4$P~8G$Lk`H7ykPP}}<0jB9V!lX^Q zK_L$)r%1wu7FMj1!atgXt2vxqCOz(=2@hjUTrh$9jvk81zD$$v;L5Ai!Ztc5^oPK( zuHF?om$&8lp2O}qDRr-4e*jcXv4#2ntE0fQeRUCii#{rcqL04o_zuO5s@Q!9*}72l zb>0fnPyppg(GU~e_I`;1#uL<=6Ar%iNFFez;nF=57t=5eQInE+j+)bc|Wy;pE; z{gypK!Gw;*&(;M5Yrt_`VG;vQQqy-T-AI0_S}3%cE(TRtWGp-g2$`{T zc+yv=W+Hv}^yDxgQM5r^{gr>z8B7}i8u_AghQskV z{)Jn=921j3r9f$mbXb-JE^X*&%neka2j>L>;q!iBp@NR=^jwD~y^dv*_zBU`q<`MN zRxaD1=f(ft*a@TKTx}j$HyvJ5V*_OcZH5RwKJKxY@?y!7S5P2~{A#(r`Z?>5OS3GV zqrwa!)~WZ&%zAK+p!wgGzt``4ij+*Lu7HpvOV)1dUH0Obq~I92Q`RGt>Dn>B%~hXK zx&Ti|&`yX8f=8>p7$-%3GB^!W5>kW|vyA2#KTx=)E$J=1#e$y$EfmPn#ig<8E*Qc3 zoiDL%nN{!|eU~9CW7iHf$5k~bBX&&cQS7K3Ustx*i>%Lq6Vy705^5c3CaE7#2q@=W zXaL|P-3BoJwf;+8+V2QI!O=xyU8tO;si%-<>gI}ZGT=Ow4!81d5Iv;UB}Az(O~Zc{ zkuucqPKS^=3OhktqlFgN8*P!zE|S7>;K8^_KEOU-^lZ_Za0f83w8$FBEoN9-Hq{Fj zLh{f|;Nzt3oi_=3zJ|iDn7~byvz^Xz`}$FRY*mRR(T^gBCAfFOn^V60e(;Rrlz+Rh zoBHoVM-klm{t2CXcn0-8t2be^LMGNyWj5i{V;{WV53Uh`l7g*<_QDL;?Z11!3H-#B z*N_~plyQ3!zLDqVz`VMYOF5pt;McbFYw97{r_rgOGcTcQ(G1r$H~p4(beEQYuiZYy znEQ3FQ=nd|sYNzu0$Rgi*pFG)OY?Wn7vYvJOs~yc3cIkV`U#GG)dNzlgd1nir}1~k z?@O`1ZJJFEzxpsWrMH+OHCD>Dr+zfJEB(tIrzG1)KK*x0$U*aj{^6!R_$hwc8a_{z6?p%u9TVeN)l$d_-9JKzajA6zm@h#Em1YqPA z5i&13fLy#KrqP115MMi=(-!2P63oQMU9BU2Qs9npSN{2S&t;A!@8T4=H7>#J?4*!J z4hI#KMG=8Cdj6~XU&QhpFK`zH9(+dwxOq#%PfC@Ov_5IRO=kJ^BIyL3)CJ|#Kwthi z5x_NOr&k{&Fifi0v7D&EKsnmqfwPF12=5I6Lbt8Ic`7VDsI(9myt5aES zGN4>_8BiXj-mPYD&H8}P_t2MZSygkm*x<0Ly@KLmQ*?eFjNCnvCwC!L+P@e#dBvP# zB#51|O3;1lJHw^?-|fGi3v6-}($iJfJZjG;Xs7v71vK|{l?=OyeDK_(CM z2b3L^3Q}>(Tpi5Un}Y9ndm|{CHo?HHHL8oB=!JR`z+Y%~N_vmR#+fAOcF&Io*%rm- z>qksG>44=TyrqcQbXj|!%kVN`3?m}yE-TKLi#OUr)&bqv5#ZtiK8zRB6~=nd8!8E z4!=JV>Y@b1BtW1L621Xf!K7H9`y+jsc*1rz;kQLMdrK|CK0Yygzmj>8=XS^~oBmqv zg92tGZ%RqeOEo@O{`qaE!kkuvk4_5(&1L2v#~W0YmV8TvZ@zZd^Eb(hHZ`efnC90v z3SB!4q3~3YcK>%7&y{S@&0CT^CfUK2vaxHN#+B4>*{A}X#-f5}g80cd&4V?X zW4VFtx4)C|_m!`|#=`k}RDzDW3FcI$Qi9*R8Li}YhWg!Gnrq#?6Yo4G%OKca-~AwX z@#rKuG$kYmLg)3&_C|k&DQOvCt}U>v@js!hOJ9^DZZ{(9g8+6gj=54XlrqO*c zE59gV_~Wv*%ZKYbsg5$KN~YxYo2Sdkl-XPs%-IP_UIM#TemGMc`q+`Z{S!-RTa}@$ zlz+M9FC#lXdN2NvmUp9!NOM3J28DjtLAkwWu)dnv*S34u`uyG685fm7CcEr{#x&eC zbrL&rjB#>Y-NL8em@qgR%j7i@-&-;eBW;EGczvkzul8kpD6i0Z|xqkq6m8Nrj%mFzYOr!rpIE zp8XmV-;hS2md%UYECBY0OAb80KvaIJ-P-L9?hi&b(=ZeR@7nnZd^Pc`w{o{@|C&l5|v*`1{%Z&!> zW$uQGrkddyjxl^aeYb`PjoRNR-rSI^GZ_UZVv$5mOr@9KOcq7LjVn*jub?phxQHFs zE5BQ^tH#Iv@U#rLfBBDVGt~Wv51&3kZaQB)m-KE~Jt#WB4NlN)lxbgHy9zGMcdG-z zFYA8j&U(Kt8;b<(Py(!Ty(<*p^Z$*e+CON}{u?=I=1!JsaFhxAjFZstD%nZr;8A4r zuJ`x%TjRsQzg^xjK}0nQxP0@PG=molF_bA;N$7A1A53-7^ggLn!JicvIH71X`KGbg z>%`5BKymizMMss*UTASumDCxjI}btMPWmK?f@mw> zleEasf5a3>(xC!CsGOp$4u_}DrnCgYyE-SfuDEKRqA>TdrK8C%$j6y+u{loyl zQu_OwG(9WUhbg@N*Ny}F>LdSzDAImv81_y%r8I0;#i0$(hEevAA{%hG0t?48)RePs ztJoEBKL}$yQd6mwqLXDrRJw=@ldxJ)Rl;icnqf#x&;@uOl}h!W(tue=U0J;}GUS${ z8Dqs*jb=w3H62MbI6-M~DBQ%gxtP zu1$(9Y+@v^IWuhP0Lp{;a~o;qrYpt}AU-_sQYB?jrWVwaWOQ_$H4s1bvR#-v=2q*y zC*~#Ln2C4J^cZJhmpV^f(__}ZJDdxzFq|X$Ydh(E=iL6 zw|1ZD9$80V7Hqg|-}{cjIaI&f#CMTpp!H2h7PANs;yGGew327wy~N7EGYz)Wx`F1= zLSk1T$;;!|izReRFTA#LD@jPnWb<_ckD?e(9o+YaRrj-}o_94u|2CYrt|W)D6I@hI z<7^%#N)_S2yMy_i-vs^Czaea6zyH)nrZo^S$}L=i_n(O6 z5^xHv;tNfV6AE_;qN#TYW2tu~Acg=mAcSWf$m0ii2-bH2i3{ody$R<})1&@)lSmAA zIv?gj=05dlx7Ck>#GYj7djzBhDxfi~&r8x*63>dk&{xN%^J z&TF~SOUU;_n&$fw{xw%@=#8|VZODFfFG7Ap0pwJ>ovl!e&XqL-w(Pb<2s=6R7z5tF zg2`x47oA_6FJ7Kq!X^y+7n??eD0Zl@Vg1%%QH)kqo1}+1@=Z+scAox?*7t@3mofm!?E-0GAYwn~BJYToGxy zFw%Z$*cM=xsbp3FH{#&Nn7?|hhIKz$69>42M?*iL*pU4+6@$Z2P6SdJS*sw&%LdCZ zmL&%xIjIWLOjlMnmx}O(SZc$YUC6fI9qZ2biecV3dX&gr2qgH;Lc&+FAO||if-D95 zvEUCHp>Z64?cFeEK|k|GV#e_<8av?7uB8A6dHJqJ?oD0iYhCLf?;Qi-A>^IHg1T8u z@Vxu?Z*trMh}W$!TkH+Dk}y~ya5DVij!$S@LmDs7#NnsknZ21_p1i9rj~9Tx_R$~a ztE$h;i*+a;fqBb(t6mv--0L-IDT1rqeU?gsp3b7v5~fn?QX!PL5leI5%d+?nTkFz} zkA7{&9D3gdc~@N>TPO>xXDcwGXEEFgLvRt(#Q1);JL-EIqE0mIettOA#~4{7*3msc z`66MD=`U#afYW2=s3h&CrD&d2jF#NS4UuZLy6g*#?FI4I2DF zJ)V=$VDdnjSqqObfgqGb#ym1lH#V|L4(P@wP3Y`BG2=qRNH_eXfT?0!6EHY?>wIP$ zV`8OnR4(fa3q!-y9d;My%ka@BAh$_+Y8r_?5gCp) z#O}|&VsJc)irdL0OLa1qVE#~RWNlVa7EG6Lbxv*MZXZGb5hOpS#-|uy|5m->nD0ck z7oO~pi?edS7dB21!q zrC*Zke=Flvh}t4wWH)}WxoJ>3P+3B2^P6-B zbU>y*YBKs=cbH^4`J3!tm^d0LUSalykR5t(2&|mSI#R~@8e?T7Y1nU`D7nE=@>;v` zTNMYceyj_>gd5c)Oi7jW{tX+qZdt*(35FL{d^<44Gc3h6-)vRvxg`%8$@i)IY%7VA zna&@lN`;P|MrJdL6rH$t8oReg7{7O{`d9hW*vOR+&LrG}(c@lpg1_K}Yuw{TEut&r zSg7?6c>H4s?6Abh)z~$yt%XKKPoIDkSOT5gI`Futns|(23Dkq*YP9gutb>2>tN69x zD}tk6)06Ey3fX!Q)qCj1y?a3Z^Z;hc&HxD+-t%Y(@Du) z@`lD4kytGqa>7@me|8cI{nQS9N8vE+Y$C#Dyxo9`TR(FFbJH^rVxiD2I30@Cd~h(n z&p=JC=94!$la5wXzH^4ZR8q(XWfsL=vRT>p=%6IvZfgFl;84U*<5=P_8NLE5iH%$S z62W5{uc)hRR{A@xh{A@t=)6bPbr{o5Jbfu?I`4T)R*=|rX|5d>v@e2u2ZqC;cT+5h zd4~qHa;+`8*S9+bS&3!{OAK7T!EZ%-3qyPRQC=}%4H+5vSm0LceR{WHCtt1W9P;$_ zG!@dzLFV&8%>7ONI6A|~l=Zfv>#LZn@bST53EVT`L#QS5^-9bjJG&8xZ}%N6=lvfR4Sd~ zYj@aT?~bdOux6ww=Lf9&=^h$aXY;hSI#y*p9U}TlhOmUWL{ZV+?RIfVqxBwg*hG#J zZU==NJiaLJFvb{W>88=2Lo;0S;GL%Ob5<|+9Hd<1;aw?QVl47l=RZUKRuimV4smkx zSd7@51CaR$mca0Sh-B)P@mHx(x#djC*!R1GZ^bAEPUPax;XN8uyIr=07LqArUG{!e zQEOA3$R$dX4zc#730awj4lhSj)Vfd&^}rp}a56|<*JMuqD6gWl!n6~} zmd@6O_NGL!e=eCNk<))1t^<3`=rXUbj`>5~$g>rPJAtnwi>#sLAJ;Dj_Ur9(FYl7< z>*{|IP41(R$+Wcl{>zi4(_rSK{`YlT^DrZ&2wcPF`hH#)~6uFWqr)^+S>iUS%%3G}H!9gBIK3iKDO z9enIyP|(whr(kA?jNwX_7_0u4TT5Z61xR#-?lnf&9hS-U z%<{X$!!eW_t~F#W<0Oi^gmN)skp+W2xy7)B4WkS9nBkSo?}&!sa?78owz&ERiy|fx z+D7Ly=`W(v!3&be$2Xe;xGiM7M1qTSLxQlMxb+C7*$UxeSB4;=hi0nWEfKt<@9EBv&ta{=+(yv!jGBIz`WulxV$7W@sh{rq>`QULysZ^D{DAtIfA=8KHo{ykK)rWqZ$bJ0 z%UVG8Vmv2I_5z_+7I>6$y1K3sx!QFryPnqCx})#2Wey}^fSfuqLKenx&|Z6*OSb|4 zQ->(Cy0#_;Jw5HMJF3U=a$HtB#g1YAZ#0=f8DI{Uk2M0#GR_5R(1{*S9-V12cZVYi zie3Um=GZ4!(;X@0cmi5MYDvYk_$pO3EKMzP%)%1Nwmb>ZFnVK`UD}1u05otdlL}a+ z(B&1}8vaLrOSzJ0wd#1*8>MPF&b-(g@6pv%<_mzPx=BuLBz9@OkgP)fFbNDne#TqM zG9;o^_th}f2+vCHL1&xDF0_-|5iWm4m?AxgZ#LY6Tn3HNH!_1$M4Lg=e@;-y7UP>*j#21VD0BRe zTbJf|r>}vY6q*<1e_uF;&A?s+3Feh<<*DeD62brwICa)9c|^^8*I9 z@5G~F1AQ!?hTZf)b?IoHu7DTbGI&o`c5C|`_Ff-lHS91H;cpw{AWTw*9r& zByv!1D43Non{bsb!;luBwqO3zk|q&tR7>bO2_A`!$I{oMHlG=Z(VL=Zjwo08o}^dJ zQjJ~UL5&tVa+{#GL>7`?Z%?sRcgz-Yq98~vX`f12_RUB?W3Z(O@9xnonY7TlLcfDnZgR`7IC3=E78KmkcALcCNFkb`YY<#Sn)FE)4TsD`vj-_-tgk>?(p*g)rl|4dxC+E=#`J&plQ#u{Cg(I2Oz4N_%GS356E)Pq`X-V zV&LHW3JsTR^CCY(zJI&J>d8h##^4Ty^3=Uo$Ue%&&7iDo&vvtMH0-$Mo2x`M|KhPE z)Im0v@!Z48HK(nEY$&jjAtGKQv2WqV3uZkAl>8ZQ7l3d(c{B@b6r{*r?ef=w}RKJ~3%<;BX!k&IqM%g$b4zPMuoc#Wp3}X>9KO18&V(k-} zqOgY?Z)ajVbVz|F-YsN&C5QGxj5jv0G(WnkbN*3>UN^}seDs#cskNYNtkVsJXi=7C zsl=erQB+sS)hMXRNb8o$$GQt!$bDP#>K^s6?=%e~bz-zCzgE*oN58Mb3;l_hUY9KD za~-BsQv{k86K4MH?f_U9uJ(~Ui}%OzDRZbY8`L{=&oomyCxN!Ki=a~(#o(e=`MV0I zq7$IQS?M_!IMtj zI8*#BYxJAmjZjoriFoKy-zX^Ki+@d1i5l|QtZW8pAnvJ~n3(=Z9&nyZDM zkth|Kucejwmk4XtApeGxEkf?K_vdWewSHA@MCv~q&CLceMlvD{hxU#A;T^N>75XUe z4WIR8KFXwtzA)9#J?ol+L%Wnz+{DO`tZS~)S+F%QMu6-C2I0@oIC{V+lyN?+QW>o%!8IRV7O}*nnzB}f%|T-|?-xz3{hrUDU9b5*pkKzgoK&G8 zO)anvPmfM~$4SNby-`|8e9`fgJx#gJY~T(qY{()>#c1*RLvk&%>h9TC93=vq@l&-N zPl^hIW?{+Bp9OeYL0$5EwJVi{Nt492#%%Xz6Rz|iwy!C z_~W0J8$;E~JFeNV^zOr=(*L?`^44q}1Li_wXRiFBtPA*Vg;Y>{S8 zz(E0A7J4rOk(apP(^&eUd^bKW9yU$>f3z<@o0r&zJ4O-k7*t-zgYMuIWC`i?&$DAlWBxiwYB>!JZAcd4O~!`T(5~Yp~nAFZaGC zB}bJa$d%hCc><>Or(ygFs#KlCtn#bLonm^rRT_HQpQtL!f@2cZ`ygTPWB9PUK-dSsc@s_1DkL#@cho7W7utxS4U6;X-eL6OkaVXapF zPNAnX0yzQ3B{bJ%!er*w9*6B%#W_e-wZl#n^ZOXn40nA!cf%r7JXSrEF-@i)n8hlN zHR^OFqp}gSwj!Fjd7si_pUxL*DEZZ931wr)Tn2{1%cEHh-OJ?ALlSZMHjO5tQ5OjG zDS~QbC=ZPCKd5ubiW|13S^bQq6XVtVy(j%k$tL9k7BU{=YmRG+Zmf25YB2_U?Fer( zn`^L2E?ic5#F(mcR~j@mo+KcF!nteJ^rz^%gW7HMiGY|_!IXJ37Ze>qX7}g_7b!5GT zE9%{93bm-~0D62uQ=Y|D+rzbGCMU^zkOn=tPGEy zo23|}x7cJP_52~8*9Htq>8U)Nn(wU4>)NW>C06w?na>y$>pr(J$xGObM6;x_8czf6 zQ|rOweYFWzHVQHIz|6S%=t84|YywROZjDctkqH5*sIEFK8X2ArY0Kwb^sp)YRr=27 z6EXX#ktnF=O(%(>z*9yzA(uXh0Qv4FQ^9AHLByXt7t6Rb+7yW6suXH5|hG z`5HTxGV^GJfe+TW_gIS({&C{HrQ#rSHW!bJPrxs{FSE>@hmI-WeEiLHrC#XC_t!qw zQn*!#LtLU48YEE+2rQ!5ML=*qhhLQtlfU^4*Y(-a2hdI4ffGUt$^$|CXwt;2RW4_% z3goD73E0^%EFI#3Vf`OH;cYd>yP?RE^f#O&Nq)@h(>VpJl%{OJ4i zUF(2{Z@1_Xq~j)QV|NGT&z!>tw+b>0Os9X9a*SroR`e$hUUMhHK9|+o`?_4$#cWQ6 zgxm!u-8KxmcZaGtbaCQNvy8Pwxyy^4{^@&km>jMAMc5|6`>|pLkcW!~DE@^DR2$m6 zU9QFg+dbrVHIz?lGilJ*#igvQ42|PbmmF#h%<8D+RbJJPWq{+#gRY}#vYN@a0Fe_W zpj!bdX>sRanuDtQiM%&K67mOah}A+Pfif?%EGmIV8{4Qq1u?l{Gq{cIXZG^rdMYf} z+Z)tz-j2T`Dby_Hb$5n7XjAD8@_I@|*r{;Oh;3ZWq$%Yjh`(I^88X7l$VbLz^fUol zz)NOwS4A<7B29l_Rgf|B3J^ao{wd8jMZ#0h7^6Ew0+G($y-jh_5c==EE$YR-eL}YKWn) zYE^7)9SiSpY$@+|yyz}PHwsKAMy*&}TYqN=3nya+gxkM<$08nuacMGLq&(~8Sl?T3 ztWTl@s{ALgXBy91K2l#hd9#j6f-0ajU@UBh?{{%6yyzaHLQSHcg5JtEPD1!{x^ zZ*HBRT;|`q&sA0vA}%&O3llAJ4JW~=pX`slJg>d9mRpdlpM9R&r+2Z;wag>_-wtA& zO}u>OUttgU@U!t41AL4E8e;=Z7#w=xpA7qMJ$RUHzE^R7K@8<14>enT&Kd!Q?{WvC%twbamG0=gfY(?!YTqjV+ zh;$$ZZ{~&a7WUnCuY=19pRrJz>BLaRJzG~e!BSU?z?Uq>T;41n2fk$ivs}I8@Na6#=Mvr7NBaSQ^9Fa z0t;^P*kv1`GB`1te#>YW@Z@&#i1(K%f`0%y?jYO-P7d=w?N^U&!A>bTo# z-G1>p0@9ynt0Y2?3+b>6?@s;a9m&Rp6Z|s|bwL6i$p%8H=oQT7nrGWk(wrfCl6t8a zg&FDl11cW96_YhMx18*ij?m&BaQ)=2bL|>gK>ctqr#6|E@uGk7gadFmdD<>MzK5V9 zkZ(V0j?%K2f12f#RhAD+`(jx|P-89^l(_0QMODcf>k{&#nBODbyFeL6cSu=SrezPc z$XmDcODnRDRt?NbnEl6UBD*PCEWDH_3grblPj!O}DKp^-$n~6-TxB^)hjt3K6gV<~ z3Sz4U%VUktZ;)vPrsl1Q4>vcM5Y5G%a*vl?Ky-8#0&ErV%Mw1PB>otm5_(BL>|;Ls zq~3@A-RLd1rn578kP&A7^QyrYE$d}I@{qZuG{;zC*=m!OJm^fBEYJCDw~%vwj)b}1 zbgmybVb!uDmOUG0xZa9t{8nhX?-gv6P#QQr3~HEqetIacAl1mR`fY#p-z84Je}+I8@ngSovMQH1frCz zUo>yVw@jBh>rbg%k9`i%+&eS=Yi0lh(J-^|vlaf$If?)9 zsqMz=!OV_4Zw^OO&}-w9(eR>#ffZ`~6ET;DOz^@lDR{UxQ}7EJrsvNpKpo++X>4m{ zms`~%qCKk!kH0}hda||3Ax$4*<)r|KTIuA5E_=`-T~}6X#cVl29XeI?cxY340Bqu( zL5!|`so~YD7a+bZ@)e|NJijQ1+rq0BSSHut@AwC3|7a%d1724HWJbd&Uy|EsWdc1L z#Jrr(ps*;RR>|iBYL}t8%2x4?=ar+KqqXM57K~LYSDC%-Kt?JFD@t zx@L!fmf#W|6ZEDZ(jA8#&3uK#Z4dj8ob`I{r^4H#HJ8_V%LA7d$Mj?@1=vB6bL*jPC;X)!Fe3wASeMD{G9%t#VZbS*6$_3z0jR)IV|Jr_Zy`W+^t@=T}N%M>0~q+S~>HK34KUjvRuZI7%ec zFBrDB+{WP_2O?tg+fopIkgO+t)KVVpPdhIcFWgOf-}!2$f!xfU!I=UUY;n8?M0Gl@RziR8#G5< z9wu=H#jbpmp!sfPPSb{3)S}lBfD32owpHnQ<;3xODD%J{F0n1n|DJnrO= zz;Lg+goVk^cSaU%a*G6%XJd;bYt47)u&5WeN{^?)z~JY7&b!?x>v-?`)w6AUq1$wi zBYo>H6qnX_qhmISnX9+KZ9ExHBv^AlxPlhwsK7EhjH%-EPSZLF=L z?{}#l@Td|RNQ;JT6H?AA;*wST9#c%DnJc3|=;5j<(`&{@0OzuiG&S@-IesKYZH8)S z=L%560`-BO30P~|7|C*Gdu7_aj zMpfP_!Hg9pMZ*|k0!ekP5CLkqq^yl&3Ap^()(8x*>;LNHdJ@jkVpn!e+x15J*>B2~ zTcN040Z^m~1SXYlDM7DlA~LcbN)(sLLpw?o?XQ}+#!*;sz#NFxhg^51S!2OO)SzIf zUsl@L{Rf-OuIHIouI7AK2$=a+RW6Shww|AxuteSVLn?Y~E#5k9U!z&scxSEQA|N@L z6OjtcK(lln{_i2;`C7lnE?ku`0`EhAzJkvV3gTx4It*JA|Idt(@%gUuICjuY6uLMO zLiqmobqt6DYTOc!8T=gRG}KN##Y*apM9=FP=u)v;+^m!Te5NUpH+Ed|lcdwXj&DrN z^_HSvYu!BgIwS`end=>iOX1pf`MXt%;36$hzpoTJSEJG=AtrQO4twvC3ho|Er`*xW zSXL*)i`J!6M9*L#9$g_j8(yLHO9&eB`54XmU9AjNFO`HGKsIj+WGFf_$rnZQM1N%E zYZKj-P>1CBOZb^2+ijLro^Q3lo)QssW& zMM4U_9%9S=G^pX_8s%|S=rXwGdFFQaVDr)s9!uS(esON}I2+)CHhTZceca|k9~4SH z@qQdChux;;8ZVn_8_je(E__O62D%1SbS$I_etf&?Ury54kd;EUXrl`Waz>S`XN%(J z@LmQ(dsIQFncQpXjNA{UHL>Fv z!_cXRdi;<8?sN?UUkYU@fYET!Nj{bnpm%30-4RxgKZbHsyQ|V0d20n6%QDtiCLoXT zQA<icow^ zpSc*Jci~ptFgqF)ALpM#4MuSc@I1wIvVts~w)qkv{O&g_&b<6UVE8e+v~c$ht$o+U zAH0+y1*e~PE#bC$ppOQ|xx-fZga#b!?-rxx+wU2kBCe6&Zo>bj&y(yNf1YmV+rl6B zGO)}oLp%WMDRmG4t98!jJNsvh_sZgE$lcB4e+&;$LPA0g97AZ9G$hrVeDL zH*WpCp#HN8XIum81&l$OtcW9RBbAo$aF?x<|Rfk!8M=~lOP&NJJx8p0L16V zV_+B)zLLPSC1!5~dw!E#MJ+2~C7Y0q4-86ym|-)AwnV@-R5I1UxNA|))kdwQ%>wa& zk6s0hSMThPKz{1vPHs6ZtD8j{sD#L?xaq!5yjXTyov&doYxYdxcUgQxQY9nbt@{VGPRkJHJ_T0o>h;vkE z$V-d83e2)*olj9Bu8kwPOuzmbjg75ZpAcsssts*boq~+YK4d2n^P7J z|JbG1p{P6pdfpg{LB9F3gea7+VB z27Q|DVH|4W-9M_?6>;IZ6EB=LPHx?i4+#)u)E5GmClq81 zUJfgtAw+whx4#b2+%|eYaA^;8d~)=4VTHZ1g}3z_^lO-?u}HrBy!2gt`T-2duFe!1Fd~9PPH54Bjvwad@4C`)T zz^$Xz2(%uFjcPE3j-MpMF!yW}V|<}EP($JopxceP5%O}T-5KkBdx{1dIa{Rxz;9uX z>+W+ZkxCY{UQJz(R9vB9AXtSN&Fns%%7u_ zAf5&ui~Iyx?tRDlpp@-_=O(%v7(ZCJLCL!HEnAL_!b!#~Lk?YlDU*mkrg=aC!hiAb zJ6J{YvnE|wF4S04E}$%!$4ZH*bolwFpOcBVYLDhZv=+HLEB>~yb1o>2pLxRgB*syK z;wnwb?c+`-$%5J*W#Rqr?O9RbCEzFw`}1{L_M3D%fuJ(u1B!)FX7O-E*-s=EYAgBj zxRGMDnu)x2(tNF1Dh&u;>|BfgR1Il|94Ck##u7Ph}w1-f^)>x zn2M5oaiZdN9iCQP5?6vJre0clEPIZhDgbRk{p$yhR&x)u>1{IajPW`)a4C6eXpdvq zMzMoFcwR|@Xk)S7*TXT*O2>xrAJbs4S9ZMFdDSxZpmDAWq+g=S1hn{$#m0$vcS%ma z0im1PD1*7=-d`2kGCrC9=J7O_LZ;P>AA5!G7|TrVqP(g%>>?b?V!yqocG~e zlMc2_kIbczcysg0qYtKKHf$kJ3sCO*6vK|vh* zQNp(GJhu!a6IF)vO@%QbIoqkMEK7Z{Q)WyRX@&K*5DR12rhE+tl?JE84z$G9Zy%d= zPq@LOjYpy1GB|$2A{UhwEpg*07mdvLZ^@Ut@0vwzjSS1HlDyxoO4>U6+2HOIx?4-9 zjJpB}WJM*9hZB`sFN}wY{8koV+0uJYeGfZ*it11o8+W~qb7;`^(cB7^H_)4!{QMZ= z@xsRi?A~{LccbXmvBb}Zn0G_+V}pvP9@2to^_u;aymV8X5`%5vZ(?=G+uuae|0LE! zsvl(*l9Ox_7sU)}C~DU0f~Ik?Qj}C|I*FYAfXCo~PAGw9kUGc+`uH@&>Y`XPECeRK zkkd6igC^j**BZ}uze#q=8w5|pvhp404Wsh?7}~%5OP2gmkAV$ILSnRx`I{pFkb5X5 zfVfvdo``|MOtN7-mX@vhdm=YY z!&|l**5@+HZfK5-Ky7Wv#~Rue;f8@vgY(U$6t#Jf4!uwpu&Cnait|^)q3UyULkAEC z=TCJV)glTRbkSOXh^6R})98Km@}zhN73$=6cWv$>TESS+Xf-j<&~&e-bX-gg-b9(X z$+@{TL_{;UJD1k-&DzTkRn7_W8AR5f7h3@%2PMihR-Qc|ARY3uCffhfIce z9UIB@TZmo6<=48ir`M!5UCpPzWbgd!o&F_oF}q*gmXY;$bHW$DeYLg6^^pJ$olr!S zgv2)sIt*s$N#}EM=6wYtJrVA5MR)@*7d)}~iaqbxV^t-w2M=HTg2qqD}StTMp&gZ<#~d*iIOxOl4$g5HMr9l}RFXDhDX zkoIJSYEKwX*Iy;2i=)?j^Y|gS9ga21wx2(>;ROfje6n6)uI}T&Qk$f~q-36?T%anY{{)&C61W|Kv=MUu#nlNSad$m3HnisX!gP1YWfS9le?0>D&zBhh z%ANpKn_7p%O1k}2d*zT-6gv1Q^D_-lyOMz$Lo>xG4s}$G>Z%-X8oA<3__w_q_BUW~FeT@(B;jWCu+H^drh_hhZC^g$Y-x_ePF(Mj;HG z=Ut(LDtuzNG0M~r7faiNNYQY2BhKm$?hx~Zl&^GrDo`U0w}4}g`FK6Lr5FXs>~?I; zP@KD`K{aV6wXu^yNSQPP8%<)wkSW80j_KfDioc9z?AM*wO8_5LRwmvbxbs*6u3bfg zXx)@C+S2%+Y!VK9@HZ2)jcy6MrH8|IV!ZUD>Ge3Y!+|+K7T)rmz%Eo~pIY`}IQYJ1 zAw&2COW*gjHfjXRfNh`Q9{I0o3G`M|)PrP4H13zM84bB}rSlH@pCef%9MMC`^uK#P zW4AvE@3Gu|l>AoAN*_!Oo2~#!XH?dy?c>kQ0c^w^xR#hc#*YG&Q64pmgxbaQTct5) zSpW|4->y7|824+FpA-RcU^o|T(JK7Wu3A0CQx|Q|5NptAVYR3l%q&;BO zxOvux+z^Rq?>)=)M+BM$L*ef)&ktvfSAR%v;CZFs-`p(1rupG=d377hWajVE!G@?> zE1D^ih*t)pjcPA(MJn$jOLHZNn{mLDnjIhh;CTJwqP+Q9vFQ1=X0%>fqF$;1cMBU$ ze=Sp=IyD9@n$_QAs9NXFQ88wCArUa7nL?%s4_JT5hK8?#8G7dm7ZVrIwK8ep(9Q{} zNSA=*GN4fGz+K><5fZj=$V>R=LFdzPS*`iba3kW-cTeK=`5%2Bw-kvJUM^Pnwp(B9 z8+AT&nBbOhJXNrg~MzGw*!OB?ujf|96{9xU%nz>sx%`4|0_dwE#tm`#4?KZwqfs>R zV`Pe&WKfkSGHfOQ^!vVUpaua<2Ca`BoTJD1Wg(Rb_0mA^Z@%6v_1qx* zl--d5k0 z)YY-K@_#}Es#br~zjVC4(c2s*Nj|(KJ>}*Sb-^WA|NBbz0(guHF6B{Yp}+A(`DkM1 zb&-93{{iLzv<qRyd8ll<0@fHA_#PyyUq#+JV z6E}g8zURVtBHBaKwn`X)%Euz5P8r`We!#6_6%hp1)>$QtKkf2)ksY^+WkoQH-AJ|s z2^&p1BEI`5$M|^G2)BV%rN1IHCTKN{?!|4O6jq)oK(coKObCnjzID0l2X^tb)!Xo8 zuQhyFYO7v!YbGvLWrQY`?0dq*>QZteSOO>+D~4>!B_De1nG8F4W=L)q(lx=2;dihJ zMN(z_q4y!h6j8TWw_guanIZF3COQP495p&J@eU!D!BrP4gBptVTE}X$Oo5*sx-|wd z#oS?KZUeY*$&#|DNQ|{fpS0*y(WKM8>YDt*GpdX}knzre$KFL7!8})raoi!kI|RcW4{PQ2fD|5F08e3*(fYIFKkl zOTsK?aZ{Z$VEP*V-Y2i_Ylw7k;`Al^5HkaK>)oA-2h86yAG;CzT=XIH>DUw&-}%IM zcmMJvY2n@84P+Mu@Spz`YF$6BoO#U=^(uIshw0Db3S8p-&H;T;#u_-oQ2yv~6o`gz z$$R_Ck`|)_h+baNHVOB;T)?9~l42thc<*Ni@gh0u{|@{9Hg$kl_XloXrhqv zrMQcKD9rMyuhiS<|Na!+xy-MJ_WHdM3$I_lS2Crrb*zIM*vC$fev1ksI74G6_9h{Q zARMUu`0_pQ&Au8R=}7>2p&o`TD7{nY3kqn^^40yH0E}97RG&D-BV-!%yqk*F(;C;> z%b$V3hla`_aT`YR?PYABxEp1YG>aPap+6ez(%+Qp{Xc2Qe$~t+802G2-Mla|w9GC; z{OgF#{*2rPT6yLna_VVa z)W&V#8?NsPlBh(DS453YZ{`|Xh4Q#+1j;QZQ%#}braN&f77!0!cO84XZ8wqH?k{{WXi}>rP$vnGxkXw&AzBkSCk$UiFZufLW0kRkLFqiXi3Gx?3gBmd{(`< zf#C}1e3WcGvPRCgw0G<|Uw1#h;bkt7+m%d&?oE7zxrPUUnS$4U6ky3p;D~3&lltC~(TOoXA)kmtpNZ^PtLP;x~A7}&QRl#g*Wv0T*E`_p380(~mjL2N<|J|7uBeyccjlgBrW2X0g z%VVGSv+SKBfVG9KJqI;|AK0Rvzd(bnvmH*#cNu!6$D3DQ5sL*@Y?T^Y>AdnYUX69gs_cu(uIUmbBScA510ud_nO z+r4lM96#^l>H%J~W%q{4#&O4DIE|uV$j0|K*_{E`%BBT3I&T)gg^*+)E$^c^)vf+% zFC+mXPUw)HE-`m=@1I4H=^e(eW=>=?tkGWyNS@u0=??y8f>V)znPx7%PI5Ko{Pg3X z{>~$;4v%-yHhTnXB4&|y;TO%cS21;Ii*(Hqla!WP>YsQHM1S^tfNMJ`vykyihqLb^ zEd`UzW+>swzpyX^P3b>KhC_tEGN4_pZ@v6V@b>4 zn2FS!ZFIwg!A>ELZ(jFZN3gYyEBw1k{fA`FAR2w;`}@Y{m*e(#P3q!H*WLs#XYQRh zo(ymETg8uiM5Sqw4ww!wM0nrkwc=ZXUPqsv!i(b_oLck0Txc($B;Gijx!YV*dFY)T zagVysrf}R0bFj_nI8=P-6dtTqjXCnBf-v@wNvi(U!$5^r=4btXu6S>%$s}sz8 zm&6L7Ei?LFTE|!w5j=e)63qJDWd)gz8%}1s}bc0Z6_&*#PZD%-2F&~D22d2Jh>wEC{%frj_(KV6| z&`&3@)amDFXY;z?_GS>a< z!1crGXQT5*>|bwAV)1t#(U|g3Hl<_ko^!r-$q$`I)T8^R&&ZipUc9X9YXCxIBYp(v zj$ioQS>9`JLn#L$uCg79ecks8mbtXZdo6gC>?FKWaHh6r{xI!2 zE8@v(o~ZRyr*=YRGb5?b@U;~Qf7*Fj#wnvohEXuHxRH)SwV!_{em$SxjnzS&(&JE` zQtqK9rqEj&H`7ZjIm1=foXvPbmDxyb5oc{;N^@-v`VM-uQsbm{J|*&#)jqOCZnZ2U zGTgq?{6RYPYGJzk-m>4>DfKM)yiMS++fPFFy~X-uE?&(rX3xjS`EuT3=DD=Vw;I*S z50w@ZNahCzh{G;&P%d$&@2#b>D+8B9iORE+He|z@?R~DIawh5IPEXQZM z(*68wvd5V*@;{8dXH?T+^DU~PfCVt3qDT=UO%z0$bOj_7>4XkZ>Ai!rpn?>E0MbK= zgih$ag{sno&_eH>(4>SwLg3_m*MHr+&bsTKbw1>CKK!1U*)x03Y*>ZeVc_S$U^36Y zp!R=1xl%L;jMadS`Yu6Y;Fo@ON5(61r=4Yf45Ezzw@u=xk0K)QR2<|^bml}a`JmIZ z7xa#2WW1w%#{W9w5Y4j>oPI7`hN;kyh>cc8?M%nxWcG&uwAWT>scBO&zjzt$pnr=E zAQQ0v1DaCRMsk*b>`82#{BiEm_cnJ68I2n*fhD-lZ}d{`3%HI;M4LB5AkSQ{+ARtN zq7R~4%>5?;1vi-+m(oLvrSsW57z+DCp4*cc5yz&vY{F1%{`_-2bc;n|*_@4PYDr3F zfKWc0KaTD<<}CDw%wgycn*i;e5t;nzhY+pMcY<$2Fs-F}n3lZiGHZji?Qbj(pQDg; zQiae9#HjO(pO+U!JrB%c&3D$#pQI$OQsD1CnD2vnVzm-Ez$m+JZghfmIL3JnUI}tH zHImzDE;1qo5d^vfr5{!>OJXR_PP-F?G{KAgpTm#{+h0W+b}>;0;KIv&Fu(A}IRO4_ z1&$oHsBop&q1IR}8i7TI4_x?|3&qJuGl9EQt|-ER-k~=X2ya?VAT$i&X@GOdjfcPJSUm!LR%YnbQ_+T98jw*s zo3HPtgJ?MIEhb;Hh&i<|l<$Q_$FyBgFTGKFk+I8T3w-iUvD01fzd3~R;n0cit%v|_ zWCaj8?rch#v??eH&JfMQFlNIkn}^MNNiIIWtk&82kvtw-FAfbR!1Fa*jS6l!g>7XV zs3)$}5b%b1b@=&0$Y86EEb8PTM8Eg1Q9^GVMsG6{3_rr~D*UlY7+5S^hk%Rz!hXsU z;5w~DSY~e$#J5OPA746OgsiLdkTx)mu z1|J@>t-SFA$Y$uqx)Q#(u-bJYFL0r%L?_FM>t$~I6Q|{T&GkJO7MO)<2-x#93Hl2} zEI}5SN`pHGGv2#fEfVA(YPB-=d2ODFD`6I)Q{M|T+sarPI@mnt2wBooDv?oYOb0R zF8iJmb^iSAy+_Lk4aJ_mgC{Z{Ji`leTcL+=kYZW=PNYVOf{h>!6(M|dm^DINJ+Ug0 z4bVohq#1b~HR`jr<|cw%?1ozU;4S0?C~-0_f3nqXVKjsJl|_t_z+&aTRkX2>N^lZl zpAEMuWP_MGKdF+`oXV-4f37<@rhpGc+Kuj)NyJt%QGLT zDuL!O{Nvmsrcm>}YlO z?2V!UyW7fPN@$tXrmOT72bkUH)bdeIQz(122b_zhLw{X zzmu$+`m~1WI80Z(nzX$)wWo0(M)`xO{a+rXavVR8m;83GXVlpi4w%+&xGArL&)b55 z$O(=Y6@iY7O=1@`6XFvmYyio^9up0R zr7|A0ATi3!=Upeu=9aislb^<1DHP^OZ{}^RV33Jzv&v^NlFBkaq%Tr&@VBxjwizSuEsVzom8z%!nkRnI6Y35$-!e_q< z;|5%UlB4TY{}FIt!#+}}L?U;w4`$!}5%hAMUB9&<3~Mt0#b<1FuLsa>AOs87XMa+$ z2<_}CmjJYZl&!3GSU_-=nr3~Y)XN5zJAOJqgT|L;4Y!ABUsXQ51Vk!~NxW=a4511+ zDo`qxDi)kQu4@+dT>b!(kFldHjKJ%b>(^YQa#ovQ8{^sQ)r1bO9T^|>FoBs-q3-;& zFb)JP((iM~K|MXW_io@~FSy_6#k{{0)BSE9nG1SF5v{*sz-{4oiWXE;w3LV|pHchY ztDRtf*V=HvRRDTTnQ~m$M%{;9DtivtWlJn7f!BU0`%|_ejF=X6KiA(oOjcNP#{T== z)J!lwFBe$CzUf@sHP|bZ!Uh%rgGLAihexxxg<2`~=|b}=f-k|#DWwX6y-d3 zB%)1&1ipqGSQ3%J%uC_+^AcgB9)F--X^maqNYa7+{gc^q&5yj!+4j&sV~5Vw&I7@o z3rIQIg3cE)A(96ToL@t}YNIro$OYjW93VvoyA3~3l-aAlA6AG8%;?RKKTcA)d`%h- z=jVsU9!Hg8EUhbm!JRJ5=EA9(q%S#1141S4`Dbw(|41^3oJYtlMh(!HZYGspK-H36 zO!xKC7_(QXNe`RNqe;eH=WA zw232Y47Jza{QpH-T5)*e^|e3hAVt=?iQ0>hDZ;~27n^6}236w@Cr35RFRV)Z-Wiq* zEbB|kHz>{KpB0~b)H-Y+1939Gk&>|4pPHaD@YbGq!Ols)y|`PNqz0+K>Dl~;CH)!} zw9Zb8S<#w89&U05oNzQbqYB?QlS$=_T+08Xc3syBTsgYOYc*AuD7*7W6|n}+RXcCi z;qf(o_(Lwgx+haRw7QJfswg=@vXhcAO*Qtw8os?Edb#(>_{{<%oLv8=h(jbWNeb(6 ztg&|xQ1+V!8+d+sZ}pIztTfXp@yYGiRvI;Ce!U!`kesf6ahgBsGUrA|wD{(+u+%xX z`e}}xIh_JSw8J-U>nkv^kC$`thy-k^L>qd`1Cym*-Y~r9rFbOhdUdpoN-fwx%4}?h zpv=3d)nbZ2{1810RUJ7tAN<;BP`x%P>eRXt&@Z~VfuHy4jcbd9z4uF=_C5Rp%uG&? zSW?dcU)WB3=Qqca5NoD_23b881T%H^nWKFw4M~jZ{FDY2=MlAX8*;9 zW$47oV>4dE#uU!lJMZ#I*HH@p-_i$sr?^KAK;r;IeFHHUjihk6H`~uI%WDPmF_GA< zu2tOmh`krtuB7puX&Fq;$#um&SW^i!EXGmO z1;_EVMI|?4RVrh<6{{Z3ThsDv&M}G0B8R=|b5X8F`2&d2sD=?Q;*4AJcaxW#;k;Kz!#7M|;oJ<2L(}0US4TFX z9k|=v$PW$4|E*<6P9*dz%_kud!KN^+xrl!q?ktz*m3i2MjI!EZbA{Xj9LSkJ*yeGD zvXV~^eizU@|H7#C__lfYUnYq&NCmRxDB{bj3$@)%b{y-*=&l$qquB{d2HJKqM7HL- zVBW&DxiR{8%qu zXW$a(Oo3)snE^@2LFD7E3(@h{Gq8i~>z}I|Fn3A9E3#+bn+Y)b;@!Nf0PaGf%s#}B1g{_B3_i!lfS}~KQaeLU;f7EH{4c@RLSS_rXq~u$p%K(!1m-ss6vB<%IWde@xqzG(AOBKpE*pjnw#umAns(w zzPh*o9MG}|epv|m?8Mk2sl;OSmJ3RLj$Ylu2#bB(S;36-a^AYO#Uq=h3OVq4cIdxN zdcy(*u&V^c!{-MnRXj5zOo@87iUAuYz=p2)?aN(zG`Qk@U{vfTBypYW=*~ZDXTBoH`dP$A- zHyzyHyW4VT0iqd&OkU+J<$e|FB#)%MJ)WgquEDU{b(7gwO576ZQeN3|Za*t7%bQPJ z-}&-S#uaA`(QVhTrNZ@(SGunckh=_&XD)(#;_>|`faR|bBQ4AJgLa?&&R>9L{|M@n z+|*dFo2@FZGuOb&HJ%5VZUrK%_8IuGD^2(8FUZs}QQqnGMyz>Gx?!oX*n^+95rdvr zJ=>y6n9-lg;KwKC*Z4&|uD(Rw$$?G+e`x0U4a5y5Cp^JN!a|fDe*b||L-R2Fi zE_=GH>+&>JE$uwDjuj9%LcRc_4JsR%y;*WDTddm;Bw4^)PU}N4^T?Je@d!=-$&N{@OknmQgI`W{7n0WX;e4BoRCKt!JP?QsW^r5nkl%hdb9_a4 z^8-kU^|IHd3}<7MAm7{OoJ^YJ$63u&H*P_^-T?I>NAhgD%(b{ES%|+rq*P`ZEpLAS zi!}D!NCGMPG{A&7{pRoql$)TJ(N96jW}o_j$k=LHgd3TtZq~3k+z=mmIIspYZ72vf z5U|BeE;Gw{6j8J#+h(P$zBk>O-sJqnyjC=l>2xlC_~*ww<{wtzs!479@3Z*2l5gQ85SYP0#%&-M|oD+0RZ?*7HRr9SAgNx2Q0 zJ%gm*xQ0{mYe8#XEXMp(JK~#O6HaCP$1pa3qW4;2!%jYP<8_N8usZwOuds*>IZX2a-oK^9-2W{hRteRdnCrx0_7I=j>(=F0VG>&OaTsZ%#Zc|2@6H z9nzhm;I9>~>b*O2>Vi1FdhS=@($#;tY6tQLogB_C*8)91wJ8%M)3b!J8O}?+{dt?I zp3`0ogqCPnFgXlx9}O>f{K7dVCgi+%y+9T>0YSGQvP+lm7mmdAVHfkUM8{#tnzZUS zPCS)Q8}*-eNx0*>ZP)i7{ihy|+AVQ=!CSyGYdiXKvf2%6Aq3}vy>XV25O5e6{rj~H z!CQq(ob`4>ADhpFDA45OpU_-77=JOcO>H+&o0RW@Xh)n>0Juopf4_S_>{ZSaD6ZF^z(*l*(2B zOq*p=ip4k|9{Uqu?maE}z|1yH`Mr>EdSlma;7_*eUYlW!7YFxp7W+&ey^1pS9R+B* z&XC}Y3@-v(rs4*$>qia1EJRsDfwp6rM48|?VtjlHv)P2e*bT$_;6eXFSp@NOi;d%6 zBiF~}OyP2Sep^T&;`Z=iUFpW~-tLnXg2`ObG1j5ZbMwF}1MR7vUut^Tl2Ehtmyhgy zTwN=9g*aOsG39aeS-@sQyI6m^>m zfv1fyEw+E6c9;rvx954py<+F&e41uHMnlPGnD`ffz_vU009I|&pD*Wp_?)j2uf!_p zsYTh9S3p{H!RDSSrinQ}aM@Tsr4FC~W22uFX{F8DEU7_@j?OZJ#d(y=xxumAd1%m6x{dLN2WuhmKFN z(&+6~$-=@1bO;qUS$a&1=wVT{7jC&z>V}2KawWqyj0ULA98ug$w-P^fqS0)Zi&oga z1AbC-3+wyG8gE{&tB|xe&cx4v%g6H^WlRfdXJ-&X0xF}75~ayoeouyURTq?bo``4{ z*(APNtx|>aay!S-&_}wqvBRh!B_fbJ!aHv7T%VmB)Vxr?yt)fQez%fm# zu6N_>x=9Wv)rri~fzi|h=SIOydwP4m(^!jh7o1p79Z30fg@+JzoZgCQdWMn7j@1Mr zmE^wwwB!IaOyj|Cg5HNqi8=Bi7M`31e-@DY3E)5Wf6x+uP->_>3HZ$s1|)v`?H1T@ z5Yl4or3xttiOn1;5CtqUIcRM4dF6}xEgS8PWD9$njs3_LuRfRnlii7p-jGu>(2TVI zUqI&ac-h8EG>UDY@!SGGLh?S#O_TIGFM?$@ASsg`2g2mxRKRw9ZH9CfB!+FQPM60n z2AC7j);3f!&G?Czvv;B*zTp`~`A}=JJ-Pkj-RE*%>QIt96?8Zj!kzR~Ye5BSUgETJWG9p+$pw zg#Xz5P5!6cO~qsZv*y^dA)oWJ)1U;FH)jPtypO9nptKo-4D3T_e;+})5o~Yv^TC_5 zUuw|TeT}D0&d03B*#F5vE1i$U7CbN68G#or818(5@!a-CQ7I;feeoQ2J{S9(J}kZhVm>}x$Ly8d z9b_Xg7t6N%>$sWO5^L>Q$#};zg6_)oSNsoS&55y<4RoJ-LS*xU8b&GXicr~nnQ24L zqw%uuVTq-4&AGw`E_R(RVOZq4YoM%0qEi2C0d!=nfRNyY6SJ#neC3(ZtR$0HVlba7 z=TESphgYbep~l&mKhMBhLy@D_Gj~9G21UY~EFZ`p=k&dph2BbhAHy#9m}?*8&mHS4 zvPU4^T-TK;3*kfT$MXIbR!x6a^@BU;4=|hWha4(_FH`r&uhizmp@dj1kkXspBf%|f z-9h2|LI!NHf?S}CZ(K`8g$`uERT5)d_CO;v;!>dp+@u+seGUVuT-@S>e25)==7%z4lPDh0ud-xwtPvcC`+q zvzTT^F4dJu{^Q8!7Oi4=e<5yBU@0JL$j$rDw7y=w?!3-)Ltnt)`5zeT*6Q1qp+w4I z1>Qj7QC(T}L<+Yi?)CFI09GsQScR{Wx3l3Pqc5gzVLhP;gh*9 z%OhcT$QMmIEogxRb$3oggN{b>!kK1bAc0yCftgaM?ih-siDJ<WGxIAXpbeObzM^c)%W03;XIc6}dd*hBCCqbL(92ZH?(98Gk_Lj&vF5uIC~p_!0+RQPp0h40Kb=p!aNiM% zHV-nLFO@^?iL;Fu@Oy7=Sxt*(8T9s{xg;V$+6$`9Fb{^-llEoM{e9P7M8_|SkgGPoFHyhp z3|Vfz51d$NMbM6MLkHKs5d040mL%Bfdbk#zv^& zz1yGq;Z~(pla59AuAg4*LHJl6y_H#{wK-eSl#*Um-q8Jy5XrvN@WSoj9W2UPN5|(G zxYs6;8&9DVmL6L9K2LVH6fEABh%8VZQteI6Pm$f3fV6H)m(KDy+m08SOnq8`=Q+MA z*pwQu@2IU}uG*|_nQ`qPIg;%ysqcf1M#jop)T| zwWmMV_GGiLAVJ$mAYyu8ZggNooN|q!{n%oh)Ag*ewxNE9DK|P_U^7`b`RH(8nCL$B zZburb$}|%Y*pDalho4I6aN^jd&i8-SvNBwIl%Mq(Qq}x8blc-fe@X?T1W<0G5^(Eg zzl&Qc%TlB3qP*t(MwIB;3l6J+RN=0^n1B)){Eorr8EWc$vPLvp!9|Fi!jAUlPk+Ez$wgu+0sHJURkja{YJsB?GNF8R!*Us56`htGo_Oh!yPFVj`maryJ4DOMD7Nd@u3tRP zhEhz8)!{3AXwm@bsdn*q)#T#5-g{eoKBY)v@yKg(<#Kp!)5{>#Z#aemj^U2j&`XT7HJU+8g6(Kl@WM>&dv@F*ru{7sI z?^=EsNi~`B#QBi@w)3De0cL42GlNNttqze=wOGIqU4E(k@@8MD*?{fJXzG;vQI3XG z=5K$CY))kQ_SD3F@GBVT+P3uFXLPv zr`O~#&!yVWAPX09-Al?bC!H?)M*~rRm!R z?@!4*?ZiLwkyQ*gPNq2?eB@tgx3rI!^8Ucsq#jan`E;Uol?G4)%?Tj>XbE#1#3<=R z5ay&d(H<{9zV#%!rU#2!`)h7^I?tcwR|DUS_bUNs+baYf;uW2ypo(D{ zbE7RItq#dj^HYnx^PBGicYN&$!T``h4{Z~nl{q6?}S z;Tr(f`m+>*GbRfbSmnfzoU=N;$HO^y6BoV_GGA&tmG#JYyVq=)*$utyfig8I_F6sP zuJ2IIA14a8I-r3R%x60MPG8Aj7n=hniFlDY)ED%_@UUN!@}z!vFcEITs?R#Sjsm_I zjl*ho2@G|0<`)qDMic$|WdmE!KLZ;|<&Mop-9fSjQo}te?Secr5nr}$miO$qELpb4 z4T}UngYA46>UrV$q7W_z`mo3Ve;MYk^7EdHQCe{>Vg`8HknfgW`O7Gq~Sxif7g-lGG zONI9{(MtZ#AzR$&{SPwx@1$>4E-oC-DE#;XCo@aMy@L~}+uGdvK+1BsqRU+KITL5& z>H?n^%UKQgv+3fVtz%r6m6WL8q(ESmWf&9eo1&9+&ZLQk{W+}4*lhvs69Ekd25zzZ zC*2&MJui{-H+!UEI_3_#!;f{!lK+k3>q|R5I*Xi4;27DO(>>69(*KX?j=kcM3P_#< z`PgkZ|E{33Dwle?w!|D?fxNHk<}$n=Te)asKeQpNPPEJP-jOH?rc5BbDID|6k@5rv z_IaOez=+1#{;c*Ua|5oNT3~9Ye4H{}OWr03U`T@fRLZuks~~jpU#jkn&sHEHo3r~r z^Vy@WPSxO~S09@K%9Ki^epXBm*iN;h;2tM%Yxc(CZ=h29)j|_Cz-(JlE->$r#(61M zlb|g%3W+-2=(^V=>QA!UGoNM;l0^z_(c`AUG}14L{gMJhQo~J_b+T#Ys`yY1ovsL! zi2ZN2zzX*|=!~and|k%yGoOzyT;}gRm-*D0@nB{cM;5QKpQkIC3F_QR<01*#f024< z=)O>We@C|X&2qkdU)+e~x@o(WxDTWiAoPU>h$I9nry$Pe6&1DYeExOM@bF z`1C(?E0GY2kN$R_i5m$}Oz=^etM?*{0mxQ+LN(hGdXNFbtg>~N;cz24hlyf{^esda z#cFV_(9MC~o>-PI>eJ=>T*_0IA9k^;oLoH`*Y=jD)GihH6QyA~4DVbQvFo7*myDaf z{SL-TP2TWJ9)b9AHT}r@Tdc^J348prM|kEBW6!Yvr^l&*70$E5cm#2KN2RZHdyoUA;b%Fjsd)N}hd;Xx z0f+c%0moT}H`IAVK8#=6BmEm8WDr^atsQZLqBbmi-d6+rxa`t8x$7_`RQ$(g*x}ja zX6&j&6UO0S&4Rh<{HIdcY|d5B0xDY?$Iq&riAOOeqj+2V#KnB8tI74D+* z3E6KWXU6xdkDcs0Mc`}V3qW-0M8KDyx+&r3hZL0&dpSj4H2-K!{JybiO1QkDuTcGT ztDET8a7jpu8v!7?`%)RmEj29cAFR~xX6ZR67M|Elb)SngEB1+AXW7&j$11T6o&7#vt+W(f;UJfhdKDYYZk@lVzi4J(YF6 z(+8(KhNr5A{b>34vtbF&=zlz8nXyUi4W-v^PweE2*d1OcSD)rUr~Jl9f7k0F7(c@I z+6QQ@44%?q0!3;x9uNavl_hT|AIAvHCS)Xwxa_Gvmw8+=v8O?MJTuynVIb;~-{(P* zwM@JJ0wNE6ScVrWbgS|I_%d!X4z*Hlws9eolIJmortdybvg-di^6m|x#>*6?MfUlD7|JtsmSjGV5{JN&iy2P~cAwhK7s%7pbHRV?t1uNzHKFa4yNk{(Sc)oHT9s zT*6gf?U-f!-*w^Yu0)qlYOHu#4Gp9#AD8-D+NxWT9WQ zoD*HTnIL?2jTkAR-67WlBQ=ah7b`u3^xPq^uO5KIr8Z46gwm#5-~l|Zk3f7&if zfHcgyQI#whudDjT8?>9!pqD(3Qu&#>;||?lo!~X3qP6X&qH8qHwsFApLslcRmEls? z3!`P%wD87@5>Jj5pT(9#3jS$M+L2iV44HKeZ2s8V+H&5dXB?u9l?||ywf=Z`?W+bQ z~9>ybV613EY`{o>w-; zGC26w*?-ZR&ZPWp_I;=EI(~xv5+zVwFyQA>L`oKDMBW1lIQ$-RaJ~plVslf(EqL`y zxtdiSL-6{q8`!H4>#dljZK}APWV0pwXM$K3O+TF^t+6CnOLa6*SUQ5l_Nm!TZ?o}^ zc^2(i5A{Q+RN17IrhNr4>!uIe=t4z&HTho;EhmmB{eMyVm;urC(lJ)A6`3f?Re3CP zp?+9<(e$!|D6@zPJ40$Ib+Ao={ybmNs9kYy?W2;HPOabudW)m>d`N*}R~fi=+7`Tl zFOl88D6wbo+z@>yDs`m4Z%l{ZC2=K)l1RO9(U?lhp3;+jUCGK$DTNVV#UnS6{PGjE z_1Hh17Am@1ZZzGt={!I9tl;ld;k-5G1849X>(7d(R_zPD3vu@PO$}3ZnrocXaC#pH( zV?O+yad;+BT+}M2b9Y|UYh7J^)?Gbb+-x)fGGK>Wi-foAAS0!+Ra)7wQBGYVhvR6R zxZl@WmRD{hR-|}`;waT-r=rOJ7P-;6FNCHI!cM-^d=w=ADR6VlYU_(fK#7~vR563H zk8G~eezk`sC9_W3u$_vqTwK34Yyu4^iocyt(;yPYbR$PIo;#YLZpoNl9Mo2+&hk?u zr26uTs9`2FwiVzSgq~EwyuWBjD^Kp69#0(ncG4CR?KE7WNejp=eTC8rFBwdFrysyY z&6*i-pdy$9DWT7L?|u7Wv9mS9%6y4QU2DMDNH}k;v*IXsOxk$GvdNr*_ka|nWh2?F z*Q~Tw6*{bvD0NHwH+{BV%ZNeI;HgRC-bl7VFhtX&1$HuHt=NJCGzj`=-Vw^;dS z_iutUKt=ZJaYb0CdYt#epG#iwg4f^Ru&DdveJ<qJMA9rCPk{zj!t*B+-zW|sO zSO_;};Tr>&Ms5(7YGD{-u4|W$1QKq1{YRc&Wx{5H?CePIxi|g2KEfCHxC_z`yj7$y zZH`;-b|E=Kij2m~@NO~edi|TavvF%hf%!$2>lJLOUJvtM%5Y1%OXz~bo@wo142tH& z9k2)aJNA;!@wgzgaUxB>ZlSrZUhSSI_CbSTbPJ@+JQ7xf`H{_BzEn+JCY${RrQuJ? zu-?&cQklluZ{HUs6K$~UmGYv*euMt=!_oIAI-)+OHOy$GK$|`6X9<6ifPD_S%qD}K zR!FWjLQv~a@P5%`xCBnrH<%hTiHuY8*+PM7M65f7$mRP9E#_W^!A#qFF@=w?2Wi)e z)-`CEZ)GCK=AY?}BgTs6|Mu^mxY$dL0cP373)e@Tm_=;Llmw&;1d~{X*Zb%lMh`lP z?pPtgGB<&FH5!*-61;cOOTV>2r!1Fj`PJPV+^^*DuvV z9LT>9PuLu8;@)Hw&*?KwbC>Lx5Vam>1d=1jlx^*KbCG(+_GDl+&qv?e!7b4YSShJ;G zd8|b-u_rYFDflHhcPPW^5#-y*=4y*SQA28iXwPY*;I=OhX@L;3BeX;@S4i#NB_aoz=-p*-!`3J8j<8uGX+UptSI(DrIuO}=oPu-@v@Tfs z>|6BGGPMY1Sg1OBC_!=vW zWgNbEkLAOg`N;>aA@ne*U88ox(3(e03MH-6$hCP#y=(x#UeLdf*bONYy3pr3F+EbE z?mcdJ1lokP%SA732sLUsDlf_+J8jb7blQKXhUi@}1#Q*Y=_=LRqM(LPqbz|UmZA1X zr`lluDBTjMTw(iQD*Xu9XF(6-m+!}4Axgr4%|OUUbS4FP2tob6vSbw22Q^A0iQ*)^ zni@4Gi_b^uYzM1r?B}*TN+xSHnMxJYqdwleEs<7UA+a4^5t(t2n4T(Z&Kfbc{M|ZXhi8lyqBaBRnR}Gt zi>iy+`yIAe2Jv0JC&+qUq?IK<=XQ9x-SY-z?jR)jqqlQsutdYyODx&uQjT`&JF(kf2!yg@Bg+>(xM~ zTPcD_1x0m+$YnW-(gQygf69Ni{2DQ^H-XQ*)##BC;)KNeKsng#J=JKWZ<^$P_{KRF zrP+hE{;gHY4I1Y%SQ+{lUSv>q?t(zmtNo>{09o+8vbY+S&ZnC<4eJ;vaO2H-kNW%y z2n=8QG(nJJU%Kq}YH%Zbp2Piqm`AyE|LM1{*v=zM#6@c9=oe2%Mq~6uUA@-h=%9~F z+h`k1W?cs3j=$iWR<3s`gZ$G2rDVJU$UzXr&jGvMWfvm+a)xeS%E@H5qH-^Eke=Jo zq~(6-6J%*xy<%jdnQIRRa854PM@4fO-Ph_{ z;yU>6SnPKEF>b;x9R8|f=I1g~(a5qUr*RKJyE{KDGhS~X?(a)6KioKgu|jgng6Li2cC})1 z9A*oxFsz||reJ?*(ArYc=Wy{}>p zOjt{PfQfRebpm5O7Zp?PfohEsfl>6`Tjsa5Z>qaYLl?g>HCH}}%vxxzY;SQIQS#w5 zy{FLnX@AL=Bhc0(7$S(GnP!Rk9zGmXJG?R8(>lzi>L{9acH=JZLSm%z#uxLAJ2yB=Ub$f*287*uAg(dk z`qUOSl^#n+O--$F$Mw(k3d>8OS3SpZplSXX~#$dioQtgdZp&oja*bQ+omZZ7w%vCVvQdtMFXw!>%cc&6E6z9+lr4SOI zyihX^Ux5Yj=&+n326(f7>6^>zPN>D6EVSu3TTlRBlR2x0|F zz5R`LlX{M8ENvF&Uk={;K+j;oUfWmlF5E7mnu{Oa<$`#=4 zF_-)=9b|$McTZI>Hw8r1d+?{8hBrV4fX6(%gOv~%%U zSZ%3?X(6iK@_n$x(+@w&zYOFudibsEuqU*?X6_X>iz=RUJ8IYd!TsRO_gZkxz3I`k zKyH3+p{ctxeuC|mzXRinf58RTx@~=q{9+aFvhsB;Bsay$IYq@Xd4K%4$~i$#T00{v z-la=%Z{Vl6q5n%Z^Q#*T>ov$OyaAngbIR;F>d)@u6;hS2;DR16h&d3!l{F)7xjx8Y zVaMxcYEq+Is}`S*xu>YsG8g}NPC_Yn!pzw;TmHe8ECY-fa=TZ$t*JrM4T2&iOWf*Z zJi5}WfFaP#d1u6kVjDnvmobp{gS$)uZ($uLvHs?=)Jvjbb4YK>IUhP>^*NSQo@B3A zRA{X(OJQisW$mOCqniTrm0)e)9f?VxHJIivxIuOVJO`+zG@vLXFytOf&$DSC=U?9` zGUBI`7H}z9T`&#CpeE}kJ`0F&40=UrVLsfPJ(dPP6d7+{75@Yy+-5A0v`hjbVYKw- zIo}1!++}8R(x5K-5|1)x$!7mQe$RC#tKqH zcmjGr0aN7?0_p4DV!Q3h`9-Q_Jw-GANDwDKp4cs=49{f_f*H6x=i)VgW5lr=HLmJc?7+^qM(oE*xG<{!~fWKgX#Nb zDf-pu+!G$h^lPD!?Jt%4Q?hSTUk-I9-R3wD&R5Lzj(QWO1?7Fc@t{CSsi7?Fj5n-( zo$`d+epa>j%F;83Db8*`lev54@Mg#=T{lDiSgBc4>pNb8j^T$7iQ`ib0*lRS;RlZ+ z3QB56lD!+gC&sqj`-`KE;N(aIPf~>*jW!lc>>C)T>)kae#F| zHREM#HMlh^_<6!o6K*gB=h50JeyjQwp+Z-Fe9HZ1!FL9xnCW<%!!NB1}PfRMaT0t zu&KowYD&H&t}sR|cILvVZkeAAP|B zy0PxJQZ;-DG|bYD+6BA=iG)4VUTs$c+YR1H+!OBtsDd7wHOCD;4Q3hgyn6Sgu@mop z5JkeIIe(}ZI5{^0&LfE=Zb>MBiBiKjt%?|6E$r$TTdlHaSUq`87rW7y%Ur$@OSp2@ z;z1}_^+D-n^c^Uy7oCS+Bd+w_vlp_CHV&xMpbS<^Ln$_P=OZVmM05C4biRbVWKYvw zNDJv|;ubL;*y`MbaRhHjVSw3SGc#GwkOY4V{$qI70Xh#gR{opl`gvqBZVoOJq}7lo zQ|-9LVdgq>_~(M zr|0#vt_D#7gfr@;U5J-Za^)hIZH3SmG-1$9#Gl;`5@lNV=ke+mm5WY zYfP*Bvda}f%|W-I>wD^sy=J~?mb~AWac`vGr@b03-@))d*uDrkLmYhiP0Kjt)ZxMK zCH{AXj;z%P_nKu%U@@dvHiSU2Td{o3&g~b{Bhz@NK=bjLy#MsC_l#0^zK6e@HTRw@ z_jdd9?WXvSt73KK9EwrHu&>h|nA$mV-Z`d6_;%|z#aE7hN%7W&5z#C}-v7nZ zS;sZuMr~i|P+%Y;9itoyDj^Nh-Q6h-(lAO&$&nM3?ieNAh@?ZhTbj|}Ml+uId!G0G zfB)>Wd*?p)b*}4s>^hF%h9$9QK~uVswBEYi2@C%YWl^x%{aZ!3JN4v8V8Q3GTy?~E zR&~Uw4S*}ZA_C222_g+e=L`b#73qakw>8=&0SQsTCe=mX8V>SW zhrx)Hs@2l@Tk3rCLXuwOXwuKnsxkfP<@o0wJ-ijyAkX`az@GNhdaO5gaTs4A3 z2+-HP8y;}gs9Xc^^twqn)PaW=OM;0>N+(l?SBOtrB6F{Eg|2u1ZaJdwzzsB*)}p@x zqm+NKep`O1ZoC{qZ|P&3dLU|6)F#(1P@WI`p-VS^&d^BHEHjPA?Q_keg9?R+l75f@ z{|MCeD7@_Hj%|mok>03!;smwB1rE!Kj7bAvtL;AtiGMz=A(o2z43O;|1PaK~906=! zJnUj5z`b4W4#)4f2g-?(!FwUpv~xxC9G8bptL?@`&t^A6CD`gkLlIbW1FKk#%mtyX zGI;0^o~Y8*do1N4v5eqkYU+yNTkGXjj&Z<3a+A-c`j{$XSLcJE(==yKECA-Tnr~1c zi&Y}5^Zrz0lWLEDn)$M8cSk|3APo)_yEY2Y#$UgUl_)H@o8O+c*iPsn|HtTPV_l-? z3lc%sy{1jfvydZsw)-IbEeC?sMdOuZ%#-Kql~K5~nZa|C{2arE1&`Uu1Yco?au*gj zPxeJodq4g?aE`qp-AzZAn~ABja*Ig=dg%ns_t75l$U0S8O?715^@RBW#R?Bg%$%5y z%8&Y3A<3Wra1y`SZr=twLW_%SK(Ut7&oG^SWWb;Wuxq>Y{|WXQ*{&8ROC7P$i!T9T+u^OQmc#6 zPi*IyAnErf8NUH|u*Wi8KtkMm>S`e%Ub94Yci(F~f`R$Z1Zzw28tDwhv4q$wBiu

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 5/7] 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 6/7] 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 From e8f4d818f9b46608bc95bb60ef0bb0633606b2f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=85=E6=A2=A6?= Date: Fri, 11 Nov 2022 11:07:30 +0800 Subject: [PATCH 7/7] Update ci2.yml --- .github/workflows/ci2.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci2.yml b/.github/workflows/ci2.yml index e9901cb1..40785e13 100644 --- a/.github/workflows/ci2.yml +++ b/.github/workflows/ci2.yml @@ -14,7 +14,7 @@ jobs: build: runs-on: ubuntu-latest - timeout-minutes: 180 + timeout-minutes: 360 strategy: matrix: python-version: [ 3.6,3.7 ] @@ -81,7 +81,7 @@ jobs: pip install -q requests pip install -e . - name: Test with pytest - timeout-minutes: 180 + timeout-minutes: 360 run: | pip install -q pytest pip install -q pytest-cov

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 literal 0 HcmV?d00001 diff --git a/docs/requirements.readthedocs.txt b/docs/requirements.readthedocs.txt index 4939f85b..10942403 100644 --- a/docs/requirements.readthedocs.txt +++ b/docs/requirements.readthedocs.txt @@ -1,2 +1,2 @@ -tensorflow==2.5.1 +tensorflow==2.6.2 recommonmark==0.7.1 \ No newline at end of file diff --git a/docs/source/History.md b/docs/source/History.md index cbc77707..e74dba8d 100644 --- a/docs/source/History.md +++ b/docs/source/History.md @@ -1,4 +1,5 @@ # History +- 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) - 07/18/2021 : [v0.8.7](https://github.com/shenweichen/DeepCTR/releases/tag/v0.8.7) released.Support pre-defined key-value vocabulary in `Hash` Layer. [example](./Examples.html#hash-layer-with-pre-defined-key-value-vocabulary) - 06/14/2021 : [v0.8.6](https://github.com/shenweichen/DeepCTR/releases/tag/v0.8.6) released.Add [IFM](./Features.html#ifm-input-aware-factorization-machine) [DIFM](./Features.html#difm-dual-input-aware-factorization-machine), [FEFM and DeepFEFM](./Features.html#deepfefm-deep-field-embedded-factorization-machine) model. diff --git a/docs/source/conf.py b/docs/source/conf.py index 7ab605c2..50b0f80e 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.0' +release = '0.9.1' # -- General configuration --------------------------------------------------- diff --git a/docs/source/index.rst b/docs/source/index.rst index 9f8314bd..c64d26e5 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -42,18 +42,20 @@ You can read the latest code and related projects News ----- +06/11/2022 : Improve compatibility with tensorflow `2.x`. `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 `_ 07/18/2021 : Support pre-defined key-value vocabulary in `Hash` Layer. `example <./Examples.html#hash-layer-with-pre-defined-key-value-vocabulary>`_ `Changelog `_ -06/14/2021 : Add `IFM <./Features.html#ifm-input-aware-factorization-machine>`_ , `DIFM <./Features.html#difm-dual-input-aware-factorization-machine>`_ and `DeepFEFM <./Features.html#deepfefm-deep-field-embedded-factorization-machine>`_ . `Changelog `_ - DisscussionGroup ----------------------- -`Discussions `_ 公众号:**浅梦学习笔记** wechat ID: **deepctrbot** + 公众号:**浅梦学习笔记** wechat ID: **deepctrbot** + + `Discussions `_ `学习小组主题集合 `_ -.. image:: ../pics/code.png +.. image:: ../pics/code2.jpg .. toctree:: :maxdepth: 2 diff --git a/setup.py b/setup.py index 54d7c3e9..62316c0c 100644 --- a/setup.py +++ b/setup.py @@ -9,7 +9,7 @@ setuptools.setup( name="deepctr", - version="0.9.0", + version="0.9.1", 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 .", @@ -38,6 +38,7 @@ 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8', 'Topic :: Scientific/Engineering', 'Topic :: Scientific/Engineering :: Artificial Intelligence', 'Topic :: Software Development', diff --git a/tests/layers/activations_test.py b/tests/layers/activations_test.py index a8d1b0e4..09df7edc 100644 --- a/tests/layers/activations_test.py +++ b/tests/layers/activations_test.py @@ -1,9 +1,9 @@ from deepctr.layers import activation try: - from tensorflow.python.keras.utils import CustomObjectScope + from tensorflow.python.keras.utils.generic_utils import CustomObjectScope except ImportError: - from tensorflow.keras.utils import CustomObjectScope + from tensorflow.python.keras.utils import CustomObjectScope from tests.utils import layer_test diff --git a/tests/layers/core_test.py b/tests/layers/core_test.py index 9fc66420..e96fa466 100644 --- a/tests/layers/core_test.py +++ b/tests/layers/core_test.py @@ -3,9 +3,9 @@ from tensorflow.python.keras.layers import PReLU try: - from tensorflow.python.keras.utils import CustomObjectScope + from tensorflow.python.keras.utils.generic_utils import CustomObjectScope except ImportError: - from tensorflow.keras.utils import CustomObjectScope + from tensorflow.python.keras.utils import CustomObjectScope from deepctr import layers from deepctr.layers import Dice from tests.layers.interaction_test import BATCH_SIZE, EMBEDDING_SIZE, SEQ_LENGTH diff --git a/tests/layers/interaction_test.py b/tests/layers/interaction_test.py index 77a856ad..5f162f42 100644 --- a/tests/layers/interaction_test.py +++ b/tests/layers/interaction_test.py @@ -1,9 +1,9 @@ import pytest try: - from tensorflow.python.keras.utils import CustomObjectScope + from tensorflow.python.keras.utils.generic_utils import CustomObjectScope except ImportError: - from tensorflow.keras.utils import CustomObjectScope + from tensorflow.python.keras.utils import CustomObjectScope from deepctr import layers from tests.utils import layer_test diff --git a/tests/layers/normalization_test.py b/tests/layers/normalization_test.py index 68022834..ba67a25f 100644 --- a/tests/layers/normalization_test.py +++ b/tests/layers/normalization_test.py @@ -1,9 +1,9 @@ import pytest try: - from tensorflow.python.keras.utils import CustomObjectScope + from tensorflow.python.keras.utils.generic_utils import CustomObjectScope except ImportError: - from tensorflow.keras.utils import CustomObjectScope + from tensorflow.python.keras.utils import CustomObjectScope from deepctr import layers from tests.layers.interaction_test import BATCH_SIZE, FIELD_SIZE, EMBEDDING_SIZE from tests.utils import layer_test diff --git a/tests/layers/sequence_test.py b/tests/layers/sequence_test.py index 0ba333cc..1639baca 100644 --- a/tests/layers/sequence_test.py +++ b/tests/layers/sequence_test.py @@ -2,15 +2,18 @@ from packaging import version try: - from tensorflow.python.keras.utils import CustomObjectScope + from tensorflow.python.keras.utils.generic_utils import CustomObjectScope except ImportError: - from tensorflow.keras.utils import CustomObjectScope + from tensorflow.python.keras.utils import CustomObjectScope import tensorflow as tf from deepctr.layers import sequence from tests.utils import layer_test - -tf.keras.backend.set_learning_phase(True) +try: + tf.keras.backend.set_learning_phase(True) +except ImportError: + from tensorflow.python.keras.backend import set_learning_phase + set_learning_phase(True) BATCH_SIZE = 4 EMBEDDING_SIZE = 8 SEQ_LENGTH = 10 diff --git a/tests/layers/utils_test.py b/tests/layers/utils_test.py index 5feaecef..1d1a8c4c 100644 --- a/tests/layers/utils_test.py +++ b/tests/layers/utils_test.py @@ -7,9 +7,9 @@ from tests.utils import layer_test try: - from tensorflow.python.keras.utils import CustomObjectScope + from tensorflow.python.keras.utils.generic_utils import CustomObjectScope except ImportError: - from tensorflow.keras.utils import CustomObjectScope + from tensorflow.python.keras.utils import CustomObjectScope @pytest.mark.parametrize( diff --git a/tests/models/AFM_test.py b/tests/models/AFM_test.py index 64a1bd4f..46ca7e2a 100644 --- a/tests/models/AFM_test.py +++ b/tests/models/AFM_test.py @@ -1,11 +1,8 @@ import pytest -import tensorflow as tf -from packaging import version -from deepctr.estimator import AFMEstimator from deepctr.models import AFM from ..utils import check_model, check_estimator, get_test_data, get_test_data_estimator, SAMPLE_SIZE, \ - Estimator_TEST_TF1 + TEST_Estimator @pytest.mark.parametrize( @@ -30,8 +27,9 @@ def test_AFM(use_attention, sparse_feature_num, dense_feature_num): ] ) def test_AFMEstimator(use_attention, sparse_feature_num, dense_feature_num): - if not Estimator_TEST_TF1 and version.parse(tf.__version__) < version.parse('2.2.0'): + if not TEST_Estimator: return + from deepctr.estimator import AFMEstimator sample_size = SAMPLE_SIZE diff --git a/tests/models/AutoInt_test.py b/tests/models/AutoInt_test.py index fb3e9c64..11fa5c43 100644 --- a/tests/models/AutoInt_test.py +++ b/tests/models/AutoInt_test.py @@ -2,10 +2,9 @@ import tensorflow as tf from packaging import version -from deepctr.estimator import AutoIntEstimator from deepctr.models import AutoInt from ..utils import check_model, get_test_data, SAMPLE_SIZE, get_test_data_estimator, check_estimator, \ - Estimator_TEST_TF1 + TEST_Estimator @pytest.mark.parametrize( @@ -30,8 +29,9 @@ def test_AutoInt(att_layer_num, dnn_hidden_units, sparse_feature_num): [(1, (4,), 1)] # (0, (4,), 2), (2, (4, 4,), 2) ) def test_AutoIntEstimator(att_layer_num, dnn_hidden_units, sparse_feature_num): - if not Estimator_TEST_TF1 and version.parse(tf.__version__) < version.parse('2.2.0'): + if not TEST_Estimator: return + from deepctr.estimator import AutoIntEstimator sample_size = SAMPLE_SIZE linear_feature_columns, dnn_feature_columns, input_fn = get_test_data_estimator(sample_size, sparse_feature_num=sparse_feature_num, diff --git a/tests/models/CCPM_test.py b/tests/models/CCPM_test.py index 919a36a6..9c29e4ab 100644 --- a/tests/models/CCPM_test.py +++ b/tests/models/CCPM_test.py @@ -1,10 +1,8 @@ import pytest import tensorflow as tf -from deepctr.estimator import CCPMEstimator from deepctr.models import CCPM -from ..utils import check_model, get_test_data, SAMPLE_SIZE, check_estimator, get_test_data_estimator, \ - Estimator_TEST_TF1 +from ..utils import check_model, get_test_data, SAMPLE_SIZE, check_estimator, get_test_data_estimator, TEST_Estimator @pytest.mark.parametrize( @@ -51,8 +49,9 @@ def test_CCPM_without_seq(sparse_feature_num, dense_feature_num): ] ) def test_CCPMEstimator_without_seq(sparse_feature_num, dense_feature_num): - if not Estimator_TEST_TF1 and tf.__version__ < "2.2.0": + if not TEST_Estimator: return + from deepctr.estimator import CCPMEstimator sample_size = SAMPLE_SIZE linear_feature_columns, dnn_feature_columns, input_fn = get_test_data_estimator(sample_size, diff --git a/tests/models/DCN_test.py b/tests/models/DCN_test.py index 45f713f7..001ebf53 100644 --- a/tests/models/DCN_test.py +++ b/tests/models/DCN_test.py @@ -1,10 +1,7 @@ import pytest -import tensorflow as tf -from deepctr.estimator import DCNEstimator from deepctr.models import DCN -from ..utils import check_model, get_test_data, SAMPLE_SIZE, get_test_data_estimator, check_estimator, \ - Estimator_TEST_TF1 +from ..utils import check_model, get_test_data, SAMPLE_SIZE, get_test_data_estimator, check_estimator, TEST_Estimator @pytest.mark.parametrize( @@ -42,8 +39,10 @@ def test_DCN_2(): ] ) def test_DCNEstimator(cross_num, hidden_size, sparse_feature_num): - if not Estimator_TEST_TF1 and tf.__version__ < "2.2.0": + if not TEST_Estimator: return + from deepctr.estimator import DCNEstimator + sample_size = SAMPLE_SIZE linear_feature_columns, dnn_feature_columns, input_fn = get_test_data_estimator(sample_size, sparse_feature_num=sparse_feature_num, diff --git a/tests/models/DIEN_test.py b/tests/models/DIEN_test.py index 92904c61..0cad9bf3 100644 --- a/tests/models/DIEN_test.py +++ b/tests/models/DIEN_test.py @@ -63,6 +63,7 @@ def get_xy_fd(use_neg=False, hash_flag=False): def test_DIEN(gru_type): if version.parse(tf.__version__) >= version.parse('2.0.0'): tf.compat.v1.disable_eager_execution() # todo + return model_name = "DIEN_" + gru_type x, y, feature_columns, behavior_feature_list = get_xy_fd(hash_flag=True) diff --git a/tests/models/DIN_test.py b/tests/models/DIN_test.py index 82bfd205..372336fd 100644 --- a/tests/models/DIN_test.py +++ b/tests/models/DIN_test.py @@ -1,4 +1,6 @@ import numpy as np +import tensorflow as tf +from packaging import version from deepctr.feature_column import SparseFeat, VarLenSparseFeat, DenseFeat, get_feature_names from deepctr.models.sequence.din import DIN @@ -42,8 +44,13 @@ def test_DIN(): model_name = "DIN" x, y, feature_columns, behavior_feature_list = get_xy_fd(True) + cur_version = version.parse(tf.__version__) + if cur_version >= version.parse('2.8.0'): # todo: + att_activation = 'sigmoid' + else: + att_activation = 'dice' - model = DIN(feature_columns, behavior_feature_list, dnn_hidden_units=[4, 4, 4], + model = DIN(feature_columns, behavior_feature_list, dnn_hidden_units=[4, 4, 4], att_activation=att_activation, dnn_dropout=0.5) # todo test dice diff --git a/tests/models/DeepFEFM_test.py b/tests/models/DeepFEFM_test.py index 3620ad53..8964525e 100644 --- a/tests/models/DeepFEFM_test.py +++ b/tests/models/DeepFEFM_test.py @@ -1,10 +1,8 @@ import pytest import tensorflow as tf -from deepctr.estimator import DeepFEFMEstimator from deepctr.models import DeepFEFM -from ..utils import check_model, get_test_data, SAMPLE_SIZE, get_test_data_estimator, check_estimator, \ - Estimator_TEST_TF1 +from ..utils import check_model, get_test_data, SAMPLE_SIZE, get_test_data_estimator, check_estimator, TEST_Estimator @pytest.mark.parametrize( @@ -40,8 +38,11 @@ def test_DeepFEFM(hidden_size, sparse_feature_num, use_fefm, use_linear, use_fef ] ) def test_DeepFEFMEstimator(hidden_size, sparse_feature_num): - if not Estimator_TEST_TF1 and tf.__version__ < "2.2.0": + import tensorflow as tf + if not TEST_Estimator or tf.__version__ == "1.4.0": return + from deepctr.estimator import DeepFEFMEstimator + sample_size = SAMPLE_SIZE linear_feature_columns, dnn_feature_columns, input_fn = get_test_data_estimator(sample_size, sparse_feature_num=sparse_feature_num, diff --git a/tests/models/DeepFM_test.py b/tests/models/DeepFM_test.py index 1c219b8f..b466fbc8 100644 --- a/tests/models/DeepFM_test.py +++ b/tests/models/DeepFM_test.py @@ -1,10 +1,7 @@ import pytest -import tensorflow as tf -from deepctr.estimator import DeepFMEstimator from deepctr.models import DeepFM -from ..utils import check_model, get_test_data, SAMPLE_SIZE, get_test_data_estimator, check_estimator, \ - Estimator_TEST_TF1 +from ..utils import check_model, get_test_data, SAMPLE_SIZE, get_test_data_estimator, check_estimator, TEST_Estimator @pytest.mark.parametrize( @@ -31,8 +28,9 @@ def test_DeepFM(hidden_size, sparse_feature_num): ] # (True, (32,), 3), (False, (32,), 1) ) def test_DeepFMEstimator(hidden_size, sparse_feature_num): - if not Estimator_TEST_TF1 and tf.__version__ < "2.2.0": + if not TEST_Estimator: return + from deepctr.estimator import DeepFMEstimator sample_size = SAMPLE_SIZE linear_feature_columns, dnn_feature_columns, input_fn = get_test_data_estimator(sample_size, sparse_feature_num=sparse_feature_num, diff --git a/tests/models/FLEN_test.py b/tests/models/FLEN_test.py index 9cba8a31..46ee4586 100644 --- a/tests/models/FLEN_test.py +++ b/tests/models/FLEN_test.py @@ -10,7 +10,7 @@ ((3,), 6) ] # (True, (32,), 3), (False, (32,), 1) ) -def test_DeepFM(hidden_size, sparse_feature_num): +def test_FLEN(hidden_size, sparse_feature_num): model_name = "FLEN" sample_size = SAMPLE_SIZE x, y, feature_columns = get_test_data(sample_size, embedding_size=2, sparse_feature_num=sparse_feature_num, diff --git a/tests/models/FNN_test.py b/tests/models/FNN_test.py index 882c29da..6ef1c9d9 100644 --- a/tests/models/FNN_test.py +++ b/tests/models/FNN_test.py @@ -1,10 +1,8 @@ import pytest import tensorflow as tf -from deepctr.estimator import FNNEstimator from deepctr.models import FNN -from ..utils import check_model, get_test_data, SAMPLE_SIZE, get_test_data_estimator, check_estimator, \ - Estimator_TEST_TF1 +from ..utils import check_model, get_test_data, SAMPLE_SIZE, get_test_data_estimator, check_estimator, TEST_Estimator @pytest.mark.parametrize( @@ -45,8 +43,10 @@ def test_FNN(sparse_feature_num, dense_feature_num): ] ) def test_FNNEstimator(sparse_feature_num, dense_feature_num): - if not Estimator_TEST_TF1 and tf.__version__ < "2.2.0": + if not TEST_Estimator: return + from deepctr.estimator import FNNEstimator + sample_size = SAMPLE_SIZE linear_feature_columns, dnn_feature_columns, input_fn = get_test_data_estimator(sample_size, sparse_feature_num=sparse_feature_num, diff --git a/tests/models/FiBiNET_test.py b/tests/models/FiBiNET_test.py index f1fce6dc..2b0dec13 100644 --- a/tests/models/FiBiNET_test.py +++ b/tests/models/FiBiNET_test.py @@ -1,10 +1,7 @@ import pytest -import tensorflow as tf -from deepctr.estimator import FiBiNETEstimator from deepctr.models import FiBiNET -from ..utils import check_model, SAMPLE_SIZE, get_test_data, get_test_data_estimator, check_estimator, \ - Estimator_TEST_TF1 +from ..utils import check_model, SAMPLE_SIZE, get_test_data, get_test_data_estimator, check_estimator, TEST_Estimator @pytest.mark.parametrize( @@ -27,8 +24,10 @@ def test_FiBiNET(bilinear_type): ["interaction"] ) def test_FiBiNETEstimator(bilinear_type): - if not Estimator_TEST_TF1 and tf.__version__ < "2.2.0": + if not TEST_Estimator: return + from deepctr.estimator import FiBiNETEstimator + sample_size = SAMPLE_SIZE linear_feature_columns, dnn_feature_columns, input_fn = get_test_data_estimator(sample_size, sparse_feature_num=2, dense_feature_num=2) diff --git a/tests/models/FwFM_test.py b/tests/models/FwFM_test.py index a13dcbfb..45d29ab7 100644 --- a/tests/models/FwFM_test.py +++ b/tests/models/FwFM_test.py @@ -1,10 +1,7 @@ import pytest -import tensorflow as tf -from deepctr.estimator import FwFMEstimator from deepctr.models import FwFM -from ..utils import check_model, get_test_data, SAMPLE_SIZE, get_test_data_estimator, check_estimator, \ - Estimator_TEST_TF1 +from ..utils import check_model, get_test_data, SAMPLE_SIZE, get_test_data_estimator, check_estimator, TEST_Estimator @pytest.mark.parametrize( @@ -29,8 +26,10 @@ def test_FwFM(hidden_size, sparse_feature_num): ] ) def test_FwFMEstimator(hidden_size, sparse_feature_num): - if not Estimator_TEST_TF1 and tf.__version__ < "2.2.0": + if not TEST_Estimator: return + from deepctr.estimator import FwFMEstimator + sample_size = SAMPLE_SIZE linear_feature_columns, dnn_feature_columns, input_fn = get_test_data_estimator(sample_size, sparse_feature_num=sparse_feature_num, diff --git a/tests/models/NFM_test.py b/tests/models/NFM_test.py index 8e1b50c5..3909dff2 100644 --- a/tests/models/NFM_test.py +++ b/tests/models/NFM_test.py @@ -1,10 +1,7 @@ import pytest -import tensorflow as tf -from deepctr.estimator import NFMEstimator from deepctr.models import NFM -from ..utils import check_model, get_test_data, SAMPLE_SIZE, get_test_data_estimator, check_estimator, \ - Estimator_TEST_TF1 +from ..utils import check_model, get_test_data, SAMPLE_SIZE, get_test_data_estimator, check_estimator, TEST_Estimator @pytest.mark.parametrize( @@ -27,8 +24,10 @@ def test_NFM(hidden_size, sparse_feature_num): [((8,), 1), ((8, 8,), 2)] ) def test_FNNEstimator(hidden_size, sparse_feature_num): - if not Estimator_TEST_TF1 and tf.__version__ < "2.2.0": + if not TEST_Estimator: return + from deepctr.estimator import NFMEstimator + sample_size = SAMPLE_SIZE linear_feature_columns, dnn_feature_columns, input_fn = get_test_data_estimator(sample_size, sparse_feature_num=sparse_feature_num, diff --git a/tests/models/ONN_test.py b/tests/models/ONN_test.py index 0b327e13..7365a837 100644 --- a/tests/models/ONN_test.py +++ b/tests/models/ONN_test.py @@ -11,7 +11,7 @@ [2] ) def test_ONN(sparse_feature_num): - if version.parse(tf.__version__) >= version.parse('2.0.0'): + if version.parse(tf.__version__) >= version.parse('1.15.0'): return model_name = "ONN" diff --git a/tests/models/PNN_test.py b/tests/models/PNN_test.py index 46e60c17..a1c62c44 100644 --- a/tests/models/PNN_test.py +++ b/tests/models/PNN_test.py @@ -1,10 +1,7 @@ import pytest -import tensorflow as tf -from deepctr.estimator import PNNEstimator from deepctr.models import PNN -from ..utils import check_model, get_test_data, SAMPLE_SIZE, get_test_data_estimator, check_estimator, \ - Estimator_TEST_TF1 +from ..utils import check_model, get_test_data, SAMPLE_SIZE, get_test_data_estimator, check_estimator, TEST_Estimator @pytest.mark.parametrize( @@ -27,12 +24,14 @@ def test_PNN(use_inner, use_outter, sparse_feature_num): ] ) def test_PNNEstimator(use_inner, use_outter, sparse_feature_num): - if not Estimator_TEST_TF1 and tf.__version__ < "2.2.0": + if not TEST_Estimator: return + from deepctr.estimator import PNNEstimator + sample_size = SAMPLE_SIZE _, dnn_feature_columns, input_fn = get_test_data_estimator(sample_size, - sparse_feature_num=sparse_feature_num, - dense_feature_num=sparse_feature_num) + sparse_feature_num=sparse_feature_num, + dense_feature_num=sparse_feature_num) model = PNNEstimator(dnn_feature_columns, dnn_hidden_units=[4, 4], dnn_dropout=0.5, use_inner=use_inner, use_outter=use_outter) diff --git a/tests/models/WDL_test.py b/tests/models/WDL_test.py index 10188f59..3d18d9a0 100644 --- a/tests/models/WDL_test.py +++ b/tests/models/WDL_test.py @@ -2,10 +2,8 @@ import tensorflow as tf from packaging import version -from deepctr.estimator import WDLEstimator from deepctr.models import WDL -from ..utils import check_model, check_estimator, SAMPLE_SIZE, get_test_data, get_test_data_estimator, \ - Estimator_TEST_TF1 +from ..utils import check_model, check_estimator, SAMPLE_SIZE, get_test_data, get_test_data_estimator, TEST_Estimator @pytest.mark.parametrize( @@ -32,8 +30,10 @@ def test_WDL(sparse_feature_num, dense_feature_num): ] ) def test_WDLEstimator(sparse_feature_num, dense_feature_num): - if not Estimator_TEST_TF1 and version.parse(tf.__version__) < version.parse('2.2.0'): + if not TEST_Estimator: return + from deepctr.estimator import WDLEstimator + sample_size = SAMPLE_SIZE linear_feature_columns, dnn_feature_columns, input_fn = get_test_data_estimator(sample_size, sparse_feature_num, diff --git a/tests/models/xDeepFM_test.py b/tests/models/xDeepFM_test.py index 37228de9..3981e229 100644 --- a/tests/models/xDeepFM_test.py +++ b/tests/models/xDeepFM_test.py @@ -1,10 +1,7 @@ import pytest -import tensorflow as tf -from deepctr.estimator import xDeepFMEstimator from deepctr.models import xDeepFM -from ..utils import check_model, get_test_data, SAMPLE_SIZE, get_test_data_estimator, check_estimator, \ - Estimator_TEST_TF1 +from ..utils import check_model, get_test_data, SAMPLE_SIZE, get_test_data_estimator, check_estimator, TEST_Estimator @pytest.mark.parametrize( @@ -46,8 +43,11 @@ 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): - if not Estimator_TEST_TF1 and tf.__version__ < "2.2.0": + import tensorflow as tf + if not TEST_Estimator or tf.__version__ == "1.4.0": return + from deepctr.estimator import xDeepFMEstimator + sample_size = SAMPLE_SIZE linear_feature_columns, dnn_feature_columns, input_fn = get_test_data_estimator(sample_size, sparse_feature_num=sparse_feature_num, diff --git a/tests/utils.py b/tests/utils.py index ac0c6625..f980a175 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -7,6 +7,7 @@ import numpy as np import tensorflow as tf from numpy.testing import assert_allclose +from packaging import version from tensorflow.python.keras import backend as K from tensorflow.python.keras.layers import Input, Masking from tensorflow.python.keras.models import Model, load_model, save_model @@ -16,7 +17,17 @@ SAMPLE_SIZE = 8 VOCABULARY_SIZE = 4 -Estimator_TEST_TF1 = True + + +def test_estimator_version(tf_version): + cur_version = version.parse(tf_version) + tf2_version = version.parse('2.0.0') + left_version = version.parse('2.2.0') + right_version = version.parse('2.6.0') + return cur_version < tf2_version or left_version <= cur_version < right_version + + +TEST_Estimator = test_estimator_version(tf.__version__) def gen_sequence(dim, max_len, sample_size): @@ -352,7 +363,6 @@ def check_model(model, model_name, x, y, check_model_io=True): :param check_model_io: test save/load model file or not :return: """ - model.compile('adam', 'binary_crossentropy', metrics=['binary_crossentropy']) model.fit(x, y, batch_size=100, epochs=1, validation_split=0.5) From ec78b9b24ef848b2d08797b5a93ac77d09360217 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=85=E6=A2=A6?= Date: Sun, 16 Oct 2022 16:34:07 +0800 Subject: [PATCH 2/7] support python 3.9&3.10 - support python 3.9 and 3.10 - support `cos` and `ln` attention_type in transformer - polish docstring --- .github/ISSUE_TEMPLATE/bug_report.md | 4 +-- .github/ISSUE_TEMPLATE/question.md | 4 +-- .github/workflows/ci.yml | 24 +++++++++++-- README.md | 8 ++--- deepctr/__init__.py | 2 +- deepctr/feature_column.py | 2 +- deepctr/layers/sequence.py | 51 ++++++++++++++++++---------- deepctr/models/deepfm.py | 4 +-- docs/source/History.md | 1 + docs/source/conf.py | 2 +- docs/source/index.rst | 4 +-- setup.py | 17 +++++++--- tests/layers/sequence_test.py | 8 +++-- 13 files changed, 89 insertions(+), 42 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index a21b2abc..a99cfe41 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -19,8 +19,8 @@ Steps to reproduce the behavior: **Operating environment(运行环境):** - python version [e.g. 3.6, 3.7] - - tensorflow version [e.g. 1.4.0, 1.15.0, 2.5.0] - - deepctr version [e.g. 0.9.0,] + - tensorflow version [e.g. 1.4.0, 1.15.0, 2.10.0] + - deepctr version [e.g. 0.9.2,] **Additional context** Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md index 8aaf7ee6..8b7f819d 100644 --- a/.github/ISSUE_TEMPLATE/question.md +++ b/.github/ISSUE_TEMPLATE/question.md @@ -16,5 +16,5 @@ Add any other context about the problem here. **Operating environment(运行环境):** - python version [e.g. 3.6] - - tensorflow version [e.g. 1.4.0, 1.15.0, 2.5.0] - - deepctr version [e.g. 0.9.0,] + - tensorflow version [e.g. 1.4.0, 1.15.0, 2.10.0] + - deepctr version [e.g. 0.9.2,] diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 44bcc9a5..7ed5bd15 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,8 +17,8 @@ jobs: timeout-minutes: 180 strategy: matrix: - python-version: [3.6,3.7,3.8] - tf-version: [1.4.0,1.15.0,2.5.0,2.6.0,2.7.0,2.8.0,2.9.0] + 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] exclude: - python-version: 3.7 @@ -37,12 +37,32 @@ jobs: 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 diff --git a/README.md b/README.md index 70ec4e28..f0d90c13 100644 --- a/README.md +++ b/README.md @@ -18,14 +18,12 @@ -DeepCTR is a **Easy-to-use**,**Modular** and **Extendible** package of deep-learning based CTR models along with lots of +DeepCTR is a **Easy-to-use**, **Modular** and **Extendible** package of deep-learning based CTR models along with lots of core components layers which can be used to easily build custom models.You can use any complex model with `model.fit()` ,and `model.predict()` . -- Provide `tf.keras.Model` like interface for **quick experiment** - . [example](https://deepctr-doc.readthedocs.io/en/latest/Quick-Start.html#getting-started-4-steps-to-deepctr) -- Provide `tensorflow estimator` interface for **large scale data** and **distributed training** - . [example](https://deepctr-doc.readthedocs.io/en/latest/Quick-Start.html#getting-started-4-steps-to-deepctr-estimator-with-tfrecord) +- Provide `tf.keras.Model` like interfaces for **quick experiment**. [example](https://deepctr-doc.readthedocs.io/en/latest/Quick-Start.html#getting-started-4-steps-to-deepctr) +- Provide `tensorflow estimator` interface for **large scale data** and **distributed training**. [example](https://deepctr-doc.readthedocs.io/en/latest/Quick-Start.html#getting-started-4-steps-to-deepctr-estimator-with-tfrecord) - It is compatible with both `tf 1.x` and `tf 2.x`. Some related projects: diff --git a/deepctr/__init__.py b/deepctr/__init__.py index d42e620d..3c6d40b5 100644 --- a/deepctr/__init__.py +++ b/deepctr/__init__.py @@ -1,4 +1,4 @@ from .utils import check_version -__version__ = '0.9.1' +__version__ = '0.9.2' check_version(__version__) diff --git a/deepctr/feature_column.py b/deepctr/feature_column.py index 6f277ba1..5cc1930e 100644 --- a/deepctr/feature_column.py +++ b/deepctr/feature_column.py @@ -95,7 +95,7 @@ def __hash__(self): class DenseFeat(namedtuple('DenseFeat', ['name', 'dimension', 'dtype', 'transform_fn'])): """ Dense feature Args: - name: feature name, + name: feature name. dimension: dimension of the feature, default = 1. dtype: dtype of the feature, default="float32". transform_fn: If not `None` , a function that can be used to transform diff --git a/deepctr/layers/sequence.py b/deepctr/layers/sequence.py index 45a65915..93866640 100644 --- a/deepctr/layers/sequence.py +++ b/deepctr/layers/sequence.py @@ -442,7 +442,7 @@ class Transformer(Layer): - **blinding**: bool. Whether or not use blinding. - **seed**: A Python integer to use as random seed. - **supports_masking**:bool. Whether or not support masking. - - **attention_type**: str, Type of attention, the value must be one of { ``'scaled_dot_product'`` , ``'additive'`` }. + - **attention_type**: str, Type of attention, the value must be one of { ``'scaled_dot_product'`` , ``'cos'`` , ``'ln'`` , ``'additive'`` }. - **output_type**: ``'mean'`` , ``'sum'`` or `None`. Whether or not use average/sum pooling for output. References @@ -490,6 +490,9 @@ def build(self, input_shape): initializer=glorot_uniform(seed=self.seed)) self.v = self.add_weight('v', shape=[self.att_embedding_size], dtype=tf.float32, initializer=glorot_uniform(seed=self.seed)) + elif self.attention_type == "ln": + self.att_ln_q = LayerNormalization() + self.att_ln_k = LayerNormalization() # if self.use_res: # self.W_Res = self.add_weight(name='res', shape=[embedding_size, self.att_embedding_size * self.head_num], dtype=tf.float32, # initializer=TruncatedNormal(seed=self.seed)) @@ -529,28 +532,42 @@ def call(self, inputs, mask=None, training=None, **kwargs): queries = self.query_pe(queries) keys = self.key_pe(queries) - querys = tf.tensordot(queries, self.W_Query, - axes=(-1, 0)) # None T_q D*head_num - keys = tf.tensordot(keys, self.W_key, axes=(-1, 0)) - values = tf.tensordot(keys, self.W_Value, axes=(-1, 0)) + Q = tf.tensordot(queries, self.W_Query, + axes=(-1, 0)) # N T_q D*h + K = tf.tensordot(keys, self.W_key, axes=(-1, 0)) + V = tf.tensordot(keys, self.W_Value, axes=(-1, 0)) - # head_num*None T_q D - querys = tf.concat(tf.split(querys, self.head_num, axis=2), axis=0) - keys = tf.concat(tf.split(keys, self.head_num, axis=2), axis=0) - values = tf.concat(tf.split(values, self.head_num, axis=2), axis=0) + # h*N T_q D + Q_ = tf.concat(tf.split(Q, self.head_num, axis=2), axis=0) + K_ = tf.concat(tf.split(K, self.head_num, axis=2), axis=0) + V_ = tf.concat(tf.split(V, self.head_num, axis=2), axis=0) if self.attention_type == "scaled_dot_product": - # head_num*None T_q T_k - outputs = tf.matmul(querys, keys, transpose_b=True) + # h*N T_q T_k + outputs = tf.matmul(Q_, K_, transpose_b=True) - outputs = outputs / (keys.get_shape().as_list()[-1] ** 0.5) + outputs = outputs / (K_.get_shape().as_list()[-1] ** 0.5) + elif self.attention_type == "cos": + Q_cos = tf.nn.l2_normalize(Q_, dim=-1) + K_cos = tf.nn.l2_normalize(K_, dim=-1) + + outputs = tf.matmul(Q_cos, K_cos, transpose_b=True) # h*N T_q T_k + + outputs = outputs * 20 # Scale + elif self.attention_type == 'ln': + Q_ = self.att_ln_q(Q_) + K_ = self.att_ln_k(K_) + + outputs = tf.matmul(Q_, K_, transpose_b=True) # h*N T_q T_k + # Scale + outputs = outputs / (K_.get_shape().as_list()[-1] ** 0.5) elif self.attention_type == "additive": - querys_reshaped = tf.expand_dims(querys, axis=-2) - keys_reshaped = tf.expand_dims(keys, axis=-3) - outputs = tf.tanh(tf.nn.bias_add(querys_reshaped + keys_reshaped, self.b)) + Q_reshaped = tf.expand_dims(Q_, axis=-2) + K_reshaped = tf.expand_dims(K_, axis=-3) + outputs = tf.tanh(tf.nn.bias_add(Q_reshaped + K_reshaped, self.b)) outputs = tf.squeeze(tf.tensordot(outputs, tf.expand_dims(self.v, axis=-1), axes=[-1, 0]), axis=-1) else: - raise ValueError("attention_type must be scaled_dot_product or additive") + raise ValueError("attention_type must be [scaled_dot_product,cos,ln,additive]") key_masks = tf.tile(key_masks, [self.head_num, 1]) @@ -583,7 +600,7 @@ def call(self, inputs, mask=None, training=None, **kwargs): outputs = self.dropout(outputs, training=training) # Weighted sum # ( h*N, T_q, C/h) - result = tf.matmul(outputs, values) + result = tf.matmul(outputs, V_) result = tf.concat(tf.split(result, self.head_num, axis=0), axis=2) if self.use_res: diff --git a/deepctr/models/deepfm.py b/deepctr/models/deepfm.py index 49456f4f..f156e5fb 100644 --- a/deepctr/models/deepfm.py +++ b/deepctr/models/deepfm.py @@ -24,8 +24,8 @@ def DeepFM(linear_feature_columns, dnn_feature_columns, fm_group=(DEFAULT_GROUP_ dnn_activation='relu', dnn_use_bn=False, task='binary'): """Instantiates the DeepFM 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 linear_feature_columns: An iterable containing all the features used by the linear part of the model. + :param dnn_feature_columns: An iterable containing all the features used by the deep part of the model. :param fm_group: list, group_name of features that will be used to do feature interactions. :param dnn_hidden_units: list,list of positive integer or empty list, the layer number and units in each layer of DNN :param l2_reg_linear: float. L2 regularizer strength applied to linear part diff --git a/docs/source/History.md b/docs/source/History.md index e74dba8d..2e19942a 100644 --- a/docs/source/History.md +++ b/docs/source/History.md @@ -1,4 +1,5 @@ # History +- 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) - 07/18/2021 : [v0.8.7](https://github.com/shenweichen/DeepCTR/releases/tag/v0.8.7) released.Support pre-defined key-value vocabulary in `Hash` Layer. [example](./Examples.html#hash-layer-with-pre-defined-key-value-vocabulary) diff --git a/docs/source/conf.py b/docs/source/conf.py index 50b0f80e..d0f0df24 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.1' +release = '0.9.2' # -- General configuration --------------------------------------------------- diff --git a/docs/source/index.rst b/docs/source/index.rst index c64d26e5..0330a10d 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -42,12 +42,12 @@ You can read the latest code and related projects News ----- +10/15/2022 : Support python `3.9`,`3.10`. `Changelog `_ + 06/11/2022 : Improve compatibility with tensorflow `2.x`. `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 `_ -07/18/2021 : Support pre-defined key-value vocabulary in `Hash` Layer. `example <./Examples.html#hash-layer-with-pre-defined-key-value-vocabulary>`_ `Changelog `_ - DisscussionGroup ----------------------- diff --git a/setup.py b/setup.py index 62316c0c..43eee556 100644 --- a/setup.py +++ b/setup.py @@ -1,15 +1,21 @@ import setuptools -with open("README.md", "r") as fh: +with open("README.md", "r",encoding='utf-8') as fh: long_description = fh.read() -REQUIRED_PACKAGES = [ +import sys +if sys.version_info < (3, 9): + REQUIRED_PACKAGES = [ 'h5py==2.10.0', 'requests' -] + ] +else: + REQUIRED_PACKAGES = [ + 'h5py==3.7.0', 'requests' + ] setuptools.setup( name="deepctr", - version="0.9.1", + version="0.9.2", 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 .", @@ -35,10 +41,11 @@ 'Intended Audience :: Science/Research', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10', 'Topic :: Scientific/Engineering', 'Topic :: Scientific/Engineering :: Artificial Intelligence', 'Topic :: Software Development', diff --git a/tests/layers/sequence_test.py b/tests/layers/sequence_test.py index 1639baca..1e2a89a6 100644 --- a/tests/layers/sequence_test.py +++ b/tests/layers/sequence_test.py @@ -81,11 +81,15 @@ def test_BiLSTM(merge_mode): input_shape=(BATCH_SIZE, SEQ_LENGTH, EMBEDDING_SIZE)) -def test_Transformer(): +@pytest.mark.parametrize( + 'attention_type', + ['scaled_dot_product', 'cos', 'ln', 'additive'] +) +def test_Transformer(attention_type): with CustomObjectScope({'Transformer': sequence.Transformer}): layer_test(sequence.Transformer, kwargs={'att_embedding_size': 1, 'head_num': 8, 'use_layer_norm': True, 'supports_masking': False, - 'attention_type': 'additive', 'dropout_rate': 0.5, 'output_type': 'sum'}, + 'attention_type': attention_type, 'dropout_rate': 0.5, 'output_type': 'sum'}, input_shape=[(BATCH_SIZE, SEQ_LENGTH, EMBEDDING_SIZE), (BATCH_SIZE, SEQ_LENGTH, EMBEDDING_SIZE), (BATCH_SIZE, 1), (BATCH_SIZE, 1)]) 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 3/7] 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 4/7] 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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