Recbole이란?
https://recbole.io/docs/index.html
추천시스템을 공부하고 알고리즘을 찾아보다보니 자연스럽게 Recbole이라는곳으로 도착하게 됐다.
간단하게 말해 유명한 추천시스템 알고리즘들이 모여있는 오픈소스 프레임워크이다.
나도 머신러닝, 딥러닝 프레임워크를 만드는 프로젝트를 했을때 고려해야할부분들이, 요구사항들이 많았고, 코어부분만 만드는데도 시간과 많은 정성이 들어갔는데, 이 라이브러리를 보면서 그때의 생각이 났다.
성능이 좋다 안좋다를 떠나서, 간단하게 각 알고리즘들을 구현해 볼수 있어서 개발 전 단계라던지, 알고리즘을 찾아보는단계에서 이용하기 좋은것 같다.!
모델의 구분은 크게
- General Recommendation
- Sequential Recommendation
- Context-aware Recommendation
- Knowledge-based Recommendation
로 나눠져 있고, 각 카테고리별로 알고리즘들이 들어가 있다.
하나하나 적어가면서 사용법을 익히고 익힌 사용법을 통해서 각 알고리즘을 공부도 하고 직접 구현도 하면서 또 다른 프레임워크를 만들어볼수 있는 기회가 됐으면 좋겠다.
1. 설치
설치는 콘다, pip를 지원한다. 현재는 RecBole v1.2.0 버전이다.
recbole은 아래의 os를 지원한다.
- Linux
- Windows 10
- macOS X
현재 버전 기준
파이썬 3.7 이상
토치1.7.0이상
CUDA9.2이상
NVIDIA driver version>= 396.26 (for Linux) or >= 397.44 (for Windows10)의 시스템 요구사항이 필요하다.
설치는 아래와 같다.
#conda
conda install -c aibox recbole
#pip
pip install recbole
#git
git clone https://github.com/RUCAIBox/RecBole.git && cd RecBole
pip install -e . --verbose
간단하게 설치를 끝내고 나면
심플 러닝을 할 수 있다.
from recbole.quick_start import run_recbole
run_recbole(model='BPR', dataset='ml-100k')
---------------------------------------------
#cmd
python run.py
결과
05 Aug 02:16 INFO ml-100k
The number of users: 944
Average actions of users: 106.04453870625663
The number of items: 1683
Average actions of items: 59.45303210463734
The number of inters: 100000
The sparsity of the dataset: 93.70575143257098%
Remain Fields: ['user_id', 'item_id', 'rating', 'timestamp']
05 Aug 02:16 INFO [Training]: train_batch_size = [2048] negative sampling: [{'uniform': 1}]
05 Aug 02:16 INFO [Evaluation]: eval_batch_size = [4096] eval_args: [{'split': {'RS': [0.8, 0.1, 0.1]}, 'group_by': 'user', 'order': 'RO', 'mode': 'full'}]
05 Aug 02:16 INFO BPR(
(user_embedding): Embedding(944, 64)
(item_embedding): Embedding(1683, 64)
(loss): BPRLoss()
)
Trainable parameters: 168128
Train 0: 100%|████████████████████████| 40/40 [00:00<00:00, 219.54it/s, GPU RAM: 0.01 G/11.91 G]
05 Aug 02:16 INFO epoch 0 training [time: 0.19s, train loss: 27.7228]
Evaluate : 100%|██████████████████████| 472/472 [00:00<00:00, 506.11it/s, GPU RAM: 0.01 G/11.91 G]
05 Aug 02:16 INFO epoch 0 evaluating [time: 0.94s, valid_score: 0.020500]
05 Aug 02:16 INFO valid result:
recall@10 : 0.0067 mrr@10 : 0.0205 ndcg@10 : 0.0086 hit@10 : 0.0732 precision@10 : 0.0081
...
Train 96: 100%|████████████████████████| 40/40 [00:00<00:00, 230.65it/s, GPU RAM: 0.01 G/11.91 G]
05 Aug 02:19 INFO epoch 96 training [time: 0.18s, train loss: 3.7170]
Evaluate : 100%|██████████████████████| 472/472 [00:00<00:00, 800.46it/s, GPU RAM: 0.01 G/11.91 G]
05 Aug 02:19 INFO epoch 96 evaluating [time: 0.60s, valid_score: 0.375200]
05 Aug 02:19 INFO valid result:
recall@10 : 0.2162 mrr@10 : 0.3752 ndcg@10 : 0.2284 hit@10 : 0.7508 precision@10 : 0.1602
05 Aug 02:19 INFO Finished training, best eval result in epoch 85
05 Aug 02:19 INFO Loading model structure and parameters from saved/BPR-Aug-05-2021_02-17-51.pth
Evaluate : 100%|██████████████████████| 472/472 [00:00<00:00, 832.85it/s, GPU RAM: 0.01 G/11.91 G]
05 Aug 02:19 INFO best valid : {'recall@10': 0.2195, 'mrr@10': 0.3871, 'ndcg@10': 0.2344, 'hit@10': 0.7582, 'precision@10': 0.1627}
05 Aug 02:19 INFO test result: {'recall@10': 0.2523, 'mrr@10': 0.4855, 'ndcg@10': 0.292, 'hit@10': 0.7953, 'precision@10': 0.1962}
이 다음편부터는 사용법을 적어가면서 익혀볼 예정이다.!