99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

推薦系統(tǒng)很好地落地到產(chǎn)品中需要考慮哪些問題及相應(yīng)的思路

電子工程師 ? 來源:lp ? 2019-03-16 09:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

01 寫在前面

本篇文章作者會(huì)結(jié)合多年推薦系統(tǒng)開發(fā)的實(shí)踐經(jīng)驗(yàn)粗略介紹推薦系統(tǒng)的工程實(shí)現(xiàn),簡(jiǎn)要說明要將推薦系統(tǒng)很好地落地到產(chǎn)品中需要考慮哪些問題及相應(yīng)的思路、策略和建議,其中有大量關(guān)于設(shè)計(jì)哲學(xué)的思考,希望對(duì)從事推薦算法工作或準(zhǔn)備入行推薦系統(tǒng)的讀者有所幫助。

本篇文章主要從整體上來介紹推薦系統(tǒng)工程實(shí)現(xiàn),以后發(fā)布的系列文章會(huì)逐步介紹工程實(shí)現(xiàn)的各個(gè)細(xì)節(jié)實(shí)現(xiàn)原理與策略。為了描述方便,本文主要基于視頻推薦來講解,作者這幾年也一直在從事視頻推薦系統(tǒng)開發(fā)的工作,其他行業(yè)的推薦系統(tǒng)工程實(shí)現(xiàn)思路類似。

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

推薦系統(tǒng)是幫助人們解決信息獲取問題的有效工具,對(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)的依賴關(guān)系如下圖。大數(shù)據(jù)平臺(tái)包含數(shù)據(jù)中心和計(jì)算中心兩大抽象,數(shù)據(jù)中心為推薦系統(tǒng)提供數(shù)據(jù)存儲(chǔ),包括訓(xùn)練推薦模型需要的數(shù)據(jù),依賴的其他數(shù)據(jù),以及推薦結(jié)果,而計(jì)算中心提供算力支持,支撐數(shù)據(jù)預(yù)處理、模型訓(xùn)練、模型推斷(即基于學(xué)習(xí)到的模型,為每個(gè)用戶推薦)等。

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

大數(shù)據(jù)與人工智能具有千絲萬縷的關(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ù),下圖是典型的基于開源技術(shù)的視頻互聯(lián)網(wǎng)公司大數(shù)據(jù)與人工智能業(yè)務(wù)及相關(guān)的底層大數(shù)據(jù)支撐技術(shù)。

大數(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ù)流可以用下圖來說明,它是一個(gè)不斷迭代優(yōu)化的過程,是一個(gè)閉環(huán)系統(tǒng)。

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

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

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

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

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

ETL模塊

收集到的原始數(shù)據(jù)一般是非結(jié)構(gòu)化的,ETL模塊的主要目的是從收集到的原始數(shù)據(jù)中提取關(guān)鍵字段(拿視頻行業(yè)來說,用戶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ī)則或策略過濾掉臟數(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)來存儲(chǔ)數(shù)據(jù)。

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

特征工程模塊

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

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

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

推薦算法模塊

推薦算法模塊是整個(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è)過程,這也是機(jī)器學(xué)習(xí)的通用流程。

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

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

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

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

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

Web服務(wù)模塊

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

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

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

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

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

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

評(píng)估模塊

推薦評(píng)估模塊的主要作用是評(píng)估整個(gè)推薦系統(tǒng)的質(zhì)量及價(jià)值產(chǎn)出。一般來說可以從兩個(gè)維度來評(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è)試集用來評(píng)估模型的預(yù)測(cè)誤差。

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

調(diào)度模塊

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

監(jiān)控模塊

監(jiān)控模塊解決的是當(dāng)推薦業(yè)務(wù)(依賴的)任務(wù)由于各種原因調(diào)度失敗時(shí)可以及時(shí)告警,通過郵件或者短信通知運(yùn)維或者業(yè)務(wù)的維護(hù)者,及時(shí)發(fā)現(xià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)問題。

審查模塊

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

05 推薦系統(tǒng)范式

推薦系統(tǒng)的目的是為用戶推薦可能喜歡的標(biāo)的物,這個(gè)過程涉及到用戶、標(biāo)的物兩個(gè)重要要素,我們可以根據(jù)這兩個(gè)要素的不同組合產(chǎn)生不同的推薦形態(tài),即所謂的不同“范式(paradigm)”(數(shù)學(xué)專業(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舉例說明具體的應(yīng)用場(chǎng)景。

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

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

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

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

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

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

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

當(dāng)用戶瀏覽一個(gè)電影時(shí),可以通過關(guān)聯(lián)相似的電影,為用戶提供更多的選擇空間(下圖就是電視貓電影詳情頁關(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è)視頻的詳情頁看到的推薦結(jié)果都不一樣;

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

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

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

推薦算法的5種范式

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

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

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

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

構(gòu)建推薦業(yè)務(wù)就像搭積木一樣簡(jiǎn)單(圖片來源于網(wǎng)絡(luò))

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

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

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

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

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

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

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

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

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

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

算法或者操作的算子抽象

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

01.別人很容易理解你的邏輯;

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

03.便于debug;

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

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

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

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

03.設(shè)置合適的交互出入口;

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

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

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

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

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

03.確定核心功能模塊;

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

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

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

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

08 近實(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的流行,越來越多的公司將T+1和實(shí)時(shí)策略相結(jié)合(比如采用流行的lambda架構(gòu),下圖是一個(gè)采用lambda架構(gòu)的推薦架構(gòu)圖,供參考)將推薦系統(tǒng)做到了近實(shí)時(shí)推薦,根據(jù)用戶的興趣變化實(shí)時(shí)為用戶提供個(gè)性化推薦。像新聞、短視頻這類滿足用戶碎片化時(shí)間需求的產(chǎn)品,做到實(shí)時(shí)個(gè)性化可以極大提升用戶體驗(yàn),這樣可以更好地滿足用戶需求,提升用戶在產(chǎn)品的停留時(shí)間。這里我們只是簡(jiǎn)單的介紹了一下實(shí)時(shí)個(gè)性化推薦,我在后續(xù)的系列文章中會(huì)詳細(xì)講解實(shí)時(shí)推薦系統(tǒng)。

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

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

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

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

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

推薦系統(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)策略;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

12結(jié)語

本文是作者多年推薦系統(tǒng)學(xué)習(xí)、實(shí)踐經(jīng)驗(yàn)的總結(jié),希望能夠幫助到即將入行推薦系統(tǒng)開發(fā)的讀者或者推薦系統(tǒng)開發(fā)人員,讓大家少走彎路。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 人工智能
    +關(guān)注

    關(guān)注

    1806

    文章

    49014

    瀏覽量

    249432
  • 推薦系統(tǒng)
    +關(guān)注

    關(guān)注

    1

    文章

    44

    瀏覽量

    10250
  • 大數(shù)據(jù)
    +關(guān)注

    關(guān)注

    64

    文章

    8960

    瀏覽量

    140207

原文標(biāo)題:詳解 | 推薦系統(tǒng)的工程實(shí)現(xiàn)

文章出處:【微信號(hào):rgznai100,微信公眾號(hào):rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    物聯(lián)網(wǎng)想落地,需要哪些企業(yè)發(fā)力呢?

    落地,需要哪些企業(yè)發(fā)力呢?   一、運(yùn)營(yíng)商。運(yùn)營(yíng)商是物聯(lián)網(wǎng)落地的基石,沒有運(yùn)營(yíng)商的數(shù)據(jù)支持,物聯(lián)網(wǎng)也就一個(gè)局域網(wǎng),僅僅限制在一個(gè)小區(qū)域的智能化控制系統(tǒng)而已,而接入運(yùn)營(yíng)商的網(wǎng)絡(luò),比如云計(jì)
    發(fā)表于 07-29 18:07

    EMC 設(shè)計(jì)需要跟著產(chǎn)品開發(fā)走

    需要花費(fèi)大量的時(shí)間和成本,甚至影響產(chǎn)品的出貨時(shí)間。因此在產(chǎn)品開發(fā)階段就考慮EMC 的設(shè)計(jì)將會(huì)對(duì)后期的工作節(jié)省大量的時(shí)間和成本。電磁兼容性
    發(fā)表于 08-25 08:57

    在家居照明設(shè)計(jì),你到底需要考慮哪些?

    個(gè)問題,因?yàn)榭倳?huì)建立一個(gè)家嘛。所以,現(xiàn)在就來拋開你的社會(huì)身份,只是作為一個(gè)家庭的主人來說:  當(dāng)你面臨家居照明應(yīng)該如何設(shè)計(jì)這一問題時(shí)你到底需要考慮哪些?  下面小雷就就從家居照明設(shè)計(jì)理念切入,教你
    發(fā)表于 07-13 15:40

    PCB設(shè)計(jì)需要考慮的間距

      PCB設(shè)計(jì)中有諸多需要考慮到安全間距的地方。在此,暫且歸為兩類:一類為電氣相關(guān)安全間距,一類為非電氣相關(guān)安全間距?! ?.電氣相關(guān)安全間距:  導(dǎo)線之間間距  據(jù)主流PCB生產(chǎn)廠家的加工能力
    發(fā)表于 09-21 11:54

    電容觸摸屏系統(tǒng)設(shè)計(jì)需要考慮哪些問題?

    電容觸摸屏系統(tǒng)設(shè)計(jì)需要考慮哪些問題?評(píng)價(jià)一個(gè)設(shè)備的機(jī)械設(shè)計(jì)需要解決那幾個(gè)關(guān)鍵問題?
    發(fā)表于 04-12 07:07

    長(zhǎng)沙有一起交流學(xué)習(xí)鴻蒙開發(fā)產(chǎn)品的嗎?目標(biāo)是應(yīng)用鴻蒙現(xiàn)有影像產(chǎn)品落地!

    長(zhǎng)沙有一起交流學(xué)習(xí)鴻蒙開發(fā)產(chǎn)品的嗎?目標(biāo)是應(yīng)用鴻蒙現(xiàn)有影像產(chǎn)品落地!
    發(fā)表于 07-20 19:40

    如何開發(fā)出成功的硬件產(chǎn)品,一個(gè)產(chǎn)品由概念的產(chǎn)生產(chǎn)品落地量產(chǎn)又需要經(jīng)歷哪些流程呢?

    的挑戰(zhàn)。如何開發(fā)出成功的硬件產(chǎn)品,一個(gè)產(chǎn)品由概念的產(chǎn)生產(chǎn)品落地量產(chǎn)又需要經(jīng)歷哪些流程呢?每個(gè)
    發(fā)表于 07-15 14:26

    光伏系統(tǒng)設(shè)計(jì)思路及注意事項(xiàng)

    光伏系統(tǒng)設(shè)計(jì)思路及注意事項(xiàng):本文結(jié)合光伏系統(tǒng)設(shè)計(jì)過程遇到的問題,總結(jié)光伏系統(tǒng)設(shè)計(jì)流程和設(shè)計(jì)思路
    發(fā)表于 06-08 11:56 ?53次下載

    購(gòu)買音頻會(huì)議系統(tǒng)需要考慮哪些問題?

    購(gòu)買音頻會(huì)議系統(tǒng)需要注意哪些問題?   在購(gòu)買音頻會(huì)議系統(tǒng)時(shí)有以下幾點(diǎn)是需要我們考慮的:   1、
    發(fā)表于 02-21 09:12 ?796次閱讀

    MES選型需要考慮什么

    MES系統(tǒng)選型過程應(yīng)考慮的因素,應(yīng)充分考慮到MES后期的集成,MES系統(tǒng)本身是一個(gè)分布式系統(tǒng),
    發(fā)表于 12-26 08:00 ?4次下載

    設(shè)計(jì)嵌入式系統(tǒng)硬件電路時(shí)需要考慮哪些問題

    設(shè)計(jì)以MCU為核心的嵌入式系統(tǒng)硬件電路需要根據(jù)需求分析進(jìn)行綜合考慮,需要考慮的問題較多,這里給出幾個(gè)特別要注意的問題。
    的頭像 發(fā)表于 02-13 16:32 ?4292次閱讀

    公鏈設(shè)計(jì)還有哪些改進(jìn)點(diǎn)需要考慮

    之所以這樣設(shè)計(jì),可能是因?yàn)樗麄兪情_創(chuàng)性的項(xiàng)目,需要考慮到匿名性以支持灰色金融場(chǎng)景。不過隨著區(qū)塊鏈數(shù)字貨幣的普及,在新的公鏈設(shè)計(jì),最終需要考慮
    發(fā)表于 03-31 10:29 ?668次閱讀

    PCB設(shè)計(jì)2大安全間距需要考慮

    PCB設(shè)計(jì)中有諸多需要考慮到安全間距的地方。
    的頭像 發(fā)表于 08-14 08:46 ?3864次閱讀

    設(shè)計(jì)固定無線接入 (FWA) 系統(tǒng)時(shí)需要考慮的 5 個(gè)因素

    設(shè)計(jì)固定無線接入 (FWA) 系統(tǒng)時(shí)需要考慮的 5 個(gè)因素
    的頭像 發(fā)表于 12-26 10:16 ?2326次閱讀
    設(shè)計(jì)固定無線接入 (FWA) <b class='flag-5'>系統(tǒng)</b>時(shí)<b class='flag-5'>需要</b><b class='flag-5'>考慮</b>的 5 個(gè)因素

    電源模塊的作用 電源模塊的設(shè)計(jì)思路需要考慮哪些方面

    電路處理,提供給設(shè)備所需的穩(wěn)定直流電源。 電源模塊的設(shè)計(jì)思路需要考慮的方面: 輸出穩(wěn)定性:電源模塊需要保證輸出電壓的穩(wěn)定性,以免電子設(shè)備因電壓波動(dòng)而受到損害。設(shè)計(jì)者
    的頭像 發(fā)表于 02-18 15:15 ?1938次閱讀