12.22 基於Flink實時計算的實時推薦系統

背景

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

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

概述

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

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


基於Flink實時計算的實時推薦系統

  • 物品:推薦和用戶過去喜歡的物品相識的物品;
  • 用戶:推薦和當前用戶興趣相近的用戶喜歡過的物品;
  • 特徵:推薦符合用戶過去喜歡的物品特徵的物品。

本文重點介紹基於特徵的推薦:基於標籤的實時推薦。

標籤是特徵的一種表現形式,標籤再弱化一些,就是類別。

說明:

基於標籤的推薦其實應用很普遍,比如豆瓣,比如淘寶,都用到了大量的標籤,這樣的推薦系統有很多優點,比如實現簡單、可解釋性好等等。 一個簡單的基於標籤的實時推薦系統大概分三部分:

  • 標籤系統
  • 數據流處理系統
  • 根據用戶標籤篩選出要推薦的內容

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


基於Flink實時計算的實時推薦系統

說明:

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

標籤系統

標籤系統就是俗稱的用戶畫像。 從屬性變化性質來分,標籤系統可分為靜態標籤和動態標籤:

  • 靜態標籤: 短時間內變化不大的標籤,比如性別、地域、職業、生活習 慣等;
  • 動態標籤: 不斷變化的行為標籤,比如關注的產品類別、產品偏好、內 容偏好等 從更新時間的頻率上來說,又可以分為短期興趣標籤和長期用戶標籤。

說明:

短期標籤的更新頻率是分鐘級或秒級。

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

數據流處理系統(實時)

主要是綠色實線部分,針對系統推薦的內容。 用戶有兩種行為,點擊或不點擊,這個事件推送到實時計算(其實是兩個流,一

個是點擊流,一個是曝光流,這兩個流根據用戶 ID、內容 ID 做 J)。

實時計算實時計算過去 N 秒(N 可以根據業務需求取值,比如 60,這就是一個 事件窗口)內每個用戶針對四種內容類別的點擊率,然後把這個點擊率作為用戶 的短期興趣標籤。

比如用戶 a:


基於Flink實時計算的實時推薦系統

內容篩選系統
內容篩選系統就是根據用戶的短期興趣標籤去篩選內容。 假設所有的內容都存

儲到某個數據庫裡,並打好了內容標籤。 比如文檔 1:


基於Flink實時計算的實時推薦系統


基於Flink實時計算的實時推薦系統

推薦流程是:用戶發起訪問⇒找到用戶短期興趣標籤⇒計算文檔與用戶標籤的相似度⇒相似度排序⇒展示內容。

總結

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

可以進一步簡化:把所有的 0-1 區間內的值替換成 0 或 1。這樣,每個用戶的興趣標籤只有是否,文章的標籤也是確定的。直接用搜索的方式就能完成內容篩選部分。比如當前用戶最近60秒的興趣標籤是汽車,那麼直接去內容庫裡搜索含 有汽車標籤的內容並推送。

也可以逐步替換各個組件,升級成一個更完備和專業的實時推薦系統。


專注於技術熱點大數據,人工智能,JAVA、Python、 C 、GO、Javascript等語言最新前言技術,及業務痛點問題分析,請關注【編程我最懂】共同交流學習。


分享到:


相關文章: