99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀大數(shù)據(jù)實(shí)時(shí)推薦-不只是統(tǒng)計(jì)
大數(shù)據(jù)實(shí)時(shí)推薦-不只是統(tǒng)計(jì)
2016-06-05
收藏

大數(shù)據(jù)實(shí)時(shí)推薦-不只是統(tǒng)計(jì)

隨著大數(shù)據(jù)時(shí)代的來(lái)臨,如何幫助用戶從大量信息中迅速獲得對(duì)自己有用的信息成為眾多商家的重要任務(wù),個(gè)性化推薦系統(tǒng)應(yīng)運(yùn)而生。個(gè)性化推薦系統(tǒng)以海量數(shù)據(jù)挖掘為基礎(chǔ),引導(dǎo)用戶發(fā)現(xiàn)自己的信息需求,現(xiàn)已廣泛應(yīng)用于很多領(lǐng)域。傳統(tǒng)的個(gè)性化推薦系統(tǒng),采用定期對(duì)數(shù)據(jù)進(jìn)行分析的做法來(lái)更新模型。由于是定期更新,推薦模型無(wú)法保持實(shí)時(shí)性,對(duì)用戶當(dāng)前的行為推薦結(jié)果可能不會(huì)非常精準(zhǔn)。實(shí)時(shí)個(gè)性化推薦實(shí)時(shí)分析用戶產(chǎn)生的數(shù)據(jù),可以更準(zhǔn)確地為用戶進(jìn)行推薦,同時(shí)根據(jù)實(shí)時(shí)的推薦結(jié)果進(jìn)行反饋,更好地改進(jìn)推薦模型。

騰訊大數(shù)據(jù)平臺(tái)部和北京大學(xué)網(wǎng)絡(luò)所崔斌教授研究組從2014年起開(kāi)展大數(shù)據(jù)實(shí)時(shí)推薦研究,雙方合作的論文連續(xù)兩年在國(guó)際頂級(jí)會(huì)議SIGMOD2015和2016發(fā)表:TencentRec: Real-time Stream Recommendation in Practice SIGMOD 2015,Real-time Video Recommendation Exploration SIGMOD2016 。研究工作側(cè)重解決實(shí)際應(yīng)用中存在的問(wèn)題,針對(duì)大數(shù)據(jù)實(shí)時(shí)推薦在精準(zhǔn)、實(shí)時(shí)、海量等方面的挑戰(zhàn),提出了分布式可擴(kuò)展的實(shí)時(shí)增量更新推薦算法,使推薦效果得到了明顯的提升。所研究的方法已應(yīng)用在包括視頻、新聞等多個(gè)業(yè)務(wù)中,推薦效果得到顯著提升。實(shí)時(shí)推薦系統(tǒng)現(xiàn)每天處理千億條用戶行為,支撐百億級(jí)用戶請(qǐng)求。

1. 大數(shù)據(jù)實(shí)時(shí)計(jì)算平臺(tái)

騰訊大數(shù)據(jù)實(shí)時(shí)計(jì)算平臺(tái)TRC[1]由實(shí)時(shí)數(shù)據(jù)接入TDBank、實(shí)時(shí)數(shù)據(jù)處理TDProcess、和分布式K-V存儲(chǔ)TDEngine等部分組成,其中TDBank主要負(fù)責(zé)從業(yè)務(wù)側(cè)接入實(shí)時(shí)數(shù)據(jù),如用戶行為數(shù)據(jù)、物品信息數(shù)據(jù)等;TDProcess基于Storm對(duì)實(shí)時(shí)流入的數(shù)據(jù)進(jìn)行計(jì)算,并利用TDEngine存儲(chǔ)計(jì)算結(jié)果,以供推薦引擎等使用。

計(jì)算平臺(tái)TRC的主要框架如上圖所示,有關(guān)TRC的文章已經(jīng)有很多,這里不作詳述,有興趣的讀者可以參考文章[1]獲得詳細(xì)描述。

2. 推薦算法實(shí)時(shí)化

