nextrec 0.4.21__py3-none-any.whl → 0.4.23__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 (49) hide show
  1. nextrec/__version__.py +1 -1
  2. nextrec/basic/activation.py +1 -1
  3. nextrec/basic/heads.py +2 -3
  4. nextrec/basic/metrics.py +1 -2
  5. nextrec/basic/model.py +115 -80
  6. nextrec/basic/summary.py +36 -2
  7. nextrec/data/preprocessor.py +137 -5
  8. nextrec/loss/__init__.py +0 -4
  9. nextrec/loss/grad_norm.py +3 -3
  10. nextrec/loss/listwise.py +19 -6
  11. nextrec/loss/pairwise.py +6 -4
  12. nextrec/loss/pointwise.py +8 -6
  13. nextrec/models/multi_task/esmm.py +3 -26
  14. nextrec/models/multi_task/mmoe.py +2 -24
  15. nextrec/models/multi_task/ple.py +13 -35
  16. nextrec/models/multi_task/poso.py +4 -28
  17. nextrec/models/multi_task/share_bottom.py +1 -24
  18. nextrec/models/ranking/afm.py +3 -27
  19. nextrec/models/ranking/autoint.py +5 -38
  20. nextrec/models/ranking/dcn.py +1 -26
  21. nextrec/models/ranking/dcn_v2.py +5 -33
  22. nextrec/models/ranking/deepfm.py +2 -29
  23. nextrec/models/ranking/dien.py +2 -28
  24. nextrec/models/ranking/din.py +2 -27
  25. nextrec/models/ranking/eulernet.py +3 -30
  26. nextrec/models/ranking/ffm.py +0 -26
  27. nextrec/models/ranking/fibinet.py +8 -32
  28. nextrec/models/ranking/fm.py +0 -29
  29. nextrec/models/ranking/lr.py +0 -30
  30. nextrec/models/ranking/masknet.py +4 -30
  31. nextrec/models/ranking/pnn.py +4 -28
  32. nextrec/models/ranking/widedeep.py +0 -32
  33. nextrec/models/ranking/xdeepfm.py +0 -30
  34. nextrec/models/retrieval/dssm.py +0 -24
  35. nextrec/models/retrieval/dssm_v2.py +0 -24
  36. nextrec/models/retrieval/mind.py +0 -20
  37. nextrec/models/retrieval/sdm.py +0 -20
  38. nextrec/models/retrieval/youtube_dnn.py +0 -21
  39. nextrec/models/sequential/hstu.py +0 -18
  40. nextrec/utils/__init__.py +5 -1
  41. nextrec/{loss/loss_utils.py → utils/loss.py} +17 -7
  42. nextrec/utils/model.py +79 -1
  43. nextrec/utils/types.py +62 -23
  44. {nextrec-0.4.21.dist-info → nextrec-0.4.23.dist-info}/METADATA +8 -6
  45. nextrec-0.4.23.dist-info/RECORD +81 -0
  46. nextrec-0.4.21.dist-info/RECORD +0 -81
  47. {nextrec-0.4.21.dist-info → nextrec-0.4.23.dist-info}/WHEEL +0 -0
  48. {nextrec-0.4.21.dist-info → nextrec-0.4.23.dist-info}/entry_points.txt +0 -0
  49. {nextrec-0.4.21.dist-info → nextrec-0.4.23.dist-info}/licenses/LICENSE +0 -0
@@ -206,17 +206,6 @@ class MIND(BaseMatchModel):
206
206
  dense_l1_reg=0.0,
207
207
  embedding_l2_reg=0.0,
208
208
  dense_l2_reg=0.0,
209
- optimizer: str | torch.optim.Optimizer = "adam",
210
- optimizer_params: dict | None = None,
211
- scheduler: (
212
- str
213
- | torch.optim.lr_scheduler._LRScheduler
214
- | type[torch.optim.lr_scheduler._LRScheduler]
215
- | None
216
- ) = None,
217
- scheduler_params: dict | None = None,
218
- loss: str | nn.Module | list[str | nn.Module] | None = "bce",
219
- loss_params: dict | list[dict] | None = None,
220
209
  **kwargs,
221
210
  ):
222
211
 
@@ -322,15 +311,6 @@ class MIND(BaseMatchModel):
322
311
  include_modules=["item_dnn"] if self.item_dnn else [],
323
312
  )
324
313
 
325
- self.compile(
326
- optimizer=optimizer,
327
- optimizer_params=optimizer_params,
328
- scheduler=scheduler,
329
- scheduler_params=scheduler_params,
330
- loss=loss,
331
- loss_params=loss_params,
332
- )
333
-
334
314
  def user_tower(self, user_input: dict) -> torch.Tensor:
335
315
  """
336
316
  User tower with multi-interest extraction
@@ -53,17 +53,6 @@ class SDM(BaseMatchModel):
53
53
  dense_l1_reg=0.0,
54
54
  embedding_l2_reg=0.0,
55
55
  dense_l2_reg=0.0,
56
- optimizer: str | torch.optim.Optimizer = "adam",
57
- optimizer_params: dict | None = None,
58
- scheduler: (
59
- str
60
- | torch.optim.lr_scheduler._LRScheduler
61
- | type[torch.optim.lr_scheduler._LRScheduler]
62
- | None
63
- ) = None,
64
- scheduler_params: dict | None = None,
65
- loss: str | nn.Module | list[str | nn.Module] | None = "bce",
66
- loss_params: dict | list[dict] | None = None,
67
56
  **kwargs,
68
57
  ):
69
58
 
@@ -189,15 +178,6 @@ class SDM(BaseMatchModel):
189
178
  include_modules=["item_dnn"] if self.item_dnn else [],
190
179
  )
191
180
 
192
- self.compile(
193
- optimizer=optimizer,
194
- optimizer_params=optimizer_params,
195
- scheduler=scheduler,
196
- scheduler_params=scheduler_params,
197
- loss=loss,
198
- loss_params=loss_params,
199
- )
200
-
201
181
  def user_tower(self, user_input: dict) -> torch.Tensor:
202
182
  seq_feature = self.user_sequence_features[0]
203
183
  seq_input = user_input[seq_feature.name]
@@ -10,7 +10,6 @@ Reference:
10
10
  from typing import Literal
11
11
 
12
12
  import torch
13
- import torch.nn as nn
14
13
 
15
14
  from nextrec.basic.features import DenseFeature, SequenceFeature, SparseFeature
16
15
  from nextrec.basic.layers import MLP, EmbeddingLayer
@@ -54,17 +53,6 @@ class YoutubeDNN(BaseMatchModel):
54
53
  dense_l1_reg=0.0,
55
54
  embedding_l2_reg=0.0,
56
55
  dense_l2_reg=0.0,
57
- optimizer: str | torch.optim.Optimizer = "adam",
58
- optimizer_params: dict | None = None,
59
- scheduler: (
60
- str
61
- | torch.optim.lr_scheduler._LRScheduler
62
- | type[torch.optim.lr_scheduler._LRScheduler]
63
- | None
64
- ) = None,
65
- scheduler_params: dict | None = None,
66
- loss: str | nn.Module | list[str | nn.Module] | None = "bce",
67
- loss_params: dict | list[dict] | None = None,
68
56
  **kwargs,
69
57
  ):
70
58
 
@@ -156,15 +144,6 @@ class YoutubeDNN(BaseMatchModel):
156
144
  embedding_attr="item_embedding", include_modules=["item_dnn"]
157
145
  )
158
146
 
159
- self.compile(
160
- optimizer=optimizer,
161
- optimizer_params=optimizer_params,
162
- scheduler=scheduler,
163
- scheduler_params=scheduler_params,
164
- loss=loss,
165
- loss_params=loss_params,
166
- )
167
-
168
147
  def user_tower(self, user_input: dict) -> torch.Tensor:
169
148
  """
170
149
  User tower to encode historical behavior sequences and user features.
@@ -323,11 +323,6 @@ class HSTU(BaseModel):
323
323
  tie_embeddings: bool = True,
324
324
  target: Optional[list[str] | str] = None,
325
325
  task: str | list[str] | None = None,
326
- optimizer: str = "adam",
327
- optimizer_params: Optional[dict] = None,
328
- scheduler: Optional[str] = None,
329
- scheduler_params: Optional[dict] = None,
330
- loss_params: Optional[dict] = None,
331
326
  embedding_l1_reg: float = 0.0,
332
327
  dense_l1_reg: float = 0.0,
333
328
  embedding_l2_reg: float = 0.0,
@@ -426,19 +421,6 @@ class HSTU(BaseModel):
426
421
  self.register_buffer("causal_mask", torch.empty(0), persistent=False)
427
422
  self.ignore_index = self.padding_idx if self.padding_idx is not None else -100
428
423
 
429
- optimizer_params = optimizer_params or {}
430
- scheduler_params = scheduler_params or {}
431
- loss_params = loss_params or {}
432
- loss_params.setdefault("ignore_index", self.ignore_index)
433
-
434
- self.compile(
435
- optimizer=optimizer,
436
- optimizer_params=optimizer_params,
437
- scheduler=scheduler,
438
- scheduler_params=scheduler_params,
439
- loss="crossentropy",
440
- loss_params=loss_params,
441
- )
442
424
  self.register_regularization_weights(
443
425
  embedding_attr="token_embedding",
444
426
  include_modules=["layers", "lm_head", "context_proj"],
nextrec/utils/__init__.py CHANGED
@@ -6,7 +6,7 @@ Last update: 19/12/2025
6
6
  Author: Yang Zhou, zyaztec@gmail.com
7
7
  """
8
8
 
9
- from . import console, data, embedding, torch_utils
9
+ from . import console, data, embedding, loss, torch_utils
10
10
  from .config import (
11
11
  build_feature_objects,
12
12
  build_model_instance,
@@ -38,6 +38,7 @@ from .data import (
38
38
  from .embedding import get_auto_embedding_dim
39
39
  from .feature import to_list
40
40
  from .model import compute_pair_scores, get_mlp_output_dim, merge_features
41
+ from .loss import normalize_task_loss
41
42
  from .torch_utils import (
42
43
  add_distributed_sampler,
43
44
  get_device,
@@ -81,6 +82,8 @@ __all__ = [
81
82
  "merge_features",
82
83
  "get_mlp_output_dim",
83
84
  "compute_pair_scores",
85
+ # Loss utilities
86
+ "normalize_task_loss",
84
87
  # Feature utilities
85
88
  "to_list",
86
89
  # Config utilities
@@ -101,6 +104,7 @@ __all__ = [
101
104
  "console",
102
105
  "data",
103
106
  "embedding",
107
+ "loss",
104
108
  "torch_utils",
105
109
  # Type aliases
106
110
  "OptimizerName",
@@ -1,11 +1,13 @@
1
1
  """
2
2
  Loss utilities for NextRec.
3
3
 
4
- Date: create on 27/10/2025
5
- Checkpoint: edit on 19/12/2025
4
+ Date: create on 28/12/2025
6
5
  Author: Yang Zhou, zyaztec@gmail.com
7
6
  """
8
7
 
8
+ from __future__ import annotations
9
+
10
+ import torch
9
11
  import torch.nn as nn
10
12
 
11
13
  from nextrec.loss.listwise import (
@@ -19,11 +21,19 @@ from nextrec.loss.pairwise import BPRLoss, HingeLoss, TripletLoss
19
21
  from nextrec.loss.pointwise import ClassBalancedFocalLoss, FocalLoss, WeightedBCELoss
20
22
  from nextrec.utils.types import LossName
21
23
 
22
- VALID_TASK_TYPES = [
23
- "binary",
24
- "multilabel",
25
- "regression",
26
- ]
24
+
25
+ def normalize_task_loss(
26
+ task_loss,
27
+ valid_count,
28
+ total_count,
29
+ eps=1e-8,
30
+ ) -> torch.Tensor:
31
+ if not torch.is_tensor(valid_count):
32
+ valid_count = torch.tensor(float(valid_count), device=task_loss.device)
33
+ if not torch.is_tensor(total_count):
34
+ total_count = torch.tensor(float(total_count), device=task_loss.device)
35
+ scale = valid_count.to(task_loss.dtype) / (total_count.to(task_loss.dtype) + eps)
36
+ return task_loss * scale
27
37
 
28
38
 
29
39
  def build_cb_focal(kw):
nextrec/utils/model.py CHANGED
@@ -2,7 +2,7 @@
2
2
  Model-related utilities for NextRec
3
3
 
4
4
  Date: create on 03/12/2025
5
- Checkpoint: edit on 24/12/2025
5
+ Checkpoint: edit on 29/12/2025
6
6
  Author: Yang Zhou, zyaztec@gmail.com
7
7
  """
8
8
 
@@ -72,6 +72,84 @@ def compute_pair_scores(model, data, batch_size: int = 512):
72
72
  return scores.detach().cpu().numpy()
73
73
 
74
74
 
75
+ def get_training_modes(
76
+ training_mode,
77
+ nums_task: int,
78
+ valid_modes: set[str] | None = None,
79
+ ) -> list:
80
+ valid_modes = valid_modes or {"pointwise", "pairwise", "listwise"}
81
+ if isinstance(training_mode, list):
82
+ training_modes = list(training_mode)
83
+ if len(training_modes) != nums_task:
84
+ raise ValueError(
85
+ "[BaseModel-init Error] training_mode list length must match number of tasks."
86
+ )
87
+ else:
88
+ training_modes = [training_mode] * nums_task
89
+ if any(mode not in valid_modes for mode in training_modes):
90
+ raise ValueError(
91
+ "[BaseModel-init Error] training_mode must be one of {'pointwise', 'pairwise', 'listwise'}."
92
+ )
93
+ return training_modes
94
+
95
+
96
+ def get_loss_list(
97
+ loss,
98
+ training_modes: list[str],
99
+ nums_task: int,
100
+ default_losses: dict[str, str],
101
+ ):
102
+ effective_loss = loss
103
+ if effective_loss is None:
104
+ loss_list = [default_losses[mode] for mode in training_modes]
105
+ elif isinstance(effective_loss, list):
106
+ if not effective_loss:
107
+ loss_list = [default_losses[mode] for mode in training_modes]
108
+ else:
109
+ if len(effective_loss) != nums_task:
110
+ raise ValueError(
111
+ f"[BaseModel-compile Error] Number of loss functions ({len(effective_loss)}) must match number of tasks ({nums_task})."
112
+ )
113
+ loss_list = list(effective_loss)
114
+ else:
115
+ loss_list = [effective_loss] * nums_task
116
+
117
+ for idx, mode in enumerate(training_modes):
118
+ if isinstance(loss_list[idx], str) and loss_list[idx] in {
119
+ "bce",
120
+ "binary_crossentropy",
121
+ }:
122
+ if mode in {"pairwise", "listwise"}:
123
+ loss_list[idx] = default_losses[mode]
124
+ return loss_list
125
+
126
+
127
+ def resolve_loss_weights(loss_weights, nums_task: int):
128
+ if loss_weights is None:
129
+ return None
130
+ if nums_task == 1:
131
+ if isinstance(loss_weights, (list, tuple)):
132
+ if len(loss_weights) != 1:
133
+ raise ValueError(
134
+ "[BaseModel-compile Error] loss_weights list must have exactly one element for single-task setup."
135
+ )
136
+ loss_weights = loss_weights[0]
137
+ return [float(loss_weights)]
138
+ if isinstance(loss_weights, (int, float)):
139
+ weights = [float(loss_weights)] * nums_task
140
+ elif isinstance(loss_weights, (list, tuple)):
141
+ weights = [float(w) for w in loss_weights]
142
+ if len(weights) != nums_task:
143
+ raise ValueError(
144
+ f"[BaseModel-compile Error] Number of loss_weights ({len(weights)}) must match number of tasks ({nums_task})."
145
+ )
146
+ else:
147
+ raise TypeError(
148
+ f"[BaseModel-compile Error] loss_weights must be int, float, list or tuple, got {type(loss_weights)}"
149
+ )
150
+ return weights
151
+
152
+
75
153
  def prepare_ranking_targets(
76
154
  y_pred: torch.Tensor, y_true: torch.Tensor
77
155
  ) -> tuple[torch.Tensor, torch.Tensor]:
nextrec/utils/types.py CHANGED
@@ -34,26 +34,65 @@ LossName = Literal[
34
34
  ]
35
35
 
36
36
  ActivationName = Literal[
37
- "dice",
38
- "relu",
39
- "relu6",
40
- "elu",
41
- "selu",
42
- "leaky_relu",
43
- "prelu",
44
- "gelu",
45
- "sigmoid",
46
- "tanh",
47
- "softplus",
48
- "softsign",
49
- "hardswish",
50
- "mish",
51
- "silu",
52
- "swish",
53
- "hardsigmoid",
54
- "tanhshrink",
55
- "softshrink",
56
- "none",
57
- "linear",
58
- "identity",
59
- ]
37
+ "dice",
38
+ "relu",
39
+ "relu6",
40
+ "elu",
41
+ "selu",
42
+ "leaky_relu",
43
+ "prelu",
44
+ "gelu",
45
+ "sigmoid",
46
+ "tanh",
47
+ "softplus",
48
+ "softsign",
49
+ "hardswish",
50
+ "mish",
51
+ "silu",
52
+ "swish",
53
+ "hardsigmoid",
54
+ "tanhshrink",
55
+ "softshrink",
56
+ "none",
57
+ "linear",
58
+ "identity",
59
+ ]
60
+
61
+ TrainingModeName = Literal["pointwise", "pairwise", "listwise"]
62
+
63
+ TaskTypeName = Literal["binary", "regression"]
64
+
65
+ MetricsName = Literal[
66
+ "auc",
67
+ "gauc",
68
+ "ks",
69
+ "logloss",
70
+ "accuracy",
71
+ "acc",
72
+ "precision",
73
+ "recall",
74
+ "f1",
75
+ "micro_f1",
76
+ "macro_f1",
77
+ "mse",
78
+ "mae",
79
+ "rmse",
80
+ "r2",
81
+ "mape",
82
+ "msle",
83
+ "auc",
84
+ "gauc",
85
+ "precision@10",
86
+ "hitrate@10",
87
+ "map@10",
88
+ "cosine",
89
+ "recall@5",
90
+ "recall@10",
91
+ "recall@20",
92
+ "ndcg@5",
93
+ "ndcg@10",
94
+ "ndcg@20",
95
+ "mrr@5",
96
+ "mrr@10",
97
+ "mrr@20",
98
+ ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nextrec
3
- Version: 0.4.21
3
+ Version: 0.4.23
4
4
  Summary: A comprehensive recommendation library with match, ranking, and multi-task learning models
5
5
  Project-URL: Homepage, https://github.com/zerolovesea/NextRec
6
6
  Project-URL: Repository, https://github.com/zerolovesea/NextRec
@@ -65,11 +65,11 @@ Description-Content-Type: text/markdown
65
65
 
66
66
  <div align="center">
67
67
 
68
- [![PyPI Downloads](https://static.pepy.tech/personalized-badge/nextrec?period=total&units=NONE&left_color=BLACK&right_color=GREEN&left_text=PyPI-downloads)](https://pypistats.org/packages/nextrec)
68
+ [![PyPI Downloads](https://static.pepy.tech/personalized-badge/nextrec?period=total&units=NONE&left_color=grey&right_color=GREEN&left_text=PyPI-downloads)](https://pypistats.org/packages/nextrec)
69
69
  ![Python](https://img.shields.io/badge/Python-3.10+-blue.svg)
70
70
  ![PyTorch](https://img.shields.io/badge/PyTorch-1.10+-ee4c2c.svg)
71
71
  ![License](https://img.shields.io/badge/License-Apache%202.0-green.svg)
72
- ![Version](https://img.shields.io/badge/Version-0.4.21-orange.svg)
72
+ ![Version](https://img.shields.io/badge/Version-0.4.23-orange.svg)
73
73
  [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/zerolovesea/NextRec)
74
74
 
75
75
  中文文档 | [English Version](README_en.md)
@@ -191,6 +191,8 @@ model = DIN(
191
191
  dense_features=dense_features,
192
192
  sparse_features=sparse_features,
193
193
  sequence_features=sequence_features,
194
+ behavior_feature_name="sequence_0",
195
+ candidate_feature_name="item_id",
194
196
  mlp_params=mlp_params,
195
197
  attention_hidden_units=[80, 40],
196
198
  attention_activation='sigmoid',
@@ -204,7 +206,7 @@ model = DIN(
204
206
  session_id="din_tutorial", # 实验id,用于存放训练日志
205
207
  )
206
208
 
207
- # 编译模型,设置优化器和损失函数
209
+ # 编译模型,优化器/损失/学习率调度器统一在 compile 中设置
208
210
  model.compile(
209
211
  optimizer = "adam",
210
212
  optimizer_params = {"lr": 1e-3, "weight_decay": 1e-5},
@@ -247,11 +249,11 @@ nextrec --mode=predict --predict_config=path/to/predict_config.yaml
247
249
 
248
250
  预测结果固定保存到 `{checkpoint_path}/predictions/{name}.{save_data_format}`。
249
251
 
250
- > 截止当前版本0.4.21,NextRec CLI支持单机训练,分布式训练相关功能尚在开发中。
252
+ > 截止当前版本0.4.23,NextRec CLI支持单机训练,分布式训练相关功能尚在开发中。
251
253
 
252
254
  ## 兼容平台
253
255
 
254
- 当前最新版本为0.4.21,所有模型和测试代码均已在以下平台通过验证,如果开发者在使用中遇到兼容问题,请在issue区提出错误报告及系统版本:
256
+ 当前最新版本为0.4.23,所有模型和测试代码均已在以下平台通过验证,如果开发者在使用中遇到兼容问题,请在issue区提出错误报告及系统版本:
255
257
 
256
258
  | 平台 | 配置 |
257
259
  |------|------|
@@ -0,0 +1,81 @@
1
+ nextrec/__init__.py,sha256=_M3oUqyuvQ5k8Th_3wId6hQ_caclh7M5ad51XN09m98,235
2
+ nextrec/__version__.py,sha256=bUxoIOr-G9-PoGmh7zAW9CCJTt17Q0QuRmIjl2A39Sw,23
3
+ nextrec/cli.py,sha256=Vm1XCFVw1vFh9NFw3PYZ_fYbh07tf45fl3RtPycooUI,24317
4
+ nextrec/basic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ nextrec/basic/activation.py,sha256=uekcJsOy8SiT0_NaDO2VNSStyYFzVikDFVLDk-VrjwQ,2949
6
+ nextrec/basic/callback.py,sha256=7geza5iMMlMojlrIKH5A7nzvCe4IYwgUaMRh_xpblWk,12585
7
+ nextrec/basic/features.py,sha256=zLijBNkKwCXv9TKxSWwvmt7aVfWn2D5JvfwukeIRqec,9174
8
+ nextrec/basic/heads.py,sha256=BshykLxD41KxKuZaBxf4Fmy1Mc52b3ioJliN1BVaGlk,3374
9
+ nextrec/basic/layers.py,sha256=74RZiyYgiY9YFb2hWWNEBdWjvx2bXzCF3WtJJeSDtXQ,37857
10
+ nextrec/basic/loggers.py,sha256=KxTPVHtkebAbpxZIYZ4aqncZCu-dccpKtIxmi2bVs6o,13160
11
+ nextrec/basic/metrics.py,sha256=CkdMOq_RsQKd9qBGVWsNI9UF16yK4N-SnDvmkwA9KeY,23076
12
+ nextrec/basic/model.py,sha256=bj60PWmG3wl9xmuZAwpnEB7XkBAr5kkZE-UA3Z5iaxU,103976
13
+ nextrec/basic/session.py,sha256=mrIsjRJhmvcAfoO1pXX-KB3SK5CCgz89wH8XDoAiGEI,4475
14
+ nextrec/basic/summary.py,sha256=9xDtDbtMCPSQuEVLx23-SLL6qDRl1MfM19YMBG3Wtow,15372
15
+ nextrec/data/__init__.py,sha256=YZQjpty1pDCM7q_YNmiA2sa5kbujUw26ObLHWjMPjKY,1194
16
+ nextrec/data/batch_utils.py,sha256=0bYGVX7RlhnHv_ZBaUngjDIpBNw-igCk98DgOsF7T6o,2879
17
+ nextrec/data/data_processing.py,sha256=ZDZMSTBvxjPppl872is4M49o4WAkZXw2vUFOsNr0q3w,6658
18
+ nextrec/data/data_utils.py,sha256=0Ls1cnG9lBz0ovtyedw5vwp7WegGK_iF-F8e_3DEddo,880
19
+ nextrec/data/dataloader.py,sha256=43eTLqhWKcJdrFiGzlrz8zIgLAQsylRQ_DOklPNmKr4,18993
20
+ nextrec/data/preprocessor.py,sha256=4mVhQ6W2M9nmTeQjArx_cndWwnk2i29U2iXSNgg5gXM,52917
21
+ nextrec/loss/__init__.py,sha256=rualGsY-IBvmM52q9eOBk0MyKcMkpkazcscOeDXi_SM,774
22
+ nextrec/loss/grad_norm.py,sha256=YoE_XSIN1HOUcNq1dpfkIlWtMaB5Pu-SEWDaNgtRw1M,8316
23
+ nextrec/loss/listwise.py,sha256=mluxXQt9XiuWGvXA1nk4I0miqaKB6_GPVQqxLhAiJKs,5999
24
+ nextrec/loss/pairwise.py,sha256=9fyH9p2u-N0-jAnNTq3X5Dje0ipj1dob8wp-yQKRra4,3493
25
+ nextrec/loss/pointwise.py,sha256=09nzI1L5eP9raXnj3Q49bD9Clp_JmsSWUvEj7bkTzSw,7474
26
+ nextrec/models/generative/__init__.py,sha256=0MV3P-_ainPaTxmRBGWKUVCEt14KJvuvEHmRB3OQ1Fs,176
27
+ nextrec/models/generative/tiger.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
+ nextrec/models/multi_task/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
+ nextrec/models/multi_task/esmm.py,sha256=pZXK7WQVR3UUV8AKPZUHQnk7KxIA4Yp4Gmt5H8rsSu8,5734
30
+ nextrec/models/multi_task/mmoe.py,sha256=vihfiWkNFLyBF7juimUzq9Sg2id4ExD7ShFtN7RerOc,7817
31
+ nextrec/models/multi_task/ple.py,sha256=Mf_RPtENCjj0WgTm0TDL5blZZuph8XWi9y-M36TvNBY,12362
32
+ nextrec/models/multi_task/poso.py,sha256=O2K4nFRk0Lm-YCYCK258iwxzYRh7tdJDACm_87cFE10,18427
33
+ nextrec/models/multi_task/share_bottom.py,sha256=aX449O09qlN5D19HCYAa4uwKa1hq00NJs4uLriJzqM0,5746
34
+ nextrec/models/ranking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
+ nextrec/models/ranking/afm.py,sha256=rTuLH_6GD8DXEu5GjuypdAXpyc-Ug4A2pIQ9y5mlA24,9177
36
+ nextrec/models/ranking/autoint.py,sha256=UVuVyinTxy29gw_0bI9aP6xYzg3fpDfN-11JjqgnM68,7026
37
+ nextrec/models/ranking/dcn.py,sha256=elRw4qEE9d8tYmZEqdGlE_l-_fQ5CacpVY1IrbyX6iQ,6466
38
+ nextrec/models/ranking/dcn_v2.py,sha256=XhSz3xZOTen6hrsW8eV9GwnEJ7etpnyUV_sTPmqUzxM,10172
39
+ nextrec/models/ranking/deepfm.py,sha256=Y6gVcZzHeOxUAT5QT2I2y8hlrL0A9gG3L92xCshPs9E,4191
40
+ nextrec/models/ranking/dien.py,sha256=QtinHyg6kvbJPhPTC1KUTOngf8HFcsuEMBu3yyxOU2Y,18116
41
+ nextrec/models/ranking/din.py,sha256=kh9oAAq8WvLCoTtI0Im4gUZIlK8LC7jLgGclq-ucW3s,8605
42
+ nextrec/models/ranking/eulernet.py,sha256=pcZLOj0h97jp32vXaZeuDku82t1Qsa3NFjPimTGq48Q,11274
43
+ nextrec/models/ranking/ffm.py,sha256=-cAfSB6eU3-P2ZXv9P4OmsetFt1X7zYO83wBz6uR6is,10302
44
+ nextrec/models/ranking/fibinet.py,sha256=IapVFh35j95FKyHGr6VNSavFJQ_FMXLzpb_r24xHnaM,7068
45
+ nextrec/models/ranking/fm.py,sha256=Oby9rikk2-V8xKLeg3hMPFH10V0rCiYA14pmbn9dqe8,3585
46
+ nextrec/models/ranking/lr.py,sha256=jaWd1V7PAPvra7M1eStAI_GFXqc2eKeWRVJ4MvlSp7g,3017
47
+ nextrec/models/ranking/masknet.py,sha256=u0rVHfRQpskCyPJdAC0D7ySf2PkhNBCEMmAce-JvlfA,11396
48
+ nextrec/models/ranking/pnn.py,sha256=vxx5jnrWeerXKet06aYa74edEjly4BYRcGsDYgSp38A,7338
49
+ nextrec/models/ranking/widedeep.py,sha256=8kF695q-gR_ECfKkspYgDEbWkh_Unnt5Ta3GuqbxnzQ,3999
50
+ nextrec/models/ranking/xdeepfm.py,sha256=BjuZYiIkpMAevJZWx_NUgtFfLwamwuLXuarUpEidTsc,7240
51
+ nextrec/models/representation/__init__.py,sha256=O3QHMMXBszwM-mTl7bA3wawNZvDGet-QIv6Ys5GHGJ8,190
52
+ nextrec/models/representation/autorec.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
+ nextrec/models/representation/bpr.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
+ nextrec/models/representation/cl4srec.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
+ nextrec/models/representation/lightgcn.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
+ nextrec/models/representation/mf.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
+ nextrec/models/representation/rqvae.py,sha256=JyZxVY9CibcdBGk97TxjG5O3WQC10_60tHNcP_qtegs,29290
58
+ nextrec/models/representation/s3rec.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
+ nextrec/models/retrieval/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
+ nextrec/models/retrieval/dssm.py,sha256=NxqGYkbRhJ_tXs8ipklEmQcsyz9Jyh21Hkv5dgoU2wk,6998
61
+ nextrec/models/retrieval/dssm_v2.py,sha256=AeOn5XZgqImqRWofEDmHvoc65iFH5UrbP_k9sffx97M,6066
62
+ nextrec/models/retrieval/mind.py,sha256=oF79m6bZ9yAKCTB_IJL545J11cU2izKO2q-1ifI4TNA,14171
63
+ nextrec/models/retrieval/sdm.py,sha256=8c9hB8g4my5YYE178wnicmICX5Q3PLU4Z-E2GUDrHFE,9639
64
+ nextrec/models/retrieval/youtube_dnn.py,sha256=BkEr1jGBnsogFJ1LtgC4oytCqCuP-iX9i_NvUUP9RKM,6462
65
+ nextrec/models/sequential/hstu.py,sha256=4-EUOQ4HTRG5MAhTA2b9FOOXXw8oyPxDBaaDFunkT6o,18979
66
+ nextrec/models/sequential/sasrec.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
+ nextrec/utils/__init__.py,sha256=jD73RLigxcHFP-rXBoPi2VUTKH7kE5vNMQkr4lW8UUY,2655
68
+ nextrec/utils/config.py,sha256=UIi4zntP2g4IJaeMQYoa6kMQlU_23Hq4N1ZugMgnB5A,20331
69
+ nextrec/utils/console.py,sha256=RA3ZTjtUQXvueouSmXJNLkRjeUGQZesphwWjFMTbV4I,13577
70
+ nextrec/utils/data.py,sha256=pSL96mWjWfW_RKE-qlUSs9vfiYnFZAaRirzA6r7DB6s,24994
71
+ nextrec/utils/embedding.py,sha256=akAEc062MG2cD7VIOllHaqtwzAirQR2gq5iW7oKpGAU,1449
72
+ nextrec/utils/feature.py,sha256=E3NOFIW8gAoRXVrDhCSonzg8k7nMUZyZzMfCq9k73_A,623
73
+ nextrec/utils/loss.py,sha256=GBWQGpDaYkMJySpdG078XbeUNXUC34PVqFy0AqNS9N0,4578
74
+ nextrec/utils/model.py,sha256=UmDdV23ra7klvZZ3HEbRWBEeMrKljNoeq3hSVWT6a6o,7558
75
+ nextrec/utils/torch_utils.py,sha256=1lvZ7BG-rGLIAlumQIoeq5T9dO9hx2p8sa2_DC_bTZU,11564
76
+ nextrec/utils/types.py,sha256=VhtLXUVvu0zAZVAUgRUML4FExRC-GH-ZmC1UiVSr3HE,1523
77
+ nextrec-0.4.23.dist-info/METADATA,sha256=y2SWDa4fk2I1SnlLr4Svb6FTHp1oxvZrleL4OAlxuos,21852
78
+ nextrec-0.4.23.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
79
+ nextrec-0.4.23.dist-info/entry_points.txt,sha256=NN-dNSdfMRTv86bNXM7d3ZEPW2BQC6bRi7QP7i9cIps,45
80
+ nextrec-0.4.23.dist-info/licenses/LICENSE,sha256=2fQfVKeafywkni7MYHyClC6RGGC3laLTXCNBx-ubtp0,1064
81
+ nextrec-0.4.23.dist-info/RECORD,,
@@ -1,81 +0,0 @@
1
- nextrec/__init__.py,sha256=_M3oUqyuvQ5k8Th_3wId6hQ_caclh7M5ad51XN09m98,235
2
- nextrec/__version__.py,sha256=HRnyuWvhHjVmMtjn-Iir0_ZbxVK3sjpTYkAqLIRVMIE,23
3
- nextrec/cli.py,sha256=Vm1XCFVw1vFh9NFw3PYZ_fYbh07tf45fl3RtPycooUI,24317
4
- nextrec/basic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- nextrec/basic/activation.py,sha256=HfSNRXcsCFvPRxVUuV4s_NDoltE1CC_e40-9fxtnrMA,2975
6
- nextrec/basic/callback.py,sha256=7geza5iMMlMojlrIKH5A7nzvCe4IYwgUaMRh_xpblWk,12585
7
- nextrec/basic/features.py,sha256=zLijBNkKwCXv9TKxSWwvmt7aVfWn2D5JvfwukeIRqec,9174
8
- nextrec/basic/heads.py,sha256=yKLFzYCyNVHoQ2JUNXdEiX1JldwZODl4nXDmwh0xVYo,3391
9
- nextrec/basic/layers.py,sha256=74RZiyYgiY9YFb2hWWNEBdWjvx2bXzCF3WtJJeSDtXQ,37857
10
- nextrec/basic/loggers.py,sha256=KxTPVHtkebAbpxZIYZ4aqncZCu-dccpKtIxmi2bVs6o,13160
11
- nextrec/basic/metrics.py,sha256=1r6efTc9TpARNBt5X9ISoppTZflej6EdFkjPYHV-YZI,23162
12
- nextrec/basic/model.py,sha256=nKuDy64ebKV4yB9qp1iIThDQoxUDX-U-nSSiLNu-hnc,103836
13
- nextrec/basic/session.py,sha256=mrIsjRJhmvcAfoO1pXX-KB3SK5CCgz89wH8XDoAiGEI,4475
14
- nextrec/basic/summary.py,sha256=I6vNc-W_mVo7EogsFUTXf20bWYMVnTab60Zs6wSxsdc,14406
15
- nextrec/data/__init__.py,sha256=YZQjpty1pDCM7q_YNmiA2sa5kbujUw26ObLHWjMPjKY,1194
16
- nextrec/data/batch_utils.py,sha256=0bYGVX7RlhnHv_ZBaUngjDIpBNw-igCk98DgOsF7T6o,2879
17
- nextrec/data/data_processing.py,sha256=ZDZMSTBvxjPppl872is4M49o4WAkZXw2vUFOsNr0q3w,6658
18
- nextrec/data/data_utils.py,sha256=0Ls1cnG9lBz0ovtyedw5vwp7WegGK_iF-F8e_3DEddo,880
19
- nextrec/data/dataloader.py,sha256=43eTLqhWKcJdrFiGzlrz8zIgLAQsylRQ_DOklPNmKr4,18993
20
- nextrec/data/preprocessor.py,sha256=pilzqbluAn1QykeBVPxvnQcbRUuZr3aX9hCQqey--Ks,47245
21
- nextrec/loss/__init__.py,sha256=ZCgsfyR5YAecv6MdOsnUjkfacvZg2coQVjuKAfPvmRo,923
22
- nextrec/loss/grad_norm.py,sha256=1BU1uHh6CuNRc_M_bPP2mrVKOnUGQWv_tR_8-ETOJlg,8385
23
- nextrec/loss/listwise.py,sha256=UT9vJCOTOQLogVwaeTV7Z5uxIYnngGdxk-p9e97MGkU,5744
24
- nextrec/loss/loss_utils.py,sha256=Bl3PJ-AQrTDlV_uGJV4M6XCgmf8X2Z0h4nAP9o40ngU,4168
25
- nextrec/loss/pairwise.py,sha256=X9yg-8pcPt2IWU0AiUhWAt3_4W_3wIF0uSdDYTdoPFY,3398
26
- nextrec/loss/pointwise.py,sha256=o9J3OznY0hlbDsUXqn3k-BBzYiuUH5dopz8QBFqS_kQ,7343
27
- nextrec/models/generative/__init__.py,sha256=0MV3P-_ainPaTxmRBGWKUVCEt14KJvuvEHmRB3OQ1Fs,176
28
- nextrec/models/generative/tiger.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
- nextrec/models/multi_task/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
- nextrec/models/multi_task/esmm.py,sha256=nDd_Hr3tBdhDs77O5WlN5tafi4eizAvaGYdBqhl3_ws,6480
31
- nextrec/models/multi_task/mmoe.py,sha256=nMAIOp9_wXvQTZqRUHRIUSSCxSkH9L48oqe6MB_d2Xk,8614
32
- nextrec/models/multi_task/ple.py,sha256=Pzj7Z_1rG85rlHgvuBZ4kOa_emSZd94KjalDzmi9uuo,13050
33
- nextrec/models/multi_task/poso.py,sha256=vOBU4ZW22P8PBoN0isuGbAbLhHa_rMpKUSL5zs-HTvM,19167
34
- nextrec/models/multi_task/share_bottom.py,sha256=NUzoL_A6XL2ZHiB3C-VfnBAuver_Bu9tty7nr3QwpjQ,6549
35
- nextrec/models/ranking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
- nextrec/models/ranking/afm.py,sha256=_TdRIUtgx2jqOgamisZTekesGUUhdxvLWR9SJ0NZZF4,10082
37
- nextrec/models/ranking/autoint.py,sha256=_nA0umo-PKrwLh1g_6HcbQLWakKpsAxP7G1jI1-bL1k,8066
38
- nextrec/models/ranking/dcn.py,sha256=LVoOzc6ibHRntLX_Gtlz7b18tpX_CCyg7448tvG4KMA,7327
39
- nextrec/models/ranking/dcn_v2.py,sha256=9jWND-OVPtGfn_aJxuvuuAUJFJ48JD89khb-_mVQnVY,11120
40
- nextrec/models/ranking/deepfm.py,sha256=l57dAwtolWWBLvkCsZFZeOkWHxMbBZateBGKYbIKPQ0,5144
41
- nextrec/models/ranking/dien.py,sha256=hVRq4OUJ4UM3Q8BC3tkasAJSRdoa_MCPpU4DvhxlMhw,18982
42
- nextrec/models/ranking/din.py,sha256=tFBQ-3JcJcQde6kQPDTG9gMWnq7hVEgSj-x5r02XLvc,9446
43
- nextrec/models/ranking/eulernet.py,sha256=RReaGKLDdX0xQMxm-O44d3FU0bpja24x-Chl46-woOE,12140
44
- nextrec/models/ranking/ffm.py,sha256=2m3cfbXgSU4IUdGu-iteqYgAurM72Ens3hnrIZPaylU,11201
45
- nextrec/models/ranking/fibinet.py,sha256=9zN4tdgdzfLksb6BPl6Pcm4mqcHAXQHTJz8WTvFXO4w,7872
46
- nextrec/models/ranking/fm.py,sha256=A9hzs3RW6GjQxwKirEBDCus68Ve5jfSwdxuzGw-KZno,4493
47
- nextrec/models/ranking/lr.py,sha256=Qy83WSbv6_maCrdehUvRlWfql7LszFEZlvxzjxL28yw,3965
48
- nextrec/models/ranking/masknet.py,sha256=D2qGSplXqlc7Y4nt6tgKHyufLkVglijEsPYSoybYyHA,12276
49
- nextrec/models/ranking/pnn.py,sha256=Tt7kNUBIgU62FqVxK0BBFoanuQpwgKyhUvJTz1e06I8,8159
50
- nextrec/models/ranking/widedeep.py,sha256=ZdJbQQT70Q49sGtgCKGOEtVlKCW4uASf1JxOWBhP-oA,4998
51
- nextrec/models/ranking/xdeepfm.py,sha256=fHIRJj6Ai1BnEooaYt6JLbdyE7A_0P0aqH_0Tc4VdEE,8216
52
- nextrec/models/representation/__init__.py,sha256=O3QHMMXBszwM-mTl7bA3wawNZvDGet-QIv6Ys5GHGJ8,190
53
- nextrec/models/representation/autorec.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
- nextrec/models/representation/bpr.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
- nextrec/models/representation/cl4srec.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
- nextrec/models/representation/lightgcn.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
- nextrec/models/representation/mf.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
- nextrec/models/representation/rqvae.py,sha256=JyZxVY9CibcdBGk97TxjG5O3WQC10_60tHNcP_qtegs,29290
59
- nextrec/models/representation/s3rec.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
- nextrec/models/retrieval/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
- nextrec/models/retrieval/dssm.py,sha256=LGOhXH2pOcaQyabWLUvbSTuDOKOM3vaV4hrQ4LgF_M8,7834
62
- nextrec/models/retrieval/dssm_v2.py,sha256=3fvsLzEBo9fJ75YKoGgh4nTvVT3z5rE1Mpnmd8xP5Nc,6902
63
- nextrec/models/retrieval/mind.py,sha256=ZiXK-sMQulXK_ifVzIp4V1MW6manga8BDZXcMCwFbKU,14881
64
- nextrec/models/retrieval/sdm.py,sha256=vNsfqmIP5XwuUJve8ettCByXfHloq6BM7SHYeIr2ss8,10349
65
- nextrec/models/retrieval/youtube_dnn.py,sha256=ck4ja8v_BXG7X6AoEU_bUExvSHCWJBo-fNw3Y4zz9IQ,7194
66
- nextrec/models/sequential/hstu.py,sha256=tlZR-UMhY5dMQVqmWYdkUg54h5W3vQUctwHA5TyThMo,19664
67
- nextrec/models/sequential/sasrec.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
- nextrec/utils/__init__.py,sha256=Fb5yjSHBsKBitRuJKbhEbQDj3WMTGgjb3dazTwXezo8,2551
69
- nextrec/utils/config.py,sha256=UIi4zntP2g4IJaeMQYoa6kMQlU_23Hq4N1ZugMgnB5A,20331
70
- nextrec/utils/console.py,sha256=RA3ZTjtUQXvueouSmXJNLkRjeUGQZesphwWjFMTbV4I,13577
71
- nextrec/utils/data.py,sha256=pSL96mWjWfW_RKE-qlUSs9vfiYnFZAaRirzA6r7DB6s,24994
72
- nextrec/utils/embedding.py,sha256=akAEc062MG2cD7VIOllHaqtwzAirQR2gq5iW7oKpGAU,1449
73
- nextrec/utils/feature.py,sha256=E3NOFIW8gAoRXVrDhCSonzg8k7nMUZyZzMfCq9k73_A,623
74
- nextrec/utils/model.py,sha256=fHvFciUuMOVcM1oWiRva4LcArRdZ1R5Uzml-COSqqvM,4688
75
- nextrec/utils/torch_utils.py,sha256=1lvZ7BG-rGLIAlumQIoeq5T9dO9hx2p8sa2_DC_bTZU,11564
76
- nextrec/utils/types.py,sha256=cLHgo0Nd69t5cHcQrPIDNwtKKhrcbghS4XvXbs5P1xs,1036
77
- nextrec-0.4.21.dist-info/METADATA,sha256=BggHbRJHkiNpRBDoZJDR_waUDcvlXW-EWkqZSbhLGBw,21743
78
- nextrec-0.4.21.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
79
- nextrec-0.4.21.dist-info/entry_points.txt,sha256=NN-dNSdfMRTv86bNXM7d3ZEPW2BQC6bRi7QP7i9cIps,45
80
- nextrec-0.4.21.dist-info/licenses/LICENSE,sha256=2fQfVKeafywkni7MYHyClC6RGGC3laLTXCNBx-ubtp0,1064
81
- nextrec-0.4.21.dist-info/RECORD,,