nextrec 0.1.10__py3-none-any.whl → 0.2.1__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.
- nextrec/__version__.py +1 -1
- nextrec/basic/activation.py +1 -2
- nextrec/basic/callback.py +1 -2
- nextrec/basic/features.py +39 -8
- nextrec/basic/layers.py +1 -2
- nextrec/basic/loggers.py +15 -10
- nextrec/basic/metrics.py +1 -2
- nextrec/basic/model.py +87 -84
- nextrec/basic/session.py +150 -0
- nextrec/data/__init__.py +13 -2
- nextrec/data/data_utils.py +74 -22
- nextrec/data/dataloader.py +513 -0
- nextrec/data/preprocessor.py +494 -134
- nextrec/loss/listwise.py +6 -0
- nextrec/loss/loss_utils.py +1 -2
- nextrec/loss/match_losses.py +4 -5
- nextrec/loss/pairwise.py +6 -0
- nextrec/loss/pointwise.py +6 -0
- nextrec/models/match/dssm.py +2 -2
- nextrec/models/match/dssm_v2.py +2 -2
- nextrec/models/match/mind.py +2 -2
- nextrec/models/match/sdm.py +2 -2
- nextrec/models/match/youtube_dnn.py +2 -2
- nextrec/models/multi_task/esmm.py +3 -3
- nextrec/models/multi_task/mmoe.py +3 -3
- nextrec/models/multi_task/ple.py +3 -3
- nextrec/models/multi_task/share_bottom.py +3 -3
- nextrec/models/ranking/afm.py +2 -3
- nextrec/models/ranking/autoint.py +3 -3
- nextrec/models/ranking/dcn.py +3 -3
- nextrec/models/ranking/deepfm.py +2 -3
- nextrec/models/ranking/dien.py +3 -3
- nextrec/models/ranking/din.py +3 -3
- nextrec/models/ranking/fibinet.py +3 -3
- nextrec/models/ranking/fm.py +3 -3
- nextrec/models/ranking/masknet.py +3 -3
- nextrec/models/ranking/pnn.py +3 -3
- nextrec/models/ranking/widedeep.py +3 -3
- nextrec/models/ranking/xdeepfm.py +3 -3
- nextrec/utils/__init__.py +4 -8
- nextrec/utils/embedding.py +2 -4
- nextrec/utils/initializer.py +1 -2
- nextrec/utils/optimizer.py +1 -2
- {nextrec-0.1.10.dist-info → nextrec-0.2.1.dist-info}/METADATA +4 -5
- nextrec-0.2.1.dist-info/RECORD +54 -0
- nextrec/basic/dataloader.py +0 -447
- nextrec/utils/common.py +0 -14
- nextrec-0.1.10.dist-info/RECORD +0 -51
- {nextrec-0.1.10.dist-info → nextrec-0.2.1.dist-info}/WHEEL +0 -0
- {nextrec-0.1.10.dist-info → nextrec-0.2.1.dist-info}/licenses/LICENSE +0 -0
nextrec/loss/listwise.py
ADDED
nextrec/loss/loss_utils.py
CHANGED
nextrec/loss/match_losses.py
CHANGED
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
Loss functions for matching tasks
|
|
3
3
|
|
|
4
4
|
Date: create on 13/11/2025
|
|
5
|
-
Author:
|
|
6
|
-
Yang Zhou,zyaztec@gmail.com
|
|
5
|
+
Author: Yang Zhou,zyaztec@gmail.com
|
|
7
6
|
"""
|
|
8
7
|
|
|
9
8
|
import torch
|
|
@@ -222,9 +221,9 @@ class ListMLELoss(nn.Module):
|
|
|
222
221
|
|
|
223
222
|
class ApproxNDCGLoss(nn.Module):
|
|
224
223
|
"""
|
|
225
|
-
Approximate NDCG loss for learning to rank
|
|
226
|
-
Reference: Qin et al. A General Approximation Framework for Direct Optimization of
|
|
227
|
-
|
|
224
|
+
Approximate NDCG loss for learning to rank.
|
|
225
|
+
Reference: Qin et al. "A General Approximation Framework for Direct Optimization of
|
|
226
|
+
Information Retrieval Measures" (Information Retrieval 2010).
|
|
228
227
|
"""
|
|
229
228
|
def __init__(self, temperature: float = 1.0, reduction: str = 'mean'):
|
|
230
229
|
super(ApproxNDCGLoss, self).__init__()
|
nextrec/loss/pairwise.py
ADDED
nextrec/models/match/dssm.py
CHANGED
|
@@ -48,7 +48,7 @@ class DSSM(BaseMatchModel):
|
|
|
48
48
|
embedding_l2_reg: float = 0.0,
|
|
49
49
|
dense_l2_reg: float = 0.0,
|
|
50
50
|
early_stop_patience: int = 20,
|
|
51
|
-
|
|
51
|
+
**kwargs):
|
|
52
52
|
|
|
53
53
|
super(DSSM, self).__init__(
|
|
54
54
|
user_dense_features=user_dense_features,
|
|
@@ -67,7 +67,7 @@ class DSSM(BaseMatchModel):
|
|
|
67
67
|
embedding_l2_reg=embedding_l2_reg,
|
|
68
68
|
dense_l2_reg=dense_l2_reg,
|
|
69
69
|
early_stop_patience=early_stop_patience,
|
|
70
|
-
|
|
70
|
+
**kwargs
|
|
71
71
|
)
|
|
72
72
|
|
|
73
73
|
self.embedding_dim = embedding_dim
|
nextrec/models/match/dssm_v2.py
CHANGED
|
@@ -44,7 +44,7 @@ class DSSM_v2(BaseMatchModel):
|
|
|
44
44
|
embedding_l2_reg: float = 0.0,
|
|
45
45
|
dense_l2_reg: float = 0.0,
|
|
46
46
|
early_stop_patience: int = 20,
|
|
47
|
-
|
|
47
|
+
**kwargs):
|
|
48
48
|
|
|
49
49
|
super(DSSM_v2, self).__init__(
|
|
50
50
|
user_dense_features=user_dense_features,
|
|
@@ -63,7 +63,7 @@ class DSSM_v2(BaseMatchModel):
|
|
|
63
63
|
embedding_l2_reg=embedding_l2_reg,
|
|
64
64
|
dense_l2_reg=dense_l2_reg,
|
|
65
65
|
early_stop_patience=early_stop_patience,
|
|
66
|
-
|
|
66
|
+
**kwargs
|
|
67
67
|
)
|
|
68
68
|
|
|
69
69
|
self.embedding_dim = embedding_dim
|
nextrec/models/match/mind.py
CHANGED
|
@@ -51,7 +51,7 @@ class MIND(BaseMatchModel):
|
|
|
51
51
|
embedding_l2_reg: float = 0.0,
|
|
52
52
|
dense_l2_reg: float = 0.0,
|
|
53
53
|
early_stop_patience: int = 20,
|
|
54
|
-
|
|
54
|
+
**kwargs):
|
|
55
55
|
|
|
56
56
|
super(MIND, self).__init__(
|
|
57
57
|
user_dense_features=user_dense_features,
|
|
@@ -70,7 +70,7 @@ class MIND(BaseMatchModel):
|
|
|
70
70
|
embedding_l2_reg=embedding_l2_reg,
|
|
71
71
|
dense_l2_reg=dense_l2_reg,
|
|
72
72
|
early_stop_patience=early_stop_patience,
|
|
73
|
-
|
|
73
|
+
**kwargs
|
|
74
74
|
)
|
|
75
75
|
|
|
76
76
|
self.embedding_dim = embedding_dim
|
nextrec/models/match/sdm.py
CHANGED
|
@@ -52,7 +52,7 @@ class SDM(BaseMatchModel):
|
|
|
52
52
|
embedding_l2_reg: float = 0.0,
|
|
53
53
|
dense_l2_reg: float = 0.0,
|
|
54
54
|
early_stop_patience: int = 20,
|
|
55
|
-
|
|
55
|
+
**kwargs):
|
|
56
56
|
|
|
57
57
|
super(SDM, self).__init__(
|
|
58
58
|
user_dense_features=user_dense_features,
|
|
@@ -71,7 +71,7 @@ class SDM(BaseMatchModel):
|
|
|
71
71
|
embedding_l2_reg=embedding_l2_reg,
|
|
72
72
|
dense_l2_reg=dense_l2_reg,
|
|
73
73
|
early_stop_patience=early_stop_patience,
|
|
74
|
-
|
|
74
|
+
**kwargs
|
|
75
75
|
)
|
|
76
76
|
|
|
77
77
|
self.embedding_dim = embedding_dim
|
|
@@ -50,7 +50,7 @@ class YoutubeDNN(BaseMatchModel):
|
|
|
50
50
|
embedding_l2_reg: float = 0.0,
|
|
51
51
|
dense_l2_reg: float = 0.0,
|
|
52
52
|
early_stop_patience: int = 20,
|
|
53
|
-
|
|
53
|
+
**kwargs):
|
|
54
54
|
|
|
55
55
|
super(YoutubeDNN, self).__init__(
|
|
56
56
|
user_dense_features=user_dense_features,
|
|
@@ -69,7 +69,7 @@ class YoutubeDNN(BaseMatchModel):
|
|
|
69
69
|
embedding_l2_reg=embedding_l2_reg,
|
|
70
70
|
dense_l2_reg=dense_l2_reg,
|
|
71
71
|
early_stop_patience=early_stop_patience,
|
|
72
|
-
|
|
72
|
+
**kwargs
|
|
73
73
|
)
|
|
74
74
|
|
|
75
75
|
self.embedding_dim = embedding_dim
|
|
@@ -47,11 +47,11 @@ class ESMM(BaseModel):
|
|
|
47
47
|
optimizer_params: dict = {},
|
|
48
48
|
loss: str | nn.Module | list[str | nn.Module] | None = "bce",
|
|
49
49
|
device: str = 'cpu',
|
|
50
|
-
model_id: str = "baseline",
|
|
51
50
|
embedding_l1_reg=1e-6,
|
|
52
51
|
dense_l1_reg=1e-5,
|
|
53
52
|
embedding_l2_reg=1e-5,
|
|
54
|
-
dense_l2_reg=1e-4
|
|
53
|
+
dense_l2_reg=1e-4,
|
|
54
|
+
**kwargs):
|
|
55
55
|
|
|
56
56
|
# ESMM requires exactly 2 targets: ctr and ctcvr
|
|
57
57
|
if len(target) != 2:
|
|
@@ -69,7 +69,7 @@ class ESMM(BaseModel):
|
|
|
69
69
|
embedding_l2_reg=embedding_l2_reg,
|
|
70
70
|
dense_l2_reg=dense_l2_reg,
|
|
71
71
|
early_stop_patience=20,
|
|
72
|
-
|
|
72
|
+
**kwargs
|
|
73
73
|
)
|
|
74
74
|
|
|
75
75
|
self.loss = loss
|
|
@@ -45,11 +45,11 @@ class MMOE(BaseModel):
|
|
|
45
45
|
optimizer_params: dict = {},
|
|
46
46
|
loss: str | nn.Module | list[str | nn.Module] | None = "bce",
|
|
47
47
|
device: str = 'cpu',
|
|
48
|
-
model_id: str = "baseline",
|
|
49
48
|
embedding_l1_reg=1e-6,
|
|
50
49
|
dense_l1_reg=1e-5,
|
|
51
50
|
embedding_l2_reg=1e-5,
|
|
52
|
-
dense_l2_reg=1e-4
|
|
51
|
+
dense_l2_reg=1e-4,
|
|
52
|
+
**kwargs):
|
|
53
53
|
|
|
54
54
|
super(MMOE, self).__init__(
|
|
55
55
|
dense_features=dense_features,
|
|
@@ -63,7 +63,7 @@ class MMOE(BaseModel):
|
|
|
63
63
|
embedding_l2_reg=embedding_l2_reg,
|
|
64
64
|
dense_l2_reg=dense_l2_reg,
|
|
65
65
|
early_stop_patience=20,
|
|
66
|
-
|
|
66
|
+
**kwargs
|
|
67
67
|
)
|
|
68
68
|
|
|
69
69
|
self.loss = loss
|
nextrec/models/multi_task/ple.py
CHANGED
|
@@ -48,11 +48,11 @@ class PLE(BaseModel):
|
|
|
48
48
|
optimizer_params: dict = {},
|
|
49
49
|
loss: str | nn.Module | list[str | nn.Module] | None = "bce",
|
|
50
50
|
device: str = 'cpu',
|
|
51
|
-
model_id: str = "baseline",
|
|
52
51
|
embedding_l1_reg=1e-6,
|
|
53
52
|
dense_l1_reg=1e-5,
|
|
54
53
|
embedding_l2_reg=1e-5,
|
|
55
|
-
dense_l2_reg=1e-4
|
|
54
|
+
dense_l2_reg=1e-4,
|
|
55
|
+
**kwargs):
|
|
56
56
|
|
|
57
57
|
super(PLE, self).__init__(
|
|
58
58
|
dense_features=dense_features,
|
|
@@ -66,7 +66,7 @@ class PLE(BaseModel):
|
|
|
66
66
|
embedding_l2_reg=embedding_l2_reg,
|
|
67
67
|
dense_l2_reg=dense_l2_reg,
|
|
68
68
|
early_stop_patience=20,
|
|
69
|
-
|
|
69
|
+
**kwargs
|
|
70
70
|
)
|
|
71
71
|
|
|
72
72
|
self.loss = loss
|
|
@@ -36,11 +36,11 @@ class ShareBottom(BaseModel):
|
|
|
36
36
|
optimizer_params: dict = {},
|
|
37
37
|
loss: str | nn.Module | list[str | nn.Module] | None = "bce",
|
|
38
38
|
device: str = 'cpu',
|
|
39
|
-
model_id: str = "baseline",
|
|
40
39
|
embedding_l1_reg=1e-6,
|
|
41
40
|
dense_l1_reg=1e-5,
|
|
42
41
|
embedding_l2_reg=1e-5,
|
|
43
|
-
dense_l2_reg=1e-4
|
|
42
|
+
dense_l2_reg=1e-4,
|
|
43
|
+
**kwargs):
|
|
44
44
|
|
|
45
45
|
super(ShareBottom, self).__init__(
|
|
46
46
|
dense_features=dense_features,
|
|
@@ -54,7 +54,7 @@ class ShareBottom(BaseModel):
|
|
|
54
54
|
embedding_l2_reg=embedding_l2_reg,
|
|
55
55
|
dense_l2_reg=dense_l2_reg,
|
|
56
56
|
early_stop_patience=20,
|
|
57
|
-
|
|
57
|
+
**kwargs
|
|
58
58
|
)
|
|
59
59
|
|
|
60
60
|
self.loss = loss
|
nextrec/models/ranking/afm.py
CHANGED
|
@@ -35,11 +35,10 @@ class AFM(BaseModel):
|
|
|
35
35
|
optimizer_params: dict = {},
|
|
36
36
|
loss: str | nn.Module | None = "bce",
|
|
37
37
|
device: str = 'cpu',
|
|
38
|
-
model_id: str = "baseline",
|
|
39
38
|
embedding_l1_reg=1e-6,
|
|
40
39
|
dense_l1_reg=1e-5,
|
|
41
40
|
embedding_l2_reg=1e-5,
|
|
42
|
-
dense_l2_reg=1e-4):
|
|
41
|
+
dense_l2_reg=1e-4, **kwargs):
|
|
43
42
|
|
|
44
43
|
super(AFM, self).__init__(
|
|
45
44
|
dense_features=dense_features,
|
|
@@ -53,7 +52,7 @@ class AFM(BaseModel):
|
|
|
53
52
|
embedding_l2_reg=embedding_l2_reg,
|
|
54
53
|
dense_l2_reg=dense_l2_reg,
|
|
55
54
|
early_stop_patience=20,
|
|
56
|
-
|
|
55
|
+
**kwargs
|
|
57
56
|
)
|
|
58
57
|
|
|
59
58
|
self.loss = loss
|
|
@@ -40,11 +40,11 @@ class AutoInt(BaseModel):
|
|
|
40
40
|
optimizer_params: dict = {},
|
|
41
41
|
loss: str | nn.Module | None = "bce",
|
|
42
42
|
device: str = 'cpu',
|
|
43
|
-
model_id: str = "baseline",
|
|
44
43
|
embedding_l1_reg=1e-6,
|
|
45
44
|
dense_l1_reg=1e-5,
|
|
46
45
|
embedding_l2_reg=1e-5,
|
|
47
|
-
dense_l2_reg=1e-4
|
|
46
|
+
dense_l2_reg=1e-4,
|
|
47
|
+
**kwargs):
|
|
48
48
|
|
|
49
49
|
super(AutoInt, self).__init__(
|
|
50
50
|
dense_features=dense_features,
|
|
@@ -58,7 +58,7 @@ class AutoInt(BaseModel):
|
|
|
58
58
|
embedding_l2_reg=embedding_l2_reg,
|
|
59
59
|
dense_l2_reg=dense_l2_reg,
|
|
60
60
|
early_stop_patience=20,
|
|
61
|
-
|
|
61
|
+
**kwargs
|
|
62
62
|
)
|
|
63
63
|
|
|
64
64
|
self.loss = loss
|
nextrec/models/ranking/dcn.py
CHANGED
|
@@ -36,11 +36,11 @@ class DCN(BaseModel):
|
|
|
36
36
|
optimizer_params: dict = {},
|
|
37
37
|
loss: str | nn.Module | None = "bce",
|
|
38
38
|
device: str = 'cpu',
|
|
39
|
-
model_id: str = "baseline",
|
|
40
39
|
embedding_l1_reg=1e-6,
|
|
41
40
|
dense_l1_reg=1e-5,
|
|
42
41
|
embedding_l2_reg=1e-5,
|
|
43
|
-
dense_l2_reg=1e-4
|
|
42
|
+
dense_l2_reg=1e-4,
|
|
43
|
+
**kwargs):
|
|
44
44
|
|
|
45
45
|
super(DCN, self).__init__(
|
|
46
46
|
dense_features=dense_features,
|
|
@@ -54,7 +54,7 @@ class DCN(BaseModel):
|
|
|
54
54
|
embedding_l2_reg=embedding_l2_reg,
|
|
55
55
|
dense_l2_reg=dense_l2_reg,
|
|
56
56
|
early_stop_patience=20,
|
|
57
|
-
|
|
57
|
+
**kwargs
|
|
58
58
|
)
|
|
59
59
|
|
|
60
60
|
self.loss = loss
|
nextrec/models/ranking/deepfm.py
CHANGED
|
@@ -32,11 +32,10 @@ class DeepFM(BaseModel):
|
|
|
32
32
|
optimizer_params: dict = {},
|
|
33
33
|
loss: str | nn.Module | None = "bce",
|
|
34
34
|
device: str = 'cpu',
|
|
35
|
-
model_id: str = "baseline",
|
|
36
35
|
embedding_l1_reg=1e-6,
|
|
37
36
|
dense_l1_reg=1e-5,
|
|
38
37
|
embedding_l2_reg=1e-5,
|
|
39
|
-
dense_l2_reg=1e-4):
|
|
38
|
+
dense_l2_reg=1e-4, **kwargs):
|
|
40
39
|
|
|
41
40
|
super(DeepFM, self).__init__(
|
|
42
41
|
dense_features=dense_features,
|
|
@@ -50,7 +49,7 @@ class DeepFM(BaseModel):
|
|
|
50
49
|
embedding_l2_reg=embedding_l2_reg,
|
|
51
50
|
dense_l2_reg=dense_l2_reg,
|
|
52
51
|
early_stop_patience=20,
|
|
53
|
-
|
|
52
|
+
**kwargs
|
|
54
53
|
)
|
|
55
54
|
|
|
56
55
|
self.loss = loss
|
nextrec/models/ranking/dien.py
CHANGED
|
@@ -39,11 +39,11 @@ class DIEN(BaseModel):
|
|
|
39
39
|
optimizer_params: dict = {},
|
|
40
40
|
loss: str | nn.Module | None = "bce",
|
|
41
41
|
device: str = 'cpu',
|
|
42
|
-
model_id: str = "baseline",
|
|
43
42
|
embedding_l1_reg=1e-6,
|
|
44
43
|
dense_l1_reg=1e-5,
|
|
45
44
|
embedding_l2_reg=1e-5,
|
|
46
|
-
dense_l2_reg=1e-4
|
|
45
|
+
dense_l2_reg=1e-4,
|
|
46
|
+
**kwargs):
|
|
47
47
|
|
|
48
48
|
super(DIEN, self).__init__(
|
|
49
49
|
dense_features=dense_features,
|
|
@@ -57,7 +57,7 @@ class DIEN(BaseModel):
|
|
|
57
57
|
embedding_l2_reg=embedding_l2_reg,
|
|
58
58
|
dense_l2_reg=dense_l2_reg,
|
|
59
59
|
early_stop_patience=20,
|
|
60
|
-
|
|
60
|
+
**kwargs
|
|
61
61
|
)
|
|
62
62
|
|
|
63
63
|
self.loss = loss
|
nextrec/models/ranking/din.py
CHANGED
|
@@ -38,11 +38,11 @@ class DIN(BaseModel):
|
|
|
38
38
|
optimizer_params: dict = {},
|
|
39
39
|
loss: str | nn.Module | None = "bce",
|
|
40
40
|
device: str = 'cpu',
|
|
41
|
-
model_id: str = "baseline",
|
|
42
41
|
embedding_l1_reg=1e-6,
|
|
43
42
|
dense_l1_reg=1e-5,
|
|
44
43
|
embedding_l2_reg=1e-5,
|
|
45
|
-
dense_l2_reg=1e-4
|
|
44
|
+
dense_l2_reg=1e-4,
|
|
45
|
+
**kwargs):
|
|
46
46
|
|
|
47
47
|
super(DIN, self).__init__(
|
|
48
48
|
dense_features=dense_features,
|
|
@@ -56,7 +56,7 @@ class DIN(BaseModel):
|
|
|
56
56
|
embedding_l2_reg=embedding_l2_reg,
|
|
57
57
|
dense_l2_reg=dense_l2_reg,
|
|
58
58
|
early_stop_patience=20,
|
|
59
|
-
|
|
59
|
+
**kwargs
|
|
60
60
|
)
|
|
61
61
|
|
|
62
62
|
self.loss = loss
|
|
@@ -43,11 +43,11 @@ class FiBiNET(BaseModel):
|
|
|
43
43
|
optimizer_params: dict = {},
|
|
44
44
|
loss: str | nn.Module | None = "bce",
|
|
45
45
|
device: str = 'cpu',
|
|
46
|
-
model_id: str = "baseline",
|
|
47
46
|
embedding_l1_reg=1e-6,
|
|
48
47
|
dense_l1_reg=1e-5,
|
|
49
48
|
embedding_l2_reg=1e-5,
|
|
50
|
-
dense_l2_reg=1e-4
|
|
49
|
+
dense_l2_reg=1e-4,
|
|
50
|
+
**kwargs):
|
|
51
51
|
|
|
52
52
|
super(FiBiNET, self).__init__(
|
|
53
53
|
dense_features=dense_features,
|
|
@@ -61,7 +61,7 @@ class FiBiNET(BaseModel):
|
|
|
61
61
|
embedding_l2_reg=embedding_l2_reg,
|
|
62
62
|
dense_l2_reg=dense_l2_reg,
|
|
63
63
|
early_stop_patience=20,
|
|
64
|
-
|
|
64
|
+
**kwargs
|
|
65
65
|
)
|
|
66
66
|
|
|
67
67
|
self.loss = loss
|
nextrec/models/ranking/fm.py
CHANGED
|
@@ -31,11 +31,11 @@ class FM(BaseModel):
|
|
|
31
31
|
optimizer_params: dict = {},
|
|
32
32
|
loss: str | nn.Module | None = "bce",
|
|
33
33
|
device: str = 'cpu',
|
|
34
|
-
model_id: str = "baseline",
|
|
35
34
|
embedding_l1_reg=1e-6,
|
|
36
35
|
dense_l1_reg=1e-5,
|
|
37
36
|
embedding_l2_reg=1e-5,
|
|
38
|
-
dense_l2_reg=1e-4
|
|
37
|
+
dense_l2_reg=1e-4,
|
|
38
|
+
**kwargs):
|
|
39
39
|
|
|
40
40
|
super(FM, self).__init__(
|
|
41
41
|
dense_features=dense_features,
|
|
@@ -49,7 +49,7 @@ class FM(BaseModel):
|
|
|
49
49
|
embedding_l2_reg=embedding_l2_reg,
|
|
50
50
|
dense_l2_reg=dense_l2_reg,
|
|
51
51
|
early_stop_patience=20,
|
|
52
|
-
|
|
52
|
+
**kwargs
|
|
53
53
|
)
|
|
54
54
|
|
|
55
55
|
self.loss = loss
|
|
@@ -37,11 +37,11 @@ class MaskNet(BaseModel):
|
|
|
37
37
|
optimizer_params: dict = {},
|
|
38
38
|
loss: str | nn.Module | None = "bce",
|
|
39
39
|
device: str = 'cpu',
|
|
40
|
-
model_id: str = "baseline",
|
|
41
40
|
embedding_l1_reg=1e-6,
|
|
42
41
|
dense_l1_reg=1e-5,
|
|
43
42
|
embedding_l2_reg=1e-5,
|
|
44
|
-
dense_l2_reg=1e-4
|
|
43
|
+
dense_l2_reg=1e-4,
|
|
44
|
+
**kwargs):
|
|
45
45
|
|
|
46
46
|
super(MaskNet, self).__init__(
|
|
47
47
|
dense_features=dense_features,
|
|
@@ -55,7 +55,7 @@ class MaskNet(BaseModel):
|
|
|
55
55
|
embedding_l2_reg=embedding_l2_reg,
|
|
56
56
|
dense_l2_reg=dense_l2_reg,
|
|
57
57
|
early_stop_patience=20,
|
|
58
|
-
|
|
58
|
+
**kwargs
|
|
59
59
|
)
|
|
60
60
|
|
|
61
61
|
self.loss = loss
|
nextrec/models/ranking/pnn.py
CHANGED
|
@@ -35,11 +35,11 @@ class PNN(BaseModel):
|
|
|
35
35
|
optimizer_params: dict = {},
|
|
36
36
|
loss: str | nn.Module | None = "bce",
|
|
37
37
|
device: str = 'cpu',
|
|
38
|
-
model_id: str = "baseline",
|
|
39
38
|
embedding_l1_reg=1e-6,
|
|
40
39
|
dense_l1_reg=1e-5,
|
|
41
40
|
embedding_l2_reg=1e-5,
|
|
42
|
-
dense_l2_reg=1e-4
|
|
41
|
+
dense_l2_reg=1e-4,
|
|
42
|
+
**kwargs):
|
|
43
43
|
|
|
44
44
|
super(PNN, self).__init__(
|
|
45
45
|
dense_features=dense_features,
|
|
@@ -53,7 +53,7 @@ class PNN(BaseModel):
|
|
|
53
53
|
embedding_l2_reg=embedding_l2_reg,
|
|
54
54
|
dense_l2_reg=dense_l2_reg,
|
|
55
55
|
early_stop_patience=20,
|
|
56
|
-
|
|
56
|
+
**kwargs
|
|
57
57
|
)
|
|
58
58
|
|
|
59
59
|
self.loss = loss
|
|
@@ -35,11 +35,11 @@ class WideDeep(BaseModel):
|
|
|
35
35
|
optimizer_params: dict = {},
|
|
36
36
|
loss: str | nn.Module | None = "bce",
|
|
37
37
|
device: str = 'cpu',
|
|
38
|
-
model_id: str = "baseline",
|
|
39
38
|
embedding_l1_reg=1e-6,
|
|
40
39
|
dense_l1_reg=1e-5,
|
|
41
40
|
embedding_l2_reg=1e-5,
|
|
42
|
-
dense_l2_reg=1e-4
|
|
41
|
+
dense_l2_reg=1e-4,
|
|
42
|
+
**kwargs):
|
|
43
43
|
|
|
44
44
|
super(WideDeep, self).__init__(
|
|
45
45
|
dense_features=dense_features,
|
|
@@ -53,7 +53,7 @@ class WideDeep(BaseModel):
|
|
|
53
53
|
embedding_l2_reg=embedding_l2_reg,
|
|
54
54
|
dense_l2_reg=dense_l2_reg,
|
|
55
55
|
early_stop_patience=20,
|
|
56
|
-
|
|
56
|
+
**kwargs
|
|
57
57
|
)
|
|
58
58
|
|
|
59
59
|
self.loss = loss
|
|
@@ -38,11 +38,11 @@ class xDeepFM(BaseModel):
|
|
|
38
38
|
optimizer_params: dict = {},
|
|
39
39
|
loss: str | nn.Module | None = "bce",
|
|
40
40
|
device: str = 'cpu',
|
|
41
|
-
model_id: str = "baseline",
|
|
42
41
|
embedding_l1_reg=1e-6,
|
|
43
42
|
dense_l1_reg=1e-5,
|
|
44
43
|
embedding_l2_reg=1e-5,
|
|
45
|
-
dense_l2_reg=1e-4
|
|
44
|
+
dense_l2_reg=1e-4,
|
|
45
|
+
**kwargs):
|
|
46
46
|
|
|
47
47
|
super(xDeepFM, self).__init__(
|
|
48
48
|
dense_features=dense_features,
|
|
@@ -56,7 +56,7 @@ class xDeepFM(BaseModel):
|
|
|
56
56
|
embedding_l2_reg=embedding_l2_reg,
|
|
57
57
|
dense_l2_reg=dense_l2_reg,
|
|
58
58
|
early_stop_patience=20,
|
|
59
|
-
|
|
59
|
+
**kwargs
|
|
60
60
|
)
|
|
61
61
|
|
|
62
62
|
self.loss = loss
|
nextrec/utils/__init__.py
CHANGED
|
@@ -1,18 +1,14 @@
|
|
|
1
|
-
from
|
|
2
|
-
from
|
|
3
|
-
from
|
|
4
|
-
from
|
|
5
|
-
|
|
6
|
-
from nextrec.utils import optimizer, initializer, embedding, common
|
|
1
|
+
from .optimizer import get_optimizer_fn, get_scheduler_fn
|
|
2
|
+
from .initializer import get_initializer_fn
|
|
3
|
+
from .embedding import get_auto_embedding_dim
|
|
4
|
+
from . import optimizer, initializer, embedding
|
|
7
5
|
|
|
8
6
|
__all__ = [
|
|
9
7
|
'get_optimizer_fn',
|
|
10
8
|
'get_scheduler_fn',
|
|
11
9
|
'get_initializer_fn',
|
|
12
10
|
'get_auto_embedding_dim',
|
|
13
|
-
'get_task_type',
|
|
14
11
|
'optimizer',
|
|
15
12
|
'initializer',
|
|
16
13
|
'embedding',
|
|
17
|
-
'common',
|
|
18
14
|
]
|
nextrec/utils/embedding.py
CHANGED
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
Embedding utilities for NextRec
|
|
3
3
|
|
|
4
4
|
Date: create on 13/11/2025
|
|
5
|
-
Author:
|
|
6
|
-
Yang Zhou, zyaztec@gmail.com
|
|
5
|
+
Author: Yang Zhou, zyaztec@gmail.com
|
|
7
6
|
"""
|
|
8
7
|
|
|
9
8
|
import numpy as np
|
|
@@ -13,7 +12,6 @@ def get_auto_embedding_dim(num_classes: int) -> int:
|
|
|
13
12
|
"""
|
|
14
13
|
Calculate the dim of embedding vector according to number of classes in the category.
|
|
15
14
|
Formula: emb_dim = [6 * (num_classes)^(1/4)]
|
|
16
|
-
Reference:
|
|
17
|
-
Deep & Cross Network for Ad Click Predictions.(ADKDD'17)
|
|
15
|
+
Reference: Deep & Cross Network for Ad Click Predictions.(ADKDD'17)
|
|
18
16
|
"""
|
|
19
17
|
return int(np.floor(6 * np.power(num_classes, 0.25)))
|
nextrec/utils/initializer.py
CHANGED
nextrec/utils/optimizer.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nextrec
|
|
3
|
-
Version: 0.1
|
|
3
|
+
Version: 0.2.1
|
|
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
|
|
@@ -61,9 +61,9 @@ Description-Content-Type: text/markdown
|
|
|
61
61
|

