nextrec 0.4.20__py3-none-any.whl → 0.4.21__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. nextrec/__version__.py +1 -1
  2. nextrec/basic/activation.py +9 -4
  3. nextrec/basic/callback.py +39 -87
  4. nextrec/basic/features.py +149 -28
  5. nextrec/basic/heads.py +4 -1
  6. nextrec/basic/layers.py +375 -94
  7. nextrec/basic/loggers.py +236 -39
  8. nextrec/basic/model.py +209 -316
  9. nextrec/basic/session.py +2 -2
  10. nextrec/basic/summary.py +323 -0
  11. nextrec/cli.py +3 -3
  12. nextrec/data/data_processing.py +45 -1
  13. nextrec/data/dataloader.py +2 -2
  14. nextrec/data/preprocessor.py +2 -2
  15. nextrec/loss/loss_utils.py +5 -30
  16. nextrec/models/multi_task/esmm.py +4 -6
  17. nextrec/models/multi_task/mmoe.py +4 -6
  18. nextrec/models/multi_task/ple.py +6 -8
  19. nextrec/models/multi_task/poso.py +5 -7
  20. nextrec/models/multi_task/share_bottom.py +6 -8
  21. nextrec/models/ranking/afm.py +4 -6
  22. nextrec/models/ranking/autoint.py +4 -6
  23. nextrec/models/ranking/dcn.py +8 -7
  24. nextrec/models/ranking/dcn_v2.py +4 -6
  25. nextrec/models/ranking/deepfm.py +5 -7
  26. nextrec/models/ranking/dien.py +8 -7
  27. nextrec/models/ranking/din.py +8 -7
  28. nextrec/models/ranking/eulernet.py +5 -7
  29. nextrec/models/ranking/ffm.py +5 -7
  30. nextrec/models/ranking/fibinet.py +4 -6
  31. nextrec/models/ranking/fm.py +4 -6
  32. nextrec/models/ranking/lr.py +4 -6
  33. nextrec/models/ranking/masknet.py +8 -9
  34. nextrec/models/ranking/pnn.py +4 -6
  35. nextrec/models/ranking/widedeep.py +5 -7
  36. nextrec/models/ranking/xdeepfm.py +8 -7
  37. nextrec/models/retrieval/dssm.py +4 -10
  38. nextrec/models/retrieval/dssm_v2.py +0 -6
  39. nextrec/models/retrieval/mind.py +4 -10
  40. nextrec/models/retrieval/sdm.py +4 -10
  41. nextrec/models/retrieval/youtube_dnn.py +4 -10
  42. nextrec/models/sequential/hstu.py +1 -3
  43. nextrec/utils/__init__.py +12 -14
  44. nextrec/utils/config.py +15 -5
  45. nextrec/utils/console.py +2 -2
  46. nextrec/utils/feature.py +2 -2
  47. nextrec/utils/torch_utils.py +57 -112
  48. nextrec/utils/types.py +59 -0
  49. {nextrec-0.4.20.dist-info → nextrec-0.4.21.dist-info}/METADATA +7 -5
  50. nextrec-0.4.21.dist-info/RECORD +81 -0
  51. nextrec-0.4.20.dist-info/RECORD +0 -79
  52. {nextrec-0.4.20.dist-info → nextrec-0.4.21.dist-info}/WHEEL +0 -0
  53. {nextrec-0.4.20.dist-info → nextrec-0.4.21.dist-info}/entry_points.txt +0 -0
  54. {nextrec-0.4.20.dist-info → nextrec-0.4.21.dist-info}/licenses/LICENSE +0 -0
@@ -55,7 +55,7 @@ class ShareBottom(BaseModel):
55
55
 
56
56
  @property
57
57
  def default_task(self):
58
- nums_task = getattr(self, "nums_task", None)
58
+ nums_task = self.nums_task if hasattr(self, "nums_task") else None
59
59
  if nums_task is not None and nums_task > 0:
60
60
  return ["binary"] * nums_task
61
61
  return ["binary"]
@@ -73,11 +73,10 @@ class ShareBottom(BaseModel):
73
73
  optimizer_params: dict | None = None,
74
74
  loss: str | nn.Module | list[str | nn.Module] | None = "bce",
75
75
  loss_params: dict | list[dict] | None = None,
76
- device: str = "cpu",
77
- embedding_l1_reg=1e-6,
78
- dense_l1_reg=1e-5,
79
- embedding_l2_reg=1e-5,
80
- dense_l2_reg=1e-4,
76
+ embedding_l1_reg=0.0,
77
+ dense_l1_reg=0.0,
78
+ embedding_l2_reg=0.0,
79
+ dense_l2_reg=0.0,
81
80
  **kwargs,
82
81
  ):
83
82
 
@@ -103,7 +102,6 @@ class ShareBottom(BaseModel):
103
102
  sequence_features=sequence_features,
104
103
  target=target,
105
104
  task=resolved_task,
106
- device=device,
107
105
  embedding_l1_reg=embedding_l1_reg,
108
106
  dense_l1_reg=dense_l1_reg,
109
107
  embedding_l2_reg=embedding_l2_reg,
@@ -125,7 +123,7 @@ class ShareBottom(BaseModel):
125
123
  # Calculate input dimension
126
124
  input_dim = self.embedding.input_dim
127
125
  # emb_dim_total = sum([f.embedding_dim for f in self.all_features if not isinstance(f, DenseFeature)])
128
- # dense_input_dim = sum([getattr(f, "embedding_dim", 1) or 1 for f in dense_features])
126
+ # dense_input_dim = sum([(f.embedding_dim or 1) for f in dense_features])
129
127
  # input_dim = emb_dim_total + dense_input_dim
130
128
 
131
129
  # Shared bottom network
@@ -67,11 +67,10 @@ class AFM(BaseModel):
67
67
  optimizer_params: dict | None = None,
68
68
  loss: str | nn.Module | None = "bce",
69
69
  loss_params: dict | list[dict] | None = None,
70
- device: str = "cpu",
71
- embedding_l1_reg=1e-6,
72
- dense_l1_reg=1e-5,
73
- embedding_l2_reg=1e-5,
74
- dense_l2_reg=1e-4,
70
+ embedding_l1_reg=0.0,
71
+ dense_l1_reg=0.0,
72
+ embedding_l2_reg=0.0,
73
+ dense_l2_reg=0.0,
75
74
  **kwargs,
76
75
  ):
77
76
 
@@ -88,7 +87,6 @@ class AFM(BaseModel):
88
87
  sequence_features=sequence_features,
89
88
  target=target,
90
89
  task=task or self.default_task,
91
- device=device,
92
90
  embedding_l1_reg=embedding_l1_reg,
93
91
  dense_l1_reg=dense_l1_reg,
94
92
  embedding_l2_reg=embedding_l2_reg,
@@ -88,11 +88,10 @@ class AutoInt(BaseModel):
88
88
  optimizer_params: dict | None = None,
89
89
  loss: str | nn.Module | None = "bce",
90
90
  loss_params: dict | list[dict] | None = None,
91
- device: str = "cpu",
92
- embedding_l1_reg=1e-6,
93
- dense_l1_reg=1e-5,
94
- embedding_l2_reg=1e-5,
95
- dense_l2_reg=1e-4,
91
+ embedding_l1_reg=0.0,
92
+ dense_l1_reg=0.0,
93
+ embedding_l2_reg=0.0,
94
+ dense_l2_reg=0.0,
96
95
  **kwargs,
97
96
  ):
98
97
 
@@ -102,7 +101,6 @@ class AutoInt(BaseModel):
102
101
  sequence_features=sequence_features,
103
102
  target=target,
104
103
  task=task or self.default_task,
105
- device=device,
106
104
  embedding_l1_reg=embedding_l1_reg,
107
105
  dense_l1_reg=dense_l1_reg,
108
106
  embedding_l2_reg=embedding_l2_reg,
@@ -102,11 +102,10 @@ class DCN(BaseModel):
102
102
  optimizer_params: dict | None = None,
103
103
  loss: str | nn.Module | None = "bce",
104
104
  loss_params: dict | list[dict] | None = None,
105
- device: str = "cpu",
106
- embedding_l1_reg=1e-6,
107
- dense_l1_reg=1e-5,
108
- embedding_l2_reg=1e-5,
109
- dense_l2_reg=1e-4,
105
+ embedding_l1_reg=0.0,
106
+ dense_l1_reg=0.0,
107
+ embedding_l2_reg=0.0,
108
+ dense_l2_reg=0.0,
110
109
  **kwargs,
111
110
  ):
112
111
 
