nextrec 0.2.1__py3-none-any.whl → 0.2.2__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 (39) hide show
  1. nextrec/__version__.py +1 -1
  2. nextrec/basic/layers.py +2 -2
  3. nextrec/basic/model.py +80 -47
  4. nextrec/loss/__init__.py +31 -24
  5. nextrec/loss/listwise.py +162 -4
  6. nextrec/loss/loss_utils.py +133 -105
  7. nextrec/loss/pairwise.py +103 -4
  8. nextrec/loss/pointwise.py +196 -4
  9. nextrec/models/match/dssm.py +24 -15
  10. nextrec/models/match/dssm_v2.py +18 -0
  11. nextrec/models/match/mind.py +16 -1
  12. nextrec/models/match/sdm.py +15 -0
  13. nextrec/models/match/youtube_dnn.py +21 -8
  14. nextrec/models/multi_task/esmm.py +5 -5
  15. nextrec/models/multi_task/mmoe.py +5 -5
  16. nextrec/models/multi_task/ple.py +5 -5
  17. nextrec/models/multi_task/share_bottom.py +5 -5
  18. nextrec/models/ranking/__init__.py +8 -0
  19. nextrec/models/ranking/afm.py +3 -1
  20. nextrec/models/ranking/autoint.py +3 -1
  21. nextrec/models/ranking/dcn.py +3 -1
  22. nextrec/models/ranking/deepfm.py +3 -1
  23. nextrec/models/ranking/dien.py +3 -1
  24. nextrec/models/ranking/din.py +3 -1
  25. nextrec/models/ranking/fibinet.py +3 -1
  26. nextrec/models/ranking/fm.py +3 -1
  27. nextrec/models/ranking/masknet.py +3 -1
  28. nextrec/models/ranking/pnn.py +3 -1
  29. nextrec/models/ranking/widedeep.py +3 -1
  30. nextrec/models/ranking/xdeepfm.py +3 -1
  31. nextrec/utils/__init__.py +5 -5
  32. nextrec/utils/initializer.py +3 -3
  33. nextrec/utils/optimizer.py +6 -6
  34. {nextrec-0.2.1.dist-info → nextrec-0.2.2.dist-info}/METADATA +2 -2
  35. nextrec-0.2.2.dist-info/RECORD +53 -0
  36. nextrec/loss/match_losses.py +0 -293
  37. nextrec-0.2.1.dist-info/RECORD +0 -54
  38. {nextrec-0.2.1.dist-info → nextrec-0.2.2.dist-info}/WHEEL +0 -0
  39. {nextrec-0.2.1.dist-info → nextrec-0.2.2.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,53 @@
1
+ nextrec/__init__.py,sha256=CvocnY2uBp0cjNkhrT6ogw0q2bN9s1GNp754FLO-7lo,1117
2
+ nextrec/__version__.py,sha256=m6kyaNpwBcP1XYcqrelX2oS3PJuOnElOcRdBa9pEb8c,22
3
+ nextrec/basic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ nextrec/basic/activation.py,sha256=9EfYmwE0brTSKwx_0FIGQ_rybFBT9n_G-UWA7NAhMsI,2804
5
+ nextrec/basic/callback.py,sha256=qkq3k8rP0g4BW2C3FSCdVt_CyCcJwJ-rUXjhT2p4LP8,1035
6
+ nextrec/basic/features.py,sha256=qNrGm74R6K7dw-kJdA2Sbp_Tjb_oDOo1a2JCfyOaYtw,3957
7
+ nextrec/basic/layers.py,sha256=mDNApSlPkmPSnIPj3BDHfDEjviLybWuSGrh61Zog2uk,38290
8
+ nextrec/basic/loggers.py,sha256=x8lzyyK-uqBN5XGOm1Cb33dmfc2bl114n6QeFTtE54k,3752
9
+ nextrec/basic/metrics.py,sha256=w8tGe2tTbBNz9A1TNZF3jSpxcNC6QvFP5I0lWRd0Nw4,20398
10
+ nextrec/basic/model.py,sha256=r3yWw2RMk-_Ap9hXKzyp7-TKpSaPtqRzpABaJkCrT9M,66336
11
+ nextrec/basic/session.py,sha256=2kogEjgKAN1_ygelbwoqOs187BAcUnDTqXG1w_Pgb9I,4791
12
+ nextrec/data/__init__.py,sha256=SOD64AkPykwKgm0CT89aDcHeiiDQlOOAkLDsAjYiqAM,814
13
+ nextrec/data/data_utils.py,sha256=vGZ378YM_JQXO9npRB7JqojJx1ovjbJCWI-7lQJkicA,6298
14
+ nextrec/data/dataloader.py,sha256=T0i2f5KMohd-hkgTPBNCPy9xaziRrUwYd01oI8GIEI8,20450
15
+ nextrec/data/preprocessor.py,sha256=LzuBeBHcp6nnm7oaHDV-SZNk92ev8xjCj4r-thakRMw,42288
16
+ nextrec/loss/__init__.py,sha256=t-wkqxcu5wdYlrb67-CxX9aOGom0CpMJK8Fe8KGDSEE,857
17
+ nextrec/loss/listwise.py,sha256=LcYIPf6PGRtjV_AoWaAyp3rse904S2MghE5t032I07I,5628
18
+ nextrec/loss/loss_utils.py,sha256=LnTkpMTS2bhbq4Lsjf3AUn1uBaOg1TaH5VO2R8hwARc,5324
19
+ nextrec/loss/pairwise.py,sha256=RuQuTE-EkLaHQvT9m0CTAXxneTnVQLF1Pi9wblEClI8,3289
20
+ nextrec/loss/pointwise.py,sha256=6QveizdohzQTxAoBKTVSoCBpp-fy3JC8vCjImXa7jL0,7157
21
+ nextrec/models/generative/hstu.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
+ nextrec/models/generative/tiger.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
+ nextrec/models/match/__init__.py,sha256=ASZB5abqKPhDbk8NErNNNa0DHuWpsVxvUtyEn5XMx6Y,215
24
+ nextrec/models/match/dssm.py,sha256=e0hUqNLJVwTRVz4F4EiO8KLOOprKRBDtI4ID6Y1Tc60,8232
25
+ nextrec/models/match/dssm_v2.py,sha256=ywtqTy3YN9ke_7kzcDp7Fhtldw9RJz6yfewxALJb6Z0,7189
26
+ nextrec/models/match/mind.py,sha256=XSUDlZ-V95JXHHBDUl5sz99SaVuQKDvf3TArVjwUexs,9417
27
+ nextrec/models/match/sdm.py,sha256=96yfMQ6arP6JRhAkDTGEjlBiTteznMykrDV_3jqvvVk,10920
28
+ nextrec/models/match/youtube_dnn.py,sha256=pnrz9LYu65Fj4neOriFF45B5k2-yYiiREtQICxxYXZ0,7546
29
+ nextrec/models/multi_task/esmm.py,sha256=E9B6TlpnPUeyldTofyFg4B7SKByyxbiW2fUGHLOryO4,4883
30
+ nextrec/models/multi_task/mmoe.py,sha256=zhQr43Vfz7Kgi6B9pKPmaenp_38a_D7w4VvlpwCyF6Y,6165
31
+ nextrec/models/multi_task/ple.py,sha256=otP6oLgzrJhwkLFItzNE-AtIPouObDkafRvWzTCxfNo,11335
32
+ nextrec/models/multi_task/share_bottom.py,sha256=LL5HBVlvvBzHV2fLBRQMGIwpqmlxILTgU4c51XyTCo4,4517
33
+ nextrec/models/ranking/__init__.py,sha256=-qe34zQEVwmxeTPGYCa6gbql9quT8DwB7-buHfA7Iig,428
34
+ nextrec/models/ranking/afm.py,sha256=r9m1nEnc0m5d4pMtOxRMqOaXaBNCEkjJBFB-5wSHeFA,4540
35
+ nextrec/models/ranking/autoint.py,sha256=GYzRynjn6Csq4b3qYIFWxLQ4Yl57_OQBeF2IY0Zhr9Q,5654
36
+ nextrec/models/ranking/dcn.py,sha256=dUV5GbHypBGc9vVozk6aGYfIXq23c0deX-HFnIhZueg,4208
37
+ nextrec/models/ranking/deepfm.py,sha256=y28yJxF__TZR3O1G2ufKZVtBRLgCgmlXWqvPgLzwm3U,3510
38
+ nextrec/models/ranking/dien.py,sha256=E6s9TDwQfGSwtzzh8hG2F5gwgVxzVZPcptYvHLNzOLA,8475
39
+ nextrec/models/ranking/din.py,sha256=j5tkT5k91CbsMlMr5vJOySrcY2_rFGxmEgJJ0McW7-Q,7196
40
+ nextrec/models/ranking/fibinet.py,sha256=X6CbQbritvq5jql_Tvs4bn_tRla2zpWPplftZv8k6f0,4853
41
+ nextrec/models/ranking/fm.py,sha256=3Qx_Fgowegr6UPQtEeTmHtOrbWzkvqH94ZTjOqRLu-E,2961
42
+ nextrec/models/ranking/masknet.py,sha256=Bu0mZl2vKqcGnqCuUjPHjPRd1f-cDTeVwFj8Y_6v3C8,4639
43
+ nextrec/models/ranking/pnn.py,sha256=5RxIKdxD0XcGq-b_QDdwGRwk6b_5BQjyMvCw3Ibv2Kk,4957
44
+ nextrec/models/ranking/widedeep.py,sha256=b6ctElaZPv5WSYDA4piYUBo3je0eJpWpWECwcuWavM4,3716
45
+ nextrec/models/ranking/xdeepfm.py,sha256=I00J5tfE4tPluqeW-qrNtE4V_9fC7-rgFvA0Fxqka7o,4274
46
+ nextrec/utils/__init__.py,sha256=6x3OZbqks2gtgJd00y_-Y8QiAT42x5t14ARHQ-ULQDo,350
47
+ nextrec/utils/embedding.py,sha256=yxYSdFx0cJITh3Gf-K4SdhwRtKGcI0jOsyBgZ0NLa_c,465
48
+ nextrec/utils/initializer.py,sha256=ffYOs5QuIns_d_-5e40iNtg6s1ftgREJN-ueq_NbDQE,1647
49
+ nextrec/utils/optimizer.py,sha256=85ifoy2IQgjPHOqLqr1ho7XBGE_0ry1yEB9efS6C2lM,2446
50
+ nextrec-0.2.2.dist-info/METADATA,sha256=lAhtUMV17TjgvjOuKZph_it7O02Ld1gKA0mc0k44oNQ,11425
51
+ nextrec-0.2.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
52
+ nextrec-0.2.2.dist-info/licenses/LICENSE,sha256=2fQfVKeafywkni7MYHyClC6RGGC3laLTXCNBx-ubtp0,1064
53
+ nextrec-0.2.2.dist-info/RECORD,,
@@ -1,293 +0,0 @@
1
- """
2
- Loss functions for matching tasks
3
-
4
- Date: create on 13/11/2025
5
- Author: Yang Zhou,zyaztec@gmail.com
6
- """
7
-
8
- import torch
9
- import torch.nn as nn
10
- import torch.nn.functional as F
11
- from typing import Optional
12
-
13
-
14
- class BPRLoss(nn.Module):
15
- def __init__(self, reduction: str = 'mean'):
16
- super(BPRLoss, self).__init__()
17
- self.reduction = reduction
18
-
19
- def forward(self, pos_score: torch.Tensor, neg_score: torch.Tensor) -> torch.Tensor:
20
- if neg_score.dim() == 2:
21
- pos_score = pos_score.unsqueeze(1) # [batch_size, 1]
22
- diff = pos_score - neg_score # [batch_size, num_neg]
23
- loss = -torch.log(torch.sigmoid(diff) + 1e-8)
24
- if self.reduction == 'mean':
25
- return loss.mean()
26
- elif self.reduction == 'sum':
27
- return loss.sum()
28
- else:
29
- return loss
30
- else:
31
- diff = pos_score - neg_score
32
- loss = -torch.log(torch.sigmoid(diff) + 1e-8)
33
- if self.reduction == 'mean':
34
- return loss.mean()
35
- elif self.reduction == 'sum':
36
- return loss.sum()
37
- else:
38
- return loss
39
-
40
-
41
- class HingeLoss(nn.Module):
42
- def __init__(self, margin: float = 1.0, reduction: str = 'mean'):
43
- super(HingeLoss, self).__init__()
44
- self.margin = margin
45
- self.reduction = reduction
46
-
47
- def forward(self, pos_score: torch.Tensor, neg_score: torch.Tensor) -> torch.Tensor:
48
- if neg_score.dim() == 2:
49
- pos_score = pos_score.unsqueeze(1) # [batch_size, 1]
50
-
51
- diff = pos_score - neg_score
52
- loss = torch.clamp(self.margin - diff, min=0)
53
-
54
- if self.reduction == 'mean':
55
- return loss.mean()
56
- elif self.reduction == 'sum':
57
- return loss.sum()
58
- else:
59
- return loss
60
-
61
-
62
- class TripletLoss(nn.Module):
63
- def __init__(self, margin: float = 1.0, reduction: str = 'mean', distance: str = 'euclidean'):
64
- super(TripletLoss, self).__init__()
65
- self.margin = margin
66
- self.reduction = reduction
67
- self.distance = distance
68
-
69
- def forward(self, anchor: torch.Tensor, positive: torch.Tensor, negative: torch.Tensor) -> torch.Tensor:
70
- if self.distance == 'euclidean':
71
- pos_dist = torch.sum((anchor - positive) ** 2, dim=-1)
72
-
73
- if negative.dim() == 3:
74
- anchor_expanded = anchor.unsqueeze(1) # [batch_size, 1, dim]
75
- neg_dist = torch.sum((anchor_expanded - negative) ** 2, dim=-1) # [batch_size, num_neg]
76
- else:
77
- neg_dist = torch.sum((anchor - negative) ** 2, dim=-1)
78
-
79
- if neg_dist.dim() == 2:
80
- pos_dist = pos_dist.unsqueeze(1) # [batch_size, 1]
81
-
82
- elif self.distance == 'cosine':
83
- pos_dist = 1 - F.cosine_similarity(anchor, positive, dim=-1)
84
-
85
- if negative.dim() == 3:
86
- anchor_expanded = anchor.unsqueeze(1) # [batch_size, 1, dim]
87
- neg_dist = 1 - F.cosine_similarity(anchor_expanded, negative, dim=-1)
88
- else:
89
- neg_dist = 1 - F.cosine_similarity(anchor, negative, dim=-1)
90
-
91
- if neg_dist.dim() == 2:
92
- pos_dist = pos_dist.unsqueeze(1)
93
- else:
94
- raise ValueError(f"Unsupported distance: {self.distance}")
95
-
96
- loss = torch.clamp(pos_dist - neg_dist + self.margin, min=0)
97
-
98
- if self.reduction == 'mean':
99
- return loss.mean()
100
- elif self.reduction == 'sum':
101
- return loss.sum()
102
- else:
103
- return loss
104
-
105
-
106
- class SampledSoftmaxLoss(nn.Module):
107
- def __init__(self, reduction: str = 'mean'):
108
- super(SampledSoftmaxLoss, self).__init__()
109
- self.reduction = reduction
110
-
111
- def forward(self, pos_logits: torch.Tensor, neg_logits: torch.Tensor) -> torch.Tensor:
112
- pos_logits = pos_logits.unsqueeze(1) # [batch_size, 1]
113
- all_logits = torch.cat([pos_logits, neg_logits], dim=1) # [batch_size, 1 + num_neg]
114
- targets = torch.zeros(all_logits.size(0), dtype=torch.long, device=all_logits.device)
115
- loss = F.cross_entropy(all_logits, targets, reduction=self.reduction)
116
-
117
- return loss
118
-
119
-
120
- class CosineContrastiveLoss(nn.Module):
121
- def __init__(self, margin: float = 0.5, reduction: str = 'mean'):
122
- super(CosineContrastiveLoss, self).__init__()
123
- self.margin = margin
124
- self.reduction = reduction
125
-
126
- def forward(self, user_emb: torch.Tensor, item_emb: torch.Tensor, labels: torch.Tensor) -> torch.Tensor:
127
- similarity = F.cosine_similarity(user_emb, item_emb, dim=-1)
128
- pos_loss = (1 - similarity) * labels
129
-
130
- neg_loss = torch.clamp(similarity - self.margin, min=0) * (1 - labels)
131
-
132
- loss = pos_loss + neg_loss
133
-
134
- if self.reduction == 'mean':
135
- return loss.mean()
136
- elif self.reduction == 'sum':
137
- return loss.sum()
138
- else:
139
- return loss
140
-
141
-
142
- class InfoNCELoss(nn.Module):
143
- def __init__(self, temperature: float = 0.07, reduction: str = 'mean'):
144
- super(InfoNCELoss, self).__init__()
145
- self.temperature = temperature
146
- self.reduction = reduction
147
-
148
- def forward(self, query: torch.Tensor, pos_key: torch.Tensor, neg_keys: torch.Tensor) -> torch.Tensor:
149
- pos_sim = torch.sum(query * pos_key, dim=-1) / self.temperature # [batch_size]
150
- pos_sim = pos_sim.unsqueeze(1) # [batch_size, 1]
151
- query_expanded = query.unsqueeze(1) # [batch_size, 1, dim]
152
- neg_sim = torch.sum(query_expanded * neg_keys, dim=-1) / self.temperature # [batch_size, num_neg]
153
- logits = torch.cat([pos_sim, neg_sim], dim=1) # [batch_size, 1 + num_neg]
154
- labels = torch.zeros(logits.size(0), dtype=torch.long, device=logits.device)
155
-
156
- loss = F.cross_entropy(logits, labels, reduction=self.reduction)
157
-
158
- return loss
159
-
160
-
161
- class ListNetLoss(nn.Module):
162
- """
163
- ListNet loss using top-1 probability distribution
164
- Reference: Cao et al. Learning to Rank: From Pairwise Approach to Listwise Approach (ICML 2007)
165
- """
166
- def __init__(self, temperature: float = 1.0, reduction: str = 'mean'):
167
- super(ListNetLoss, self).__init__()
168
- self.temperature = temperature
169
- self.reduction = reduction
170
-
171
- def forward(self, scores: torch.Tensor, labels: torch.Tensor) -> torch.Tensor:
172
- # Convert scores and labels to probability distributions
173
- pred_probs = F.softmax(scores / self.temperature, dim=1)
174
- true_probs = F.softmax(labels / self.temperature, dim=1)
175
-
176
- # Cross entropy between two distributions
177
- loss = -torch.sum(true_probs * torch.log(pred_probs + 1e-10), dim=1)
178
-
179
- if self.reduction == 'mean':
180
- return loss.mean()
181
- elif self.reduction == 'sum':
182
- return loss.sum()
183
- else:
184
- return loss
185
-
186
-
187
- class ListMLELoss(nn.Module):
188
- """
189
- ListMLE (Maximum Likelihood Estimation) loss
190
- Reference: Xia et al. Listwise approach to learning to rank: theory and algorithm (ICML 2008)
191
- """
192
- def __init__(self, reduction: str = 'mean'):
193
- super(ListMLELoss, self).__init__()
194
- self.reduction = reduction
195
-
196
- def forward(self, scores: torch.Tensor, labels: torch.Tensor) -> torch.Tensor:
197
- # Sort by labels in descending order to get ground truth ranking
198
- sorted_labels, sorted_indices = torch.sort(labels, descending=True, dim=1)
199
-
200
- # Reorder scores according to ground truth ranking
201
- batch_size, list_size = scores.shape
202
- batch_indices = torch.arange(batch_size, device=scores.device).unsqueeze(1).expand(-1, list_size)
203
- sorted_scores = scores[batch_indices, sorted_indices]
204
-
205
- # Compute log likelihood
206
- # For each position, compute log(exp(score_i) / sum(exp(score_j) for j >= i))
207
- loss = torch.tensor(0.0, device=scores.device)
208
- for i in range(list_size):
209
- # Log-sum-exp trick for numerical stability
210
- remaining_scores = sorted_scores[:, i:]
211
- log_sum_exp = torch.logsumexp(remaining_scores, dim=1)
212
- loss = loss + (log_sum_exp - sorted_scores[:, i]).sum()
213
-
214
- if self.reduction == 'mean':
215
- return loss / batch_size
216
- elif self.reduction == 'sum':
217
- return loss
218
- else:
219
- return loss / batch_size
220
-
221
-
222
- class ApproxNDCGLoss(nn.Module):
223
- """
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).
227
- """
228
- def __init__(self, temperature: float = 1.0, reduction: str = 'mean'):
229
- super(ApproxNDCGLoss, self).__init__()
230
- self.temperature = temperature
231
- self.reduction = reduction
232
-
233
- def _dcg(self, relevance: torch.Tensor, k: Optional[int] = None) -> torch.Tensor:
234
- if k is not None:
235
- relevance = relevance[:, :k]
236
-
237
- # DCG = sum(rel_i / log2(i + 2)) for i in range(list_size)
238
- positions = torch.arange(1, relevance.size(1) + 1, device=relevance.device, dtype=torch.float32)
239
- discounts = torch.log2(positions + 1.0)
240
- dcg = torch.sum(relevance / discounts, dim=1)
241
-
242
- return dcg
243
-
244
- def forward(self, scores: torch.Tensor, labels: torch.Tensor, k: Optional[int] = None) -> torch.Tensor:
245
- """
246
- Args:
247
- scores: Predicted scores [batch_size, list_size]
248
- labels: Ground truth relevance labels [batch_size, list_size]
249
- k: Top-k items for NDCG@k (if None, use all items)
250
-
251
- Returns:
252
- Approximate NDCG loss (1 - NDCG)
253
- """
254
- batch_size = scores.size(0)
255
-
256
- # Use differentiable sorting approximation with softmax
257
- # Create pairwise comparison matrix
258
- scores_expanded = scores.unsqueeze(2) # [batch_size, list_size, 1]
259
- scores_tiled = scores.unsqueeze(1) # [batch_size, 1, list_size]
260
-
261
- # Compute pairwise probabilities using sigmoid
262
- pairwise_diff = (scores_expanded - scores_tiled) / self.temperature
263
- pairwise_probs = torch.sigmoid(pairwise_diff) # [batch_size, list_size, list_size]
264
-
265
- # Approximate ranking positions
266
- # ranking_probs[i, j] ≈ probability that item i is ranked at position j
267
- # We use softmax approximation for differentiable ranking
268
- ranking_weights = F.softmax(scores / self.temperature, dim=1)
269
-
270
- # Sort labels to get ideal DCG
271
- ideal_labels, _ = torch.sort(labels, descending=True, dim=1)
272
- ideal_dcg = self._dcg(ideal_labels, k)
273
-
274
- # Compute approximate DCG using soft ranking
275
- # Weight each item's relevance by its soft ranking position
276
- positions = torch.arange(1, scores.size(1) + 1, device=scores.device, dtype=torch.float32)
277
- discounts = 1.0 / torch.log2(positions + 1.0)
278
-
279
- # Approximate DCG by weighting relevance with ranking probabilities
280
- approx_dcg = torch.sum(labels * ranking_weights * discounts, dim=1)
281
-
282
- # Normalize by ideal DCG to get NDCG
283
- ndcg = approx_dcg / (ideal_dcg + 1e-10)
284
-
285
- # Loss is 1 - NDCG (we want to maximize NDCG, so minimize 1 - NDCG)
286
- loss = 1.0 - ndcg
287
-
288
- if self.reduction == 'mean':
289
- return loss.mean()
290
- elif self.reduction == 'sum':
291
- return loss.sum()
292
- else:
293
- return loss
@@ -1,54 +0,0 @@
1
- nextrec/__init__.py,sha256=CvocnY2uBp0cjNkhrT6ogw0q2bN9s1GNp754FLO-7lo,1117
2
- nextrec/__version__.py,sha256=HfjVOrpTnmZ-xVFCYSVmX50EXaBQeJteUHG-PD6iQs8,22
3
- nextrec/basic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- nextrec/basic/activation.py,sha256=9EfYmwE0brTSKwx_0FIGQ_rybFBT9n_G-UWA7NAhMsI,2804
5
- nextrec/basic/callback.py,sha256=qkq3k8rP0g4BW2C3FSCdVt_CyCcJwJ-rUXjhT2p4LP8,1035
6
- nextrec/basic/features.py,sha256=qNrGm74R6K7dw-kJdA2Sbp_Tjb_oDOo1a2JCfyOaYtw,3957
7
- nextrec/basic/layers.py,sha256=7cmTfYuYsehS9nEm-MmJJKfCqg0fESdNupI8Hfh_wkw,38296
8
- nextrec/basic/loggers.py,sha256=x8lzyyK-uqBN5XGOm1Cb33dmfc2bl114n6QeFTtE54k,3752
9
- nextrec/basic/metrics.py,sha256=w8tGe2tTbBNz9A1TNZF3jSpxcNC6QvFP5I0lWRd0Nw4,20398
10
- nextrec/basic/model.py,sha256=7DEEm0X8w1mNi2wuKFOYOGIh3ELdtBY4PTUMOQcoRCo,65161
11
- nextrec/basic/session.py,sha256=2kogEjgKAN1_ygelbwoqOs187BAcUnDTqXG1w_Pgb9I,4791
12
- nextrec/data/__init__.py,sha256=SOD64AkPykwKgm0CT89aDcHeiiDQlOOAkLDsAjYiqAM,814
13
- nextrec/data/data_utils.py,sha256=vGZ378YM_JQXO9npRB7JqojJx1ovjbJCWI-7lQJkicA,6298
14
- nextrec/data/dataloader.py,sha256=T0i2f5KMohd-hkgTPBNCPy9xaziRrUwYd01oI8GIEI8,20450
15
- nextrec/data/preprocessor.py,sha256=LzuBeBHcp6nnm7oaHDV-SZNk92ev8xjCj4r-thakRMw,42288
16
- nextrec/loss/__init__.py,sha256=kBanUB5rxQKwXTd6f-2hOI_CF7cp_MClAwAeVXIkpig,647
17
- nextrec/loss/listwise.py,sha256=tsupeCM4JPow-Y_J6qPs_bkgAKjdyutrbcsLthtqYd8,106
18
- nextrec/loss/loss_utils.py,sha256=MsHC8NYRHGVQN6uvHV7ICWoeAlVrN50wJ3hoCgtAr9c,4748
19
- nextrec/loss/match_losses.py,sha256=VacNGEJhrZGIDvEyThg5fdI1BQ7Ai9MjrL0BciJlAD0,11640
20
- nextrec/loss/pairwise.py,sha256=7ayKcGNz_DOBOVQp8NNNtE7bQW87Z9dgZeejFVG-G74,106
21
- nextrec/loss/pointwise.py,sha256=25ZQqKjE5cwCnBjK5P4c_b4jvjVBVy7mDVQSYlehShs,107
22
- nextrec/models/generative/hstu.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
- nextrec/models/generative/tiger.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
- nextrec/models/match/__init__.py,sha256=ASZB5abqKPhDbk8NErNNNa0DHuWpsVxvUtyEn5XMx6Y,215
25
- nextrec/models/match/dssm.py,sha256=5Ap0Bvo4FQJMd3jgXUPMJXkq-60ekXPQcAVRxLn5x_4,7679
26
- nextrec/models/match/dssm_v2.py,sha256=gxQUeZkbDfKi8wgEQ2a6KSaJ21ALnHRcucLYVSyiMPE,6381
27
- nextrec/models/match/mind.py,sha256=w3E1pswsIHgh6QisCoM19h3iMNRlycMTYRcEBK7A9eI,8712
28
- nextrec/models/match/sdm.py,sha256=neb0jbzaqm_rvlhrXmt9-blhNLE7Dgt0FoG6hAhKNcI,10216
29
- nextrec/models/match/youtube_dnn.py,sha256=hFwRTCLXe_DiQTNyMMwQ3IVRtY2GDKUfIGm0oGOKv_4,6804
30
- nextrec/models/multi_task/esmm.py,sha256=ku1MP10hrVrqHa6Gj78VlB5i7028kKUk9CqNRepKY8s,4790
31
- nextrec/models/multi_task/mmoe.py,sha256=qsQeKJiwwGVieS9zvoqzyqTOTzmIUIUqYZA11m9vaYY,6072
32
- nextrec/models/multi_task/ple.py,sha256=kFL9oLD571SqUXdBHbOr50TsSKJQL6OjdaFKaAqO8cU,11242
33
- nextrec/models/multi_task/share_bottom.py,sha256=aobFNBo06oS0s0EwxMmkBd7wn-xTq_QUAgIchVxT2Jo,4424
34
- nextrec/models/ranking/__init__.py,sha256=GMn3R5TkE9W17dzHuQoASJsQCoM_EIHuUhnMS2jMdZw,291
35
- nextrec/models/ranking/afm.py,sha256=fi9Iir3aQ4wAb9eEzo1HhJp34O9d4Jk17auzQkMZQ0E,4439
36
- nextrec/models/ranking/autoint.py,sha256=FejNRTZkAN6z0aIzQTkqOcc3yBQ9UzHhAM2PkxYOYJM,5553
37
- nextrec/models/ranking/dcn.py,sha256=gkjSMpor3fMs1HHJZErJXMd-EDblcIpQIDDGLt6CKxs,4107
38
- nextrec/models/ranking/deepfm.py,sha256=1e4_4QQiF3EDL9uhVLbPu4pO8jcsik0EyB8vRDTSRjc,3409
39
- nextrec/models/ranking/dien.py,sha256=QEs5xAjlxtHN_18VjqjhnAn-1aV5PI517WklvGMpxVM,8374
40
- nextrec/models/ranking/din.py,sha256=tnVu8bKGq65N0jEufGctZYXpKl2SHtJ6vlX7uxG3oQQ,7095
41
- nextrec/models/ranking/fibinet.py,sha256=p_VTiAMu2DZztHG-bqgvtlaKVmedo8m3NezSc1RHIGw,4752
42
- nextrec/models/ranking/fm.py,sha256=5u-KMpWbsuLNAqDQhwDAmlWCawEXcYVH0bNHHzVfzhE,2860
43
- nextrec/models/ranking/masknet.py,sha256=gjFcr1J0t5eBZfCYxkqvwyeEAEWQiRdtl43aKNNSA04,4538
44
- nextrec/models/ranking/pnn.py,sha256=iWVe04llFz6n4eBoujSB-WIFdefYk7hKoGe5XrkzOTo,4856
45
- nextrec/models/ranking/widedeep.py,sha256=PsoytJ-FWCBjW8-arvHRlJK7yXdtHCWYQ20P8W5luaQ,3615
46
- nextrec/models/ranking/xdeepfm.py,sha256=DOYpLBu5srDxt9aie_Wyiz7FVf1vzZISoVPfDT-AjiY,4173
47
- nextrec/utils/__init__.py,sha256=powarTEoywgO_htDi5a6O1rfiFBOz5wAIIpVMbCW0zs,368
48
- nextrec/utils/embedding.py,sha256=yxYSdFx0cJITh3Gf-K4SdhwRtKGcI0jOsyBgZ0NLa_c,465
49
- nextrec/utils/initializer.py,sha256=KxxC3rg5ydRWgcyfcdCFoqs9nVJOznSMWeJUWMPUff4,1656
50
- nextrec/utils/optimizer.py,sha256=CGsinqNZJZh8GqCYM9MkXjwGn2s_XyvAb4x_7ztOzB8,2464
51
- nextrec-0.2.1.dist-info/METADATA,sha256=KSReK5CVknLvuF_-0fSRs6Fzof3G9jHBBW4oRrjOotQ,11425
52
- nextrec-0.2.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
53
- nextrec-0.2.1.dist-info/licenses/LICENSE,sha256=2fQfVKeafywkni7MYHyClC6RGGC3laLTXCNBx-ubtp0,1064
54
- nextrec-0.2.1.dist-info/RECORD,,