久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

打造工業(yè)級(jí)推薦系統(tǒng)(三):推薦系統(tǒng)的工程實(shí)現(xiàn)與架構(gòu)優(yōu)化

 麓山館藏 2019-07-20

導(dǎo)讀:個(gè)性化推薦系統(tǒng),,簡(jiǎn)單來(lái)說(shuō)就是根據(jù)每個(gè)人的偏好推薦他喜歡的物品,。互聯(lián)網(wǎng)發(fā)展到現(xiàn)在,,推薦系統(tǒng)已經(jīng)無(wú)處不在,,在各行各業(yè)都得到普遍都應(yīng)用。亞馬遜號(hào)稱(chēng) 40% 的收入是來(lái)自個(gè)性化推薦系統(tǒng)的,,淘寶的個(gè)性化推薦系統(tǒng)也帶來(lái)非常大的收益,,新聞媒體的個(gè)性化推薦系統(tǒng)典型的是今日頭條,直播平臺(tái)給用戶推薦喜歡的主播,,金融網(wǎng)站給用戶推薦需要的理財(cái)產(chǎn)品,,社交網(wǎng)絡(luò)給用戶推薦大 V 或者其他朋友……越來(lái)越多的公司將推薦系統(tǒng)作為產(chǎn)品的標(biāo)配。

大家接觸推薦系統(tǒng)的概率會(huì)越來(lái)越大,。作為程序員,,了解推薦系統(tǒng)也越來(lái)越必要,甚至可以主動(dòng)選擇“推薦系統(tǒng)算法工程師”的相關(guān)職位,。那大家一定會(huì)關(guān)心推薦算法工程師需要哪些知識(shí)儲(chǔ)備,,以及作為一個(gè)推薦算法工程師,,未來(lái)的發(fā)展道路怎樣?

本文是作者計(jì)劃的一系列文章中的一篇,。作者在上篇文章《推薦系統(tǒng)介紹》中簡(jiǎn)單對(duì)推薦系統(tǒng)做了一個(gè)較全面的介紹,,相信大家對(duì)推薦系統(tǒng)有了初步的了解。本篇文章作者會(huì)結(jié)合多年推薦系統(tǒng)開(kāi)發(fā)的實(shí)踐經(jīng)驗(yàn)粗略介紹推薦系統(tǒng)的工程實(shí)現(xiàn),,簡(jiǎn)要說(shuō)明要將推薦系統(tǒng)很好地落地到產(chǎn)品中需要考慮哪些問(wèn)題及相應(yīng)的思路,、策略和建議,其中有大量關(guān)于設(shè)計(jì)哲學(xué)的思考,,希望對(duì)從事推薦算法工作或準(zhǔn)備入行推薦系統(tǒng)的讀者有所幫助,。為了描述方便,本文主要基于視頻推薦來(lái)講解,,作者這幾年也一直在從事視頻推薦系統(tǒng)開(kāi)發(fā)的工作,,其他行業(yè)的推薦系統(tǒng)工程實(shí)現(xiàn)思路類(lèi)似。本篇文章主要從整體上來(lái)介紹推薦系統(tǒng)工程實(shí)現(xiàn),,以后發(fā)布的系列文章會(huì)逐步介紹工程實(shí)現(xiàn)的各個(gè)細(xì)節(jié)實(shí)現(xiàn)原理與策略,。    

推薦系統(tǒng)與大數(shù)據(jù)

推薦系統(tǒng)是幫助人們解決信息獲取問(wèn)題的有效工具,對(duì)互聯(lián)網(wǎng)產(chǎn)品而也用戶數(shù)和信息總量通常都是巨大的,,每天收集到的用戶在產(chǎn)品上的交互行為也是海量的,,這些大量的數(shù)據(jù)收集處理就涉及到大數(shù)據(jù)相關(guān)技術(shù),所以推薦系統(tǒng)與大數(shù)據(jù)有天然的聯(lián)系,,要落地推薦系統(tǒng)往往需要企業(yè)具備一套完善的大數(shù)據(jù)分析平臺(tái),。

推薦系統(tǒng)與大數(shù)據(jù)平臺(tái)的依賴(lài)關(guān)系如下圖。大數(shù)據(jù)平臺(tái)包含數(shù)據(jù)中心和計(jì)算中心兩大抽象,,數(shù)據(jù)中心為推薦系統(tǒng)提供數(shù)據(jù)存儲(chǔ),,包括訓(xùn)練推薦模型需要的數(shù)據(jù),依賴(lài)的其他數(shù)據(jù),,以及推薦結(jié)果,,而計(jì)算中心提供算力支持,支撐數(shù)據(jù)預(yù)處理,、模型訓(xùn)練,、模型推斷 (即基于學(xué)習(xí)到的模型,為每個(gè)用戶推薦) 等,。

打造工業(yè)級(jí)推薦系統(tǒng)(三):推薦系統(tǒng)的工程實(shí)現(xiàn)與架構(gòu)優(yōu)化

推薦系統(tǒng)在整個(gè)大數(shù)據(jù)平臺(tái)的定位

大數(shù)據(jù)與人工智能具有千絲萬(wàn)縷的關(guān)系,,互聯(lián)網(wǎng)公司一般會(huì)構(gòu)建自己的大數(shù)據(jù)與人工智能團(tuán)隊(duì),構(gòu)建大數(shù)據(jù)基礎(chǔ)平臺(tái),,基于大數(shù)據(jù)平臺(tái)構(gòu)建上層業(yè)務(wù),,包括商業(yè)智能 (BI), 推薦系統(tǒng)及其他人工智能業(yè)務(wù),下圖是典型的基于開(kāi)源技術(shù)的視頻互聯(lián)網(wǎng)公司大數(shù)據(jù)與人工智能業(yè)務(wù)及相關(guān)的底層大數(shù)據(jù)支撐技術(shù)。

打造工業(yè)級(jí)推薦系統(tǒng)(三):推薦系統(tǒng)的工程實(shí)現(xiàn)與架構(gòu)優(yōu)化

大數(shù)據(jù)支撐下的人工智能技術(shù)體系 (DS: 數(shù)據(jù)源,,DC: 大數(shù)據(jù)中心,,BIZ: 上層業(yè)務(wù))

在產(chǎn)品中整合推薦系統(tǒng)是一個(gè)系統(tǒng)工程,怎么讓推薦系統(tǒng)在產(chǎn)品中產(chǎn)生價(jià)值,,真正幫助到用戶,,提升用戶體驗(yàn)的同時(shí)為平臺(tái)方提供更大的收益是一件有挑戰(zhàn)的事情,整個(gè)推薦系統(tǒng)的業(yè)務(wù)流可以用下圖來(lái)說(shuō)明,,它是一個(gè)不斷迭代優(yōu)化的過(guò)程,,是一個(gè)閉環(huán)系統(tǒng)。

打造工業(yè)級(jí)推薦系統(tǒng)(三):推薦系統(tǒng)的工程實(shí)現(xiàn)與架構(gòu)優(yōu)化

有了上面這些介紹,,相信讀者對(duì)大數(shù)據(jù)與推薦系統(tǒng)的關(guān)系有了一個(gè)比較清楚的了解,,下面會(huì)著重講解推薦系統(tǒng)工程實(shí)現(xiàn)相關(guān)的知識(shí)。

推薦系統(tǒng)業(yè)務(wù)流及核心模塊

先介紹一下構(gòu)建一套完善的推薦系統(tǒng)涉及到的主要業(yè)務(wù)流程及核心模塊,,具體流程如下圖,,下面分別介紹各個(gè)模塊:

打造工業(yè)級(jí)推薦系統(tǒng)(三):推薦系統(tǒng)的工程實(shí)現(xiàn)與架構(gòu)優(yōu)化

  1. 數(shù)據(jù)收集模塊

