新浪微博王傳鵬:微博推薦架構(gòu)的演進(jìn)
原創(chuàng)王傳鵬 新浪微博推薦及廣告技術(shù)總監(jiān)
王傳鵬,WOT峰會(huì)特邀嘉賓,曾為第七屆WOT移動(dòng)互聯(lián)網(wǎng)開(kāi)發(fā)者大會(huì)的特約講師,也是本屆“互聯(lián)網(wǎng)+”時(shí)代大數(shù)據(jù)技術(shù)峰會(huì)的聯(lián)合出品人之一。2006年從北航畢業(yè),然后加入霍尼韋爾北京研中心做工程,之后同合伙人一起創(chuàng)辦云存儲(chǔ)網(wǎng)絡(luò)硬盤(99盤)。在公司被收購(gòu)后,加入當(dāng)當(dāng)網(wǎng)負(fù)責(zé)推薦和廣告工作。于2011年加入新浪微博商業(yè)產(chǎn)品部,負(fù)責(zé)推薦和廣告,直至現(xiàn)在。 |
引言
微博(Weibo)是一種通過(guò)關(guān)注機(jī)制分享簡(jiǎn)短實(shí)時(shí)信息的廣播式社交網(wǎng)絡(luò)平臺(tái)。微博用戶通過(guò)關(guān)注來(lái)訂閱內(nèi)容,在這種場(chǎng)景下,推薦系統(tǒng)可以很好地和訂閱分發(fā)體系進(jìn)行融合,相互促進(jìn)。微博兩個(gè)核心基礎(chǔ)點(diǎn):一是用戶關(guān)系構(gòu)建,二是內(nèi)容傳播,微博推薦一直致力于優(yōu)化這兩點(diǎn),促進(jìn)微博發(fā)展。如圖1所示:
圖1 微博推薦的使命
在微博推薦發(fā)展的過(guò)程中遇到體系方向的變化、業(yè)務(wù)的不斷更迭、目標(biāo)的重新樹(shù)立,其產(chǎn)品思路、架構(gòu)以及算法也隨之進(jìn)行變遷。本文主要闡述在這個(gè)過(guò)程中推薦架構(gòu)的演進(jìn),從產(chǎn)品目標(biāo)、算法需求以及技術(shù)發(fā)展等維度為讀者呈現(xiàn)一個(gè)完整的發(fā)展脈絡(luò),同時(shí)也希望通過(guò)這個(gè)機(jī)會(huì)跟大家一起探討業(yè)務(wù)與技術(shù)的相互關(guān)系。
為了便于理解微博推薦架構(gòu)演進(jìn),在介紹之前需要陳述一下微博推薦在流程上的構(gòu)成,其實(shí)這個(gè)和微博本身沒(méi)有關(guān)系,理論上業(yè)內(nèi)推薦所存在的流程基本都是相同的。如圖2所示,推薦是為了解決用戶與item之間的關(guān)系,將用戶感興趣的item推薦給他/她。那么,一個(gè)item被推薦出來(lái)會(huì)經(jīng)過(guò)候選、排序、策略、展示、反饋到評(píng)估再改變候選等等形成一個(gè)完整的回路。
圖2推薦的鏈路
在上述整體流程的基礎(chǔ)上,微博推薦架構(gòu)經(jīng)歷了如圖3所示的三個(gè)階段:
圖3 微博推薦架構(gòu)的三個(gè)階段
通常架構(gòu)的產(chǎn)生都會(huì)來(lái)自于團(tuán)隊(duì)和業(yè)務(wù)環(huán)境,源于環(huán)境因素而致力于解決環(huán)境中的問(wèn)題,架構(gòu)形成會(huì)帶著較為強(qiáng)烈的特點(diǎn),在其實(shí)施中會(huì)產(chǎn)生交給針對(duì)性的效果。本文將從環(huán)境因素、架構(gòu)組成與特點(diǎn)以及實(shí)施效果這三個(gè)方面進(jìn)行闡述微博推薦的三個(gè)階段。
1 獨(dú)立式的1.0
1.1 環(huán)境
影響架構(gòu)形成的環(huán)境因素可以分為內(nèi)部環(huán)境因素以及外部環(huán)境因素。內(nèi)部因素主要是團(tuán)隊(duì)及其成員相關(guān)內(nèi)容,而外部因素主要來(lái)自于外部門、整個(gè)公司或者整個(gè)行業(yè)領(lǐng)域。
微博推薦1.0的這段時(shí)間是從2011年7月份到2013年2月份左右,其主要的目標(biāo)就是實(shí)現(xiàn)當(dāng)前的業(yè)務(wù)需求。對(duì)于獨(dú)立式的解釋:每一個(gè)業(yè)務(wù)項(xiàng)目都是一套完整架構(gòu)流程,架構(gòu)之間相對(duì)獨(dú)立,甚至包括技術(shù)棧。之所以稱之為獨(dú)立式其內(nèi)部因素有幾點(diǎn):
1) 當(dāng)時(shí)團(tuán)隊(duì)是一個(gè)新團(tuán)隊(duì),成員也相對(duì)較新,相互的合作不多,缺乏推薦領(lǐng)域整體性經(jīng)驗(yàn)。
2) 團(tuán)隊(duì)成員對(duì)于推薦架構(gòu)都有自己的一些或多或少的理解,但是對(duì)于在當(dāng)前場(chǎng)景下的微博推薦架構(gòu),共識(shí)并沒(méi)有形成。
當(dāng)然起決定性因素的還是外部環(huán)境,是因?yàn)閮?nèi)部原因還是比較好協(xié)調(diào)和進(jìn)化的。當(dāng)時(shí)的外部環(huán)境因素包括:
1) 項(xiàng)目需求很多,在當(dāng)時(shí)一個(gè)5人團(tuán)隊(duì)并行開(kāi)發(fā)的項(xiàng)目平均在3-5個(gè)左右,當(dāng)然最重要的因素是當(dāng)時(shí)的微博產(chǎn)品正處于高速發(fā)展期,很多地方都需要微博推薦的支撐。同時(shí),項(xiàng)目周期也很短,排期倉(cāng)促,很難有時(shí)間進(jìn)行細(xì)致的整理和抽象。典型產(chǎn)品包括:微吧、微群、微刊、微話題、用戶以及內(nèi)容排序等等。
2) 團(tuán)隊(duì)是一個(gè)支撐性的,絕大部分需求來(lái)自于外部團(tuán)隊(duì),各個(gè)外部團(tuán)隊(duì)不同的產(chǎn)品方向也導(dǎo)致疲于應(yīng)付需求。
3) 當(dāng)時(shí)業(yè)內(nèi)的推薦架構(gòu)也有不同的發(fā)展方向,大家都在嘗試摸索一些符合自身發(fā)展的架構(gòu)思路。
由于上述的那些原因,通常我們面對(duì)一個(gè)接一個(gè)的項(xiàng)目時(shí),都會(huì)根據(jù)自己的理解使用熟悉的技術(shù)棧來(lái)搭建流程,這樣形成了一個(gè)又一個(gè)的獨(dú)立架構(gòu)。
1.2 架構(gòu)組成與特點(diǎn)
上節(jié)中提到了獨(dú)立架構(gòu)形成的原因,大家可能覺(jué)得架構(gòu)組成沒(méi)有必要去描述了,這是不對(duì)的,事實(shí)上后來(lái)的分層以及平臺(tái)架構(gòu)的基礎(chǔ)恰恰都來(lái)源于這個(gè)階段,沒(méi)有這個(gè)階段團(tuán)隊(duì)不斷踩坑總結(jié)就沒(méi)有因地制宜產(chǎn)生的后續(xù)進(jìn)化。因此,我們需要為大家剖析一下推薦1.0的架構(gòu)組成與特點(diǎn)。
1) 技術(shù)目標(biāo)
參考圖2所示,以業(yè)務(wù)實(shí)現(xiàn)為主要目標(biāo)的微博推薦1.0,沒(méi)有建立起完整的反饋以及評(píng)估體系,同時(shí)排序也是被策略取代,那么講主要的重點(diǎn)體現(xiàn)到了候選、策略以及展現(xiàn)上。上述推薦流程被轉(zhuǎn)化為:候選策略展現(xiàn)簡(jiǎn)單形態(tài)。
2) 架構(gòu)組成
如圖4所示,我們?cè)噲D將每個(gè)項(xiàng)目的架構(gòu)能夠在圖中表達(dá)出來(lái),在真正的實(shí)施過(guò)程中,每一個(gè)項(xiàng)目負(fù)責(zé)人會(huì)選擇使用apache+mod_python作為服務(wù)架構(gòu)同時(shí),使用redis作為存儲(chǔ)選型。在一些特定的項(xiàng)目中,引入了復(fù)雜運(yùn)算從而誕生了c/c++的服務(wù)框架woo;同時(shí),對(duì)于數(shù)據(jù)的存儲(chǔ)要求特型化的項(xiàng)目中又自己研發(fā)了一系列的db,比如早期存儲(chǔ)靜態(tài)數(shù)據(jù)的mapdb,存儲(chǔ)key-list的keylistdb等等。當(dāng)然,在部署中會(huì)比下圖更加隨意一些,一個(gè)項(xiàng)目幾臺(tái)服務(wù)器部署好微博服務(wù)提供http請(qǐng)求,然后再找?guī)讉€(gè)服務(wù)器安裝redis作為數(shù)據(jù)支撐,來(lái)源數(shù)據(jù)和業(yè)務(wù)方定好規(guī)則使用rsync傳輸就OK了,大部分策略在python中實(shí)現(xiàn)。
圖中可以看到主要的技術(shù)棧:
- web服務(wù):apache+mod_python,后來(lái)發(fā)展成為社區(qū)更為完善的mod_wsgi。使用python作為WEB開(kāi)發(fā)語(yǔ)言主要是因?yàn)槠綍r(shí)處理數(shù)據(jù)使用的都是python,同時(shí)上手快,學(xué)習(xí)曲線平緩。
- 運(yùn)算服務(wù):c/c++,形成woo內(nèi)部服務(wù)框架
- db:redis/mapdb/keylistdb等等,分為兩種存儲(chǔ)方法:redis以及自研型
- 數(shù)據(jù)來(lái)源:rsync文件傳輸,firehose作為微博相關(guān)內(nèi)容來(lái)源[微博內(nèi)部使用的一種數(shù)據(jù)隊(duì)列]
圖4 微博推薦1.0架構(gòu)簡(jiǎn)圖
3) 架構(gòu)特點(diǎn)
將架構(gòu)特點(diǎn)劃分為優(yōu)點(diǎn)和缺點(diǎn)進(jìn)行描述。那么優(yōu)點(diǎn)是:
- 簡(jiǎn)單,易于實(shí)現(xiàn),不需要額外的基礎(chǔ)支撐
- 利于業(yè)務(wù)的功能快速實(shí)現(xiàn)
- 利于多業(yè)務(wù)并行開(kāi)展,相互不影響
而不足是:
- 推薦流程不完整,缺乏反饋、評(píng)估等等重要內(nèi)容,對(duì)于數(shù)據(jù)方面也極度缺乏統(tǒng)一處理方法
- 沒(méi)有提供給算法相關(guān)的支撐,很難將推薦做的深入
- 幾乎無(wú)法進(jìn)行專業(yè)運(yùn)維
- QA的測(cè)試僅僅能到功能層面,模塊級(jí)別的測(cè)試幾乎不可能,因?yàn)樘^(guò)于分散
- 很難進(jìn)行團(tuán)隊(duì)協(xié)作,不利于項(xiàng)目的分解
1.3 成果
盡管存在諸多的缺點(diǎn),但是在其發(fā)展的過(guò)程中,也給后面的架構(gòu)優(yōu)化奠定了基礎(chǔ),其成果如下:
1) 在微博高速發(fā)展的過(guò)程中,滿足了微博對(duì)于推薦的業(yè)務(wù)支撐要求,在這段時(shí)期里面共完成二十多個(gè)獨(dú)立項(xiàng)目。
2) 誕生了woo的基礎(chǔ)框架,后面的內(nèi)部高效運(yùn)算框架來(lái)源于此
3) 誕生了mapdb的靜態(tài)存儲(chǔ),成為后期微博推薦靜態(tài)存儲(chǔ)的雛形
4) web應(yīng)用層的不斷需求的總結(jié),組建形成推薦通用應(yīng)用框架
#p#
2 分層式的2.0
上一節(jié)介紹完獨(dú)立的1.0,按照架構(gòu)發(fā)展的道路,我們到了分叉路口,一邊是流行的LAMP架構(gòu),另一邊是符合廣告、搜索的CELL架構(gòu)。LAMP架構(gòu)數(shù)據(jù)策略分離,腳本語(yǔ)言作為業(yè)務(wù)開(kāi)發(fā)主要語(yǔ)言,項(xiàng)目快速開(kāi)發(fā)和迭代的首選。CELL結(jié)構(gòu)強(qiáng)調(diào)本地流程處理,數(shù)據(jù)與業(yè)務(wù)耦合性強(qiáng),自研的服務(wù)以及數(shù)據(jù)庫(kù)較多出現(xiàn),適用于高性能效果型產(chǎn)品。最終我們選擇兼容兩者,傾向于業(yè)務(wù)的架構(gòu)體系。為何如此呢?讓我們?cè)賮?lái)看看當(dāng)時(shí)的環(huán)境。
2.1 環(huán)境
微博推薦2.0的時(shí)間段是2013年3月份到2014年年底,這段時(shí)間內(nèi)部環(huán)境因素是:
1) 當(dāng)前團(tuán)隊(duì)成員合作已經(jīng)很長(zhǎng)時(shí)間,彼此相互熟悉,同時(shí)對(duì)于技術(shù)選型有了一定的共識(shí)。
2) 團(tuán)隊(duì)產(chǎn)品進(jìn)行了聚焦,針對(duì)內(nèi)容/用戶/垂直類三類推薦進(jìn)行了整理,同時(shí)對(duì)于場(chǎng)景分別進(jìn)行了重點(diǎn)劃分:feed流內(nèi)、正文頁(yè)以及PC首頁(yè)右側(cè)。這種聚焦有利于進(jìn)行架構(gòu)統(tǒng)一,同時(shí)也為技術(shù)爭(zhēng)取了時(shí)間。
而外部因素是:
1) 公司對(duì)于推薦有了比較明確的定位,提高關(guān)系達(dá)成以及內(nèi)容傳播效率,同時(shí)為推薦型廣告打好技術(shù)探索、場(chǎng)景介入以及用戶體驗(yàn)的基礎(chǔ)。
2) 推薦領(lǐng)域里,各個(gè)公司都紛紛有了對(duì)于架構(gòu)的產(chǎn)出,對(duì)于微博推薦有了很好的指導(dǎo)意義。
2.2 架構(gòu)組成與特點(diǎn)
團(tuán)隊(duì)在執(zhí)行核心業(yè)務(wù)實(shí)現(xiàn)的時(shí)候,不斷演進(jìn)工具以及框架,構(gòu)建2.0的目標(biāo)呼之欲出。
1) 技術(shù)目標(biāo)
與1.0不同,僅僅實(shí)現(xiàn)業(yè)務(wù)需求已經(jīng)不是2.0的技術(shù)目標(biāo)了,針對(duì)完整的推薦流程,我們需要解決:
首先要實(shí)現(xiàn)完整的推薦流程,架構(gòu)覆蓋候選、排序、策略、展示、反饋和評(píng)估。
以數(shù)據(jù)為先,提煉出數(shù)據(jù)架構(gòu)。實(shí)現(xiàn)數(shù)據(jù)對(duì)比,效果以數(shù)據(jù)為準(zhǔn);實(shí)現(xiàn)數(shù)據(jù)通道,體現(xiàn)反饋;實(shí)現(xiàn)數(shù)據(jù)落地,承接業(yè)務(wù)需求。
提供算法方便介入的方式。
既能保證業(yè)務(wù)的快速迭代和開(kāi)發(fā),又能支持高效運(yùn)算。
2) 架構(gòu)組成
微博推薦2.0的架構(gòu)如圖5所示,它不再是一個(gè)個(gè)獨(dú)立的系統(tǒng),也不是會(huì)讓開(kāi)發(fā)人員使用不同的技術(shù)解決相似的問(wèn)題。這個(gè)架構(gòu)圖主要包括幾個(gè)部分的內(nèi)容:
應(yīng)用層:主要承擔(dān)推薦策略以及展現(xiàn)方面的工作,其特點(diǎn)在于充分發(fā)揮腳本語(yǔ)言的特點(diǎn)響應(yīng)迭代需求。大部分的推薦內(nèi)容經(jīng)過(guò)排序之后已經(jīng)可以展示了,但是由于前端產(chǎn)品策略的設(shè)定需要融合、刪選以及重排操作,需要這一層來(lái)完成,在技術(shù)層面屬于IO密集型的。在技術(shù)選型上,早期在原有apache+mod_python基礎(chǔ)上進(jìn)行了框架開(kāi)發(fā)產(chǎn)生了common_recom_frame。該框架面向的是二次開(kāi)發(fā)者,基于此框架可以很好的實(shí)現(xiàn)推薦業(yè)務(wù)流程。該框架的核心思想是提煉出project、work以及data的三層interface,project針對(duì)每一個(gè)推薦項(xiàng)目,work針對(duì)每個(gè)推薦項(xiàng)目中不同推薦方法,而data則是管理下游數(shù)據(jù)的訪問(wèn)方法。同時(shí),設(shè)定了兩個(gè)規(guī)范:一個(gè)是統(tǒng)一了推薦接口,無(wú)論是用戶、內(nèi)容還是垂直業(yè)務(wù);另一個(gè)是屏蔽了不同協(xié)議數(shù)據(jù)庫(kù)訪問(wèn)方法,極大提高了開(kāi)發(fā)效率。common_recom_frame框架的誕生基本上解決了產(chǎn)品的各種推薦策略需求,走在了產(chǎn)品的前面。
圖5 微博推薦2.0架構(gòu)示意圖
計(jì)算層:主要承擔(dān)推薦的排序計(jì)算,主要消耗CPU,在這一層給算法提供介入方法,支持算法的模型迭代。在這一層的技術(shù)選型上,我們繼承了原有的WOO協(xié)議框架,一種基于c/c++開(kāi)發(fā)的內(nèi)部高效通訊框架。當(dāng)然也做了不少擴(kuò)展,依然借用了上面提到的common_recom_frame的思想,在WOO框架基礎(chǔ)上實(shí)現(xiàn)了對(duì)于project/work/data的管理,提供給二次開(kāi)發(fā)者更為高效的開(kāi)發(fā)工具。在團(tuán)隊(duì)的開(kāi)源項(xiàng)目中包含這個(gè)工具:https://github.com/wbrecom/lab_common_so
數(shù)據(jù)層:主要承擔(dān)推薦的數(shù)據(jù)流以及存儲(chǔ)工作。數(shù)據(jù)層的工作主要是解決數(shù)據(jù)的IN/OUT/STORE問(wèn)題。其中IN數(shù)據(jù)如何進(jìn)入系統(tǒng),OUT表示數(shù)據(jù)如何訪問(wèn),STORE表示數(shù)據(jù)如何存。當(dāng)在進(jìn)行數(shù)據(jù)層規(guī)劃的時(shí)候,又分析了微博推薦的數(shù)據(jù)特點(diǎn),可以將其分為兩類:靜態(tài)和動(dòng)態(tài)。靜態(tài)數(shù)據(jù)的定義為: 更新需要全量同時(shí)頻次較低的大規(guī)模數(shù)據(jù);動(dòng)態(tài)數(shù)據(jù)的定義為:動(dòng)態(tài)更新同時(shí)頻次較高的增量數(shù)據(jù)。這樣在IN/OUT/SOTRE的大方向下,同時(shí)區(qū)分對(duì)待靜態(tài)和動(dòng)態(tài)數(shù)據(jù),產(chǎn)生了RIN/R9-interface、redis/lushan、tmproxy/gout代理的工具或者框架。在這里展開(kāi)講一下,RIN支持?jǐn)?shù)據(jù)動(dòng)態(tài)數(shù)據(jù)的接入,通過(guò)web服務(wù)的方式接收數(shù)據(jù),后端使用ckestrel進(jìn)行隊(duì)列管理,輔以多服務(wù)集群的消費(fèi)框架,使用者只需要進(jìn)行自己業(yè)務(wù)的開(kāi)發(fā)即可快速上線消費(fèi)動(dòng)態(tài)數(shù)據(jù)。R9-interface處理靜態(tài)數(shù)據(jù)的接入,推薦的大量靜態(tài)數(shù)據(jù)來(lái)源于Hadoop集群的運(yùn)算,r9-interface框架勇來(lái)解決靜態(tài)運(yùn)算[MR、HIVE SQL以及SPARK 運(yùn)算]的通知、管理以及數(shù)據(jù)載入。針對(duì)推薦數(shù)據(jù)的存儲(chǔ),動(dòng)態(tài)數(shù)據(jù)大量使用了redis集群,靜態(tài)數(shù)據(jù)則使用了lushan集群。對(duì)于lushan這個(gè)工具在團(tuán)隊(duì)開(kāi)源項(xiàng)目中也包含了:https://github.com/wbrecom/lushan。tmproxy/gout用來(lái)解決數(shù)據(jù)的OUT問(wèn)題,gout是一個(gè)代理中間件,用來(lái)處理推薦中對(duì)于數(shù)據(jù)的動(dòng)靜結(jié)合訪問(wèn)的需求,減少業(yè)務(wù)對(duì)于后端數(shù)據(jù)變化帶來(lái)的影響。
基礎(chǔ)服務(wù):推薦系統(tǒng)的基礎(chǔ)服務(wù)主要包括監(jiān)控、報(bào)警以及評(píng)測(cè)系統(tǒng),數(shù)據(jù)監(jiān)控系統(tǒng)分為性能以及效果監(jiān)控兩類,評(píng)測(cè)系統(tǒng)主要用來(lái)進(jìn)行下線評(píng)估,在上線之前對(duì)效果有一定預(yù)期以及減少無(wú)效上線。圖6展示了基礎(chǔ)服務(wù)的UI。
圖6 基礎(chǔ)服務(wù)系統(tǒng)的UI
3) 特點(diǎn)
優(yōu)點(diǎn)是:
- 支撐完整的推薦流程,對(duì)于數(shù)據(jù)方面擁有統(tǒng)一的處理方法
- 在兼顧業(yè)務(wù)功能快速實(shí)現(xiàn)的同時(shí)保證了效果技術(shù)的不斷深化
- 給算法提供了很好的支持
- 提出以數(shù)據(jù)為先的思想,可以全面對(duì)比效果,推薦效果不斷得以提升
- 封層體系易于部署以及QA介入進(jìn)行測(cè)試
而不足是:
- 和推薦核心有一定的距離,并沒(méi)有完全為推薦量身定做
- 將推薦的策略算法完全交給了開(kāi)發(fā)者,不利于推薦通用型
- 對(duì)于算法的訓(xùn)練并沒(méi)有涉及,僅僅是一個(gè)線上投放系統(tǒng),不足以構(gòu)成完整的推薦體系
2.3 成果
微博推薦2.0的誕生產(chǎn)生很好的收益,其成果如下:
1) 微博推薦的核心業(yè)務(wù)均在該體系下完成:正文頁(yè)推薦、趨勢(shì)用戶推薦、趨勢(shì)內(nèi)容推薦、各個(gè)場(chǎng)景下的用戶推薦、粉絲經(jīng)濟(jì)的粉條、賬號(hào)推薦等等產(chǎn)品
2) 誕生了lab_common_so的基礎(chǔ)框架,并進(jìn)行了開(kāi)源
3) 誕生了靜態(tài)存儲(chǔ)集群解決方案lushan,并進(jìn)行了開(kāi)源
4) RUF框架的誕生極大提升了業(yè)務(wù)生產(chǎn)效率,同時(shí)也為openresty社區(qū)做出一定貢獻(xiàn)
#p#
3 平臺(tái)式的3.0
上節(jié)中描述2.0的時(shí)候提到了一個(gè)重要不足是“和推薦核心有一定的距離,并沒(méi)有完全為推薦量身定做”,我們希望能夠在推薦3.0中解決它,這個(gè)不足會(huì)帶來(lái)什么問(wèn)題,以及為何在已經(jīng)滿足業(yè)務(wù)需求的同時(shí)推薦的架構(gòu)再次往前發(fā)展呢?那么接下來(lái)為各位展現(xiàn)微博推薦平臺(tái)式的3.0設(shè)計(jì),我們還是先看看所處的環(huán)境。
3.1 環(huán)境
微博推薦3.0的時(shí)間段是2014年底至今,當(dāng)前的內(nèi)部環(huán)境因素是:
1) 推薦產(chǎn)品不在擴(kuò)張,對(duì)效果更為看重,將工作重點(diǎn)從業(yè)務(wù)開(kāi)發(fā)和迭代轉(zhuǎn)化為以效果為目標(biāo)的技術(shù)迭代。
2) 新項(xiàng)目或者迭代推薦業(yè)務(wù)的時(shí)候發(fā)現(xiàn)重復(fù)的事情很多,而架構(gòu)沒(méi)有解決,工作存在冗余。
而外部因素是:
1) 公司也從業(yè)務(wù)擴(kuò)展轉(zhuǎn)變?yōu)樾蕿橄?,提升用戶體驗(yàn)以及內(nèi)容質(zhì)量上來(lái)。
2) 微博推薦在推薦技術(shù)環(huán)節(jié)距離領(lǐng)域內(nèi)有一定距離,當(dāng)下有條件進(jìn)行追趕。
3.2架構(gòu)組成與特點(diǎn)
當(dāng)前的環(huán)境也能體現(xiàn)出3.0的技術(shù)目標(biāo):
1) 技術(shù)目標(biāo)
與2.0不同,全覆蓋推薦流程已經(jīng)不是3.0的目標(biāo),其目標(biāo)是:
抽象出推薦流程中對(duì)于候選/排序/訓(xùn)練/反饋的通用方法來(lái)
推薦是一個(gè)算法數(shù)據(jù)問(wèn)題,應(yīng)該以一個(gè)算法的角度構(gòu)建推薦系統(tǒng),因此需要更為貼近算法策略
2) 架構(gòu)組成
如圖7所示,是微博推薦3.0的架構(gòu),也是當(dāng)前實(shí)行的架構(gòu)體系,大家其實(shí)可以發(fā)現(xiàn),這是基于2.0 發(fā)展起來(lái)的,既然還保留了大量2.0中使用的分層體系以及工具框架。在這里重點(diǎn)描述幾個(gè)差異:
兩個(gè)標(biāo)準(zhǔn):一個(gè)是針對(duì)應(yīng)用層,作為整體框架輸出,應(yīng)用層設(shè)定all in one 接口標(biāo)準(zhǔn),其標(biāo)準(zhǔn)包含了輸入以及輸出參數(shù);另外一個(gè)是針對(duì)動(dòng)態(tài)輸入rin,由于離線計(jì)算我們可以確定結(jié)構(gòu),因此一個(gè)輸入層工具r9-interface不需要設(shè)定規(guī)范,但是rin是需要進(jìn)行標(biāo)準(zhǔn)設(shè)定,從屬性/交互數(shù)據(jù)/日志等等層面進(jìn)行劃分。
計(jì)算層增加對(duì)于候選的標(biāo)準(zhǔn)生成方法:Artemis內(nèi)容候選模塊,item-cands用戶候選模塊、……,在項(xiàng)目開(kāi)發(fā)中只需要選擇這些候選生成方法即可。
增加了策略平臺(tái)EROS,解決算法模型的問(wèn)題。EROS主要的幾個(gè)功能是:1)訓(xùn)練模型 2)特征選取 3)上線對(duì)比測(cè)試。
數(shù)據(jù)層中的r9-interface以及rin增加對(duì)于候選的生成方法,在線以及離線使用推薦通用策略生成結(jié)果。
圖7 微博推薦3.0的架構(gòu)示意圖
3) 特點(diǎn)
主要描述其優(yōu)勢(shì):
繼承了原有2.0的特點(diǎn),保留了其優(yōu)勢(shì)
對(duì)于推薦理解更為深入,結(jié)合更為緊密
解決了推薦候選/排序/訓(xùn)練的算法最重要問(wèn)題
3.3 成果
微博推薦3.0的誕生,其成果如下:
1) 微博推薦的核心業(yè)務(wù)會(huì)逐步遷移到該體系下,以算法數(shù)據(jù)作為驅(qū)動(dòng),提升效果
2) 誕生了EROS的訓(xùn)練流程,提出了訓(xùn)練的標(biāo)準(zhǔn)方法
3) 針對(duì)推薦設(shè)定了標(biāo)準(zhǔn)的輸入輸出方法
4) 針對(duì)候選,產(chǎn)生了具有抽象意義的推薦方法集合
4 總結(jié)
上文中對(duì)微博推薦架構(gòu)演進(jìn)做了較為詳實(shí)的介紹,在這個(gè)演進(jìn)的過(guò)程團(tuán)隊(duì)以及個(gè)人收益很大,技術(shù)與業(yè)務(wù)的關(guān)系在架構(gòu)中得到了很好的體現(xiàn)。有幾點(diǎn)可以跟大家分享的是:
1) 技術(shù)來(lái)源于業(yè)務(wù)同時(shí)提升業(yè)務(wù)發(fā)展,業(yè)務(wù)發(fā)展又反過(guò)來(lái)推動(dòng)技術(shù)的前進(jìn),他們是一個(gè)相互影響相互促進(jìn)的關(guān)系。和業(yè)務(wù)共同發(fā)展的技術(shù)才是有生命力的。
2) 技術(shù)架構(gòu)的選型建議是尋找當(dāng)前最短路徑,然后進(jìn)行不斷優(yōu)化迭代,一口氣吃撐是不現(xiàn)實(shí)的,也是不合理的。
3) 推廣某個(gè)框架和工具最好的方式不是行政命令也不是請(qǐng)客吃飯,而是的大家都是參與者,如同開(kāi)源項(xiàng)目,每個(gè)人都是它的主人,這樣人人維護(hù),人人使用。
4) 團(tuán)隊(duì)崇尚簡(jiǎn)單可依靠,它說(shuō)起來(lái)容易做起來(lái)難,不過(guò)有一個(gè)好方法就是懂得自己不應(yīng)該做什么,而不是應(yīng)該做什么。
5) 說(shuō)到推薦這個(gè)特殊領(lǐng)域上來(lái),設(shè)定目標(biāo),跟蹤目標(biāo)很重要,把數(shù)據(jù)和目標(biāo)擺出來(lái),產(chǎn)品、架構(gòu)以及算法都會(huì)想辦法去解決的。
最后,跟大家推薦一下微博推薦的官方博客:http://www.wbrecom.com/ 歡迎大家提出建議和建議。感謝大家對(duì)于微博推薦以及微博的關(guān)心和愛(ài)護(hù),謝謝!