基于Storm的實(shí)時(shí)計(jì)算能夠針對(duì)海量流式數(shù)據(jù)進(jìn)行有效的統(tǒng)計(jì)處理,然而流式計(jì)算在機(jī)器學(xué)習(xí)算法方面有著天然的劣勢(shì),而要完成大數(shù)據(jù)實(shí)時(shí)推薦,只是實(shí)時(shí)統(tǒng)計(jì)顯然是不夠的,我們希望能實(shí)現(xiàn)推薦算法的實(shí)時(shí)化更新計(jì)算。

流式實(shí)時(shí)計(jì)算在機(jī)器學(xué)習(xí)方面的局限性主要表現(xiàn)在兩方面:首先,由于數(shù)據(jù)是以流的形式進(jìn)入Storm平臺(tái)計(jì)算,在任何時(shí)刻,我們都只有目前流入的數(shù)據(jù),而沒(méi)有傳統(tǒng)的全局?jǐn)?shù)據(jù)概念,而在全局?jǐn)?shù)據(jù)上進(jìn)行迭代計(jì)算正是許多機(jī)器學(xué)習(xí)算法需要的;其次,Storm平臺(tái)是計(jì)算數(shù)據(jù)易失的,在海量數(shù)據(jù)背景下,如何保證模型的有效存儲(chǔ)及更新維護(hù)成為一個(gè)挑戰(zhàn)。

對(duì)于上述第二點(diǎn)不足,我們使用了TDE作為解決方案,TDE作為一個(gè)高容錯(cuò)、高可用性的分布式K-V存儲(chǔ),很好的滿足了我們對(duì)計(jì)算數(shù)據(jù)的存儲(chǔ)需求。而對(duì)于第一點(diǎn)不足,我們通過(guò)精細(xì)的設(shè)計(jì),將原始的離線計(jì)算轉(zhuǎn)化為增量計(jì)算,并實(shí)現(xiàn)了幾類經(jīng)典算法:

CF算法:協(xié)同過(guò)濾算法,根據(jù)當(dāng)前時(shí)間用戶對(duì)物品的行為,實(shí)時(shí)更新物品間的共現(xiàn)數(shù)據(jù)和用戶的興趣分布數(shù)據(jù),以計(jì)算物品間和用戶間的相似度,進(jìn)行基于物品或用戶的協(xié)同推薦。

CB算法:通過(guò)分析用戶的實(shí)時(shí)行為數(shù)據(jù),更新計(jì)算用戶和不同物品間的內(nèi)容相似度,以對(duì)用戶進(jìn)行推薦。

Hot算法:通過(guò)接收所有用戶的實(shí)時(shí)行為數(shù)據(jù),實(shí)時(shí)更新物品的熱度,分析得到當(dāng)前的熱點(diǎn)物品,如實(shí)時(shí)熱點(diǎn)新聞等,以對(duì)用戶進(jìn)行實(shí)時(shí)的推薦。

MF算法:協(xié)同過(guò)濾矩陣分解算法,根據(jù)用戶對(duì)物品的行為評(píng)分矩陣,將矩陣分解為用戶和物品的特征向量,以預(yù)測(cè)用戶對(duì)物品的喜好,來(lái)進(jìn)行推薦。

實(shí)現(xiàn)框架

下圖為基于Storm實(shí)現(xiàn)的框架圖,系統(tǒng)可以分為五層,數(shù)據(jù)接入層,數(shù)據(jù)預(yù)處理層,算法處理層,商品信息補(bǔ)充層,和存儲(chǔ)層。數(shù)據(jù)接入層負(fù)責(zé)接收數(shù)據(jù),預(yù)處理層負(fù)責(zé)根據(jù)歷史數(shù)據(jù)對(duì)數(shù)據(jù)進(jìn)行補(bǔ)全或者過(guò)濾等。算法處理層,是系統(tǒng)的主體部分,負(fù)責(zé)對(duì)數(shù)據(jù)進(jìn)行分析處理,實(shí)現(xiàn)相關(guān)推薦算法的計(jì)算,將算法結(jié)果傳入下一層。商品信息補(bǔ)充層負(fù)責(zé)對(duì)算法結(jié)果進(jìn)行商品信息補(bǔ)全,這里補(bǔ)全是為了后續(xù)與離線模型結(jié)合或向用戶推薦時(shí),進(jìn)一步對(duì)推薦結(jié)果做篩選的。最后一層是存儲(chǔ)層,負(fù)責(zé)將結(jié)果存入存儲(chǔ)部分,以供使用。

框架數(shù)據(jù)接入層

數(shù)據(jù)接入層負(fù)責(zé)接入數(shù)據(jù),并且做簡(jiǎn)單的檢查,對(duì)應(yīng)TdbankSpout。通用推薦平臺(tái)接收的數(shù)據(jù)共有五類,包括類別數(shù)據(jù),行為權(quán)重?cái)?shù)據(jù),商品屬性,用戶屬性,以及用戶行為數(shù)據(jù)。

類別數(shù)據(jù):是各個(gè)商品的類別的描述和等級(jí),用于基礎(chǔ)數(shù)據(jù)統(tǒng)計(jì)

行為權(quán)重?cái)?shù)據(jù):各個(gè)行為的權(quán)重,用于基礎(chǔ)數(shù)據(jù)統(tǒng)計(jì)

商品屬性:各個(gè)商品的基本屬性,基礎(chǔ)數(shù)據(jù)統(tǒng)計(jì)

用戶屬性:用戶的基本屬性,基礎(chǔ)數(shù)據(jù)統(tǒng)計(jì)

用戶行為數(shù)據(jù):記錄了用戶的行為,是系統(tǒng)主要要分析的數(shù)據(jù)。

數(shù)據(jù)預(yù)處理層

包括兩個(gè)部分,一個(gè)是基礎(chǔ)信息構(gòu)建,對(duì)應(yīng)的bolt是BaseInfoBolt,一個(gè)是對(duì)用戶行為數(shù)據(jù)進(jìn)行預(yù)處理,對(duì)應(yīng)的是PretreatmentBolt?;A(chǔ)信息構(gòu)建接受類別、行為權(quán)重、商品屬性和用戶屬性四種數(shù)據(jù),并存入相應(yīng)的table。預(yù)處理bolt接受用戶行為數(shù)據(jù),根據(jù)用戶群信息和歷史數(shù)據(jù)對(duì)用戶行為記錄進(jìn)行補(bǔ)全或者過(guò)濾等。

算法處理層

算法處理層是系統(tǒng)的主體部分,又可以分為數(shù)據(jù)統(tǒng)計(jì)部分和算法計(jì)算部分。數(shù)據(jù)統(tǒng)計(jì)部分包括用戶詳細(xì)信息統(tǒng)計(jì),最近訪問(wèn)商品統(tǒng)計(jì),人群行為數(shù)據(jù)統(tǒng)計(jì),人群商品共現(xiàn)數(shù)據(jù)統(tǒng)計(jì),場(chǎng)景Ctr統(tǒng)計(jì)等。

算法計(jì)算部分實(shí)現(xiàn)了CF,MF,Hot,CB等算法。這里對(duì)算法進(jìn)行描述。

商品信息補(bǔ)全層

商品信息補(bǔ)充層負(fù)責(zé)對(duì)算法結(jié)果進(jìn)行商品信息補(bǔ)全,這里補(bǔ)全是為了后續(xù)與離線模型結(jié)合或向用戶推薦時(shí),根據(jù)商品信息來(lái)對(duì)算法推薦結(jié)果進(jìn)行篩選后對(duì)相應(yīng)用戶進(jìn)行推薦,比如,根據(jù)商品價(jià)格和離線模型分析的用戶財(cái)富層次等對(duì)推薦結(jié)果進(jìn)行篩選,有些商品是vip免費(fèi)的,可以對(duì)vip用戶推薦,而對(duì)普通用戶則要慎重考慮。

存儲(chǔ)層

存儲(chǔ)層是系統(tǒng)的最后一層,負(fù)責(zé)將推薦結(jié)果存入tde,tde是騰訊構(gòu)建的一個(gè)內(nèi)存k-v存儲(chǔ),對(duì)用戶進(jìn)行在線推薦時(shí),從tde中取出推薦結(jié)果,與離線模型結(jié)合,對(duì)推薦結(jié)果進(jìn)一步處理后推薦給用戶。

2.2 實(shí)現(xiàn)優(yōu)化策略

針對(duì)實(shí)現(xiàn)過(guò)程中遇到的問(wèn)題和挑戰(zhàn),我們提出了幾點(diǎn)優(yōu)化策略以優(yōu)化資源使用、提升效果。

分群計(jì)算:在實(shí)際計(jì)算過(guò)程中,我們根據(jù)不同的用戶群體對(duì)數(shù)據(jù)進(jìn)行了劃分,并在劃分?jǐn)?shù)據(jù)集上進(jìn)行計(jì)算。用戶群體可根據(jù)用戶年齡、性別等進(jìn)行劃分,也可根據(jù)其他信息如職業(yè)、活躍度等進(jìn)行劃分。由于不同群體內(nèi)的用戶行為模式可能不同,在經(jīng)過(guò)劃分的數(shù)據(jù)集上進(jìn)行計(jì)算,可以得到更準(zhǔn)確的用戶行為模式。

滑動(dòng)窗口:為了保證數(shù)據(jù)模型的實(shí)時(shí)性,某些情況下需要對(duì)歷史數(shù)據(jù)進(jìn)行“遺忘”,即只使用最近一段時(shí)間的數(shù)據(jù)來(lái)進(jìn)行計(jì)算。為此,我們實(shí)現(xiàn)了滑動(dòng)窗口,對(duì)于某個(gè)時(shí)間單位,我們維護(hù)近n個(gè)時(shí)間窗口的數(shù)據(jù)信息,這些窗口會(huì)實(shí)時(shí)滑動(dòng),丟掉最遠(yuǎn)的數(shù)據(jù),保留最近的實(shí)時(shí)數(shù)據(jù)信息用于計(jì)算。

局部集成:為了有效維護(hù)計(jì)算數(shù)據(jù),我們使用了TDE作為數(shù)據(jù)外部存儲(chǔ),而在計(jì)算過(guò)程中與TDE的交互成為了計(jì)算開(kāi)銷不可忽視的一部分。為了減少與TDE的交互,降低資源使用,我們使用了局部集成策略,根據(jù)不同的計(jì)算特點(diǎn),將數(shù)據(jù)先在worker內(nèi)部做集成,然后再將局部集成結(jié)果合并到TDE。實(shí)踐證明,這一策略有效降低了與TDE的交互,減少了資源使用。

多層Hash:在計(jì)算過(guò)程中,會(huì)出現(xiàn)有多個(gè)worker需要寫同一個(gè)Key-Value值得到情況,稱之為寫沖突,為了保證TDE的高可用性,我們使用了多層Hash策略來(lái)解決寫沖突問(wèn)題,減小了TDE在數(shù)據(jù)一致性上的負(fù)擔(dān)。通過(guò)多層Hash策略,對(duì)同一個(gè)key的寫操作將只發(fā)生在同一個(gè)worker上。

實(shí)時(shí)可擴(kuò)展item-based CF

基于物品的協(xié)同過(guò)濾推薦[2](item-based CF)是亞馬遜于2003年公布的推薦算法,由于其推薦效果較好且易于實(shí)現(xiàn)等特點(diǎn),在工業(yè)界得到了廣泛應(yīng)用。這里我們以item-basedCF算法為例,解釋實(shí)時(shí)推薦算法的具體實(shí)現(xiàn)[3],有關(guān)其他算法的具體描述可參考論文[3]和[4]。

3.1 原始Item-basedCF

Item-based CF的基本思想是認(rèn)為用戶會(huì)喜歡和他以前所喜歡的物品相似的物品,其計(jì)算分為相似物品計(jì)算和用戶喜好預(yù)測(cè)兩部分,相似物品計(jì)算是整個(gè)算法的關(guān)鍵部分,用戶喜好預(yù)測(cè)根據(jù)物品相似度加權(quán)預(yù)測(cè)用戶對(duì)新物品的評(píng)分。<a href='/map/tuijianxitong/' style='color:#000;font-size:inherit;'>推薦系統(tǒng)</a>1<a href='/map/tuijianxitong/' style='color:#000;font-size:inherit;'>推薦系統(tǒng)</a>2

3.2 實(shí)時(shí)item-basedCF

在傳統(tǒng)的推薦算法中,用戶對(duì)物品的喜好評(píng)分由用戶打分決定,而現(xiàn)實(shí)世界中,用戶對(duì)物品的打分?jǐn)?shù)據(jù)較少,大部分?jǐn)?shù)據(jù)是用戶行為數(shù)據(jù),如瀏覽、點(diǎn)擊等,這些用戶行為具有不確定性,比如,用戶點(diǎn)擊一個(gè)物品詳情頁(yè)后關(guān)閉,可能表示用戶喜歡該物品因?yàn)橛脩酎c(diǎn)擊了詳情頁(yè),也可能表示用戶不喜歡該物品因?yàn)橛脩粲株P(guān)閉了詳情頁(yè)。這種情況下,我們只能從用戶行為數(shù)據(jù)中去猜測(cè)用戶的喜好。

為了降低對(duì)用戶行為數(shù)據(jù)的錯(cuò)誤理解造成的損失,我們對(duì)原始item-basedCF算法進(jìn)行了改進(jìn)。具體來(lái)說(shuō),我們?yōu)槊總€(gè)用戶行為類型設(shè)置了評(píng)分權(quán)重,衡量不同行為表示的用戶喜好的可靠性,如,對(duì)點(diǎn)擊行為我們?cè)O(shè)定其評(píng)分權(quán)重為一分,而購(gòu)買行為三分,因?yàn)橛脩舻馁?gòu)買比點(diǎn)擊更有可能說(shuō)明用戶喜歡該物品。對(duì)于一個(gè)物品,用戶可能有多種行為,比如點(diǎn)擊、購(gòu)買、評(píng)論等,這時(shí)我們?nèi)?quán)重最高的用戶行為評(píng)分作為該用戶對(duì)物品的喜好。

我們定義了用戶對(duì)兩個(gè)物品的共同評(píng)分用于計(jì)算物品相似度,如下:

通過(guò)將物品的共同評(píng)分設(shè)定為兩個(gè)物品評(píng)分中較低的那個(gè),我們限定了對(duì)行為錯(cuò)誤估計(jì)的損失為兩者的較小值。相應(yīng)的,兩個(gè)物品的相似度計(jì)算如下:

為了實(shí)現(xiàn)流式實(shí)時(shí)計(jì)算,實(shí)時(shí)更新物品的相似度,我們將上式計(jì)算分為了三部分,如下:

其中, ,

3.2 實(shí)時(shí)item-basedCF3.2 實(shí)時(shí)item-basedCF1

3.3 實(shí)時(shí)剪枝策略

在實(shí)際計(jì)算過(guò)程中,我們發(fā)現(xiàn),由于數(shù)據(jù)量太大,用戶的某一個(gè)行為會(huì)帶來(lái)大量的物品需要重新計(jì)算。具體來(lái)說(shuō),我們一般認(rèn)為用戶在某一時(shí)間段中交互的物品相互之間相關(guān),即可能相似,這個(gè)時(shí)間段可能是一天或者一個(gè)月,那么一個(gè)用戶行為帶來(lái)的物品評(píng)分更新,可能會(huì)造成數(shù)十甚至數(shù)百個(gè)物品對(duì)的相似度需要重新計(jì)算,而這些物品對(duì)很多可能是不那么相似的,即

數(shù)據(jù)公式

4 總結(jié)

隨著近年來(lái)個(gè)性化服務(wù)的發(fā)展,推薦系統(tǒng)在實(shí)際應(yīng)用中的價(jià)值也得到越來(lái)越多的認(rèn)可,大數(shù)據(jù)實(shí)時(shí)推薦在推薦效果上的優(yōu)秀表現(xiàn),以及其巨大的發(fā)展空間,使其獲得很多的關(guān)注。大數(shù)據(jù)實(shí)時(shí)推薦仍然有許多值得探索的地方,如實(shí)時(shí)矩陣分解、實(shí)時(shí)LR、實(shí)時(shí)深度學(xué)習(xí)等在線學(xué)習(xí)算法。


數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見(jiàn):http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }