nextrec 0.4.27__tar.gz → 0.4.28__tar.gz

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 (188) hide show
  1. {nextrec-0.4.27 → nextrec-0.4.28}/PKG-INFO +5 -5
  2. {nextrec-0.4.27 → nextrec-0.4.28}/README.md +4 -4
  3. {nextrec-0.4.27 → nextrec-0.4.28}/README_en.md +4 -4
  4. {nextrec-0.4.27 → nextrec-0.4.28}/docs/rtd/conf.py +1 -1
  5. nextrec-0.4.28/nextrec/__version__.py +1 -0
  6. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/data/batch_utils.py +23 -3
  7. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/data/dataloader.py +3 -8
  8. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/multi_task/pepnet.py +13 -10
  9. {nextrec-0.4.27 → nextrec-0.4.28}/pyproject.toml +1 -1
  10. nextrec-0.4.27/nextrec/__version__.py +0 -1
  11. {nextrec-0.4.27 → nextrec-0.4.28}/.github/workflows/publish.yml +0 -0
  12. {nextrec-0.4.27 → nextrec-0.4.28}/.github/workflows/tests.yml +0 -0
  13. {nextrec-0.4.27 → nextrec-0.4.28}/.gitignore +0 -0
  14. {nextrec-0.4.27 → nextrec-0.4.28}/.readthedocs.yaml +0 -0
  15. {nextrec-0.4.27 → nextrec-0.4.28}/CODE_OF_CONDUCT.md +0 -0
  16. {nextrec-0.4.27 → nextrec-0.4.28}/CONTRIBUTING.md +0 -0
  17. {nextrec-0.4.27 → nextrec-0.4.28}/LICENSE +0 -0
  18. {nextrec-0.4.27 → nextrec-0.4.28}/MANIFEST.in +0 -0
  19. {nextrec-0.4.27 → nextrec-0.4.28}/assets/Feature Configuration.png +0 -0
  20. {nextrec-0.4.27 → nextrec-0.4.28}/assets/Model Parameters.png +0 -0
  21. {nextrec-0.4.27 → nextrec-0.4.28}/assets/Training Configuration.png +0 -0
  22. {nextrec-0.4.27 → nextrec-0.4.28}/assets/Training logs.png +0 -0
  23. {nextrec-0.4.27 → nextrec-0.4.28}/assets/logo.png +0 -0
  24. {nextrec-0.4.27 → nextrec-0.4.28}/assets/mmoe_tutorial.png +0 -0
  25. {nextrec-0.4.27 → nextrec-0.4.28}/assets/nextrec_diagram.png +0 -0
  26. {nextrec-0.4.27 → nextrec-0.4.28}/assets/test data.png +0 -0
  27. {nextrec-0.4.27 → nextrec-0.4.28}/dataset/ctcvr_task.csv +0 -0
  28. {nextrec-0.4.27 → nextrec-0.4.28}/dataset/ecommerce_task.csv +0 -0
  29. {nextrec-0.4.27 → nextrec-0.4.28}/dataset/match_task.csv +0 -0
  30. {nextrec-0.4.27 → nextrec-0.4.28}/dataset/movielens_100k.csv +0 -0
  31. {nextrec-0.4.27 → nextrec-0.4.28}/dataset/multitask_task.csv +0 -0
  32. {nextrec-0.4.27 → nextrec-0.4.28}/dataset/ranking_task.csv +0 -0
  33. {nextrec-0.4.27 → nextrec-0.4.28}/docs/en/Getting started guide.md +0 -0
  34. {nextrec-0.4.27 → nextrec-0.4.28}/docs/rtd/Makefile +0 -0
  35. {nextrec-0.4.27 → nextrec-0.4.28}/docs/rtd/index.md +0 -0
  36. {nextrec-0.4.27 → nextrec-0.4.28}/docs/rtd/make.bat +0 -0
  37. {nextrec-0.4.27 → nextrec-0.4.28}/docs/rtd/modules.rst +0 -0
  38. {nextrec-0.4.27 → nextrec-0.4.28}/docs/rtd/nextrec.basic.rst +0 -0
  39. {nextrec-0.4.27 → nextrec-0.4.28}/docs/rtd/nextrec.data.rst +0 -0
  40. {nextrec-0.4.27 → nextrec-0.4.28}/docs/rtd/nextrec.loss.rst +0 -0
  41. {nextrec-0.4.27 → nextrec-0.4.28}/docs/rtd/nextrec.rst +0 -0
  42. {nextrec-0.4.27 → nextrec-0.4.28}/docs/rtd/nextrec.utils.rst +0 -0
  43. {nextrec-0.4.27 → nextrec-0.4.28}/docs/rtd/requirements.txt +0 -0
  44. {nextrec-0.4.27 → nextrec-0.4.28}/docs/zh//345/277/253/351/200/237/344/270/212/346/211/213.md" +0 -0
  45. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/__init__.py +0 -0
  46. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/basic/__init__.py +0 -0
  47. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/basic/activation.py +0 -0
  48. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/basic/asserts.py +0 -0
  49. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/basic/callback.py +0 -0
  50. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/basic/features.py +0 -0
  51. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/basic/heads.py +0 -0
  52. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/basic/layers.py +0 -0
  53. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/basic/loggers.py +0 -0
  54. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/basic/metrics.py +0 -0
  55. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/basic/model.py +0 -0
  56. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/basic/session.py +0 -0
  57. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/basic/summary.py +0 -0
  58. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/cli.py +0 -0
  59. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/data/__init__.py +0 -0
  60. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/data/data_processing.py +0 -0
  61. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/data/data_utils.py +0 -0
  62. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/data/preprocessor.py +0 -0
  63. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/loss/__init__.py +0 -0
  64. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/loss/grad_norm.py +0 -0
  65. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/loss/listwise.py +0 -0
  66. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/loss/pairwise.py +0 -0
  67. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/loss/pointwise.py +0 -0
  68. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/generative/__init__.py +0 -0
  69. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/generative/tiger.py +0 -0
  70. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/multi_task/[pre]aitm.py +0 -0
  71. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/multi_task/[pre]snr_trans.py +0 -0
  72. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/multi_task/[pre]star.py +0 -0
  73. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/multi_task/__init__.py +0 -0
  74. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/multi_task/apg.py +0 -0
  75. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/multi_task/cross_stitch.py +0 -0
  76. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/multi_task/escm.py +0 -0
  77. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/multi_task/esmm.py +0 -0
  78. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/multi_task/hmoe.py +0 -0
  79. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/multi_task/mmoe.py +0 -0
  80. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/multi_task/ple.py +0 -0
  81. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/multi_task/poso.py +0 -0
  82. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/multi_task/share_bottom.py +0 -0
  83. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/ranking/__init__.py +0 -0
  84. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/ranking/afm.py +0 -0
  85. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/ranking/autoint.py +0 -0
  86. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/ranking/dcn.py +0 -0
  87. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/ranking/dcn_v2.py +0 -0
  88. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/ranking/deepfm.py +0 -0
  89. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/ranking/dien.py +0 -0
  90. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/ranking/din.py +0 -0
  91. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/ranking/eulernet.py +0 -0
  92. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/ranking/ffm.py +0 -0
  93. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/ranking/fibinet.py +0 -0
  94. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/ranking/fm.py +0 -0
  95. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/ranking/lr.py +0 -0
  96. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/ranking/masknet.py +0 -0
  97. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/ranking/pnn.py +0 -0
  98. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/ranking/widedeep.py +0 -0
  99. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/ranking/xdeepfm.py +0 -0
  100. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/representation/__init__.py +0 -0
  101. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/representation/autorec.py +0 -0
  102. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/representation/bpr.py +0 -0
  103. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/representation/cl4srec.py +0 -0
  104. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/representation/lightgcn.py +0 -0
  105. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/representation/mf.py +0 -0
  106. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/representation/rqvae.py +0 -0
  107. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/representation/s3rec.py +0 -0
  108. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/retrieval/__init__.py +0 -0
  109. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/retrieval/dssm.py +0 -0
  110. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/retrieval/dssm_v2.py +0 -0
  111. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/retrieval/mind.py +0 -0
  112. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/retrieval/sdm.py +0 -0
  113. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/retrieval/youtube_dnn.py +0 -0
  114. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/sequential/hstu.py +0 -0
  115. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/models/sequential/sasrec.py +0 -0
  116. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/utils/__init__.py +0 -0
  117. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/utils/config.py +0 -0
  118. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/utils/console.py +0 -0
  119. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/utils/data.py +0 -0
  120. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/utils/embedding.py +0 -0
  121. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/utils/feature.py +0 -0
  122. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/utils/loss.py +0 -0
  123. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/utils/model.py +0 -0
  124. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/utils/torch_utils.py +0 -0
  125. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec/utils/types.py +0 -0
  126. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/NextRec-CLI.md +0 -0
  127. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/NextRec-CLI_zh.md +0 -0
  128. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/feature_config.yaml +0 -0
  129. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/model_configs/afm.yaml +0 -0
  130. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/model_configs/apg.yaml +0 -0
  131. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/model_configs/autoint.yaml +0 -0
  132. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/model_configs/cross_stitch.yaml +0 -0
  133. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/model_configs/dcn.yaml +0 -0
  134. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/model_configs/deepfm.yaml +0 -0
  135. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/model_configs/din.yaml +0 -0
  136. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/model_configs/escm.yaml +0 -0
  137. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/model_configs/esmm.yaml +0 -0
  138. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/model_configs/fibinet.yaml +0 -0
  139. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/model_configs/fm.yaml +0 -0
  140. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/model_configs/hmoe.yaml +0 -0
  141. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/model_configs/masknet.yaml +0 -0
  142. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/model_configs/mmoe.yaml +0 -0
  143. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/model_configs/pepnet.yaml +0 -0
  144. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/model_configs/ple.yaml +0 -0
  145. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/model_configs/pnn.yaml +0 -0
  146. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/model_configs/poso.yaml +0 -0
  147. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/model_configs/share_bottom.yaml +0 -0
  148. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/model_configs/widedeep.yaml +0 -0
  149. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/model_configs/xdeepfm.yaml +0 -0
  150. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/predict_config.yaml +0 -0
  151. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/predict_config_template.yaml +0 -0
  152. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/train_config.yaml +0 -0
  153. {nextrec-0.4.27 → nextrec-0.4.28}/nextrec_cli_preset/train_config_template.yaml +0 -0
  154. {nextrec-0.4.27 → nextrec-0.4.28}/pytest.ini +0 -0
  155. {nextrec-0.4.27 → nextrec-0.4.28}/requirements.txt +0 -0
  156. {nextrec-0.4.27 → nextrec-0.4.28}/scripts/format_code.py +0 -0
  157. {nextrec-0.4.27 → nextrec-0.4.28}/test/__init__.py +0 -0
  158. {nextrec-0.4.27 → nextrec-0.4.28}/test/conftest.py +0 -0
  159. {nextrec-0.4.27 → nextrec-0.4.28}/test/helpers.py +0 -0
  160. {nextrec-0.4.27 → nextrec-0.4.28}/test/run_tests.py +0 -0
  161. {nextrec-0.4.27 → nextrec-0.4.28}/test/test_base_model_regularization.py +0 -0
  162. {nextrec-0.4.27 → nextrec-0.4.28}/test/test_generative_models.py +0 -0
  163. {nextrec-0.4.27 → nextrec-0.4.28}/test/test_layers.py +0 -0
  164. {nextrec-0.4.27 → nextrec-0.4.28}/test/test_losses.py +0 -0
  165. {nextrec-0.4.27 → nextrec-0.4.28}/test/test_match_models.py +0 -0
  166. {nextrec-0.4.27 → nextrec-0.4.28}/test/test_multitask_models.py +0 -0
  167. {nextrec-0.4.27 → nextrec-0.4.28}/test/test_preprocessor.py +0 -0
  168. {nextrec-0.4.27 → nextrec-0.4.28}/test/test_ranking_models.py +0 -0
  169. {nextrec-0.4.27 → nextrec-0.4.28}/test/test_utils_console.py +0 -0
  170. {nextrec-0.4.27 → nextrec-0.4.28}/test/test_utils_data.py +0 -0
  171. {nextrec-0.4.27 → nextrec-0.4.28}/test/test_utils_embedding.py +0 -0
  172. {nextrec-0.4.27 → nextrec-0.4.28}/test_requirements.txt +0 -0
  173. {nextrec-0.4.27 → nextrec-0.4.28}/tutorials/distributed/example_distributed_training.py +0 -0
  174. {nextrec-0.4.27 → nextrec-0.4.28}/tutorials/distributed/example_distributed_training_large_dataset.py +0 -0
  175. {nextrec-0.4.27 → nextrec-0.4.28}/tutorials/example_match.py +0 -0
  176. {nextrec-0.4.27 → nextrec-0.4.28}/tutorials/example_multitask.py +0 -0
  177. {nextrec-0.4.27 → nextrec-0.4.28}/tutorials/example_ranking_din.py +0 -0
  178. {nextrec-0.4.27 → nextrec-0.4.28}/tutorials/movielen_match_dssm.py +0 -0
  179. {nextrec-0.4.27 → nextrec-0.4.28}/tutorials/movielen_ranking_deepfm.py +0 -0
  180. {nextrec-0.4.27 → nextrec-0.4.28}/tutorials/notebooks/en/Build semantic ID with RQ-VAE.ipynb +0 -0
  181. {nextrec-0.4.27 → nextrec-0.4.28}/tutorials/notebooks/en/Hands on dataprocessor.ipynb +0 -0
  182. {nextrec-0.4.27 → nextrec-0.4.28}/tutorials/notebooks/en/Hands on nextrec.ipynb +0 -0
  183. {nextrec-0.4.27 → nextrec-0.4.28}/tutorials/notebooks/zh//344/275/277/347/224/250RQ-VAE/346/236/204/345/273/272/350/257/255/344/271/211ID.ipynb" +0 -0
  184. {nextrec-0.4.27 → nextrec-0.4.28}/tutorials/notebooks/zh//345/246/202/344/275/225/344/275/277/347/224/250DataProcessor/350/277/233/350/241/214/351/242/204/345/244/204/347/220/206.ipynb" +0 -0
  185. {nextrec-0.4.27 → nextrec-0.4.28}/tutorials/notebooks/zh//345/277/253/351/200/237/345/205/245/351/227/250nextrec.ipynb" +0 -0
  186. {nextrec-0.4.27 → nextrec-0.4.28}/tutorials/run_all_match_models.py +0 -0
  187. {nextrec-0.4.27 → nextrec-0.4.28}/tutorials/run_all_multitask_models.py +0 -0
  188. {nextrec-0.4.27 → nextrec-0.4.28}/tutorials/run_all_ranking_models.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nextrec
3
- Version: 0.4.27
3
+ Version: 0.4.28
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
@@ -69,7 +69,7 @@ Description-Content-Type: text/markdown
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.27-orange.svg)
72
+ ![Version](https://img.shields.io/badge/Version-0.4.28-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)
@@ -102,7 +102,7 @@ NextRec是一个基于PyTorch的现代推荐系统框架,旨在为研究工程
102
102
  - **高效训练与评估**:内置多种优化器、学习率调度、早停、模型检查点与详细的日志管理,开箱即用。
103
103
 
104
104
  ## NextRec近期进展
105
- - **01/01/2026** 新年好,在v0.4.27中加入了多个多目标模型的支持:[APG](nextrec/models/multi_task/apg.py), [ESCM](nextrec/models/multi_task/escm.py), [HMoE](nextrec/models/multi_task/hmoe.py), [Cross Stitch](nextrec/models/multi_task/cross_stitch.py)
105
+ - **01/01/2026** 新年好,在v0.4.28中加入了多个多目标模型的支持:[APG](nextrec/models/multi_task/apg.py), [ESCM](nextrec/models/multi_task/escm.py), [HMoE](nextrec/models/multi_task/hmoe.py), [Cross Stitch](nextrec/models/multi_task/cross_stitch.py)
106
106
  - **28/12/2025** 在v0.4.21中加入了对SwanLab和Wandb的支持,通过model的`fit`方法进行配置:`use_swanlab=True, swanlab_kwargs={"project": "NextRec","name":"tutorial_movielens_deepfm"},`
107
107
  - **21/12/2025** 在v0.4.16中加入了对[GradNorm](/nextrec/loss/grad_norm.py)的支持,通过compile的`loss_weight='grad_norm'`进行配置
108
108
  - **12/12/2025** 在v0.4.9中加入了[RQ-VAE](/nextrec/models/representation/rqvae.py)模块。配套的[数据集](/dataset/ecommerce_task.csv)和[代码](tutorials/notebooks/zh/使用RQ-VAE构建语义ID.ipynb)已经同步在仓库中
@@ -254,11 +254,11 @@ nextrec --mode=predict --predict_config=path/to/predict_config.yaml
254
254
 
255
255
  预测结果固定保存到 `{checkpoint_path}/predictions/{name}.{save_data_format}`。
256
256
 
257
- > 截止当前版本0.4.27,NextRec CLI支持单机训练,分布式训练相关功能尚在开发中。
257
+ > 截止当前版本0.4.28,NextRec CLI支持单机训练,分布式训练相关功能尚在开发中。
258
258
 
259
259
  ## 兼容平台
260
260
 
261
- 当前最新版本为0.4.27,所有模型和测试代码均已在以下平台通过验证,如果开发者在使用中遇到兼容问题,请在issue区提出错误报告及系统版本:
261
+ 当前最新版本为0.4.28,所有模型和测试代码均已在以下平台通过验证,如果开发者在使用中遇到兼容问题,请在issue区提出错误报告及系统版本:
262
262
 
263
263
  | 平台 | 配置 |
264
264
  |------|------|
@@ -8,7 +8,7 @@
8
8
  ![Python](https://img.shields.io/badge/Python-3.10+-blue.svg)
9
9
  ![PyTorch](https://img.shields.io/badge/PyTorch-1.10+-ee4c2c.svg)
10
10
  ![License](https://img.shields.io/badge/License-Apache%202.0-green.svg)
11
- ![Version](https://img.shields.io/badge/Version-0.4.27-orange.svg)
11
+ ![Version](https://img.shields.io/badge/Version-0.4.28-orange.svg)
12
12
  [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/zerolovesea/NextRec)
13
13
 
14
14
  中文文档 | [English Version](README_en.md)
@@ -41,7 +41,7 @@ NextRec是一个基于PyTorch的现代推荐系统框架,旨在为研究工程
41
41
  - **高效训练与评估**:内置多种优化器、学习率调度、早停、模型检查点与详细的日志管理,开箱即用。
42
42
 
43
43
  ## NextRec近期进展
44
- - **01/01/2026** 新年好,在v0.4.27中加入了多个多目标模型的支持:[APG](nextrec/models/multi_task/apg.py), [ESCM](nextrec/models/multi_task/escm.py), [HMoE](nextrec/models/multi_task/hmoe.py), [Cross Stitch](nextrec/models/multi_task/cross_stitch.py)
44
+ - **01/01/2026** 新年好,在v0.4.28中加入了多个多目标模型的支持:[APG](nextrec/models/multi_task/apg.py), [ESCM](nextrec/models/multi_task/escm.py), [HMoE](nextrec/models/multi_task/hmoe.py), [Cross Stitch](nextrec/models/multi_task/cross_stitch.py)
45
45
  - **28/12/2025** 在v0.4.21中加入了对SwanLab和Wandb的支持,通过model的`fit`方法进行配置:`use_swanlab=True, swanlab_kwargs={"project": "NextRec","name":"tutorial_movielens_deepfm"},`
46
46
  - **21/12/2025** 在v0.4.16中加入了对[GradNorm](/nextrec/loss/grad_norm.py)的支持,通过compile的`loss_weight='grad_norm'`进行配置
47
47
  - **12/12/2025** 在v0.4.9中加入了[RQ-VAE](/nextrec/models/representation/rqvae.py)模块。配套的[数据集](/dataset/ecommerce_task.csv)和[代码](tutorials/notebooks/zh/使用RQ-VAE构建语义ID.ipynb)已经同步在仓库中
@@ -193,11 +193,11 @@ nextrec --mode=predict --predict_config=path/to/predict_config.yaml
193
193
 
194
194
  预测结果固定保存到 `{checkpoint_path}/predictions/{name}.{save_data_format}`。
195
195
 
196
- > 截止当前版本0.4.27,NextRec CLI支持单机训练,分布式训练相关功能尚在开发中。
196
+ > 截止当前版本0.4.28,NextRec CLI支持单机训练,分布式训练相关功能尚在开发中。
197
197
 
198
198
  ## 兼容平台
199
199
 
200
- 当前最新版本为0.4.27,所有模型和测试代码均已在以下平台通过验证,如果开发者在使用中遇到兼容问题,请在issue区提出错误报告及系统版本:
200
+ 当前最新版本为0.4.28,所有模型和测试代码均已在以下平台通过验证,如果开发者在使用中遇到兼容问题,请在issue区提出错误报告及系统版本:
201
201
 
202
202
  | 平台 | 配置 |
203
203
  |------|------|
@@ -8,7 +8,7 @@
8
8
  ![Python](https://img.shields.io/badge/Python-3.10+-blue.svg)
9
9
  ![PyTorch](https://img.shields.io/badge/PyTorch-1.10+-ee4c2c.svg)
10
10
  ![License](https://img.shields.io/badge/License-Apache%202.0-green.svg)
11
- ![Version](https://img.shields.io/badge/Version-0.4.27-orange.svg)
11
+ ![Version](https://img.shields.io/badge/Version-0.4.28-orange.svg)
12
12
  [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/zerolovesea/NextRec)
13
13
 
14
14
  English | [中文文档](README.md)
@@ -44,7 +44,7 @@ NextRec is a modern recommendation framework built on PyTorch, delivering a unif
44
44
 
45
45
  ## NextRec Progress
46
46
 
47
- - **01/01/2026** Happy New Year! In v0.4.27, added support for multiple multi-task models: [APG](/nextrec/models/multi_task/apg.py), [ESCM](/nextrec/models/multi_task/escm.py), [HMoE](/nextrec/models/multi_task/hmoe.py), [Cross Stitch](/nextrec/models/multi_task/cross_stitch.py)
47
+ - **01/01/2026** Happy New Year! In v0.4.28, added support for multiple multi-task models: [APG](/nextrec/models/multi_task/apg.py), [ESCM](/nextrec/models/multi_task/escm.py), [HMoE](/nextrec/models/multi_task/hmoe.py), [Cross Stitch](/nextrec/models/multi_task/cross_stitch.py)
48
48
  - **28/12/2025** Added support for SwanLab and Weights & Biases in v0.4.21, configurable via the model `fit` method: `use_swanlab=True, swanlab_kwargs={"project": "NextRec","name":"tutorial_movielens_deepfm"},`
49
49
  - **21/12/2025** Added support for [GradNorm](/nextrec/loss/grad_norm.py) in v0.4.16, configurable via `loss_weight='grad_norm'` in the compile method
50
50
  - **12/12/2025** Added [RQ-VAE](/nextrec/models/representation/rqvae.py), a common module for generative retrieval in v0.4.9. Paired [dataset](/dataset/ecommerce_task.csv) and [notebook code](tutorials/notebooks/en/Build%20semantic%20ID%20with%20RQ-VAE.ipynb) are available.
@@ -196,11 +196,11 @@ nextrec --mode=predict --predict_config=path/to/predict_config.yaml
196
196
 
197
197
  Prediction outputs are saved under `{checkpoint_path}/predictions/{name}.{save_data_format}`.
198
198
 
199
- > As of version 0.4.27, NextRec CLI supports single-machine training; distributed training features are currently under development.
199
+ > As of version 0.4.28, NextRec CLI supports single-machine training; distributed training features are currently under development.
200
200
 
201
201
  ## Platform Compatibility
202
202
 
203
- The current version is 0.4.27. All models and test code have been validated on the following platforms. If you encounter compatibility issues, please report them in the issue tracker with your system version:
203
+ The current version is 0.4.28. All models and test code have been validated on the following platforms. If you encounter compatibility issues, please report them in the issue tracker with your system version:
204
204
 
205
205
  | Platform | Configuration |
206
206
  |----------|---------------|
@@ -11,7 +11,7 @@ sys.path.insert(0, str(PROJECT_ROOT / "nextrec"))
11
11
  project = "NextRec"
12
12
  copyright = "2025, Yang Zhou"
13
13
  author = "Yang Zhou"
14
- release = "0.4.27"
14
+ release = "0.4.28"
15
15
 
16
16
  extensions = [
17
17
  "myst_parser",
@@ -0,0 +1 @@
1
+ __version__ = "0.4.28"
@@ -5,13 +5,27 @@ Date: create on 03/12/2025
5
5
  Author: Yang Zhou, zyaztec@gmail.com
6
6
  """
7
7
 
8
- from typing import Any, Mapping
8
+ from typing import Any, Mapping, Literal
9
9
 
10
10
  import numpy as np
11
11
  import torch
12
12
 
13
13
 
14
- def stack_section(batch: list[dict], section: str):
14
+ def stack_section(batch: list[dict], section: Literal["features", "labels", "ids"]):
15
+ """
16
+ input example:
17
+ batch = [
18
+ {"features": {"f1": tensor1, "f2": tensor2}, "labels": {"label": tensor3}},
19
+ {"features": {"f1": tensor4, "f2": tensor5}, "labels": {"label": tensor6}},
20
+ ...
21
+ ]
22
+ output example:
23
+ {
24
+ "f1": torch.stack([tensor1, tensor4], dim=0),
25
+ "f2": torch.stack([tensor2, tensor5], dim=0),
26
+ }
27
+
28
+ """
15
29
  entries = [item.get(section) for item in batch if item.get(section) is not None]
16
30
  if not entries:
17
31
  return None
@@ -22,7 +36,13 @@ def stack_section(batch: list[dict], section: str):
22
36
  for item in batch
23
37
  if item.get(section) is not None and name in item[section]
24
38
  ]
25
- merged[name] = torch.stack(tensors, dim=0)
39
+ tensor_sample = tensors[0]
40
+ if isinstance(tensor_sample, torch.Tensor):
41
+ merged[name] = torch.stack(tensors, dim=0)
42
+ elif isinstance(tensor_sample, np.ndarray):
43
+ merged[name] = np.stack(tensors, axis=0)
44
+ else:
45
+ merged[name] = tensors
26
46
  return merged
27
47
 
28
48
 
@@ -2,7 +2,7 @@
2
2
  Dataloader definitions
3
3
 
4
4
  Date: create on 27/10/2025
5
- Checkpoint: edit on 24/12/2025
5
+ Checkpoint: edit on 01/01/2026
6
6
  Author: Yang Zhou,zyaztec@gmail.com
7
7
  """
8
8
 
@@ -523,13 +523,8 @@ def build_tensors_from_data(
523
523
  raise KeyError(
524
524
  f"[RecDataLoader Error] ID column '{id_col}' not found in provided data."
525
525
  )
526
- try:
527
- id_arr = np.asarray(column, dtype=np.int64)
528
- except Exception as exc:
529
- raise TypeError(
530
- f"[RecDataLoader Error] ID column '{id_col}' must contain numeric values. Received dtype={np.asarray(column).dtype}, error: {exc}"
531
- ) from exc
532
- id_tensors[id_col] = to_tensor(id_arr, dtype=torch.long)
526
+ # Normalize all id columns to strings for consistent downstream handling.
527
+ id_tensors[id_col] = np.asarray(column, dtype=str)
533
528
  if not feature_tensors:
534
529
  return None
535
530
  return {"features": feature_tensors, "labels": label_tensors, "ids": id_tensors}
@@ -61,9 +61,9 @@ from nextrec.utils.model import select_features
61
61
  from nextrec.utils.types import TaskTypeName
62
62
 
63
63
 
64
- class PPNetBlock(nn.Module):
64
+ class PPNet(nn.Module):
65
65
  """
66
- PEPNet block with per-layer gates conditioned on task context.
66
+ PPNet: per-task tower with layer-wise gates conditioned on task context.
67
67
  """
68
68
 
69
69
  def __init__(
@@ -274,18 +274,21 @@ class PEPNet(BaseModel):
274
274
  )
275
275
  task_dim = domain_dim + user_dim + item_dim
276
276
 
277
- self.feature_gate = GateMLP(
277
+ # EPNet: shared feature-level gate (paper's EPNet).
278
+ self.epnet = GateMLP(
278
279
  input_dim=input_dim + domain_dim,
279
280
  hidden_dim=feature_gate_mlp_params["hidden_dim"],
280
281
  output_dim=input_dim,
281
282
  activation=feature_gate_mlp_params["activation"],
282
283
  dropout=feature_gate_mlp_params["dropout"],
283
284
  use_bn=feature_gate_mlp_params["use_bn"],
285
+ scale_factor=2.0,
284
286
  )
285
287
 
286
- self.ppn_blocks = nn.ModuleList(
288
+ # PPNet: per-task gated towers (paper's PPNet).
289
+ self.ppnet_blocks = nn.ModuleList(
287
290
  [
288
- PPNetBlock(
291
+ PPNet(
289
292
  input_dim=input_dim,
290
293
  output_dim=1,
291
294
  gate_input_dim=input_dim + task_dim,
@@ -300,9 +303,9 @@ class PEPNet(BaseModel):
300
303
  self.prediction_layer = TaskHead(
301
304
  task_type=self.task, task_dims=[1] * self.nums_task
302
305
  )
303
- self.grad_norm_shared_modules = ["embedding", "feature_gate"]
306
+ self.grad_norm_shared_modules = ["embedding", "epnet"]
304
307
  self.register_regularization_weights(
305
- embedding_attr="embedding", include_modules=["feature_gate", "ppn_blocks"]
308
+ embedding_attr="embedding", include_modules=["epnet", "ppnet_blocks"]
306
309
  )
307
310
 
308
311
  def forward(self, x: dict[str, torch.Tensor]) -> torch.Tensor:
@@ -327,11 +330,11 @@ class PEPNet(BaseModel):
327
330
  task_sf_emb = torch.cat(task_parts, dim=-1)
328
331
 
329
332
  gate_input = torch.cat([dnn_input.detach(), domain_emb], dim=-1)
330
- dnn_input = self.feature_gate(gate_input) * dnn_input
333
+ dnn_input = self.epnet(gate_input) * dnn_input
331
334
 
332
335
  task_logits = []
333
- for block in self.ppn_blocks:
334
- task_logits.append(block(o_ep=dnn_input, o_prior=task_sf_emb))
336
+ for block in self.ppnet_blocks:
337
+ task_logits.append(block(o_ep=dnn_input, o_prior=task_sf_emb))
335
338
 
336
339
  y = torch.cat(task_logits, dim=1)
337
340
  return self.prediction_layer(y)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "nextrec"
3
- version = "0.4.27"
3
+ version = "0.4.28"
4
4
  description = "A comprehensive recommendation library with match, ranking, and multi-task learning models"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -1 +0,0 @@
1
- __version__ = "0.4.27"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes