如何從零構建實時的個性化推薦系統?(轉)


前言

在移動互聯網迅速發展的今天,信息量爆發性增長,人們獲取信息的途徑越來越多,如何從大量的信息中獲取我們想要的內容,成為了推薦系統研究的重點。 隨着大數據產業的不斷壯大,推薦系統在企業也越來越重要,從亞馬遜的“猜您喜歡”,到阿里雙十一手機淘寶的“千人千面”,無一不彰顯着推薦系統至關重要的作用。

相比之下, 消息推送作為傳遞信息的一種重要的手段,能夠有效地提高活躍度,被各大App廠商廣泛使用,本應有很大的發展。 但是由於終端上應用越來越多,每天各大App推送的信息也越來越龐大,加上信息都是千篇一律,沒有新意, 不但不能起到響應的作用, 反而會引起用戶強烈的反感,用戶收到的推送信息,基本都會忽略, 刪除,甚至完全限制推送。

隨着推薦系統的成熟,將其應用於推送變成了可能, 通過推薦系統尋找用戶關注的焦點,精准定位用戶興趣,從而推送用戶感興趣的內容,達到提升推送的效果。

個性化推送整體架構

如何從零構建實時的個性化推薦系統?

個性化推送的核心思想,是將推薦系統與推送系統結合,用推薦系統提取用戶感興趣的內容給用戶推送,提高用戶對推送消息的點擊率,提升推送效果。

從個性化推送架構圖上可以看出,個性化推送系統,核心組件有三層:數據層、計算邏輯層和推送服務層。

  • 基礎數據層是個性化推送的基礎, 通過數據,將用戶與信息相關聯,通過特征,將用戶與用戶相區分,從而達到千人千面的效果。

  • 計算邏輯層是個性化推送的核心,通過特征匹配等相關的邏輯運算,將用戶和信息做關聯,篩選更適合的數據,計算邏輯直接影響到個性化推送的准確度。

  • 推送服務層是個性化推送與用戶交互的通道。推送服務,間接地影響到個性化推送的到達率,影響着推送的效果。

數據層

推薦系統的基本任務是聯系用戶和內容,解決信息過載的問題。 想要做到用戶和內容更大程度的匹配, 就必須去深入了解用戶和信息。 在這里,我們將數據分為三個維度, 方便對用於,信息的把握。

  • 用戶維度數據

  • 信息維度數據

  • 時間維度數據

1

用戶維度數據

用戶維度數據,是用來描述用戶的特征數據。 了解用戶,一般從用戶標簽屬性和用戶行為屬性兩個層面入手。

  • 用戶標簽屬性是用來描述用戶的靜態特征屬性,如用戶的性別,年齡,喜好,出行偏好,住址等。

  • 用戶行為數據,簡單來說就是用戶的行為日志,用戶在互聯網上的任何行為,都會產生日志, 比如用戶瀏覽了哪個網站,用戶搜索了哪個名詞,用戶點擊了哪個廣告,用戶播放了哪個視頻等等,都屬於用戶行為數據。 用戶行為常被分為兩類,顯性反饋行為和隱性反饋行為。顯性反饋行為是指用戶明確表示物品喜好的行為, 如常見的評分,點贊等。 隱性反饋行為是指那些不能明確反映用戶喜好的行為。常見的有頁面瀏覽的行為。 用戶瀏覽一個頁面,不代表用戶一定喜歡這個頁面展現的物品,很有可能只是因為這個頁面在首頁,用戶更容易點擊而已。

對收集的用戶特征做融合,根據不同的方向,對用戶特征庫做划分, 方便之后的使用。

我們整理了用戶常見的一些特征指標,如下:

如何從零構建實時的個性化推薦系統?

所屬的行業不同,所關注的用戶特征也不同,不同的行業,會對用戶在某一方面有更細致的特征描述。

從原始的用戶行為數據,用戶標簽數據,以及其它第三方的數據中,提取我們所要關注的特征值,形成特征向量,為后續信息篩選做准備。

2

信息維度數據

信息維度數據,用於描述信息的特征屬性。 不同種類的消息內容,用不同的特征指標來標識。

如何從零構建實時的個性化推薦系統?

上述的三個類似,列舉了舞蹈,視頻,音樂三個類型內容所關注的特征。 更細、更准確的特征描述,有利於我們更加准確地去匹配內容。

3

時間維度數據

時間維度數據,就是與時間相關的用戶特征和信息特征。 如用戶當前在中關村, 中關村某店未來三小時有搶購活動等。 在使用這些特征的時候,一定要注意其時效性。

計算邏輯層

我們准備好了用戶和內容之后,接下來要做的就是連接用戶和內容。 推薦系統連接用戶和內容的方式有三種:

如何從零構建實時的個性化推薦系統?

  • 用戶信息匹配:用戶喜歡某些特征的內容,如果信息里包含了這些特征,則認為該內容是用戶最有可能感興趣的內容;

  • 信息匹配:利用用戶之前喜歡的內容,尋找與這些內容相似的內容,視為用戶最有可能感興趣的內容;

  • 用戶匹配:根據用戶特征尋找相似的用戶,將相似用戶所感興趣的內容視為該用戶最有可能感興趣的內容;

用戶信息匹配,是直接通過用戶特征和信息特征做匹配,篩選出用戶感興趣的內容,這種方式計算方式簡單,直接了當,但是覆蓋面比較窄,能夠完全匹配上的內容占很少一部分,為了擴大召回, 將大部分特征相匹配的信息也篩選出來,視為用戶最感興趣的內容。 信息匹配和用戶匹配,則是典型的協同過濾,更多是計算相似度,信息匹配計算內容的相似度,用戶匹配則是計算用戶的相似度, 於是用戶和信息的連接問題轉化為了計算相似度的問題。

常用的計算相似度的算法有以下幾種:

  • 毆氏距離或者曼哈頓距離

  • 余弦相似度

  • 皮爾遜相關系數

兩個n維向量的毆氏距離計算公式如下:

兩個n維向量的曼哈頓距離計算公式如下:

兩個n維向量的余弦系數如下:

兩個n維向量的皮爾遜系數如下:

這里不再贅述各個公式的由來以及推倒,有興趣大家可以自行查找相關文章。 一般的,如果數據比較稠密,而且屬性值大小都比較重要,則采用毆氏距離或者曼哈頓距離,如果數據稀疏,考慮使用余弦距離,如數據受到分數貶值的影響(及不同的類型采用不同的評分),則使用皮爾遜相關系數。

經過特征匹配和若干輪的相似度計算后,我們拿到了一個初步的用戶信息匹配結果集, 接下來我們會對結果集做進一步的處理。

  • 過濾:主要是根據推送的歷史,將之前推送過的信息過濾掉,同時,我們會根據實際情況,將不滿足要求,或者質量比較差的信息過濾掉

  • 排名:主要是擬定推送信息的優先級, 一般按照新穎性,多樣性和用戶反饋等規則來做排序,新穎性保證了盡量給用戶推送他們不知道的,長尾的信息,多樣性保證用戶可以獲取更廣的內容,而用戶反饋則通過收集用戶真實的意願(如通過用戶對推送內容的打開,關閉操作反應用戶的喜好)實現更優的排序。

  • 信息整理:選擇最優內容,形成消息,進行推送

這只是簡單介紹了一下數據處理和匹配的邏輯,在具體的實現過程中,需要考慮特征權重的問題, 特征權重對特征匹配,結果排序等影響較大。

推送服務

推送服務,作為個性化消息的出口, 根據客戶端的種類,也被分為了Apple和Android兩大體系。 Apple系推送服務統一將推送信息送入apns,由apns負責后續推送工作。 Android則通過后台守護進程,和推送服務建立聯系后獲取推送內容。 目前行業內有很多開放的推送服務,如umeng推送,信鴿推送,個推等,基本上都是對上述功能的封裝。 一些開源推送服務,如umeng, 由於背靠阿里,和所有阿里系應用共享推送數據通道(也就是后台的守護進程), 大大提高了消息的到達率。

個性化推送,在推送的內容和時機上都是離散的,所以很難做到批量推送,這就對推送服務的設計和性能提出了比較高的要求。 我們推送服務做了如下改進:

  • 數據局部聚合:將相同消息內容的推送放在一起, 這樣就可以做局部的批量推送,增加服務吞吐

  • 數據分片:將不同消息內容的推送分割為不同的數據片, 不同的數據片可以並行推送, 提高推送效率

  • 守護線程:每台服務實例都保留一個守護線程,用於監控推送過程,確保推送有且僅有一次送達

基於用戶位置的個性化推送

在個性化推送的基礎上,借助於LBS,我們完成一個新的推送場景的嘗試,這就是基於用戶位置的實效性個性化推送推送。 當你步入中關村商圈,那里的新中關購物中心正在搞活動,其中耐克正在打折,從你的用戶特征可以看出,你是個運動達人,最近在某電商網站上瀏覽了多次運動鞋, 這個時候,我們為你推送了耐克打折的這個消息, 這就是一個典型的基於位置的個性化推送場景。

通過定位服務獲取用戶的實時位置數據,通過計算,獲取與參照物的位置關系,結合上述的個性化推送,為用戶推送該參照物范圍內用戶感興趣的內容。 一般的,通過空間索引,來提高計算地理位置關系的性能,空間索引分為兩類:

  • 網狀索引, 如geohash等

  • 樹狀索引, 如R樹,四差樹等

可以根據時間的場景來選擇不同的空間索引。

 

轉:http://www.toutiao.com/a6334780162399748354/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM