LibRecommender: 一个多功能的端到端推荐系统库
LibRecommender 是一个易用的推荐系统库,专注于端到端的推荐流程。它包含了训练(libreco)和服务(libserving)两个模块,让用户可以快速训练和部署各种推荐模型。
主要特点
LibRecommender 具有以下主要特点:
-
实现了多种流行的推荐算法,如 FM、DIN、LightGCN 等。完整的算法列表可以在项目主页查看。
-
支持混合推荐系统,用户可以使用协同过滤或基于内容的特征。可以动态添加新特征。
-
内存占用低,自动将分类特征和多值分类特征转换为稀疏表示。
-
支持显式和隐式数据集的训练,以及对隐式数据进行负采样。
-
提供端到端的工作流,包括数据处理/预处理 -> 模型训练 -> 评估 -> 保存/加载 -> 服务。
-
支持冷启动预测和推荐。
-
支持动态特征和序列推荐。
-
为所有算法提供统一友好的 API。
-
易于使用新数据中的新用户/物品重新训练模型。
快速开始
下面通过两个示例演示了模型的训练、评估、预测、推荐和冷启动过程:
- 纯协同过滤示例,使用 LightGCN 模型
import numpy as np
import pandas as pd
from libreco.data import random_split, DatasetPure
from libreco.algorithms import LightGCN
from libreco.evaluation import evaluate
# 加载数据
data = pd.read_csv("sample_movielens_rating.dat", sep="::",
names=["user", "item", "label", "time"])
# 划分训练集、验证集和测试集
train_data, eval_data, test_data = random_split(data, multi_ratios=[0.8, 0.1, 0.1])
# 构建数据集
train_data, data_info = DatasetPure.build_trainset(train_data)
eval_data = DatasetPure.build_evalset(eval_data)
test_data = DatasetPure.build_testset(test_data)
print(data_info) # 打印数据信息
# 创建并训练模型
lightgcn = LightGCN(task="ranking", data_info=data_info, embed_size=16, n_epochs=3)
lightgcn.fit(train_data, neg_sampling=True, verbose=2, eval_data=eval_data,
metrics=["loss", "roc_auc", "precision", "recall", "ndcg"])
# 在测试集上进行最终评估
evaluate(model=lightgcn, data=test_data, neg_sampling=True,
metrics=["loss", "roc_auc", "precision", "recall", "ndcg"])
# 预测用户对物品的偏好
lightgcn.predict(user=2211, item=110)
# 为用户推荐物品
lightgcn.recommend_user(user=2211, n_rec=7)
# 冷启动预测和推荐
lightgcn.predict(user="ccc", item="not item", cold_start="average")
lightgcn.recommend_user(user="are we good?", n_rec=7, cold_start="popular")
- 使用特征的示例,使用 YouTubeRanking 模型
import numpy as np
import pandas as pd
from libreco.data import split_by_ratio_chrono, DatasetFeat
from libreco.algorithms import YouTubeRanking
# 加载数据
data = pd.read_csv("sample_movielens_merged.csv", sep=",", header=0)
# 按时间顺序划分训练集和测试集
train_data, test_data = split_by_ratio_chrono(data, test_size=0.2)
# 指定特征列
sparse_col = ["sex", "occupation", "genre1", "genre2", "genre3"]
dense_col = ["age"]
user_col = ["sex", "age", "occupation"]
item_col = ["genre1", "genre2", "genre3"]
# 构建数据集
train_data, data_info = DatasetFeat.build_trainset(
train_data, user_col, item_col, sparse_col, dense_col
)
test_data = DatasetFeat.build_testset(test_data)
print(data_info)
# 创建并训练模型
yt_ranking = YouTubeRanking(
task="ranking", data_info=data_info, embed_size=16,
n_epochs=3, lr=1e-4, batch_size=512,
use_bn=True, hidden_units=(128, 64, 32),
)
yt_ranking.fit(
train_data, neg_sampling=True, verbose=2, shuffle=True,
eval_data=test_data,
metrics=["loss", "roc_auc", "precision", "recall", "map", "ndcg"],
)
# 预测和推荐
yt_ranking.predict(user=2211, item=110)
yt_ranking.recommend_user(user=2211, n_rec=7)
# 冷启动预测和推荐
yt_ranking.predict(user="ccc", item="not item", cold_start="average")
yt_ranking.recommend_user(user="are we good?", n_rec=7, cold_start="popular")
安装
可以通过 pip 安装 LibRecommender:
pip install -U LibRecommender
或者从源代码构建:
git clone https://github.com/massquantity/LibRecommender.git
cd LibRecommender
pip install .
文档
完整的教程和 API 文档可以在 librecommender.readthedocs.io 查看。
示例脚本位于 examples/ 文件夹下。
支持
如果您有任何问题或建议,可以在 GitHub Issues 页面提出。对于使用问题,也可以在 Stack Overflow 上提问。
许可证
LibRecommender 使用 MIT 许可证。
通过 LibRecommender,您可以快速构建和部署推荐系统,享受端到端的推荐体验。无论是协同过滤还是基于特征的模型,它都能满足您的需求。开始使用 LibRecommender,让您的推荐更智能、更高效!