天天看點

基于實時計算(Flink)打造一個簡單的實時推薦系統

案例與解決方案彙總頁: 阿裡雲實時計算産品案例&解決方案彙總 本文為您介紹如何基于阿裡雲實時計算快速搭建實時推薦系統。

背景

對個人來說,推薦系統起着資訊過濾的作用;對Web/App來說,推薦系統起着滿足使用者個性化需求,提升使用者滿意度的作用。亞馬遜推薦産生的成交額占其GMV的30%以上;Netflix推薦系統每年幫其節省了近10億美金的業務費用。

推薦系統越來越實時化。當一個會員通路Netflix,Netflix希望能夠幫助他在幾秒鐘之内就找到他感興趣的影片,以免他去尋找别的娛樂方式。

下文為您介紹如何基于阿裡雲實時計算快速搭建一套實時推薦系統。

概述

推薦就是把使用者的興趣與物品做連結。但通常情況下,使用者和物品之前不會有直接的關系(比如使用者根本沒看過這個物品,自然也不會有浏覽、點選、收藏、喜歡等聯系),需要一些中間元素來做橋接。

根據中間元素的不同,推薦的思路大概分下面三類:

基于實時計算(Flink)打造一個簡單的實時推薦系統
  • 物品:推薦和使用者過去喜歡的物品相識的物品;
  • 使用者:推薦和目前使用者興趣相近的使用者喜歡過的物品;
  • 特征:推薦符合使用者過去喜歡的物品特征的物品。

本文重點介紹基于特征的推薦:基于标簽的實時推薦。

标簽是特征的一種表現形式,标簽再弱化一些,就是類别。

說明:
  • 基于标簽的推薦其實應用很普遍,比如豆瓣,比如淘寶,都用到了大量的标簽,這樣的推薦系統有很多優點,比如實作簡單、可解釋性好等等。
  • 以上部分描述重點參考了:《推薦系統實踐》,作者:項亮。

一個簡單的基于标簽的實時推薦系統大概分三部分:

  • 标簽系統
  • 資料流處理系統
  • 根據使用者标簽篩選出要推薦的内容

作為示例,假設業務需求描述為: 使用者最近點選了什麼樣的内容,把類似的内容推薦給他。

基于實時計算(Flink)打造一個簡單的實時推薦系統

上圖綠色實線部分是線上的實時流,藍色虛線部分是離線計算的非實時部分。

标簽系統就是俗稱的使用者畫像。 從屬性變化性質來分,标簽系統可分為靜态标簽和動态标簽:

  • 靜态标簽: 短時間内變化不大的标簽,比如性别、地域、職業、生活習慣等;
  • 動态标簽: 不斷變化的行為标簽,比如關注的産品類别、産品偏好、内容偏好等 從更新時間的頻率上來說,又可以分為短期興趣标簽和長期使用者标簽。
  • 短期标簽的更新頻率是分鐘級或秒級。

在這個簡化的推薦系統裡,我們隻考慮實時部分(綠色實線部分)是可以滿足需求的。 是以隻考慮短期興趣标簽的計算,還是出于簡化問題的考慮,我們假設現在隻有四個标簽,描述使用者對内容類别的感興趣程度:美妝、汽車、衣服、電子産品。 對一個使用者來說,可以用0-1的浮點值來描述其感興趣程度(也可以更簡化,大于某個門檻值為1,小于某個門檻值為0)。

資料流處理系統(實時)

主要是綠色實線部分,針對系統推薦的内容。

使用者有兩種行為,點選或不點選,這個事件推送到實時計算(其實是兩個流,一個是點選流,一個是曝光流,這兩個流根據使用者ID、内容ID做J)。

實時計算實時計算過去N秒(N可以根據業務需求取值,比如60,這就是一個事件視窗)内每個使用者針對四種内容類别的點選率,然後把這個點選率作為使用者的短期興趣标簽。

比如使用者a:

試用
{
美妝:0.2,
汽車:0.1,
衣服:0.02,
電子産品:0.5
}
           

内容篩選系統

内容篩選系統就是根據使用者的短期興趣标簽去篩選内容。 假設所有的内容都存儲到某個資料庫裡,并打好了内容标簽。 比如文檔1:

{
美妝:0.3,
汽車:0.5,
衣服:0.8,
電子産品:0.1
}
           

文檔2:

{
美妝:0.4,
汽車:0.2,
衣服:0.1,
電子産品:0.7
}
           

推薦流程是:使用者發起通路⇒找到使用者短期興趣标簽⇒計算文檔與使用者标簽的相似度⇒相似度排序⇒展示内容。

總結

上文描述了一個簡單的基于實時計算的實時推薦系統。

還可以進一步簡化:把所有的0-1區間内的值替換成0或1。這樣,每個使用者的興趣标簽隻有是否,文章的标簽也是确定的。直接用搜尋的方式就能完成内容篩選部分。比如目前使用者最近60秒的興趣标簽是汽車,那麼直接去内容庫裡搜尋含有汽車标簽的内容并推送。

您也可以逐漸替換各個元件,更新成一個完備和專業的實時推薦系統。

繼續閱讀