Skip to content

gorse-io/gorse

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ff83dd0 · Apr 25, 2025
Apr 23, 2025
Apr 9, 2022
Mar 28, 2025
Jan 25, 2025
Apr 19, 2025
Apr 23, 2025
Apr 4, 2025
Mar 13, 2025
Apr 25, 2025
Apr 19, 2025
Apr 22, 2025
Mar 11, 2025
Jan 25, 2025
Apr 3, 2025
Apr 10, 2025
Aug 15, 2022
Sep 5, 2022
Feb 5, 2023
Sep 15, 2021
Oct 25, 2024
Apr 9, 2022
Apr 19, 2025
Jul 14, 2021
Oct 26, 2024
Apr 19, 2025
Apr 19, 2025

Repository files navigation

Gorse Recommender System Engine

test codecov Go Report Card Discord Twitter Follow Gurubase

Gorse is an open-source recommendation system written in Go. Gorse aims to be a universal open-source recommender system that can be quickly introduced into a wide variety of online services. By importing items, users, and interaction data into Gorse, the system will automatically train models to generate recommendations for each user. Project features are as follows.

  • Multi-source: Recommend items from Popular, latest, user-based, item-based and collaborative filtering.
  • AutoML: Search the best recommendation model automatically in the background.
  • Distributed prediction: Support horizontal scaling in the recommendation stage after single node training.
  • RESTful APIs: Expose RESTful APIs for data CRUD and recommendation requests.
  • Online evaluation: Analyze online recommendation performance from recently inserted feedback.
  • Dashboard: Provide GUI for data management, system monitoring, and cluster status checking.

Quick Start

The playground mode has been prepared for beginners. Just set up a recommender system for GitHub repositories by the following commands.

  • Linux/macOS:
curl -fsSL https://gorse.io/playground | bash
  • Docker:
docker run -p 8088:8088 zhenghaoz/gorse-in-one --playground

The playground mode will download data from GitRec and import it into Gorse. The dashboard is available at http://localhost:8088.

After the "Find neighbors of items" task is completed on the "Tasks" page, try to insert several feedbacks into Gorse. Suppose Bob is a frontend developer who starred several frontend repositories in GitHub. We insert his star feedback to 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"

Then, fetch 10 recommended items from Gorse. We can find that frontend-related repositories are recommended for Bob.

curl http://127.0.0.1:8088/api/recommend/bob?n=10
Example outputs:
[
 "mbostock:d3",
 "nt1m:material-framework",
 "mdbootstrap:vue-bootstrap-with-material-design",
 "justice47:f2-vue",
 "10clouds:cyclejs-cookie",
 "academicpages:academicpages.github.io",
 "accenture:alexia",
 "addyosmani:tmi",
 "1wheel:d3-starterkit",
 "acdlite:redux-promise"
]

The exact output might be different from the example since the playground dataset changes over time.

For more information:

Architecture

Gorse is a single-node training and distributed prediction recommender system. Gorse stores data in MySQL, MongoDB, Postgres, or ClickHouse, with intermediate results cached in Redis, MySQL, MongoDB and Postgres.

  1. The cluster consists of a master node, multiple worker nodes, and server nodes.
  2. The master node is responsible for model training, non-personalized item recommendation, configuration management, and membership management.
  3. The server node is responsible for exposing the RESTful APIs and online real-time recommendations.
  4. Worker nodes are responsible for offline recommendations for each user.

In addition, the administrator can perform system monitoring, data import and export, and system status checking via the dashboard on the master node.

Contributors

Any contribution is appreciated: report a bug, give advice or create a pull request. Read CONTRIBUTING.md for more information.

Acknowledgments

gorse is inspired by the following projects: