From f7268297d46fec6017180d4f70c4a135b7d6d465 Mon Sep 17 00:00:00 2001
From: Joinn99
Date: Tue, 21 Feb 2023 14:25:16 +0800
Subject: [PATCH] Colab Notebook
---
...stration.ipynb => FPSR Demonstration.ipynb | 207 +++++++++---------
README.md | 4 +-
2 files changed, 110 insertions(+), 101 deletions(-)
rename FPSR_Demonstration.ipynb => FPSR Demonstration.ipynb (94%)
diff --git a/FPSR_Demonstration.ipynb b/FPSR Demonstration.ipynb
similarity index 94%
rename from FPSR_Demonstration.ipynb
rename to FPSR Demonstration.ipynb
index a9be8af..bd84c08 100644
--- a/FPSR_Demonstration.ipynb
+++ b/FPSR Demonstration.ipynb
@@ -1,23 +1,10 @@
{
- "nbformat": 4,
- "nbformat_minor": 0,
- "metadata": {
- "colab": {
- "provenance": []
- },
- "kernelspec": {
- "name": "python3",
- "display_name": "Python 3"
- },
- "language_info": {
- "name": "python"
- },
- "accelerator": "GPU",
- "gpuClass": "standard"
- },
"cells": [
{
"cell_type": "markdown",
+ "metadata": {
+ "id": "1cN-BpEGaSf5"
+ },
"source": [
"# FPSR\n",
"------------\n",
@@ -28,37 +15,40 @@
"
\n",
"\n",
"> Tianjun Wei, Jianghong Ma, Tommy W.S. Chow. Fine-tuning Partition-aware Item Similarities for Efficient and Scalable Recommendation. In WWW 2023. [[arxiv](https://arxiv.org/abs/2207.05959)] [[Github](https://github.com/Joinn99/FPSR)]"
- ],
- "metadata": {
- "id": "1cN-BpEGaSf5"
- }
+ ]
},
{
"cell_type": "markdown",
- "source": [
- "## Preprocessing"
- ],
"metadata": {
"id": "8pxSpTa9ZoTy"
- }
+ },
+ "source": [
+ "## Preprocessing"
+ ]
},
{
"cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "cellView": "form",
+ "id": "FrbhQmJjGF3I"
+ },
+ "outputs": [],
"source": [
"#@title Environment Setting\n",
"#@markdown FPSR is implemented based on the recommendation toolbox [RecBole](https://recbole.io/).\n",
"%%capture\n",
"! pip install recbole==1.1.1"
- ],
- "metadata": {
- "id": "FrbhQmJjGF3I",
- "cellView": "form"
- },
- "execution_count": 1,
- "outputs": []
+ ]
},
{
"cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "cellView": "form",
+ "id": "pqa6o51yExY_"
+ },
+ "outputs": [],
"source": [
"#@title Download Dataset\n",
"#@markdown Here we use four public datasets:
\n",
@@ -72,16 +62,16 @@
"%%capture\n",
"! git clone https://github.com/Joinn99/FPSR\n",
"! cd FPSR && unzip -o \"Data/*.zip\" -d /content"
- ],
- "metadata": {
- "id": "pqa6o51yExY_",
- "cellView": "form"
- },
- "execution_count": 2,
- "outputs": []
+ ]
},
{
"cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "cellView": "form",
+ "id": "7NnQ5JnKb-p1"
+ },
+ "outputs": [],
"source": [
"#@title Configuation\n",
"#@markdown Here we list the configurations of the experiment.\n",
@@ -119,26 +109,25 @@
" \"epochs\": 1,\n",
" \"eval_step\": 0,\n",
"}\n"
- ],
- "metadata": {
- "id": "7NnQ5JnKb-p1",
- "cellView": "form"
- },
- "execution_count": 3,
- "outputs": []
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {
+ "id": "f5ytkUIsbn_B"
+ },
"source": [
"### Hyperparameters\n",
"Here we list the hyperparameter setting of FPSR. To evaluate the performance of FPSR with different hyperparameters, modify the values in `FPSR_CONFIG` and select `Runtime->Run after`."
- ],
- "metadata": {
- "id": "f5ytkUIsbn_B"
- }
+ ]
},
{
"cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "id": "k5R7vKwlMPfO"
+ },
+ "outputs": [],
"source": [
"DATASET = {\n",
" 'dataset': 'douban'\n",
@@ -158,24 +147,25 @@
"\n",
"CONFIG.update(DATASET)\n",
"CONFIG.update(FPSR_HYPER)"
- ],
- "metadata": {
- "id": "k5R7vKwlMPfO"
- },
- "execution_count": 4,
- "outputs": []
+ ]
},
{
"cell_type": "markdown",
- "source": [
- "## Model Implementation"
- ],
"metadata": {
"id": "7hNBSzOCZszh"
- }
+ },
+ "source": [
+ "## Model Implementation"
+ ]
},
{
"cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "cellView": "form",
+ "id": "jHuhZcigM0lJ"
+ },
+ "outputs": [],
"source": [
"#@title FPSR\n",
"#@markdown This cell includes a complete implementation of FPSR model.\n",
@@ -377,25 +367,47 @@
" r = torch.sparse.mm(self.S, user.T).T\n",
" r += self.lambda_ * user * self.d_i.T @ self.V @ self.V.T * self.d_i_inv\n",
" return r"
- ],
- "metadata": {
- "cellView": "form",
- "id": "jHuhZcigM0lJ"
- },
- "execution_count": 5,
- "outputs": []
+ ]
},
{
"cell_type": "markdown",
- "source": [
- "## Running"
- ],
"metadata": {
"id": "9spbyRBwb0dn"
- }
+ },
+ "source": [
+ "## Running"
+ ]
},
{
"cell_type": "code",
+ "execution_count": 6,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "htpZ3NxHYlKP",
+ "outputId": "391a5401-e505-4849-da12-2b8fd7a613e2"
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "==========Preprocessing==========\n",
+ "Configuration loading complete.\n",
+ "Data loading complete.\n",
+ "============Training=============\n",
+ "(This step may last several minutes)\n",
+ "Training complete.\n",
+ "===========Evaluation============\n",
+ "Evaluation results:\n",
+ "RECALL@10 : 0.157929\n",
+ "RECALL@20 : 0.208824\n",
+ "NDCG@10 : 0.192254\n",
+ "NDCG@20 : 0.194117\n"
+ ]
+ }
+ ],
"source": [
"r\"\"\"\n",
"Code reference: https://recbole.io/docs/developer_guide/customize_models.html\n",
@@ -420,6 +432,7 @@
"print(\"Data loading complete.\")\n",
"\n",
"print('='* 12 + 'Training' + '=' * 13)\n",
+ "print(\"(This step may last several minutes)\")\n",
"# model loading and initialization\n",
"model = FPSR(config, train_data.dataset).to(config['device'])\n",
"\n",
@@ -437,34 +450,30 @@
"print(\"Evaluation results:\")\n",
"for metric, value in test_result.items():\n",
" print('{:10s}: {:.6f}'.format(metric.upper(), value))"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "htpZ3NxHYlKP",
- "outputId": "6ef4f54e-8e97-4923-cb35-56821f65584f"
- },
- "execution_count": 7,
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "==========Preprocessing==========\n",
- "Configuration loading complete.\n",
- "Data loading complete.\n",
- "============Training=============\n",
- "Training complete.\n",
- "===========Evaluation============\n",
- "Evaluation results:\n",
- "RECALL@10 : 0.157921\n",
- "RECALL@20 : 0.208826\n",
- "NDCG@10 : 0.192252\n",
- "NDCG@20 : 0.194120\n"
- ]
- }
]
}
- ]
-}
\ No newline at end of file
+ ],
+ "metadata": {
+ "accelerator": "GPU",
+ "colab": {
+ "provenance": []
+ },
+ "gpuClass": "standard",
+ "kernelspec": {
+ "display_name": "SparseRec",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "name": "python",
+ "version": "3.11.0"
+ },
+ "vscode": {
+ "interpreter": {
+ "hash": "933075f399f88ee3a7bc96289e7bedd6322a6307b0e261e2bc2c90799eef1243"
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/README.md b/README.md
index 44bfbe2..8b8c99b 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
[![RecBole](https://img.shields.io/badge/RecBole-1.1.1-orange)](https://recbole.io/)
[![arXiv](https://img.shields.io/badge/arXiv-2207.05959-red)](https://arxiv.org/abs/2207.05959)
[![License](https://img.shields.io/github/license/Joinn99/FPSR)](https://github.com/Joinn99/FPSR/blob/master/LICENSE.md)
-[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/Joinn99/FPSR/blob/torch/FPSR_Demonstration.ipynb)
+[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/Joinn99/FPSR/blob/torch/FPSR%20Demonstration.ipynb)
**PyTorch version** (Default) | [**CuPy version**](https://github.com/Joinn99/FPSR/)
@@ -55,7 +55,7 @@ The script `run.py` is used to reproduced the results presented in paper. Train
python run.py --dataset DATASET_NAME
```
## Google Colab
-We also provide Colab notebook version of FPSR, you can click [here](https://colab.research.google.com/github/Joinn99/FPSR/blob/torch/FPSR_Demonstration.ipynb) to open Google Colab, select the runtime type as *GPU*, and run the model.
+We also provide Colab notebook version of FPSR, you can click [here](https://colab.research.google.com/github/Joinn99/FPSR/blob/torch/FPSR%20Demonstration.ipynb) to open Google Colab, select the runtime type as *GPU*, and run the model.
## Citation
If you wish, please cite the following paper: