推薦一款基于 Golang 的簡單實(shí)用的推薦引擎
互聯(lián)網(wǎng)服務(wù)個(gè)性化才是王道。無論是直播平臺(tái)、內(nèi)容推送、在線購物還是在線視頻觀看,我們所看到的內(nèi)容,無疑都是被平臺(tái)精心策劃過的。這種策劃就是通過推薦系統(tǒng)產(chǎn)生的,推薦系統(tǒng)可以根據(jù)我們過去的行為和偏好來預(yù)測(cè)你可能喜歡什么,系統(tǒng)通過對(duì)大量數(shù)據(jù)的分析來識(shí)別用戶偏好,從而提供個(gè)性化的體驗(yàn),讓用戶保持參與度。
比較常用的推薦算法例如:
- 協(xié)同過濾
- 基于內(nèi)容的推薦
- 矩陣分解
- 深度學(xué)習(xí)算法
- 流行度算法
- 多臂老虎機(jī)算法
另外,在大模型發(fā)展如日中天的當(dāng)下,利用大模型來增強(qiáng)推薦系統(tǒng)也是一個(gè)非常有前景的設(shè)計(jì)??梢岳么竽P偷恼Z義理解、多模態(tài)特征融合、在線學(xué)習(xí)能力、特征提取等能力,構(gòu)建精準(zhǔn)的用戶畫像、提升內(nèi)容理解與表示、實(shí)現(xiàn)實(shí)時(shí)推薦和在線學(xué)習(xí),從而顯著提升推薦系統(tǒng)的精準(zhǔn)度和用戶體驗(yàn)。但目前,大模型在算力資源依賴、數(shù)據(jù)隱私和模型泛化等也存在一些挑戰(zhàn)。
在各種推薦算法當(dāng)中,協(xié)同過濾算法根據(jù)用戶行為和用戶之間的相似性進(jìn)行推薦,是一種比較常見的個(gè)性化推薦方法。
本文推薦的推薦系統(tǒng)是Gorse
源碼地址:https://github.com/gorse-io/gorse
GitHub星:8.4K
Gorse是一個(gè)用Go語言開發(fā)的開源推薦系統(tǒng)。Gorse項(xiàng)目的目標(biāo)是成為一個(gè)通用的開源推薦系統(tǒng),可以快速嵌入到各種在線服務(wù)中。只要將項(xiàng)目(產(chǎn)品、內(nèi)容或者服務(wù)等)、用戶和交互數(shù)據(jù)導(dǎo)入到Gorse中,系統(tǒng)將自動(dòng)訓(xùn)練模型,為每個(gè)用戶生成個(gè)性化推薦。
Gorse的執(zhí)行過程
如下圖所示:
Gorse的架構(gòu)
Gorse支持在單節(jié)點(diǎn)訓(xùn)練,在預(yù)測(cè)推薦過程采用分布式的系統(tǒng)。Gorse的數(shù)據(jù)存儲(chǔ)支持MySQL、MongoDB或Postgres,中間結(jié)果緩存支持Redis、MySQL、MongoDB和Postgres。架構(gòu)圖如下:
Gorse架構(gòu)中,集群由一個(gè)主節(jié)點(diǎn)、多個(gè)工作節(jié)點(diǎn)和服務(wù)器節(jié)點(diǎn)組成。主節(jié)點(diǎn)負(fù)責(zé)模型訓(xùn)練、非個(gè)性化物品推薦、配置管理和會(huì)員管理。服務(wù)器節(jié)點(diǎn)負(fù)責(zé)公開RESTful API和在線實(shí)時(shí)推薦。工作節(jié)點(diǎn)負(fù)責(zé)為每個(gè)用戶提供離線建議。此外,管理員還可以通過主節(jié)點(diǎn)上的儀表板進(jìn)行系統(tǒng)監(jiān)控、數(shù)據(jù)導(dǎo)入導(dǎo)出、系統(tǒng)狀態(tài)檢查等操作。
Gorse的特征:
- 支持多源推薦:推薦熱門、最新、基于用戶、基于項(xiàng)目和協(xié)同過濾的項(xiàng)目。
- 自動(dòng)匹配模型:在后臺(tái)自動(dòng)搜索最佳推薦模型。
- 分布式預(yù)測(cè):在單節(jié)點(diǎn)訓(xùn)練后,支持推薦階段的橫向擴(kuò)展。
- RESTful API:為數(shù)據(jù)CRUD和推薦請(qǐng)求公開RESTful API。
- 在線評(píng)估:從最近插入的反饋中分析在線推薦性能。
- 儀表盤:提供GUI用于數(shù)據(jù)管理、系統(tǒng)監(jiān)控和集群狀態(tài)檢查。
- Docker支持:使用Docker輕松安裝
Gorse的優(yōu)勢(shì):
- 高可擴(kuò)展和高性能:Gorse針對(duì)處理大型數(shù)據(jù)集和提供實(shí)時(shí)建議進(jìn)行了優(yōu)化,使其適用于流量大的應(yīng)用程序。
- 靈活性:支持多種算法,并可輕松自定義以適應(yīng)不同的用例,無論您是需要協(xié)同過濾、基于內(nèi)容的推薦還是混合模型。
- 開源:作為一個(gè)開源項(xiàng)目,Gorse可以免費(fèi)使用、修改和集成到您現(xiàn)有的系統(tǒng)中。它受益于社區(qū)的持續(xù)貢獻(xiàn)和改進(jìn)。
- 易于集成:Gorse提供了API和清晰的文檔,無論您是構(gòu)建電子商務(wù)網(wǎng)站、新聞門戶還是流媒體服務(wù)。都可以直接集成到應(yīng)用程序中。
怎么啟動(dòng)?
由于Gorse支持Docker,如果想嘗試一下,可以直接以Docker方式啟動(dòng)。
docker run -p 8088:8088 zhenghaoz/gorse-in-one --playground
在瀏覽器中訪問:http://localhost:8088
即可了解Gorse的GUI儀表盤。
如何反饋數(shù)據(jù)?
在GUI界面的“任務(wù)”頁面上完成“查找項(xiàng)目的鄰居”任務(wù)后,即可嘗試將幾個(gè)反饋插入到Gorse中。假設(shè)Bob是一名前端開發(fā)人員,他在GitHub中加入了幾個(gè)“前端存儲(chǔ)庫”。我們把他的星星反饋插入到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"
獲得用戶推薦?
在反饋數(shù)據(jù)后,從Gorse的API我們可以發(fā)現(xiàn)哪些“前端相關(guān)的存儲(chǔ)庫”被推薦給Bob。
curl http://127.0.0.1:8088/api/recommend/bob?n=10