반응형
오늘은 지난 포스팅에 이어 recommenders 라이브러리를 활용한 추천시스템 구현 방법에 대해 포스팅하려고 합니다. 오늘 다룰 bpr 모델은 als 이후에 나온 모델로, 이전 포스팅에서도 몇 번 다룬 모델입니다. als는 점수에 집중하는 모델인 반면, bpr은 순위에 집중한다는 특징이 있습니다.
setting
설치 방법은 동일하지만, pyspark 환경을 구축할 필요는 없습니다. 아래 코드를 실행시켜 라이브러리를 임포트합니다.
import sys
import pyspark
from pyspark.ml.recommendation import ALS
import pyspark.sql.functions as F
from pyspark.sql import SparkSession
from pyspark.sql.types import StructType, StructField
from pyspark.sql.types import StringType, FloatType, IntegerType, LongType
import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)
from recommenders.utils.timer import Timer
from recommenders.utils.notebook_utils import is_jupyter
from recommenders.utils.gpu_utils import get_cuda_version
from recommenders.datasets.spark_splitters import spark_random_split
from recommenders.datasets.python_splitters import python_random_split
from recommenders.evaluation.spark_evaluation import SparkRatingEvaluation, SparkRankingEvaluation
from recommenders.utils.spark_utils import start_or_get_spark
import cornac
from recommenders.models.cornac.cornac_utils import predict_ranking
from recommenders.models.cornac.cornac_utils import predict
from recommenders.evaluation.python_evaluation import map, ndcg_at_k, precision_at_k, recall_at_k
from recommenders.tuning.parameter_sweep import generate_param_grid
from recommenders.datasets import movielens
movielens 데이터를 사용하기 위해 아래 코드를 실행시킵니다.
# Select MovieLens data size: 100k, 1m, 10m, or 20m
MOVIELENS_DATA_SIZE = '100k'
# top k items to recommend
TOP_K = 10
# Model parameters
NUM_FACTORS = 200
NUM_EPOCHS = 100
data = movielens.load_pandas_df(
size=MOVIELENS_DATA_SIZE,
header=["userID", "itemID", "rating"]
)
pandas dataframe을 사용하기 때문에 로컬 파일을 사용할 경우에도 사용자id, 아이템id, rating으로 구성된 pandas dataframe으로 준비해주시면 됩니다.
모델 학습
먼저 학습 데이터와 test 데이터를 분리합니다.
train, test = python_random_split(data, 0.75, seed = 42)
파라미터를 지정해 모델을 구축합니다.
bpr = cornac.models.BPR(
k=NUM_FACTORS,
max_iter=NUM_EPOCHS,
learning_rate=0.01,
lambda_reg=0.001,
verbose=True,
seed=42
)
학습 데이터는 cornac dataset으로 변경한 뒤, 모델을 학습시킵니다.
# cornac dataset 생성
train_set = cornac.data.Dataset.from_uir(train.itertuples(index=False), seed=42)
# 모델 학습
## val_set 파라미터를 지정하여 validation data를 지정할 수 있습니다.
bpr.fit(train_set)
모델을 학습시킨 다음, 순위 혹은 평점을 예측하기 위해 아래 코드를 실행시킵니다.
all_predictions = predict_ranking(bpr, train, usercol='userID', itemcol='itemID', remove_seen=True)
all_predictions2 = predict(bpr, train, usercol='userID', itemcol='itemID')
'Data > ML & DL' 카테고리의 다른 글
Agent, RAG/CAG 용어 정리 (0) | 2025.03.04 |
---|---|
[Colab] 추천시스템 recommenders 라이브러리 성능 평가 (1) | 2024.01.28 |
[Colab] recommenders 라이브러리 ALS 추천시스템 구현 (1) | 2024.01.22 |
[Colab] 추천시스템 implicit 라이브러리 성능 평가 (0) | 2024.01.19 |
[Pytorch] embedding dimension 변경 (0) | 2023.06.26 |