# gorse
**Repository Path**: malingzhao/gorse
## Basic Information
- **Project Name**: gorse
- **Description**: go语言推荐系统
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-05-14
- **Last Updated**: 2024-04-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
语言: [English](https://github.com/zhenghaoz/gorse) | 中文
# gorse: Go Recommender System Engine
[](https://github.com/zhenghaoz/gorse/actions?query=workflow%3Abuild)
[](https://codecov.io/gh/zhenghaoz/gorse)
[](https://goreportcard.com/report/github.com/zhenghaoz/gorse)
[](https://pkg.go.dev/github.com/zhenghaoz/gorse)
[](https://discord.com/channels/830635934210588743/)
*Gorse*是一个Go语言编写的开源推荐系统。Gorse希望成为一个具有普适性开源推荐系统,可以方便地引入到各种各样的在线服务中。 将物品、用户和它们之间的交互反馈数据导入到Gorse中,系统将自动训练模型,为每个用户实时生成推荐。项目特点如下:
- 支持多路召回(最新、热门、基于矩阵分解的协同过滤)和基于FM的个性化排序。
- 单机训练,分布式预测,能够在推荐预测阶段实现水平扩展。
- 提供RESTful接口,用于数据的增删改查和推荐结果的获取。
- 提供CLI工具,用于数据导入导出、模型调参、集群状态检查。
## 使用指南
- [手动运行Gorse](https://github.com/zhenghaoz/gorse/tree/master/cmd)
- [借助Docker Compose运行Gorse](https://github.com/zhenghaoz/gorse/tree/master/docker)
## [推荐原理](https://gorse.io/zh/docs/ch01-01-principle.html)
Gorse推荐物品的过程由**召回**和**排序**两个阶段构成。召回阶段从全体物品中寻找出一个候选物品集合用于后续排序。由于物品的数量庞大,推荐系统无法完成对全体物品进行排序的计算量,因此召回阶段主要使用一些简单的策略或者模型去搜集候选物品。目前,系统已经实现了“最近热门物品”、“最新物品”和“协同过滤”三种召回方式。排序阶段将召回物品去掉重复物品和历史物品之后进行排序,排序阶段会结合物品和用户的特征进行推荐,通过更加精准。
## [系统架构](https://gorse.io/zh/docs/ch01-02-architect.html)
Gorse是一个单机训练分布式预测的推荐系统。Gorse将数据存储在MySQL或者MongoDB中,中间数据缓存在Redis中。集群又一个主节点、多个工作节点和服务节点构成。主节点负责排序模型训练、协同过滤模型训练、非个性化物品召回、配置管理和成员管理。服务节点负责暴露系统的HTTP接口,以及负责在线实时推荐。工作节点负责为每个用户进行个性化召回——目前仅支持协同过滤召回。另外,运维人员可以通过CLI进行模型调参、数据导入导出和系统状态查看。
## 开发人员
欢迎向本项目进行贡献,包括提交BUG、建议或者代码。
## 致谢
本项目参考了以下项目的内容:
- [Guibing Guo's librec](https://github.com/guoguibing/librec)
- [Nicolas Hug's Surprise](https://github.com/NicolasHug/Surprise)
- [Golang Samples's gopher-vector](https://github.com/golang-samples/gopher-vector)