@@ -123,7 +122,6 @@ class DCN(BaseModel):
123
122
  sequence_features=sequence_features,
124
123
  target=target,
125
124
  task=task or self.default_task,
126
- device=device,
127
125
  embedding_l1_reg=embedding_l1_reg,
128
126
  dense_l1_reg=dense_l1_reg,
129
127
  embedding_l2_reg=embedding_l2_reg,
@@ -143,7 +141,10 @@ class DCN(BaseModel):
143
141
  ]
144
142
  )
145
143
  dense_input_dim = sum(
146
- [getattr(f, "embedding_dim", 1) or 1 for f in dense_features]
144
+ [
145
+ (f.embedding_dim if f.embedding_dim is not None else 1) or 1
146
+ for f in dense_features
147
+ ]
147
148
  )
148
149
  input_dim = emb_dim_total + dense_input_dim
149
150
 
@@ -204,11 +204,10 @@ class DCNv2(BaseModel):
204
204
  optimizer_params: dict | None = None,
205
205
  loss: str | nn.Module | None = "bce",
206
206
  loss_params: dict | list[dict] | None = None,
207
- device: str = "cpu",
208
- embedding_l1_reg=1e-6,
209
- dense_l1_reg=1e-5,
210
- embedding_l2_reg=1e-5,
211
- dense_l2_reg=1e-4,
207
+ embedding_l1_reg=0.0,
208
+ dense_l1_reg=0.0,
209
+ embedding_l2_reg=0.0,
210
+ dense_l2_reg=0.0,
212
211
  **kwargs,
213
212
  ):
214
213
  dense_features = dense_features or []
@@ -224,7 +223,6 @@ class DCNv2(BaseModel):
224
223
  sequence_features=sequence_features,
225
224
  target=target,
226
225
  task=task or self.default_task,
227
- device=device,
228
226
  embedding_l1_reg=embedding_l1_reg,
229
227
  dense_l1_reg=dense_l1_reg,
230
228
  embedding_l2_reg=embedding_l2_reg,
@@ -71,11 +71,10 @@ class DeepFM(BaseModel):
71
71
  optimizer_params: dict | None = None,
72
72
  loss: str | nn.Module | None = "bce",
73
73
  loss_params: dict | list[dict] | None = None,
74
- device: str = "cpu",
75
- embedding_l1_reg=1e-6,
76
- dense_l1_reg=1e-5,
77
- embedding_l2_reg=1e-5,
78
- dense_l2_reg=1e-4,
74
+ embedding_l1_reg=0.0,
75
+ dense_l1_reg=0.0,
76
+ embedding_l2_reg=0.0,
77
+ dense_l2_reg=0.0,
79
78
  **kwargs,
80
79
  ):
81
80
 
@@ -93,7 +92,6 @@ class DeepFM(BaseModel):
93
92
  sequence_features=sequence_features,
94
93
  target=target,
95
94
  task=task or self.default_task,
96
- device=device,
97
95
  embedding_l1_reg=embedding_l1_reg,
98
96
  dense_l1_reg=dense_l1_reg,
99
97
  embedding_l2_reg=embedding_l2_reg,
@@ -107,7 +105,7 @@ class DeepFM(BaseModel):
107
105
  self.embedding = EmbeddingLayer(features=self.deep_features)
108
106
  fm_emb_dim_total = sum([f.embedding_dim for f in self.fm_features])
109
107
  # deep_emb_dim_total = sum([f.embedding_dim for f in self.deep_features if not isinstance(f, DenseFeature)])
110
- # dense_input_dim = sum([getattr(f, "embedding_dim", 1) or 1 for f in dense_features])
108
+ # dense_input_dim = sum([(f.embedding_dim or 1) for f in dense_features])
111
109
  mlp_input_dim = self.embedding.input_dim
112
110
  self.linear = LR(fm_emb_dim_total)
113
111
  self.fm = FM(reduce_sum=True)
@@ -220,11 +220,10 @@ class DIEN(BaseModel):
220
220
  optimizer_params: dict | None = None,
221
221
  loss: str | nn.Module | None = "bce",
222
222
  loss_params: dict | list[dict] | None = None,
223
- device: str = "cpu",
224
- embedding_l1_reg=1e-6,
225
- dense_l1_reg=1e-5,
226
- embedding_l2_reg=1e-5,
227
- dense_l2_reg=1e-4,
223
+ embedding_l1_reg=0.0,
224
+ dense_l1_reg=0.0,
225
+ embedding_l2_reg=0.0,
226
+ dense_l2_reg=0.0,
228
227
  **kwargs,
229
228
  ):
230
229
 
@@ -243,7 +242,6 @@ class DIEN(BaseModel):
243
242
  sequence_features=sequence_features,
244
243
  target=target,
245
244
  task=task or self.default_task,
246
- device=device,
247
245
  embedding_l1_reg=embedding_l1_reg,
248
246
  dense_l1_reg=dense_l1_reg,
249
247
  embedding_l2_reg=embedding_l2_reg,
@@ -342,7 +340,10 @@ class DIEN(BaseModel):
342
340
  mlp_input_dim += gru_hidden_size # final interest state
343
341
  mlp_input_dim += sum([f.embedding_dim for f in self.other_sparse_features])
344
342
  mlp_input_dim += sum(
345
- [getattr(f, "embedding_dim", 1) or 1 for f in dense_features]
343
+ [
344
+ (f.embedding_dim if f.embedding_dim is not None else 1) or 1
345
+ for f in dense_features
346
+ ]
346
347
  )
347
348
 
348
349
  self.mlp = MLP(input_dim=mlp_input_dim, **mlp_params)
@@ -86,11 +86,10 @@ class DIN(BaseModel):
86
86
  optimizer_params: dict | None = None,
87
87
  loss: str | nn.Module | None = "bce",
88
88
  loss_params: dict | list[dict] | None = None,
89
- device: str = "cpu",
90
- embedding_l1_reg=1e-6,
91
- dense_l1_reg=1e-5,
92
- embedding_l2_reg=1e-5,
93
- dense_l2_reg=1e-4,
89
+ embedding_l1_reg=0.0,
90
+ dense_l1_reg=0.0,
91
+ embedding_l2_reg=0.0,
92
+ dense_l2_reg=0.0,
94
93
  **kwargs,
95
94
  ):
96
95
 
@@ -109,7 +108,6 @@ class DIN(BaseModel):
109
108
  sequence_features=sequence_features,
110
109
  target=target,
111
110
  task=task or self.default_task,
112
- device=device,
113
111
  embedding_l1_reg=embedding_l1_reg,
114
112
  dense_l1_reg=dense_l1_reg,
115
113
  embedding_l2_reg=embedding_l2_reg,
@@ -168,7 +166,10 @@ class DIN(BaseModel):
168
166
  mlp_input_dim += behavior_emb_dim # attention pooled
169
167
  mlp_input_dim += sum([f.embedding_dim for f in self.other_sparse_features])
170
168
  mlp_input_dim += sum(
171
- [getattr(f, "embedding_dim", 1) or 1 for f in dense_features]
169
+ [
170
+ (f.embedding_dim if f.embedding_dim is not None else 1) or 1
171
+ for f in dense_features
172
+ ]
172
173
  )
173
174
 
174
175
  # MLP for final prediction
@@ -211,11 +211,10 @@ class EulerNet(BaseModel):
211
211
  optimizer_params: dict | None = None,
212
212
  loss: str | nn.Module | None = "bce",
213
213
  loss_params: dict | list[dict] | None = None,
214
- device: str = "cpu",
215
- embedding_l1_reg=1e-6,
216
- dense_l1_reg=1e-5,
217
- embedding_l2_reg=1e-5,
218
- dense_l2_reg=1e-4,
214
+ embedding_l1_reg=0.0,
215
+ dense_l1_reg=0.0,
216
+ embedding_l2_reg=0.0,
217
+ dense_l2_reg=0.0,
219
218
  **kwargs,
220
219
  ):
221
220
 
@@ -232,7 +231,6 @@ class EulerNet(BaseModel):
232
231
  sequence_features=sequence_features,
233
232
  target=target,
234
233
  task=task or self.default_task,
235
- device=device,
236
234
  embedding_l1_reg=embedding_l1_reg,
237
235
  dense_l1_reg=dense_l1_reg,
238
236
  embedding_l2_reg=embedding_l2_reg,
@@ -245,7 +243,7 @@ class EulerNet(BaseModel):
245
243
 
246
244
  self.linear_features = dense_features + sparse_features + sequence_features
247
245
  self.interaction_features = (
248
- [f for f in dense_features if getattr(f, "use_embedding", False)]
246
+ [f for f in dense_features if f.use_projection]
249
247
  + sparse_features
250
248
  + sequence_features
251
249
  )
@@ -69,11 +69,10 @@ class FFM(BaseModel):
69
69
  optimizer_params: dict | None = None,
70
70
  loss: str | nn.Module | None = "bce",
71
71
  loss_params: dict | list[dict] | None = None,
72
- device: str = "cpu",
73
- embedding_l1_reg=1e-6,
74
- dense_l1_reg=1e-5,
75
- embedding_l2_reg=1e-5,
76
- dense_l2_reg=1e-4,
72
+ embedding_l1_reg=0.0,
73
+ dense_l1_reg=0.0,
74
+ embedding_l2_reg=0.0,
75
+ dense_l2_reg=0.0,
77
76
  **kwargs,
78
77
  ):
79
78
  dense_features = dense_features or []
@@ -89,7 +88,6 @@ class FFM(BaseModel):
89
88
  sequence_features=sequence_features,
90
89
  target=target,
91
90
  task=task or self.default_task,
92
- device=device,
93
91
  embedding_l1_reg=embedding_l1_reg,
94
92
  dense_l1_reg=dense_l1_reg,
95
93
  embedding_l2_reg=embedding_l2_reg,
@@ -169,7 +167,7 @@ class FFM(BaseModel):
169
167
  return f"{src_feature.embedding_name}__to__{target_field.name}"
170
168
 
171
169
  def build_embedding(self, feature: SparseFeature | SequenceFeature) -> nn.Embedding:
172
- if getattr(feature, "pretrained_weight", None) is not None:
170
+ if feature.pretrained_weight is not None:
173
171
  weight = feature.pretrained_weight
174
172
  if weight is None:
175
173
  raise ValueError(
@@ -80,11 +80,10 @@ class FiBiNET(BaseModel):
80
80
  optimizer_params: dict | None = None,
81
81
  loss: str | nn.Module | None = "bce",
82
82
  loss_params: dict | list[dict] | None = None,
83
- device: str = "cpu",
84
- embedding_l1_reg=1e-6,
85
- dense_l1_reg=1e-5,
86
- embedding_l2_reg=1e-5,
87
- dense_l2_reg=1e-4,
83
+ embedding_l1_reg=0.0,
84
+ dense_l1_reg=0.0,
85
+ embedding_l2_reg=0.0,
86
+ dense_l2_reg=0.0,
88
87
  **kwargs,
89
88
  ):
90
89
 
@@ -102,7 +101,6 @@ class FiBiNET(BaseModel):
102
101
  sequence_features=sequence_features,
103
102
  target=target,
104
103
  task=task or self.default_task,
105
- device=device,
106
104
  embedding_l1_reg=embedding_l1_reg,
107
105
  dense_l1_reg=dense_l1_reg,
108
106
  embedding_l2_reg=embedding_l2_reg,
@@ -67,11 +67,10 @@ class FM(BaseModel):
67
67
  optimizer_params: dict | None = None,
68
68
  loss: str | nn.Module | None = "bce",
69
69
  loss_params: dict | list[dict] | None = None,
70
- device: str = "cpu",
71
- embedding_l1_reg=1e-6,
72
- dense_l1_reg=1e-5,
73
- embedding_l2_reg=1e-5,
74
- dense_l2_reg=1e-4,
70
+ embedding_l1_reg=0.0,
71
+ dense_l1_reg=0.0,
72
+ embedding_l2_reg=0.0,
73
+ dense_l2_reg=0.0,
75
74
  **kwargs,
76
75
  ):
77
76
 
@@ -85,7 +84,6 @@ class FM(BaseModel):
85
84
  sequence_features=sequence_features,
86
85
  target=target,
87
86
  task=task or self.default_task,
88
- device=device,
89
87
  embedding_l1_reg=embedding_l1_reg,
90
88
  dense_l1_reg=dense_l1_reg,
91
89
  embedding_l2_reg=embedding_l2_reg,
@@ -66,11 +66,10 @@ class LR(BaseModel):
66
66
  optimizer_params: dict | None = None,
67
67
  loss: str | nn.Module | None = "bce",
68
68
  loss_params: dict | list[dict] | None = None,
69
- device: str = "cpu",
70
- embedding_l1_reg=1e-6,
71
- dense_l1_reg=1e-5,
72
- embedding_l2_reg=1e-5,
73
- dense_l2_reg=1e-4,
69
+ embedding_l1_reg=0.0,
70
+ dense_l1_reg=0.0,
71
+ embedding_l2_reg=0.0,
72
+ dense_l2_reg=0.0,
74
73
  **kwargs,
75
74
  ):
76
75
 
@@ -87,7 +86,6 @@ class LR(BaseModel):
87
86
  sequence_features=sequence_features,
88
87
  target=target,
89
88
  task=task or self.default_task,
90
- device=device,
91
89
  embedding_l1_reg=embedding_l1_reg,
92
90
  dense_l1_reg=dense_l1_reg,
93
91
  embedding_l2_reg=embedding_l2_reg,
@@ -179,11 +179,10 @@ class MaskNet(BaseModel):
179
179
  optimizer_params: dict | None = None,
180
180
  loss: str | nn.Module | None = "bce",
181
181
  loss_params: dict | list[dict] | None = None,
182
- device: str = "cpu",
183
- embedding_l1_reg: float = 1e-6,
184
- dense_l1_reg: float = 1e-5,
185
- embedding_l2_reg: float = 1e-5,
186
- dense_l2_reg: float = 1e-4,
182
+ embedding_l1_reg=0.0,
183
+ dense_l1_reg=0.0,
184
+ embedding_l2_reg=0.0,
185
+ dense_l2_reg=0.0,
187
186
  **kwargs,
188
187
  ):
189
188
  dense_features = dense_features or []
@@ -199,7 +198,6 @@ class MaskNet(BaseModel):
199
198
  sequence_features=sequence_features,
200
199
  target=target,
201
200
  task=task or self.default_task,
202
- device=device,
203
201
  embedding_l1_reg=embedding_l1_reg,
204
202
  dense_l1_reg=dense_l1_reg,
205
203
  embedding_l2_reg=embedding_l2_reg,
@@ -220,16 +218,17 @@ class MaskNet(BaseModel):
220
218
  ), "MaskNet requires at least one feature for masking."
221
219
  self.embedding = EmbeddingLayer(features=self.mask_features)
222
220
  self.num_fields = len(self.mask_features)
223
- self.embedding_dim = getattr(self.mask_features[0], "embedding_dim", None)
221
+ self.embedding_dim = self.mask_features[0].embedding_dim
224
222
  assert (
225
223
  self.embedding_dim is not None
226
224
  ), "MaskNet requires mask_features to have 'embedding_dim' defined."
227
225
 
228
226
  for f in self.mask_features:
229
- edim = getattr(f, "embedding_dim", None)
227
+ edim = f.embedding_dim
230
228
  if edim is None or edim != self.embedding_dim:
229
+ feat_name = f.name if hasattr(f, "name") else type(f)
231
230
  raise ValueError(
232
- f"MaskNet expects identical embedding_dim across all mask_features, but got {edim} for feature {getattr(f, 'name', type(f))}."
231
+ f"MaskNet expects identical embedding_dim across all mask_features, but got {edim} for feature {feat_name}."
233
232
  )
234
233
 
235
234
  self.v_emb_dim = self.num_fields * self.embedding_dim
@@ -67,11 +67,10 @@ class PNN(BaseModel):
67
67
  optimizer_params: dict | None = None,
68
68
  loss: str | nn.Module | None = "bce",
69
69
  loss_params: dict | list[dict] | None = None,
70
- device: str = "cpu",
71
- embedding_l1_reg=1e-6,
72
- dense_l1_reg=1e-5,
73
- embedding_l2_reg=1e-5,
74
- dense_l2_reg=1e-4,
70
+ embedding_l1_reg=0.0,
71
+ dense_l1_reg=0.0,
72
+ embedding_l2_reg=0.0,
73
+ dense_l2_reg=0.0,
75
74
  **kwargs,
76
75
  ):
77
76
 
@@ -91,7 +90,6 @@ class PNN(BaseModel):
91
90
  sequence_features=sequence_features,
92
91
  target=target,
93
92
  task=task or self.default_task,
94
- device=device,
95
93
  embedding_l1_reg=embedding_l1_reg,
96
94
  dense_l1_reg=dense_l1_reg,
97
95
  embedding_l2_reg=embedding_l2_reg,
@@ -67,11 +67,10 @@ class WideDeep(BaseModel):
67
67
  optimizer_params: dict | None = None,
68
68
  loss: str | nn.Module | None = "bce",
69
69
  loss_params: dict | list[dict] | None = None,
70
- device: str = "cpu",
71
- embedding_l1_reg=1e-6,
72
- dense_l1_reg=1e-5,
73
- embedding_l2_reg=1e-5,
74
- dense_l2_reg=1e-4,
70
+ embedding_l1_reg=0.0,
71
+ dense_l1_reg=0.0,
72
+ embedding_l2_reg=0.0,
73
+ dense_l2_reg=0.0,
75
74
  **kwargs,
76
75
  ):
77
76
 
@@ -87,7 +86,6 @@ class WideDeep(BaseModel):
87
86
  sequence_features=sequence_features,
88
87
  target=target,
89
88
  task=task or self.default_task,
90
- device=device,
91
89
  embedding_l1_reg=embedding_l1_reg,
92
90
  dense_l1_reg=dense_l1_reg,
93
91
  embedding_l2_reg=embedding_l2_reg,
@@ -112,7 +110,7 @@ class WideDeep(BaseModel):
112
110
  # Deep part: MLP
113
111
  input_dim = self.embedding.input_dim
114
112
  # deep_emb_dim_total = sum([f.embedding_dim for f in self.deep_features if not isinstance(f, DenseFeature)])
115
- # dense_input_dim = sum([getattr(f, "embedding_dim", 1) or 1 for f in dense_features])
113
+ # dense_input_dim = sum([(f.embedding_dim or 1) for f in dense_features])
116
114
  self.mlp = MLP(input_dim=input_dim, **mlp_params)
117
115
  self.prediction_layer = TaskHead(task_type=self.task)
118
116
  # Register regularization weights
@@ -127,11 +127,10 @@ class xDeepFM(BaseModel):
127
127
  optimizer_params: dict | None = None,
128
128
  loss: str | nn.Module | None = "bce",
129
129
  loss_params: dict | list[dict] | None = None,
130
- device: str = "cpu",
131
- embedding_l1_reg=1e-6,
132
- dense_l1_reg=1e-5,
133
- embedding_l2_reg=1e-5,
134
- dense_l2_reg=1e-4,
130
+ embedding_l1_reg=0.0,
131
+ dense_l1_reg=0.0,
132
+ embedding_l2_reg=0.0,
133
+ dense_l2_reg=0.0,
135
134
  **kwargs,
136
135
  ):
137
136
 
@@ -148,7 +147,6 @@ class xDeepFM(BaseModel):
148
147
  sequence_features=sequence_features,
149
148
  target=target,
150
149
  task=task or self.default_task,
151
- device=device,
152
150
  embedding_l1_reg=embedding_l1_reg,
153
151
  dense_l1_reg=dense_l1_reg,
154
152
  embedding_l2_reg=embedding_l2_reg,
@@ -184,7 +182,10 @@ class xDeepFM(BaseModel):
184
182
  ]
185
183
  )
186
184
  dense_input_dim = sum(
187
- [getattr(f, "embedding_dim", 1) or 1 for f in dense_features]
185
+ [
186
+ (f.embedding_dim if f.embedding_dim is not None else 1) or 1
187
+ for f in dense_features
188
+ ]
188
189
  )
189
190
  self.mlp = MLP(input_dim=deep_emb_dim_total + dense_input_dim, **mlp_params)
190
191
  self.prediction_layer = TaskHead(task_type=self.task)
@@ -50,12 +50,10 @@ class DSSM(BaseMatchModel):
50
50
  num_negative_samples: int = 4,
51
51
  temperature: float = 1.0,
52
52
  similarity_metric: Literal["dot", "cosine", "euclidean"] = "cosine",
53
- device: str = "cpu",
54
- embedding_l1_reg: float = 0.0,
55
- dense_l1_reg: float = 0.0,
56
- embedding_l2_reg: float = 0.0,
57
- dense_l2_reg: float = 0.0,
58
- early_stop_patience: int = 20,
53
+ embedding_l1_reg=0.0,
54
+ dense_l1_reg=0.0,
55
+ embedding_l2_reg=0.0,
56
+ dense_l2_reg=0.0,
59
57
  optimizer: str | torch.optim.Optimizer = "adam",
60
58
  optimizer_params: dict | None = None,
61
59
  scheduler: (
@@ -81,12 +79,10 @@ class DSSM(BaseMatchModel):
81
79
  num_negative_samples=num_negative_samples,
82
80
  temperature=temperature,
83
81
  similarity_metric=similarity_metric,
84
- device=device,
85
82
  embedding_l1_reg=embedding_l1_reg,
86
83
  dense_l1_reg=dense_l1_reg,
87
84
  embedding_l2_reg=embedding_l2_reg,
88
85
  dense_l2_reg=dense_l2_reg,
89
- early_stop_patience=early_stop_patience,
90
86
  **kwargs,
91
87
  )
92
88
 
@@ -175,8 +171,6 @@ class DSSM(BaseMatchModel):
175
171
  loss_params=loss_params,
176
172
  )
177
173
 
178
- self.to(device)
179
-
180
174
  def user_tower(self, user_input: dict) -> torch.Tensor:
181
175
  """
182
176
  User tower encodes user features into embeddings.
@@ -46,12 +46,10 @@ class DSSM_v2(BaseMatchModel):
46
46
  num_negative_samples: int = 4,
47
47
  temperature: float = 1.0,
48
48
  similarity_metric: Literal["dot", "cosine", "euclidean"] = "dot",
49
- device: str = "cpu",
50
49
  embedding_l1_reg: float = 0.0,
51
50
  dense_l1_reg: float = 0.0,
52
51
  embedding_l2_reg: float = 0.0,
53
52
  dense_l2_reg: float = 0.0,
54
- early_stop_patience: int = 20,
55
53
  optimizer: str | torch.optim.Optimizer = "adam",
56
54
  optimizer_params: dict | None = None,
57
55
  scheduler: (
@@ -77,12 +75,10 @@ class DSSM_v2(BaseMatchModel):
77
75
  num_negative_samples=num_negative_samples,
78
76
  temperature=temperature,
79
77
  similarity_metric=similarity_metric,
80
- device=device,
81
78
  embedding_l1_reg=embedding_l1_reg,
82
79
  dense_l1_reg=dense_l1_reg,
83
80
  embedding_l2_reg=embedding_l2_reg,
84
81
  dense_l2_reg=dense_l2_reg,
85
- early_stop_patience=early_stop_patience,
86
82
  **kwargs,
87
83
  )
88
84
 
@@ -167,8 +163,6 @@ class DSSM_v2(BaseMatchModel):
167
163
  loss_params=loss_params,
168
164
  )
169
165
 
170
- self.to(device)
171
-
172
166
  def user_tower(self, user_input: dict) -> torch.Tensor:
173
167
  """User tower"""
174
168
  all_user_features = (
@@ -202,12 +202,10 @@ class MIND(BaseMatchModel):
202
202
  num_negative_samples: int = 100,
203
203
  temperature: float = 1.0,
204
204
  similarity_metric: Literal["dot", "cosine", "euclidean"] = "dot",
205
- device: str = "cpu",
206
- embedding_l1_reg: float = 0.0,
207
- dense_l1_reg: float = 0.0,
208
- embedding_l2_reg: float = 0.0,
209
- dense_l2_reg: float = 0.0,
210
- early_stop_patience: int = 20,
205
+ embedding_l1_reg=0.0,
206
+ dense_l1_reg=0.0,
207
+ embedding_l2_reg=0.0,
208
+ dense_l2_reg=0.0,
211
209
  optimizer: str | torch.optim.Optimizer = "adam",
212
210
  optimizer_params: dict | None = None,
213
211
  scheduler: (
@@ -233,12 +231,10 @@ class MIND(BaseMatchModel):
233
231
  num_negative_samples=num_negative_samples,
234
232
  temperature=temperature,
235
233
  similarity_metric=similarity_metric,
236
- device=device,
237
234
  embedding_l1_reg=embedding_l1_reg,
238
235
  dense_l1_reg=dense_l1_reg,
239
236
  embedding_l2_reg=embedding_l2_reg,
240
237
  dense_l2_reg=dense_l2_reg,
241
- early_stop_patience=early_stop_patience,
242
238
  **kwargs,
243
239
  )
244
240
 
@@ -335,8 +331,6 @@ class MIND(BaseMatchModel):
335
331
  loss_params=loss_params,
336
332
  )
337
333
 
338
- self.to(device)
339
-
340
334
  def user_tower(self, user_input: dict) -> torch.Tensor:
341
335
  """
342
336
  User tower with multi-interest extraction