diff --git a/.github/ISSUE_TEMPLATE/bug_report_CN.md b/.github/ISSUE_TEMPLATE/bug_report_CN.md new file mode 100644 index 000000000..9e1de6cc1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report_CN.md @@ -0,0 +1,33 @@ +--- +name: Bug 报告 +about: 提交一份 bug 报告,帮助 RecBole 变得更好 +title: "[\U0001F41BBUG] 用一句话描述您的问题。" +labels: bug +assignees: '' + +--- + +**描述这个 bug** +对 bug 作一个清晰简明的描述。 + +**如何复现** +复现这个 bug 的步骤: +1. 您引入的额外 yaml 文件 +2. 您的代码 +3. 您的运行脚本 + +**预期** +对您的预期作清晰简明的描述。 + +**屏幕截图** +添加屏幕截图以帮助解释您的问题。(可选) + +**链接** +添加能够复现 bug 的代码链接,如 Colab 或者其他在线 Jupyter 平台。(可选) + +**实验环境(请补全下列信息):** + - 操作系统: [如 Linux, macOS 或 Windows] +- RecBole 版本 [如 0.1.0] + - Python 版本 [如 3.79] +- PyTorch 版本 [如 1.60] +- cudatoolkit 版本 [如 9.2, none] diff --git a/.github/ISSUE_TEMPLATE/feature_request_CN.md b/.github/ISSUE_TEMPLATE/feature_request_CN.md new file mode 100644 index 000000000..861dcc82d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request_CN.md @@ -0,0 +1,20 @@ +--- +name: 请求添加新功能 +about: 提出一个关于本项目新功能/新特性的建议 +title: "[\U0001F4A1SUG] 一句话描述您希望新增的功能或特性" +labels: enhancement +assignees: '' + +--- + +**您希望添加的功能是否与某个问题相关?** +关于这个问题的简洁清晰的描述,例如,当 [...] 时,我总是很沮丧。 + +**描述您希望的解决方案** +关于解决方案的简洁清晰的描述。 + +**描述您考虑的替代方案** +关于您考虑的,能实现这个功能的其他替代方案的简洁清晰的描述。 + +**其他** +您可以添加其他任何的资料、链接或者屏幕截图,以帮助我们理解这个新功能。 diff --git a/README.md b/README.md index 0515e05a2..c8599430a 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,8 @@ *“世有伯乐,然后有千里马。千里马常有,而伯乐不常有。”——韩愈《马说》* -[![PyPi Latest Release](https://img.shields.io/pypi/v/recbole)](https://pypi.org/project/recbole/) | -[![Conda Latest Release](https://anaconda.org/aibox/recbole/badges/version.svg)](https://anaconda.org/aibox/recbole) | +[![PyPi Latest Release](https://img.shields.io/pypi/v/recbole)](https://pypi.org/project/recbole/) +[![Conda Latest Release](https://anaconda.org/aibox/recbole/badges/version.svg)](https://anaconda.org/aibox/recbole) [![License](https://img.shields.io/badge/License-MIT-blue.svg)](./LICENSE) @@ -22,14 +22,14 @@ RecBole is developed based on Python and PyTorch for reproducing and developing recommendation algorithms in a unified, comprehensive and efficient framework for research purpose. -Our library includes 53 recommendation algorithms, covering four major categories: +Our library includes 65 recommendation algorithms, covering four major categories: + General Recommendation + Sequential Recommendation + Context-aware Recommendation + Knowledge-based Recommendation -We design a unified and flexible data file format, and provide the support for 27 benchmark recommendation datasets. +We design a unified and flexible data file format, and provide the support for 28 benchmark recommendation datasets. A user can apply the provided script to process the original data copy, or simply download the processed datasets by our team. @@ -45,8 +45,8 @@ by our team. + **General and extensible data structure.** We design general and extensible data structures to unify the formatting and usage of various recommendation datasets. -+ **Comprehensive benchmark models and datasets.** We implement 53 commonly used recommendation algorithms, and provide -the formatted copies of 27 recommendation datasets. ++ **Comprehensive benchmark models and datasets.** We implement 65 commonly used recommendation algorithms, and provide +the formatted copies of 28 recommendation datasets. + **Efficient GPU-accelerated execution.** We optimize the efficiency of our library with a number of improved techniques oriented to the GPU environment. @@ -56,6 +56,8 @@ for testing and comparing recommendation algorithms. ## RecBole News +**15/01/2021**: We release RecBole [v0.2.0](https://github.com/RUCAIBox/RecBole/releases/tag/v0.2.0). + **12/10/2020**: 我们发布了[RecBole小白入门系列中文博客(持续更新中)](https://blog.csdn.net/Turinger_2000/article/details/111182852) 。 **12/06/2020**: We release RecBole [v0.1.2](https://github.com/RUCAIBox/RecBole/releases/tag/v0.1.2). @@ -182,6 +184,7 @@ We will keep improving our implementations, and update these test results. ## RecBole Major Releases | Releases | Date | Features | |-----------|--------|-------------------------| +| v0.2.0 | 15/01/2021 | RecBole | | v0.1.1 | 11/03/2020 | Basic RecBole | ## Contributing diff --git a/recbole/model/general_recommender/cdae.py b/recbole/model/general_recommender/cdae.py index 11eef117d..627b01abd 100644 --- a/recbole/model/general_recommender/cdae.py +++ b/recbole/model/general_recommender/cdae.py @@ -55,7 +55,7 @@ def __init__(self, config, dataset): if self.out_activation == 'sigmoid': self.o_act = nn.Sigmoid() elif self.out_activation == 'relu': - self.o_act = nn.Sigmoid() + self.o_act = nn.ReLU() else: raise ValueError('Invalid output layer activation function') diff --git a/recbole/model/sequential_recommender/caser.py b/recbole/model/sequential_recommender/caser.py index 0b92dc460..229816deb 100644 --- a/recbole/model/sequential_recommender/caser.py +++ b/recbole/model/sequential_recommender/caser.py @@ -36,6 +36,7 @@ class Caser(SequentialRecommender): We did not use the sliding window to generate training instances as in the paper, in order that the generation method we used is common to other sequential models. For comparison with other models, we set the parameter T in the paper as 1. + In addition, to prevent excessive CNN layers (ValueError: Training loss is nan), please make sure the parameters MAX_ITEM_LIST_LENGTH small, such as 10. """ def __init__(self, config, dataset): diff --git a/recbole/model/sequential_recommender/nextitnet.py b/recbole/model/sequential_recommender/nextitnet.py index a1206350f..e0ad3def4 100644 --- a/recbole/model/sequential_recommender/nextitnet.py +++ b/recbole/model/sequential_recommender/nextitnet.py @@ -35,6 +35,7 @@ class NextItNet(SequentialRecommender): and then stop the generating process. Although the number of parameters in residual block (a) is less than it in residual block (b), the performance of b is better than a. So in our model, we use residual block (b). + In addition, when dilations is not equal to 1, the training may be slow. To speed up the efficiency, please set the parameters "reproducibility" False. """ def __init__(self, config, dataset):