構(gòu)建推薦模型需要收集很多數(shù)據(jù),包括用戶行為數(shù)據(jù),,用戶相關(guān)數(shù)據(jù)及推薦“標(biāo)的物”相關(guān)數(shù)據(jù),。如果將推薦系統(tǒng)比喻為廚師做菜,那么這些數(shù)據(jù)是構(gòu)建推薦算法模型的原材料,。巧婦難為無(wú)米之炊, 要構(gòu)建好的推薦算法收集到足夠多的有價(jià)值的數(shù)據(jù)是非常關(guān)鍵和重要的,。

  1. ETL 模塊

收集到的原始數(shù)據(jù)一般是非結(jié)構(gòu)化的,ETL 模塊的主要目的是從收集到的原始數(shù)據(jù)中提取關(guān)鍵字段 (拿視頻行業(yè)來(lái)說(shuō),,用戶 id,時(shí)間,,播放的節(jié)目,,播放時(shí)長(zhǎng),播放路徑等都是關(guān)鍵字段),,將數(shù)據(jù)轉(zhuǎn)化為結(jié)構(gòu)化的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)倉(cāng)庫(kù)中,。同時(shí)根據(jù)一定的規(guī)則或策略過(guò)濾掉臟數(shù)據(jù),保證數(shù)據(jù)質(zhì)量的高標(biāo)準(zhǔn),。在互聯(lián)網(wǎng)公司中,,用戶行為數(shù)據(jù)跟用戶規(guī)模呈正比,所以當(dāng)用戶規(guī)模很大時(shí)數(shù)據(jù)量非常大,,一般采用 HDFS,、Hive、HBase 等大數(shù)據(jù)分布式存儲(chǔ)系統(tǒng)來(lái)存儲(chǔ)數(shù)據(jù),。

用戶相關(guān)數(shù)據(jù)及推薦“標(biāo)的物”相關(guān)數(shù)據(jù)一般是結(jié)構(gòu)化的數(shù)據(jù),,一般是通過(guò)后臺(tái)管理模塊將數(shù)據(jù)存儲(chǔ)到 MySQL、ProgreSQL 等關(guān)系型數(shù)據(jù)庫(kù)中。

  1. 特征工程模塊

推薦系統(tǒng)采用各種機(jī)器學(xué)習(xí)算法來(lái)學(xué)習(xí)用戶偏好,,并基于用戶偏好來(lái)為用戶推薦“標(biāo)的物”, 而這些推薦算法用于訓(xùn)練的數(shù)據(jù)是可以“被數(shù)學(xué)所描述”的,,一般是向量的形式,其中向量的每一個(gè)分量 / 維度就是一個(gè)特征,,所以特征工程的目的就是將推薦算法需要的,,以及上述 ETL 后的數(shù)據(jù)轉(zhuǎn)換為推薦算法可以學(xué)習(xí)的特征。

當(dāng)然,,不是所有推薦算法都需要特征工程,,比如,如果要做排行榜相關(guān)的熱門(mén)推薦,,只需要對(duì)數(shù)據(jù)做統(tǒng)計(jì)排序處理就可以了,。最常用的基于物品的推薦和基于用戶的推薦也只用到用戶 id,標(biāo)的物 id,,用戶對(duì)標(biāo)的物的評(píng)分三個(gè)維度,,也談不上特征工程。像 logistic 回歸等復(fù)雜一些的機(jī)器學(xué)習(xí)算法需要做特征工程,,一般基于模型的推薦算法都需要特征工程,。

特征工程是一個(gè)比較復(fù)雜的過(guò)程,要做好需要很多技巧,、智慧,、行業(yè)知識(shí)、經(jīng)驗(yàn)等,,在這篇文章中作者不作詳細(xì)介紹,。

  1. 推薦算法模塊

推薦算法模塊是整個(gè)推薦系統(tǒng)的核心之一,該模塊的核心是根據(jù)具體業(yè)務(wù)及可利用的所有數(shù)據(jù)設(shè)計(jì)一套精準(zhǔn),、易于工程實(shí)現(xiàn),、可以處理大規(guī)模數(shù)據(jù)的 (分布式) 機(jī)器學(xué)習(xí)算法,進(jìn)而可以預(yù)測(cè)用戶的興趣偏好,。這里一般涉及到模型訓(xùn)練,、預(yù)測(cè)兩個(gè)核心操作。下面用一個(gè)圖簡(jiǎn)單描述這兩個(gè)過(guò)程,,這也是機(jī)器學(xué)習(xí)的通用流程,。

打造工業(yè)級(jí)推薦系統(tǒng)(三):推薦系統(tǒng)的工程實(shí)現(xiàn)與架構(gòu)優(yōu)化

好的推薦工程實(shí)現(xiàn),希望盡量將這兩個(gè)過(guò)程解耦合,,做到通用,,方便用到各種推薦業(yè)務(wù)中,后面在推薦系統(tǒng)架構(gòu)設(shè)計(jì)一節(jié)中會(huì)詳細(xì)講解具體的設(shè)計(jì)思路和哲學(xué),。

  1. 推薦結(jié)果存儲(chǔ)模塊

作者在最開(kāi)始做推薦系統(tǒng)時(shí)由于沒(méi)有經(jīng)驗(yàn),,開(kāi)始將推薦結(jié)果存儲(chǔ)在 Mysql 中,,當(dāng)時(shí)遇到最大的問(wèn)題是每天更新用戶的推薦時(shí),需要先找到用戶存儲(chǔ)的位置,,再做替換,,操作復(fù)雜,并且當(dāng)用戶規(guī)模大時(shí),,高并發(fā)讀寫(xiě),,大數(shù)據(jù)量存儲(chǔ),Mysql 也扛不住,,現(xiàn)在最好的方式是采用 CouchBase,,Redis 等可以橫向擴(kuò)容的數(shù)據(jù)庫(kù),可以完全避開(kāi) MySQL 的缺點(diǎn),。

在計(jì)算機(jī)工程中有“空間換時(shí)間”的說(shuō)法,,對(duì)于推薦系統(tǒng)來(lái)說(shuō),就是先計(jì)算好每個(gè)用戶的推薦,,將推薦結(jié)果存儲(chǔ)下來(lái),,通過(guò)預(yù)先將推薦結(jié)果存下來(lái),可以更快的為用戶提供推薦服務(wù), 提升用戶體驗(yàn),。由于推薦系統(tǒng)會(huì)為每個(gè)用戶生成推薦結(jié)果, 并且每天都會(huì) (基本全量) 更新用戶的推薦結(jié)果,,一般采用 NoSql 數(shù)據(jù)庫(kù)來(lái)存儲(chǔ),并且要求數(shù)據(jù)庫(kù)可拓展,,高可用,,支持大規(guī)模并發(fā)讀寫(xiě)。

推薦結(jié)果一般不是直接在模型推斷階段直接寫(xiě)入推薦存儲(chǔ)數(shù)據(jù)庫(kù),,較好的方式是通過(guò)一個(gè)數(shù)據(jù)管道 (如 kafka) 來(lái)解耦,,讓整個(gè)系統(tǒng)更加模塊化,易于維護(hù)拓展,。

  1. Web 服務(wù)模塊

該模塊是推薦系統(tǒng)直接服務(wù)用戶的模塊,,該模塊的主要作用是當(dāng)用戶在 UI 上觸達(dá)推薦系統(tǒng)時(shí),觸發(fā)推薦接口,,為用戶提供個(gè)性化推薦,該模塊的穩(wěn)定性,、響應(yīng)時(shí)長(zhǎng)直接影響到用戶體驗(yàn),。跟上面的推薦存儲(chǔ)模塊類(lèi)似,Web 服務(wù)模塊也需要支持高并發(fā)訪問(wèn),、水平可拓展,、亞秒級(jí) (一般 200ms 之內(nèi)) 響應(yīng)延遲。

下圖是作者公司相似影片推薦算法的一個(gè)簡(jiǎn)化版業(yè)務(wù)流向圖,,供大家與上面的模塊對(duì)照參考:

打造工業(yè)級(jí)推薦系統(tǒng)(三):推薦系統(tǒng)的工程實(shí)現(xiàn)與架構(gòu)優(yōu)化

相似影片業(yè)務(wù)流

推薦系統(tǒng)支撐模塊

推薦系統(tǒng)想要很好的穩(wěn)定的發(fā)揮價(jià)值,,需要一些支撐業(yè)務(wù)來(lái)輔助,這些支撐業(yè)務(wù)雖然不是推薦系統(tǒng)的核心模塊,但卻是推薦業(yè)務(wù)穩(wěn)定運(yùn)行必不可少的部分,,主要包括如下 4 大支撐模塊,,下面分別簡(jiǎn)述各個(gè)模塊的作用和價(jià)值。

打造工業(yè)級(jí)推薦系統(tǒng)(三):推薦系統(tǒng)的工程實(shí)現(xiàn)與架構(gòu)優(yōu)化

推薦系統(tǒng)核心支撐模塊

  1. 評(píng)估模塊

推薦評(píng)估模塊的主要作用是評(píng)估整個(gè)推薦系統(tǒng)的質(zhì)量及價(jià)值產(chǎn)出,。一般來(lái)說(shuō)可以從兩個(gè)維度來(lái)評(píng)估,。

  • 離線評(píng)估:主要是評(píng)估訓(xùn)練好的推薦模型的“質(zhì)量”,模型在上線服務(wù)之前需要評(píng)估該模型的準(zhǔn)確度,,一般是將訓(xùn)練數(shù)據(jù)分為訓(xùn)練集和測(cè)試集,,訓(xùn)練集用于訓(xùn)練模型,而測(cè)試集用來(lái)評(píng)估模型的預(yù)測(cè)誤差,。

  • 在線評(píng)估:模型上線提供推薦服務(wù)過(guò)程中來(lái)評(píng)估一些真實(shí)的轉(zhuǎn)化指標(biāo),,比如轉(zhuǎn)化率、購(gòu)買(mǎi)率,、點(diǎn)擊率,、播放時(shí)長(zhǎng)等。線上評(píng)估一般會(huì)結(jié)合 AB 測(cè)試,,先放一部分量,,如果效果達(dá)到期望再逐步拓展到所有用戶,避免模型線上效果不好嚴(yán)重影響用戶體驗(yàn)和收益指標(biāo)等,。

  1. 調(diào)度模塊

一個(gè)推薦業(yè)務(wù)要產(chǎn)生價(jià)值,,所有依賴(lài)的任務(wù)都要正常運(yùn)行。推薦業(yè)務(wù)可以抽象為有向無(wú)環(huán)圖 (第六節(jié)推薦系統(tǒng)架構(gòu)設(shè)計(jì)會(huì)講到將推薦業(yè)務(wù)抽象為有向無(wú)環(huán)圖),,因此需要按照該有向圖的依賴(lài)關(guān)系依次執(zhí)行每個(gè)任務(wù),,這些任務(wù)的依賴(lài)關(guān)系就需要借助合適的調(diào)度系統(tǒng) (比如 Azkaban) 來(lái)實(shí)現(xiàn),早期我們采用 Crontab 來(lái)調(diào)度,,當(dāng)任務(wù)量多的時(shí)候就不那么方便了,,Crontab 也無(wú)法很好解決任務(wù)依賴(lài)關(guān)系。

  1. 監(jiān)控模塊

監(jiān)控模塊解決的是當(dāng)推薦業(yè)務(wù) (依賴(lài)的) 任務(wù)由于各種原因調(diào)度失敗時(shí)可以及時(shí)告警,,通過(guò)郵件或者短信通知運(yùn)維或者業(yè)務(wù)的維護(hù)者,,及時(shí)發(fā)現(xiàn)問(wèn)題,或者可以在后臺(tái)自動(dòng)拉起服務(wù),。同時(shí)可以對(duì)服務(wù)的各種其他狀態(tài)做監(jiān)控,,比如文件大小、狀態(tài)變量的值,、日期時(shí)間等與業(yè)務(wù)正常執(zhí)行相關(guān)的狀態(tài)變量,,不正常時(shí)及時(shí)發(fā)現(xiàn)問(wèn)題。

  1. 審查模塊

審查模塊是對(duì)推薦系統(tǒng)結(jié)果數(shù)據(jù)格式的正確性,、有效性進(jìn)行檢查,,避免錯(cuò)誤產(chǎn)生,,一般的處理策略是根據(jù)業(yè)務(wù)定義一些審查用例 (類(lèi)似測(cè)試用例),在推薦任務(wù)執(zhí)行前或者執(zhí)行階段對(duì)運(yùn)算過(guò)程做 check,,發(fā)現(xiàn)問(wèn)題及時(shí)告警,。舉兩個(gè)例子,如果你的 DAU 是 100w,,每天大約要為這么多用戶生成個(gè)性化推薦結(jié)果,,但是由于一些開(kāi)發(fā)錯(cuò)誤,只計(jì)算了 20w 用戶的個(gè)性化推薦,,從監(jiān)控是無(wú)法發(fā)現(xiàn)問(wèn)題的,,如果增加推薦的用戶數(shù)量跟 DAU 的比例控制在 1 附近這個(gè)審查項(xiàng),就可以避免出現(xiàn)問(wèn)題,;在推薦結(jié)果插入數(shù)據(jù)庫(kù)過(guò)程中,,開(kāi)發(fā)人員升級(jí)了新的算法,不小心將數(shù)據(jù)格式寫(xiě)錯(cuò) (如 Json 格式不合法),,如果不加審查,,會(huì)導(dǎo)致最終插入的數(shù)據(jù)格式錯(cuò)誤,導(dǎo)致接口返回錯(cuò)誤或者掛掉,,對(duì)用戶體驗(yàn)有極大負(fù)面影響,。

推薦系統(tǒng)范式

推薦系統(tǒng)的目的是為用戶推薦可能喜歡的標(biāo)的物, 這個(gè)過(guò)程涉及到用戶、標(biāo)的物兩個(gè)重要要素,,我們可以根據(jù)這兩個(gè)要素的不同組合產(chǎn)生不同的推薦形態(tài),,即所謂的不同“范式 (paradigm)”(數(shù)學(xué)專(zhuān)業(yè)的同學(xué)不難理解范式,如果不好理解可以將范式看成具備某種相似性質(zhì)的對(duì)象的集合),,根據(jù)我自己構(gòu)建推薦系統(tǒng)的經(jīng)驗(yàn)可以將推薦系統(tǒng)總結(jié)為如下 5 種范式,,這 5 中范式可以應(yīng)用到產(chǎn)品的各種推薦場(chǎng)景中,后面會(huì)拿視頻 APP 舉例說(shuō)明具體的應(yīng)用場(chǎng)景,。

  • 范式 1:完全個(gè)性化范式:為每個(gè)用戶提供個(gè)性化的內(nèi)容,,每個(gè)用戶推薦結(jié)果都不同;

打造工業(yè)級(jí)推薦系統(tǒng)(三):推薦系統(tǒng)的工程實(shí)現(xiàn)與架構(gòu)優(yōu)化

常見(jiàn)的猜你喜歡就是這類(lèi)推薦,,可以用于進(jìn)入首頁(yè)的綜合類(lèi)猜你喜歡推薦,,進(jìn)入各個(gè)頻道 (如電影) 頁(yè)的猜你喜歡推薦。下圖是電視貓首頁(yè)興趣推薦,,就是為每個(gè)用戶提供不一樣的個(gè)性化推薦,;

  • 范式 2:群組個(gè)性化范式:首先將用戶分組 (根據(jù)用戶的興趣,將興趣相似的歸為一組),,每組用戶提供一個(gè)個(gè)性化的推薦列表,同一組的用戶推薦列表一樣,,不同組的用戶推薦列表不一樣,;

打造工業(yè)級(jí)推薦系統(tǒng)(三):推薦系統(tǒng)的工程實(shí)現(xiàn)與架構(gòu)優(yōu)化

這里舉一個(gè)在作者公司利用范式 2 做推薦的例子,,我們?cè)陬l道頁(yè)三級(jí)列表中,會(huì)根據(jù)用戶的興趣對(duì)列表做個(gè)性化重排序,,讓與用戶更匹配的節(jié)目放到前面,,提升節(jié)目轉(zhuǎn)化,但是在實(shí)現(xiàn)時(shí),,為了節(jié)省存儲(chǔ)空間,,先對(duì)用戶聚類(lèi),同一類(lèi)用戶興趣相似,,對(duì)這一類(lèi)用戶,,列表的排序是一樣的,但是不同類(lèi)的用戶的列表是完全不一樣的,。見(jiàn)下圖的戰(zhàn)爭(zhēng)風(fēng)云 tab,,右邊展示的節(jié)目集合總量不變,只是在不同組的用戶看到的排序不一樣,,排序是根據(jù)與用戶的興趣匹配度高低來(lái)降序排列的,。

  • 范式 3:非個(gè)性化范式:為所有用戶提供完全一樣的推薦;

比如各類(lèi)排行榜業(yè)務(wù),,既可以作為首頁(yè)上的一個(gè)獨(dú)立的推薦模塊,,方便用戶發(fā)現(xiàn)新熱內(nèi)容,也可以作為猜你喜歡推薦新用戶冷啟動(dòng)的默認(rèn)推薦,,下圖是搜索模塊當(dāng)用戶未輸入搜索關(guān)鍵詞時(shí)給出的熱門(mén)內(nèi)容,,也是采用該范式的例子;

打造工業(yè)級(jí)推薦系統(tǒng)(三):推薦系統(tǒng)的工程實(shí)現(xiàn)與架構(gòu)優(yōu)化

  • 范式 4:標(biāo)的物關(guān)聯(lián)標(biāo)的物范式:為每個(gè)標(biāo)的物關(guān)聯(lián)一組標(biāo)的物,,作為用戶在訪問(wèn)標(biāo)的物詳情頁(yè)時(shí)的推薦,,每個(gè)用戶都是相同的標(biāo)的物;

打造工業(yè)級(jí)推薦系統(tǒng)(三):推薦系統(tǒng)的工程實(shí)現(xiàn)與架構(gòu)優(yōu)化

當(dāng)用戶瀏覽一個(gè)電影時(shí),,可以通過(guò)關(guān)聯(lián)相似的電影, 為用戶提供更多的選擇空間 (下圖就是電視貓電影詳情頁(yè)關(guān)聯(lián)的相似影片),;還可以當(dāng)用戶播放一個(gè)節(jié)目退出時(shí),推薦用戶可能還喜歡的其他節(jié)目,;針對(duì)短視頻,,可以將相似節(jié)目做成連播推薦列表,用戶播放當(dāng)前節(jié)目直接連播相似節(jié)目,,提升節(jié)目分發(fā)和用戶體驗(yàn),;

  • 范式 5:笛卡爾積范式:每個(gè)用戶跟每個(gè)標(biāo)的物的組合產(chǎn)生的推薦都不相同,不同用戶在同一個(gè)視頻的詳情頁(yè)看到的推薦結(jié)果都不一樣,;

該范式跟 4 類(lèi)似,,只不過(guò)不同用戶在同一個(gè)節(jié)目得到的關(guān)聯(lián)節(jié)目不一樣,會(huì)結(jié)合用戶的興趣,,給出更匹配用戶興趣的關(guān)聯(lián)節(jié)目,;

由于每個(gè)用戶跟每個(gè)標(biāo)的物的組合推薦結(jié)果都不一樣, 往往用戶數(shù)和標(biāo)的物的數(shù)量都是巨大的, 沒(méi)有足夠的資源事先將所有的組合的推薦結(jié)果先計(jì)算存儲(chǔ)下來(lái),,一般是在用戶觸發(fā)推薦時(shí)實(shí)時(shí)計(jì)算推薦結(jié)果呈現(xiàn)給用戶,計(jì)算過(guò)程也要盡量簡(jiǎn)單,,在亞秒級(jí)就可以算完,,比如利用用戶的播放歷史,過(guò)濾掉用戶已經(jīng)看過(guò)的關(guān)聯(lián)節(jié)目,;

下面給一個(gè)簡(jiǎn)單的圖示來(lái)說(shuō)明這 5 種范式,,讓讀者有一個(gè)直觀形象的理解。

打造工業(yè)級(jí)推薦系統(tǒng)(三):推薦系統(tǒng)的工程實(shí)現(xiàn)與架構(gòu)優(yōu)化

推薦算法的 5 種范式

總之,,推薦系統(tǒng)不是孤立存在的對(duì)象,,它一定是要整合到具體的業(yè)務(wù)中,在合適的產(chǎn)品交互流程中觸達(dá)用戶,,通過(guò)用戶觸發(fā)推薦行為,。所以,推薦系統(tǒng)要應(yīng)用到產(chǎn)品中需要嵌入到用戶使用產(chǎn)品的各個(gè)流程 (頁(yè)面) 中,。當(dāng)用戶訪問(wèn)首頁(yè)時(shí),,可以通過(guò)綜合推薦(范式 1)來(lái)給用戶提供個(gè)性化推薦內(nèi)容,當(dāng)用戶訪問(wèn)詳情頁(yè),,可以通過(guò)相似影片(范式 4)提供相似標(biāo)的物推薦,,當(dāng)用戶進(jìn)入搜索頁(yè)尚未輸入搜索內(nèi)容時(shí),可以通過(guò)熱門(mén)推薦給用戶推送新熱節(jié)目 (范式 3),。這樣處處都有推薦,,才會(huì)使產(chǎn)品顯得更加智能。所有這些產(chǎn)品形態(tài)基本都可以用上面介紹的 5 種范式來(lái)概括,。

推薦系統(tǒng)架構(gòu)設(shè)計(jì)

作者在早期構(gòu)建推薦系統(tǒng)時(shí)由于經(jīng)驗(yàn)不足,,而業(yè)務(wù)又比較多,當(dāng)時(shí)的策略是每個(gè)算法工程師負(fù)責(zé)幾個(gè)推薦業(yè)務(wù) (一個(gè)推薦業(yè)務(wù)對(duì)應(yīng)一個(gè)推薦產(chǎn)品形態(tài)),,由于每個(gè)人只對(duì)自己的業(yè)務(wù)負(fù)責(zé),,所以開(kāi)發(fā)基本是獨(dú)立的,每個(gè)人只關(guān)注自己的算法實(shí)現(xiàn),,雖然用到的算法是一樣的,,但前期在開(kāi)發(fā)過(guò)程中沒(méi)有將通用的模塊抽象出來(lái),每個(gè)開(kāi)發(fā)人員從 ETL,、算法訓(xùn)練,、預(yù)測(cè)到插入數(shù)據(jù)庫(kù)都是獨(dú)立的,并且每個(gè)人在實(shí)現(xiàn)過(guò)程中整合了自己的一些優(yōu)化邏輯,,一竿子插到底,,導(dǎo)致資源 (計(jì)算資源,存儲(chǔ)資源,人力資源) 利用率不高,,開(kāi)發(fā)效率低下,。經(jīng)過(guò)幾年的摸索,作者在團(tuán)隊(duì)內(nèi)部構(gòu)建了一套通用的算法組件 Doraemon 框架 (就像機(jī)器貓的小口袋,,有很多工具供大家方便構(gòu)建推薦業(yè)務(wù)),盡量做到資源的節(jié)省,,大大提升了開(kāi)發(fā)效率,。開(kāi)發(fā)過(guò)程的蛻變,可以用下面的圖示簡(jiǎn)單說(shuō)明,,從中讀者也可以對(duì) Doraemon 架構(gòu)落地前后的推薦業(yè)務(wù)開(kāi)發(fā)變化有個(gè)大致的了解,。

打造工業(yè)級(jí)推薦系統(tǒng)(三):推薦系統(tǒng)的工程實(shí)現(xiàn)與架構(gòu)優(yōu)化

Doraemon 框架前后開(kāi)發(fā)方式對(duì)比

作者構(gòu)建 Doraemon 框架的初衷是希望構(gòu)建推薦業(yè)務(wù)就像搭積木一樣 (見(jiàn)下圖),可以快速構(gòu)建一套算法體系,,快速上線業(yè)務(wù),。算法或者處理邏輯就像一塊一塊的積木,而算法依賴(lài)的數(shù)據(jù) (及數(shù)據(jù)結(jié)構(gòu)) 就是不同積木之間是否可以銜接的“接口”,。

本著上面樸素的思想,,下面作者詳細(xì)說(shuō)說(shuō)構(gòu)建這套體系的思路和策略。

為了支撐更多類(lèi)型的推薦業(yè)務(wù),,減少系統(tǒng)的耦合,,便于發(fā)現(xiàn)和追蹤問(wèn)題,節(jié)省人力成本,,方便算法快速上線和迭代,,需要設(shè)計(jì)比較好的推薦系統(tǒng)架構(gòu),而好的推薦系統(tǒng)架構(gòu)應(yīng)該具備 6 大原則:通用性,,模塊化,,組件化,一致性,,可拓展性,,抽象性。下面分別對(duì)上述 6 大原則做簡(jiǎn)要說(shuō)明,,闡述清楚它們的目標(biāo)和意義,。

  1. 通用性:所謂通用,就是該架構(gòu)具備包容的能力,,業(yè)務(wù)上的任何推薦產(chǎn)品都可以用這一套架構(gòu)來(lái)涵蓋和實(shí)現(xiàn),。

  2. 模塊化:模塊化的目的在于將一個(gè)業(yè)務(wù)按照其功能做拆分,分成相互獨(dú)立的模塊,,以便于每個(gè)模塊只包含與其功能相關(guān)的內(nèi)容,,模塊之間通過(guò)一致性的協(xié)議調(diào)用。將一個(gè)大的系統(tǒng)模塊化之后,,每個(gè)模塊都可以被高度復(fù)用,。模塊化的目的是為了重用,,模塊化后可以方便重復(fù)使用和插撥到不同平臺(tái),不同推薦業(yè)務(wù)邏輯中,。

  3. 組件化:組件化就是基于可重用的目的,,將一個(gè)大的軟件系統(tǒng)拆分成多個(gè)獨(dú)立的組件,主要目的就是減少耦合,。一個(gè)獨(dú)立的組件可以是一個(gè)軟件包,、web 服務(wù)、web 資源或者是封裝了一些函數(shù)的模塊,。這樣,,獨(dú)立出來(lái)的組件可以單獨(dú)維護(hù)和升級(jí)而不會(huì)影響到其他的組件。組件化的目的是為了解耦,,把系統(tǒng)拆分成多個(gè)組件,,分離組件邊界和責(zé)任,便于獨(dú)立升級(jí)和維護(hù),,組件可插拔,,通過(guò)組件的拼接和增減提供更豐富的能力。

組件化和模塊化比較類(lèi)似,,目標(biāo)分別是為了更好的解耦和重用,,就像搭積木一樣構(gòu)建復(fù)雜系統(tǒng)。

  1. 一致性:指模塊的數(shù)據(jù)輸入輸出采用統(tǒng)一的數(shù)據(jù)交互協(xié)議,,做到整個(gè)系統(tǒng)一致,。

  2. 可拓展性:系統(tǒng)具備支撐大數(shù)據(jù)量,大并發(fā)的能力,,并且容易在該系統(tǒng)中增添新的模塊,,提供更豐富的能力,讓業(yè)務(wù)更加完備自治,。

  3. 抽象性:將相似的操作和流程抽象為統(tǒng)一的操作,,主要目的是簡(jiǎn)化系統(tǒng)設(shè)計(jì),讓系統(tǒng)更加簡(jiǎn)潔通用,。針對(duì)推薦系統(tǒng)采用數(shù)學(xué)上的概念抽象如下:

操作 / 算法抽象:我們先對(duì)數(shù)據(jù)處理或者算法做一個(gè)抽象,,將利用輸入數(shù)據(jù)通過(guò)“操作”得到輸出的的過(guò)程抽象為“算子”,按照這個(gè)抽象,ETL,、機(jī)器學(xué)習(xí)訓(xùn)練模型,、機(jī)器學(xué)習(xí)推斷都是算子。其中輸入輸出可以是數(shù)據(jù)或者模型,。

打造工業(yè)級(jí)推薦系統(tǒng)(三):推薦系統(tǒng)的工程實(shí)現(xiàn)與架構(gòu)優(yōu)化

算法或者操作的算子抽象

業(yè)務(wù)抽象:任何一個(gè)推薦業(yè)務(wù)可以抽象為由數(shù)據(jù) / 模型為節(jié)點(diǎn),,算子為邊的“有向無(wú)環(huán)圖”。下圖是深度學(xué)習(xí)的算法處理流程,整個(gè)算法實(shí)現(xiàn)就是一個(gè)有向無(wú)環(huán)圖,。

下圖是我們做的一個(gè)利用深度學(xué)習(xí)做電影猜你喜歡的推薦業(yè)務(wù)流程,,整個(gè)流程是由各個(gè)算子通過(guò)依賴(lài)關(guān)系鏈接起來(lái)的,就像一個(gè)有向無(wú)環(huán)圖,。

打造工業(yè)級(jí)推薦系統(tǒng)(三):推薦系統(tǒng)的工程實(shí)現(xiàn)與架構(gòu)優(yōu)化

推薦業(yè)務(wù)的有向無(wú)環(huán)圖抽象

根據(jù) Doraemon 系統(tǒng)的設(shè)計(jì)哲學(xué)及上面描述的推薦系統(tǒng)的核心模塊,,結(jié)合業(yè)內(nèi),一般將推薦系統(tǒng)分為召回 (將用戶可能會(huì)喜歡的標(biāo)的物取出來(lái)) 和排序 (將取出的標(biāo)的物按照用戶喜好程度降序排列,,最喜歡的排在前面) 兩個(gè)過(guò)程,,推薦系統(tǒng)可以根據(jù)如下方式進(jìn)行設(shè)計(jì)。

  1. 基礎(chǔ)組件:業(yè)務(wù)枚舉類(lèi)型,、常量、路徑處理,、配置文件解析等,。

  2. 數(shù)據(jù)讀入組件:包括從 HDFS、數(shù)據(jù)倉(cāng)庫(kù),、HBase,、Mysql 等相關(guān)數(shù)據(jù)庫(kù)讀取數(shù)據(jù)的操作,將這些操作封裝成通用操作,,方便所有業(yè)務(wù)線統(tǒng)一調(diào)用,;

  3. 數(shù)據(jù)流出組件:類(lèi)似數(shù)據(jù)讀入組件,將推薦結(jié)果插入最終存儲(chǔ) (如 Redis,,CouchBase 等) 的操作封裝成算子,,我們一般是將推薦結(jié)果流入 Kafka,利用 Kafka 作為數(shù)據(jù)管道,,最終再?gòu)?Kafka 將數(shù)據(jù)插入推薦存儲(chǔ)服務(wù)器,;

  4. 算法組件:這個(gè)是整個(gè)推薦系統(tǒng)的核心。在工程實(shí)現(xiàn)過(guò)程中,,我們將推薦系統(tǒng)中涉及到的算子抽象為 3 個(gè)接口,, AlgParameters(算子依賴(lài)的參數(shù)集合)、 Algorithm/AlgorithmEx (具體的算法實(shí)現(xiàn),,如果算法依賴(lài)模型,,采用 AlgorithmEx,比如利用模型做推斷),、Model(算法訓(xùn)練后的模型,,包括模型的導(dǎo)入、導(dǎo)出等接口),。所有的算子實(shí)現(xiàn)實(shí)現(xiàn)上面 3 個(gè)接口的抽象方法,。下圖給出了這 3 個(gè)接口包含的具體方法以及 Spark mllib 中的矩陣分解基于該抽象的實(shí)現(xiàn)。

打造工業(yè)級(jí)推薦系統(tǒng)(三):推薦系統(tǒng)的工程實(shí)現(xiàn)與架構(gòu)優(yōu)化

在我們的業(yè)務(wù)實(shí)踐中,發(fā)現(xiàn)上述抽象很合理,,基本推薦業(yè)務(wù)涉及到的所有算子 (ETL,、模型訓(xùn)練、模型推薦,、排序框架,、數(shù)據(jù)過(guò)濾,具體業(yè)務(wù)邏輯等) 都可以采用該方式很好的抽象,。

  1. 評(píng)估組件:主要是包括算法訓(xùn)練過(guò)程的離線評(píng)估等,;

  2. 其他支撐組件:比如 AB 測(cè)試等,都可以整合到 Doraemon 框架中,;

這里要特別說(shuō)一下數(shù)據(jù) (模型),,數(shù)據(jù)作為算子的輸入輸出,一定要定義嚴(yán)格的范式 (具備固定的數(shù)據(jù)結(jié)構(gòu),,比如矩陣分解訓(xùn)練依賴(lài)的數(shù)據(jù)有三列,,一列用戶 id,一列物品 id,,一列用戶對(duì)物品的評(píng)分),,Spark 的 DataFrame 可以很好的支撐各種數(shù)據(jù)類(lèi)型。數(shù)據(jù)格式定義好后,,在算子讀入或者輸出時(shí),,可以對(duì)類(lèi)型做校驗(yàn),可以很好的避免很多由于業(yè)務(wù)開(kāi)發(fā)疏忽導(dǎo)致的問(wèn)題,。這有點(diǎn)類(lèi)似強(qiáng)類(lèi)型編程語(yǔ)言,,在編譯過(guò)程 (類(lèi)似算子) 可以檢查出類(lèi)型錯(cuò)誤。

我們將上面的 6 類(lèi)組件封裝成一個(gè) Doraemon 的 lib 庫(kù),,供具體的推薦業(yè)務(wù)使用,。

基于大數(shù)據(jù)的數(shù)據(jù)中心和計(jì)算中心的抽象, 我們將所有推薦業(yè)務(wù)中涉及到的數(shù)據(jù)和算子分別放入數(shù)據(jù)倉(cāng)庫(kù)和算子倉(cāng)庫(kù), 開(kāi)發(fā)推薦業(yè)務(wù)時(shí)根據(jù)推薦算法的業(yè)務(wù)流程從這兩個(gè)倉(cāng)庫(kù)中拿出對(duì)應(yīng)的“積木”來(lái)組裝業(yè)務(wù), 參考下圖。

打造工業(yè)級(jí)推薦系統(tǒng)(三):推薦系統(tǒng)的工程實(shí)現(xiàn)與架構(gòu)優(yōu)化

基于 Doraemon 框架的算法組件化開(kāi)發(fā)方式

基于上面的設(shè)計(jì)原則,,推薦業(yè)務(wù)可以抽象為“數(shù)據(jù)流”和“算子流”兩個(gè)流的相互交織,,利用 Doraemon 框架構(gòu)建一個(gè)完善的推薦業(yè)務(wù)流程如下圖。

打造工業(yè)級(jí)推薦系統(tǒng)(三):推薦系統(tǒng)的工程實(shí)現(xiàn)與架構(gòu)優(yōu)化

基于 Doraemon 框架開(kāi)發(fā)的推薦業(yè)務(wù),,數(shù)據(jù)流與算子流相互交織,,非常清晰

另外,如果公司做產(chǎn)品線的拓展,,比如今日頭條拓展新產(chǎn)品抖音,、西瓜視頻、火山小視頻等,,可以基于上面所提到的“推薦算法的范式”實(shí)現(xiàn)很多推薦業(yè)務(wù) (比如猜你喜歡,、相似影片,、熱門(mén)推薦等),將這些業(yè)務(wù)封裝到一個(gè) DoraemonBiz.jar 的 jar 包,,這樣這些能力可以直接平移到新的產(chǎn)品線,,賦能新業(yè)務(wù)。這種操作就是二次封裝,,具有極大的威力,,下面給一個(gè)形象的圖示來(lái)說(shuō)明這種二次賦能的邏輯,讓大家更好理解這種思想,。

打造工業(yè)級(jí)推薦系統(tǒng)(三):推薦系統(tǒng)的工程實(shí)現(xiàn)與架構(gòu)優(yōu)化

通過(guò)二次封裝,,構(gòu)建推薦業(yè)務(wù)單元,賦能到新產(chǎn)品矩陣

從上面的介紹,,相信大家已經(jīng)感受到了 Doraemon 框架的威力了,,有了這套框架,我們可以高效的開(kāi)發(fā)算法了,,如果有新的技術(shù)突破,,我們可以將這些新算法實(shí)現(xiàn)并封裝到 Doraemon 框架中,不斷拓展 Doraemon 的能力,,讓 Doraemon 成長(zhǎng)為具備更多技能 (算子) 的巨人!

推薦系統(tǒng)工程實(shí)現(xiàn)的設(shè)計(jì)哲學(xué)

要為推薦系統(tǒng)設(shè)計(jì)一套好用高效的工程框架并不容易,,往往需要踩過(guò)很多坑,,通過(guò)多年經(jīng)驗(yàn)的積累才能深刻領(lǐng)悟。前面在“推薦系統(tǒng)架構(gòu)設(shè)計(jì)”一節(jié)已經(jīng)說(shuō)了很多構(gòu)建 Doraemon 框架的設(shè)計(jì)原則,,本節(jié)試圖從整個(gè)推薦業(yè)務(wù)工程實(shí)現(xiàn)的角度給出一些可供參考的設(shè)計(jì)哲學(xué), 以便大家可以更好的將推薦系統(tǒng)落地到業(yè)務(wù)中,。

  1. 什么是好的推薦系統(tǒng)工程實(shí)現(xiàn)?

個(gè)人認(rèn)為好的工程實(shí)現(xiàn)需要滿足如下幾個(gè)原則:

  • 別人很容易理解你的邏輯,;

  • 按照業(yè)務(wù)流 / 數(shù)據(jù)流來(lái)組織代碼結(jié)構(gòu),;

  • 便于 debug;

  • 保證數(shù)據(jù)存儲(chǔ),、代碼模塊,、業(yè)務(wù)邏輯的一致性;

  1. 設(shè)計(jì)好的推薦系統(tǒng)工程架構(gòu)的原則,?

  • 盡量將邏輯拆解為獨(dú)立的小單元,;

  • 代碼單元的輸入輸出定義清晰;

  • 設(shè)置合適的交互出入口,;

  • 確定通用一致的數(shù)據(jù)交互格式,;

  • 數(shù)據(jù)存儲(chǔ)、業(yè)務(wù)功能點(diǎn),、代碼單元保持一一對(duì)應(yīng),;

  1. 怎么設(shè)計(jì)好的推薦系統(tǒng)工程架構(gòu),?

  • 確定思考問(wèn)題的主線:數(shù)據(jù)流 or 業(yè)務(wù)流;

  • 畫(huà)出業(yè)務(wù)流或者數(shù)據(jù)流的架構(gòu)圖,;

  • 確定核心功能模塊,;

  • 根據(jù)核心功能模塊組織代碼目錄結(jié)構(gòu),數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),;

  • 定義清晰明確的數(shù)據(jù)格式,;

下圖是作者團(tuán)隊(duì)開(kāi)發(fā)的深度學(xué)習(xí)猜你喜歡推薦系統(tǒng) (基于 Tensorflow 開(kāi)發(fā)) 的業(yè)務(wù)流程圖, 對(duì)應(yīng)的代碼組織結(jié)構(gòu)和對(duì)應(yīng)的數(shù)據(jù)在本地文件系統(tǒng)中的存儲(chǔ)結(jié)構(gòu),基本按照上述設(shè)計(jì)原則來(lái)做,,看起來(lái)很清晰,,方便理解和問(wèn)題排查。

打造工業(yè)級(jí)推薦系統(tǒng)(三):推薦系統(tǒng)的工程實(shí)現(xiàn)與架構(gòu)優(yōu)化

業(yè)務(wù)流,,數(shù)據(jù)存儲(chǔ),,代碼工程結(jié)構(gòu)保持對(duì)應(yīng)

近實(shí)時(shí)個(gè)性化推薦

推薦系統(tǒng)在實(shí)際業(yè)務(wù)實(shí)現(xiàn)時(shí)一般是 T+1 推薦 (每天更新一次推薦,今天利用昨天之前的數(shù)據(jù)計(jì)算用戶的推薦結(jié)果),,隨著移動(dòng)互聯(lián)網(wǎng)的深入發(fā)展,,特別是今日頭條和快手等新聞,短視頻 APP 的流行,,越來(lái)越多的公司將 T+1 和實(shí)時(shí)策略相結(jié)合 (比如采用流行的 lambda 架構(gòu),,下圖是一個(gè)采用 lambda 架構(gòu)的推薦架構(gòu)圖,供參考) 將推薦系統(tǒng)做到了近實(shí)時(shí)推薦, 根據(jù)用戶的興趣變化實(shí)時(shí)為用戶提供個(gè)性化推薦,。像新聞,、短視頻這類(lèi)滿足用戶碎片化時(shí)間需求的產(chǎn)品,做到實(shí)時(shí)個(gè)性化可以極大提升用戶體驗(yàn),,這樣可以更好地滿足用戶需求,,提升用戶在產(chǎn)品的停留時(shí)間。這里我們只是簡(jiǎn)單的介紹了一下實(shí)時(shí)個(gè)性化推薦,,我在后續(xù)的系列文章中會(huì)詳細(xì)講解實(shí)時(shí)推薦系統(tǒng),。

打造工業(yè)級(jí)推薦系統(tǒng)(三):推薦系統(tǒng)的工程實(shí)現(xiàn)與架構(gòu)優(yōu)化

推薦系統(tǒng)的 lambda 架構(gòu)

推薦系統(tǒng)業(yè)務(wù)落地需要關(guān)注的問(wèn)題

推薦系統(tǒng)要想很好的落地產(chǎn)生價(jià)值,除了算法實(shí)現(xiàn),、核心模塊和支撐模塊構(gòu)建外, 還有很多方面需要考慮,,下面簡(jiǎn)單描述一下其他需要考慮的點(diǎn), 這些點(diǎn)都是非常重要的, 深入理解這些問(wèn)題,對(duì)真正發(fā)揮出推薦系統(tǒng)的價(jià)值有非常大的幫助,。

  1. 二八定律:你的產(chǎn)品可能包含很多推薦模塊,,但是在投入精力迭代優(yōu)化過(guò)程中,需要將核心精力放到用戶觸點(diǎn)多的產(chǎn)品 (位置好,,更容易曝光給用戶的推薦產(chǎn)品) 上,,因?yàn)檫@些產(chǎn)品形態(tài)占整個(gè)推薦價(jià)值產(chǎn)出的絕大部分。這個(gè)道理看起來(lái)誰(shuí)都懂,,但在實(shí)際工作中一直堅(jiān)守這個(gè)原則,,還是很難的,;

  2. 牛逼的算法與工程可實(shí)現(xiàn)性易用性之間的平衡:剛從事推薦算法開(kāi)發(fā)的工程師會(huì)覺(jué)得算法的價(jià)值是巨大的,一個(gè)牛逼的算法可以讓產(chǎn)品一飛沖天,。殊不知很多在頂級(jí)會(huì)議上發(fā)表的絕大多數(shù)“高大上”的算法遇到工業(yè)級(jí)海量數(shù)據(jù)大規(guī)模的分布式計(jì)算難以在工程上落地,。好的推薦算法一定要是易于工程實(shí)現(xiàn),跟公司當(dāng)前的技術(shù)架構(gòu),、人員能力,、可用資源是匹配的;

  3. 推薦系統(tǒng)冷啟動(dòng):冷啟動(dòng)是推薦系統(tǒng)非常重要的一塊,,特別是對(duì)新產(chǎn)品,,這塊設(shè)計(jì)策略好不好直接影響用戶體驗(yàn), 冷啟動(dòng)有很多實(shí)現(xiàn)方案,作者以后會(huì)單獨(dú)介紹冷啟動(dòng)的實(shí)現(xiàn)策略,;

  4. 推薦系統(tǒng)的解釋?zhuān)航o用戶提供一個(gè)推薦理由有時(shí)會(huì)達(dá)到事半功倍的效果,,能夠提升用戶體驗(yàn),促進(jìn)用戶的點(diǎn)擊購(gòu)買(mǎi),。推薦理由又是很難做的,,主要是因?yàn)楝F(xiàn)在很多推薦算法 (特別是深度學(xué)習(xí)算法) 可解釋性不強(qiáng),給你做出了推薦可能很精準(zhǔn),,但是整個(gè)系統(tǒng)無(wú)法給你解釋為什么給你推薦,。拿推薦系統(tǒng)給你推薦了電影 A 來(lái)說(shuō)明,我們可以從其他的途徑來(lái)做解釋?zhuān)?比如“因?yàn)槟阆矚g B”(電影 B 跟 A 有一定的相似性),,“今天是國(guó)慶節(jié),,為你推薦 A”,“今天是雨天,,為你推薦 A”,“跟你興趣相似的人都喜歡 A”等等,,只要可以挖掘出用戶的行為,,場(chǎng)景 (時(shí)間,空間,,上下文等),,跟推薦的電影的某種聯(lián)系,這種聯(lián)系都可以作為推薦解釋的理由,,不必拘泥于一定要從推薦算法原理中尋找解釋?zhuān)?/p>

  5. 推薦系統(tǒng) UI 設(shè)計(jì)和交互邏輯:好的產(chǎn)品 UI 和交互邏輯有時(shí)比好的算法更管用,,推薦算法工程師一定要有這種意識(shí),平時(shí)在做推薦系統(tǒng)時(shí),,也要往這方面多思考,,當(dāng)前的 UI 及交互是否合理,是否還有更好的方式,,多參考或者咨詢一下設(shè)計(jì)師的思路想法,,多體驗(yàn)一下競(jìng)品,,往往你會(huì)有新的收獲。我不是這方面的專(zhuān)家,,這里只給大家舉一個(gè)電視貓產(chǎn)品的例子 (見(jiàn)下圖),, 好的 UI 交互可以極大提升用戶體驗(yàn)和點(diǎn)擊。

打造工業(yè)級(jí)推薦系統(tǒng)(三):推薦系統(tǒng)的工程實(shí)現(xiàn)與架構(gòu)優(yōu)化

好的 UI 和交互的價(jià)值甚至比好的算法大很多

  1. 推薦系統(tǒng)的價(jià)值度量:讓推薦系統(tǒng)發(fā)揮價(jià)值,,首先要度量出推薦系統(tǒng)的價(jià)值,,我們需要將推薦系統(tǒng)的價(jià)值量化出來(lái),只有量化出推薦系統(tǒng)的價(jià)值,,推薦工程師的價(jià)值才能夠被公司認(rèn)可,,老板才愿意在推薦系統(tǒng)上投入資源。這里我簡(jiǎn)單說(shuō)一下推薦系統(tǒng)的價(jià)值產(chǎn)出方式 (拿視頻推薦舉例說(shuō)明),。

(1)推薦系統(tǒng)可以提升用戶體驗(yàn)和留存,,讓用戶更快更便捷找到想看的電影,減少找片時(shí)間:可以統(tǒng)計(jì)出推薦產(chǎn)生的播放量,,總播放時(shí)長(zhǎng),,人均播放時(shí)長(zhǎng),這些數(shù)值指標(biāo)跟大盤(pán)的平均指標(biāo)對(duì)比,,可以體現(xiàn)推薦系統(tǒng)的優(yōu)勢(shì),,推薦系統(tǒng)的這些指標(biāo)在大盤(pán)的占比也可以衡量推薦系統(tǒng)所占的分量;

(2)推薦系統(tǒng)可以創(chuàng)造收益:通過(guò)精準(zhǔn)推薦會(huì)員節(jié)目,,用戶通過(guò)推薦的會(huì)員節(jié)目購(gòu)買(mǎi)會(huì)員可以產(chǎn)生會(huì)員收益,;在推薦的節(jié)目上做貼片廣告,用戶播放推薦的節(jié)目讓廣告曝光,,可以產(chǎn)生廣告收益,;這兩塊收益需要量化出來(lái),體現(xiàn)出推薦系統(tǒng)支撐商業(yè)變現(xiàn)的能力,;

推薦系統(tǒng)的技術(shù)選型

根據(jù)第二節(jié)推薦系統(tǒng)與大數(shù)據(jù)的描述,,推薦業(yè)務(wù)落地依賴(lài)大數(shù)據(jù)技術(shù), 推薦系統(tǒng)的中間過(guò)程和結(jié)果的存儲(chǔ)需要依賴(lài)數(shù)據(jù)庫(kù),,推薦系統(tǒng)接口實(shí)現(xiàn)需要依賴(lài) web 服務(wù)器,。這些方面需要的軟件和技術(shù)在前面基本都有簡(jiǎn)單介紹,也都有開(kāi)源的軟件供選擇,,對(duì)創(chuàng)業(yè)公司來(lái)說(shuō),,沒(méi)有資源和人力去自研相關(guān)技術(shù),選擇合適的開(kāi)源技術(shù)是最好最有效的方案,。

本節(jié)詳細(xì)描述一下推薦系統(tǒng)算法開(kāi)發(fā)所依賴(lài)的機(jī)器學(xué)習(xí)軟件選型, 方便大家在工程實(shí)踐中參考選擇,。

由于推薦系統(tǒng)落地強(qiáng)依賴(lài)于大數(shù)據(jù)相關(guān)技術(shù),而最流行的開(kāi)源大數(shù)據(jù)技術(shù)基于 Hadoop 生態(tài)系統(tǒng),,所以推薦算法技術(shù)選型要圍繞大數(shù)據(jù)生態(tài)系統(tǒng)來(lái)發(fā)展,,可以無(wú)縫的將大數(shù)據(jù)和人工智能結(jié)合起來(lái),。

基于大數(shù)據(jù)生態(tài)系統(tǒng)有很多機(jī)器學(xué)習(xí)軟件可以用來(lái)開(kāi)發(fā)推薦系統(tǒng),比如 Apache 旗下的工具 SparkMLlib,、Flink-ML,、Mahout、Storm,、SystemML,。以及可以運(yùn)行在 Hadoop 生態(tài)系統(tǒng)上的 DeepLearning4J(Java 深度學(xué)習(xí)軟件),TonY(TensorflowonYARN,,LinkedIn 開(kāi)源的),,CaffeOnSpark(雅虎開(kāi)源的),BigDL(基于 Spark 上的深度學(xué)習(xí),,Intel 開(kāi)源的) 等,。

隨著人工智能第三次浪潮的到來(lái),以 Tensorflow,,Pytorch,,MXNet 等為代表的深度學(xué)習(xí)工具得到工業(yè)界的大量采用,Tensorflow 上有關(guān)于推薦系統(tǒng)、排序框架的模塊和源代碼,,可供學(xué)習(xí)參考,,通過(guò)簡(jiǎn)單修改可以直接用于推薦業(yè)務(wù)中。

另外像 xgboost,scikit-learn,,H2O,,gensim 等框架也是非常流行實(shí)用的框架,可以用于實(shí)際工程項(xiàng)目中,。

國(guó)內(nèi)也有很多開(kāi)源的機(jī)器學(xué)習(xí)框架,,騰訊開(kāi)源的 Angel(基于參數(shù)服務(wù)器的分布式機(jī)器學(xué)習(xí)平臺(tái),可以直接運(yùn)行在 yarn 上),,百度開(kāi)源的 PaddlePaddle(深度學(xué)框架),,阿里開(kāi)源的 Euler(圖深度學(xué)習(xí)框架),X-DeepLearning(深度學(xué)習(xí)框架),,也值得大家學(xué)習(xí)參考,。

作者所在公司主要采用 SparkMllib,,Tensorflow,,gensim 等框架來(lái)實(shí)現(xiàn)推薦系統(tǒng)算法的開(kāi)發(fā)。

至于開(kāi)發(fā)語(yǔ)言,,Hadoop 生態(tài)圈基本采用 Java/Scala,,深度學(xué)習(xí)生態(tài)圈基本采用 Python(Tensorflow、Pytorch 都采用 python 作為用戶使用軟件的開(kāi)發(fā)語(yǔ)言,,但它們的底層還是用 C++ 開(kāi)發(fā)的),,所以采用 Java/Scala,,Python 作為開(kāi)發(fā)語(yǔ)言有很多開(kāi)源框架可供選擇,相關(guān)的生態(tài)系統(tǒng)也很完善,。

隨著大數(shù)據(jù),、云計(jì)算、深度學(xué)習(xí)驅(qū)動(dòng)的人工智能浪潮的發(fā)展,,越來(lái)越多的頂級(jí)科技公司開(kāi)源出很多好用有價(jià)值的機(jī)器學(xué)習(xí)軟件工具,,可以直接用于工程中,也算是創(chuàng)業(yè)公司的福音,。

推薦系統(tǒng)的未來(lái)發(fā)展

隨著移動(dòng)互聯(lián)網(wǎng),、物聯(lián)網(wǎng)的發(fā)展,5G 技術(shù)的商用,,未來(lái)推薦系統(tǒng)一定是互聯(lián)網(wǎng)公司產(chǎn)品的標(biāo)配技術(shù)和標(biāo)準(zhǔn)解決方案,,推薦系統(tǒng)會(huì)被越來(lái)越多的公司采用,用戶也會(huì)越來(lái)越依賴(lài)推薦系統(tǒng)來(lái)做出選擇,。

在工程實(shí)現(xiàn)上,,推薦系統(tǒng)會(huì)越來(lái)越采用實(shí)時(shí)推薦技術(shù)來(lái)更快的響應(yīng)用戶的興趣 (需求) 變化,給用戶強(qiáng)感知,,提升用戶體驗(yàn),,增加公司收益。

個(gè)人覺(jué)得未來(lái)會(huì)有專(zhuān)門(mén)的開(kāi)源的推薦引擎出現(xiàn),,并且是提供一站式服務(wù),,讓搭建推薦系統(tǒng)成本越來(lái)越低。同時(shí)隨著人工智能的發(fā)展,,越來(lái)越多的云計(jì)算公司會(huì)提供推薦系統(tǒng)的 PAAS 或者 SAS 服務(wù) (現(xiàn)在就有很多創(chuàng)業(yè)公司提供推薦服務(wù), 只不過(guò)還做的不夠完善),,創(chuàng)業(yè)公司可以直接購(gòu)買(mǎi)推薦系統(tǒng)云服務(wù),讓搭建推薦系統(tǒng)不再是技術(shù)壁壘,,到那時(shí)推薦系統(tǒng)的價(jià)值將會(huì)大放異彩,!到那時(shí), 不是每個(gè)創(chuàng)業(yè)公司都需要推薦算法開(kāi)發(fā)工程師了,只要你理解推薦算法原理, 知道怎么將推薦系統(tǒng)引進(jìn)產(chǎn)品中創(chuàng)造價(jià)值, 就可以直接采購(gòu)?fù)扑]云服務(wù),。就像李開(kāi)復(fù)博士最新的暢銷(xiāo)書(shū)《AI 未來(lái)》中所說(shuō)的,,很多工作會(huì)被 AI 取代,所以推薦算法工程師也要有危機(jī)意識(shí),,要不斷培養(yǎng)對(duì)業(yè)務(wù)的敏感度,,對(duì)業(yè)務(wù)的理解,短期是無(wú)法被機(jī)器取代的,,到時(shí)候說(shuō)不定可以做一個(gè)推薦算法商業(yè)策略師,。

小結(jié)

本文是作者多年推薦系統(tǒng)學(xué)習(xí)、實(shí)踐經(jīng)驗(yàn)的總結(jié),希望能夠幫助到即將入行推薦系統(tǒng)開(kāi)發(fā)的讀者或者推薦系統(tǒng)開(kāi)發(fā)人員,,讓大家少走彎路,。由于作者才疏學(xué)淺,雖殫精竭慮,,不當(dāng)之處在所難免,,歡迎大家評(píng)判指正,以便作者有所提高,!

作者介紹:gongyouliu

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多