|
|
62
62
|

|
|
63
63
|

|
|
64
|
-

|
|
65
65
|
|
|
66
|
-
[中文版](README_zh.md)
|
|
66
|
+
English | [中文版](README_zh.md)
|
|
67
67
|
|
|
68
68
|
**A Unified, Efficient, and Scalable Recommendation System Framework**
|
|
69
69
|
|
|
@@ -123,7 +123,7 @@ model = DeepFM(
|
|
|
123
123
|
mlp_params={"dims": [256, 128], "activation": "relu", "dropout": 0.5},
|
|
124
124
|
target=target,
|
|
125
125
|
device='cpu',
|
|
126
|
-
|
|
126
|
+
session_id="deepfm_with_processor",
|
|
127
127
|
embedding_l1_reg=1e-6,
|
|
128
128
|
dense_l1_reg=1e-5,
|
|
129
129
|
embedding_l2_reg=1e-5,
|
|
@@ -269,7 +269,6 @@ NextRec is inspired by the following great open-source projects:
|
|
|
269
269
|
- **torch-rechub** - A Lighting Pytorch Framework for Recommendation Models, Easy-to-use and Easy-to-extend.
|
|
270
270
|
- **FuxiCTR** — Configurable and reproducible CTR prediction library
|
|
271
271
|
- **RecBole** — Unified and efficient recommendation library
|
|
272
|
-
- **PaddleRec** — Large-scale recommendation algorithm library
|
|
273
272
|
|
|
274
273
|
Special thanks to all open-source contributors!
|
|
275
274
|
|