互联网服务个性化才是王道。无论是直播平台、内容推送、在线购物还是在线视频观看,我们所看到的内容,无疑都是被平台精心策划过的。这种策划就是通过推荐系统产生的,推荐系统可以根据我们过去的行为和偏好来预测你可能喜欢什么,系统通过对大量数据的分析来识别用户偏好,从而提供个性化的体验,让用户保持参与度。
比较常用的推荐算法例如:
- 协同过滤
- 基于内容的推荐
- 矩阵分解
- 深度学习算法
- 流行度算法
- 多臂老虎机算法
另外,在大模型发展如日中天的当下,利用大模型来增强推荐系统也是一个非常有前景的设计。可以利用大模型的语义理解、多模态特征融合、在线学习能力、特征提取等能力,构建精准的用户画像、提升内容理解与表示、实现实时推荐和在线学习,从而显著提升推荐系统的精准度和用户体验。但目前,大模型在算力资源依赖、数据隐私和模型泛化等也存在一些挑战。
在各种推荐算法当中,协同过滤算法根据用户行为和用户之间的相似性进行推荐,是一种比较常见的个性化推荐方法。
本文推荐的推荐系统是Gorse
源码地址:https://github.com/gorse-io/gorse
GitHub星:8.4K
Gorse是一个用Go语言开发的开源推荐系统。Gorse项目的目标是成为一个通用的开源推荐系统,可以快速嵌入到各种在线服务中。只要将项目(产品、内容或者服务等)、用户和交互数据导入到Gorse中,系统将自动训练模型,为每个用户生成个性化推荐。
Gorse的执行过程
如下图所示:
Gorse的架构
Gorse支持在单节点训练,在预测推荐过程采用分布式的系统。Gorse的数据存储支持MySQL、MongoDB或Postgres,中间结果缓存支持Redis、MySQL、MongoDB和Postgres。架构图如下:
Gorse架构中,集群由一个主节点、多个工作节点和服务器节点组成。主节点负责模型训练、非个性化物品推荐、配置管理和会员管理。服务器节点负责公开RESTful API和在线实时推荐。工作节点负责为每个用户提供离线建议。此外,管理员还可以通过主节点上的仪表板进行系统监控、数据导入导出、系统状态检查等操作。
Gorse的特征:
- 支持多源推荐:推荐热门、最新、基于用户、基于项目和协同过滤的项目。
- 自动匹配模型:在后台自动搜索最佳推荐模型。
- 分布式预测:在单节点训练后,支持推荐阶段的横向扩展。
- RESTful API:为数据CRUD和推荐请求公开RESTful API。
- 在线评估:从最近插入的反馈中分析在线推荐性能。
- 仪表盘:提供GUI用于数据管理、系统监控和集群状态检查。
- Docker支持:使用Docker轻松安装
Gorse的优势:
- 高可扩展和高性能:Gorse针对处理大型数据集和提供实时建议进行了优化,使其适用于流量大的应用程序。
- 灵活性:支持多种算法,并可轻松自定义以适应不同的用例,无论您是需要协同过滤、基于内容的推荐还是混合模型。
- 开源:作为一个开源项目,Gorse可以免费使用、修改和集成到您现有的系统中。它受益于社区的持续贡献和改进。
- 易于集成:Gorse提供了API和清晰的文档,无论您是构建电子商务网站、新闻门户还是流媒体服务。都可以直接集成到应用程序中。
怎么启动?
由于Gorse支持Docker,如果想尝试一下,可以直接以Docker方式启动。
docker run -p 8088:8088 zhenghaoz/gorse-in-one --playground
在浏览器中访问:http://localhost:8088
即可了解Gorse的GUI仪表盘。
如何反馈数据?
在GUI界面的“任务”页面上完成“查找项目的邻居”任务后,即可尝试将几个反馈插入到Gorse中。假设Bob是一名前端开发人员,他在GitHub中加入了几个“前端存储库”。我们把他的星星反馈插入到Gorse。
read -d '' JSON << EOF
[
{ \"FeedbackType\": \"star\", \"UserId\": \"bob\", \"ItemId\": \"vuejs:vue\", \"Timestamp\": \"2022-02-24\" },
{ \"FeedbackType\": \"star\", \"UserId\": \"bob\", \"ItemId\": \"d3:d3\", \"Timestamp\": \"2022-02-25\" },
{ \"FeedbackType\": \"star\", \"UserId\": \"bob\", \"ItemId\": \"dogfalo:materialize\", \"Timestamp\": \"2022-02-26\" },
{ \"FeedbackType\": \"star\", \"UserId\": \"bob\", \"ItemId\": \"mozilla:pdf.js\", \"Timestamp\": \"2022-02-27\" },
{ \"FeedbackType\": \"star\", \"UserId\": \"bob\", \"ItemId\": \"moment:moment\", \"Timestamp\": \"2022-02-28\" }
]
EOF
curl -X POST http://127.0.0.1:8088/api/feedback \
-H 'Content-Type: application/json' \
-d "$JSON"
获得用户推荐?
在反馈数据后,从Gorse的API我们可以发现哪些“前端相关的存储库”被推荐给Bob。
curl http://127.0.0.1:8088/api/recommend/bob?n=10