代表是开发和分析推荐系统的框架,它使您可以:



现在,您可以使用Movielens数据集在我们的演示网站上在线尝试Repsys。另外,请查看我们使用repsys小部件组件制作的交互式博客文章。
我们的论文“ Repsys:推荐系统的交互式评估框架”被Recsys'22会议接受。
使用PIP安装软件包:
$ pip install repsys-framework
如果您将使用PYMDE进行数据可视化,则需要使用以下附加功能安装repsys:
$ pip install repsys-framework[pymde]
如果您想跳过本教程并尝试框架,则可以提取位于存储库的演示文件夹的内容。如下一步所述,在开始之前,您仍然必须下载数据集。
否则,请创建一个将包含数据集和模型实现的空项目文件夹。
├── __init__.py
├── dataset.py
├── models.py
├── repsys.ini
└── .gitignore
首先,我们需要导入我们的数据集。为了教程目的,我们将使用Movielens 2000万数据集和138,000个用户对27,000部电影进行的2000万个评级。请下载ml-20m.zip文件,然后将数据解压缩到当前文件夹中。然后将以下内容添加到dataset.py文件:
import pandas as pd
from repsys import Dataset
import repsys . dtypes as dtypes
class MovieLens ( Dataset ):
def name ( self ):
return "ml20m"
def item_cols ( self ):
return {
"movieId" : dtypes . ItemID (),
"title" : dtypes . Title (),
"genres" : dtypes . Tag ( sep = "|" ),
"year" : dtypes . Number ( data_type = int ),
}
def interaction_cols ( self ):
return {
"movieId" : dtypes . ItemID (),
"userId" : dtypes . UserID (),
"rating" : dtypes . Interaction (),
}
def load_items ( self ):
df = pd . read_csv ( "./ml-20m/movies.csv" )
df [ "year" ] = df [ "title" ]. str . extract ( r"((d+))" )
return df
def load_interactions ( self ):
df = pd . read_csv ( "./ml-20m/ratings.csv" )
return df该代码将定义一个名为ML20M的新数据集,它将导入评级和项目数据。您必须始终使用预定义的数据类型指定数据结构。在返回数据之前,您还可以像从标题列中提取电影年一样进行预处理。
现在,我们定义了第一个推荐模型,这将是基于用户的KNN的简单实现。
import numpy as np
import scipy . sparse as sp
from sklearn . neighbors import NearestNeighbors
from repsys import Model
class KNN ( Model ):
def __init__ ( self ):
self . model = NearestNeighbors ( n_neighbors = 20 , metric = "cosine" )
def name ( self ):
return "knn"
def fit ( self , training = False ):
X = self . dataset . get_train_data ()
self . model . fit ( X )
def predict ( self , X , ** kwargs ):
if X . count_nonzero () == 0 :
return np . random . uniform ( size = X . shape )
distances , indices = self . model . kneighbors ( X )
distances = distances [:, 1 :]
indices = indices [:, 1 :]
distances = 1 - distances
sums = distances . sum ( axis = 1 )
distances = distances / sums [:, np . newaxis ]
def f ( dist , idx ):
A = self . dataset . get_train_data ()[ idx ]
D = sp . diags ( dist )
return D . dot ( A ). sum ( axis = 0 )
vf = np . vectorize ( f , signature = "(n),(n)->(m)" )
predictions = vf ( distances , indices )
predictions [ X . nonzero ()] = 0
return predictions您必须定义使用培训数据训练模型的合适方法,或从文件中加载先前训练的模型。 Web应用程序启动或评估过程开始时,所有模型均拟合。如果这不是训练阶段,请始终将模型从检查站加载以加快过程。出于教程的目的,省略了这一点。
您还必须定义预测方法,该方法接收到输入上用户交互的稀疏矩阵。对于每个用户(矩阵的行)和项目(矩阵的列),该方法应返回预测的分数,以指示用户将享受该项目的数量。
此外,您可以指定在推荐创建期间可以设置的一些Web应用程序参数。然后,在预测方法的**kwargs参数中可以访问该值。在示例中,我们创建了一个具有所有唯一类型的选择输入,并仅滤除那些不包含所选类型的电影。
我们应该创建的最后一个文件是一种配置,该配置允许您控制数据拆分过程,服务器设置,框架行为等。
[general]
seed =1234
[dataset]
train_split_prop =0.85
test_holdout_prop =0.2
min_user_interacts =5
min_item_interacts =0
[evaluation]
precision_recall_k =20,50
ndcg_k =100
coverage_k =20
diversity_k =20
novelty_k =20
percentage_lt_k =20
coverage_lt_k =20
[visualization]
embed_method =pymde
pymde_neighbors =15
umap_neighbors =15
umap_min_dist =0.1
tsne_perplexity =30
[server]
port =3001在训练模型之前,我们需要将数据分为火车,验证和测试集。从当前目录运行以下命令。
$ repsys dataset split
这将使85%的用户作为培训数据,其余的15%将用作验证/测试数据,每个用户的用户中有7.5%。对于验证和测试集,还将为评估目的而进行20%的交互。拆分数据集将存储在默认检查点文件夹中。
现在,我们可以进入培训过程。为此,请致电以下命令。
$ repsys model train
此命令将将每个模型的拟合方法称为true。您始终可以使用-m名称作为参数限制模型。
准备数据并训练模型时,我们可以评估模型在看不见的用户交互中的性能。运行以下命令来这样做。
$ repsys model eval
同样,您可以使用-m标志限制模型。进行评估后,结果将存储在检查点文件夹中。
在启动Web应用程序之前,最后一步是评估数据集的数据。此过程将创建培训和验证数据的用户和项目嵌入,以允许您探索潜在空间。从项目目录运行以下命令。
$ repsys dataset eval
您可以从三种类型的嵌入算法中进行选择:
--method umap (这是默认选项)。--method pymde 。--method tsne 。--method custom ,并将以下方法添加到您选择的模型类中。在这种情况下,您还必须使用-m参数指定模型的名称。 from sklearn . decomposition import NMF
def compute_embeddings ( self , X ):
nmf = NMF ( n_components = 2 )
W = nmf . fit_transform ( X )
H = nmf . components_
return W , H . T在示例中,使用负基质分解。您必须按照此顺序返回用户和项目嵌入对。同样,必须以(n_users/n_items,n_dim)形状返回矩阵。如果还原尺寸高于2,则应用TSNE方法。
最后,现在是时候启动Web应用程序来查看您的模型的评估和预览实时建议的结果了。
$ repsys server
该应用程序应在默认地址http:// localhost:3001上访问。打开链接时,您将看到主屏幕,一旦完成设置,建议就会出现。第一步是定义如何将项目的数据列映射到项目视图组件。

然后,我们需要切换到构建模式,并添加两个推荐器 - 一个没有过滤器,第二部只包含喜剧电影。

现在,我们从构建模式切换回,然后从验证集中选择用户(以前从未见过)。

最后,我们在右侧看到用户的交互历史记录以及左侧模型的建议。

要从源构建软件包,您首先需要按照此处记录的内容安装node.js和npm库。然后,您可以从根目录运行以下脚本以构建Web应用程序并在本地安装软件包。
$ ./scripts/install-locally.sh
如果您在研究工作中采用代表,请不要忘记引用相关论文:
@inproceedings{10.1145/3523227.3551469,
author = {v{S}afav{r}'{i}k, Jan and Vanv{c}ura, Vojtv{e}ch and Kord'{i}k, Pavel},
title = {RepSys: Framework for Interactive Evaluation of Recommender Systems},
year = {2022},
isbn = {9781450392785},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {https://doi.org/10.1145/3523227.3551469},
doi = {10.1145/3523227.3551469},
booktitle = {Proceedings of the 16th ACM Conference on Recommender Systems},
pages = {636–639},
numpages = {4},
keywords = {User simulation, Distribution analysis, Recommender systems},
location = {Seattle, WA, USA},
series = {RecSys '22}
}
该框架的开发是由Recombee Company赞助的。
