推薦一款基于 Golang 的簡單實用的推薦引擎
互聯網服務個性化才是王道。無論是直播平臺、內容推送、在線購物還是在線視頻觀看,我們所看到的內容,無疑都是被平臺精心策劃過的。這種策劃就是通過推薦系統產生的,推薦系統可以根據我們過去的行為和偏好來預測你可能喜歡什么,系統通過對大量數據的分析來識別用戶偏好,從而提供個性化的體驗,讓用戶保持參與度。
比較常用的推薦算法例如:
- 協同過濾
- 基于內容的推薦
- 矩陣分解
- 深度學習算法
- 流行度算法
- 多臂老虎機算法
另外,在大模型發展如日中天的當下,利用大模型來增強推薦系統也是一個非常有前景的設計。可以利用大模型的語義理解、多模態特征融合、在線學習能力、特征提取等能力,構建精準的用戶畫像、提升內容理解與表示、實現實時推薦和在線學習,從而顯著提升推薦系統的精準度和用戶體驗。但目前,大模型在算力資源依賴、數據隱私和模型泛化等也存在一些挑戰。
在各種推薦算法當中,協同過濾算法根據用戶行為和用戶之間的相似性進行推薦,是一種比較常見的個性化推薦方法。
本文推薦的推薦系統是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