本文由TalkingData首席數(shù)據(jù)科學(xué)家張夏天撰寫(xiě)
作者簡(jiǎn)介:張夏天,TalkingData首席數(shù)據(jù)科學(xué)家,負(fù)責(zé)TalkingData機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘工作,為T(mén)alkingData的數(shù)據(jù)產(chǎn)品和服務(wù)提供支持。曾在IBM中國(guó)研究院、騰訊數(shù)據(jù)平臺(tái)部和華為諾亞方舟實(shí)驗(yàn)室任職。對(duì)大數(shù)據(jù)環(huán)境下的機(jī)器學(xué)習(xí)、數(shù)據(jù)挖掘有深入的研究和實(shí)踐經(jīng)驗(yàn)。
TalkingData誕生于2011年,目前提供應(yīng)用統(tǒng)計(jì)分析、游戲運(yùn)營(yíng)分析、移動(dòng)廣告監(jiān)測(cè)、移動(dòng)數(shù)據(jù)DMP平臺(tái)、移動(dòng)行業(yè)數(shù)據(jù)分析和洞察,以及企業(yè)級(jí)移動(dòng)數(shù)據(jù)分析和挖掘的解決方案等產(chǎn)品和服務(wù)。隨著各項(xiàng)業(yè)務(wù)快速發(fā)展,需要機(jī)器學(xué)習(xí)支撐的需求也越多越多,數(shù)據(jù)規(guī)模也越來(lái)越大,帶來(lái)很大的挑戰(zhàn)。而且TalkingData作為一個(gè)新興企業(yè),資源相對(duì)有限,沒(méi)有辦法通過(guò)大量增加硬件資源、增加計(jì)算能力來(lái)應(yīng)對(duì)大數(shù)據(jù)問(wèn)題,這給我們帶來(lái)了更大的挑戰(zhàn)。本文將簡(jiǎn)要介紹我們應(yīng)對(duì)這些挑戰(zhàn)的一些經(jīng)驗(yàn)。
計(jì)算平臺(tái)
TalkingData的數(shù)據(jù)處理集群目前僅有32臺(tái)機(jī)器,除了承擔(dān)機(jī)器學(xué)習(xí)任務(wù)外,更多的工作是數(shù)據(jù)處理,集群的負(fù)荷是非常繁重的。為了盡可能提高集群計(jì)算效率和程序開(kāi)發(fā)效率,我們選擇了Spark。我們認(rèn)為Spark最大的兩個(gè)優(yōu)點(diǎn)。一是數(shù)據(jù)處理效率高(相對(duì)于Hadoop MapReduce而言)。二是開(kāi)發(fā)效率高,Scala語(yǔ)言的特性和Spark的DAG機(jī)制使得復(fù)雜的數(shù)據(jù)處理流程和計(jì)算邏輯能夠很簡(jiǎn)潔地編寫(xiě),雖然Scala語(yǔ)言的特性也非常多,但是Spark對(duì)Scala語(yǔ)言的掌握程度要求不高,對(duì)一般程序員而言,一周時(shí)間足夠掌握,而且程序開(kāi)發(fā)效率相比Hadoop MapReduce能夠提高一倍以上。 而且Spark社區(qū)的發(fā)展也很快(活躍開(kāi)發(fā)者人數(shù)已經(jīng)超過(guò)Hadoop MapReduce),能夠得到較好的社區(qū)支持和未來(lái)更多新功能。當(dāng)然也有人質(zhì)疑Spark在大規(guī)模集群上的穩(wěn)定性,但對(duì)我們來(lái)說(shuō)目前這還不是一個(gè)問(wèn)題。
算法分析
大數(shù)據(jù)給機(jī)器學(xué)習(xí)帶來(lái)了很大的機(jī)遇,也給機(jī)器學(xué)習(xí)帶來(lái)了很多的挑戰(zhàn)。大量的訓(xùn)練樣本和豐富的特征維度,使得學(xué)習(xí)算法更容易學(xué)到較好的模型。數(shù)據(jù)更新速度很快,我們也可以更快地更新模型。同時(shí),由于數(shù)據(jù)規(guī)模的增大使得機(jī)器學(xué)習(xí)算法的效率問(wèn)題越來(lái)越突出。首先,從算法復(fù)雜度來(lái)說(shuō),有些算法的復(fù)雜度與訓(xùn)練樣本數(shù)(如SVM)或者特征數(shù)量(如決策樹(shù))的關(guān)系是超線性關(guān)系。有一些模型學(xué)習(xí)中用到的優(yōu)化方法,如牛頓法,需要計(jì)算訓(xùn)練特征維度規(guī)模的海塞矩陣的逆矩陣及其乘法,其計(jì)算復(fù)雜度為 O(n^3))。隨著數(shù)據(jù)量和特征數(shù)量的增長(zhǎng),模型訓(xùn)練的計(jì)算量急速增加,使得訓(xùn)練時(shí)間變得越來(lái)越長(zhǎng)而不可接受。而硬件數(shù)量的擴(kuò)充,帶來(lái)的計(jì)算效率提升往往是低于線性的增長(zhǎng)。因此,在進(jìn)行大數(shù)據(jù)問(wèn)題時(shí),我們始終面臨著計(jì)算資源相對(duì)不足的問(wèn)題。
為了解決計(jì)算復(fù)雜度的問(wèn)題,也出現(xiàn)一些計(jì)算量較小的優(yōu)化方法,如隨機(jī)梯度下降(Stochastic Gradient Decent)、小批量梯度下降(mini-Batch Gradient Decent)等方法。但是,機(jī)器學(xué)習(xí)算法大部分都是迭代算法,需要反復(fù)使用數(shù)據(jù)多次,而在處理大規(guī)模問(wèn)題的時(shí)候,訓(xùn)練數(shù)據(jù)集可能無(wú)法全部裝載到內(nèi)存中,而需要一次一次的從分布式文件系統(tǒng)中讀取,帶來(lái)巨大的重復(fù)I/O開(kāi)銷。即使Spark這樣具有In-Memory計(jì)算能力的分布式計(jì)算框架,同樣受制于集群資源和任務(wù)隊(duì)列資源的限制,很多情況下并不能夠把訓(xùn)練數(shù)據(jù)全部裝載到內(nèi)存中,還是需要多次從分布式文件系統(tǒng)中讀取數(shù)據(jù)文件。
數(shù)據(jù)迭代是機(jī)器學(xué)習(xí)算法處理大數(shù)據(jù)問(wèn)題的“阿格硫斯之踵”。因此,盡可能降低算法迭代次數(shù),是提高大規(guī)模機(jī)器學(xué)習(xí)任務(wù)的有效方法。在實(shí)踐中,我們盡可能使用那些只需掃描數(shù)據(jù)一遍的算法。 如用SimHash來(lái)進(jìn)行聚類, 用關(guān)聯(lián)表算法來(lái)做推薦等。同時(shí),我們也會(huì)優(yōu)化算法實(shí)現(xiàn),使其無(wú)需迭代即可訓(xùn)練出較好的模型,如隨機(jī)決策樹(shù)算法(Random Decision Tree)、線性回歸(Linear Regression)和邏輯斯特回歸(Logsitic Regression)等。另外,雖然我們以Spark為計(jì)算平臺(tái),但是并沒(méi)有太多的使用Spark內(nèi)嵌的MLLib來(lái)完成機(jī)器學(xué)習(xí)任務(wù)。最主要的原因也是因?yàn)镸LLib中的算法基本都是迭代算法,其效率達(dá)不到我們的要求。
實(shí)際應(yīng)用
TalkingData的業(yè)務(wù)比較多,需要機(jī)器學(xué)習(xí)提供支持的地方也比較多。目前大致可分為四個(gè)方面:移動(dòng)應(yīng)用推薦,廣告投放優(yōu)化,用戶畫(huà)像和游戲數(shù)據(jù)挖掘等四大塊。這里分別簡(jiǎn)要介紹下這幾個(gè)方面的工作。
【移動(dòng)應(yīng)用推薦】
TalkingData為幾家移動(dòng)應(yīng)用市場(chǎng)提供過(guò)移動(dòng)應(yīng)用推薦解決方案如機(jī)鋒和同步推,使用用戶的下載和瀏覽行為數(shù)據(jù),來(lái)進(jìn)行移動(dòng)應(yīng)用的關(guān)聯(lián)推薦和個(gè)性化推薦。但是這種外包模式顯然無(wú)法充分利用我們的數(shù)據(jù)優(yōu)勢(shì),也不是一種便捷的服務(wù)提供模式。前幾年當(dāng)推薦系統(tǒng)成為工業(yè)界和學(xué)術(shù)界都非常關(guān)心的技術(shù)時(shí),國(guó)內(nèi)外都出現(xiàn)了以提供推薦系統(tǒng)解決方案的公司。但目前這些公司都已經(jīng)轉(zhuǎn)型,比如MyStrands.com, 目前已專注于提供金融客戶數(shù)據(jù)管理和分析工具,而不再把推薦系統(tǒng)解決方案作為重點(diǎn)。
實(shí)踐已經(jīng)證明第三方提供技術(shù)解決方案(包括提供SaaS服務(wù))的模式并不具備很大的市場(chǎng)。我們通過(guò)這些外包項(xiàng)目,發(fā)現(xiàn)這種模式最大的問(wèn)題在于數(shù)據(jù)的收集處理。如果我們要求客戶按照我們提供的數(shù)據(jù)格式,為我們準(zhǔn)備好數(shù)據(jù),則會(huì)給客戶帶來(lái)很大的負(fù)擔(dān)。由于客戶對(duì)推薦系統(tǒng)了解不多,對(duì)于如何把已有的數(shù)據(jù)映射成我們的數(shù)據(jù)格式通常會(huì)感到比較困惑,而難以正確完成。而如果我們根據(jù)用戶提供的現(xiàn)有數(shù)據(jù)進(jìn)行轉(zhuǎn)換,又使得我們的服務(wù)難以標(biāo)準(zhǔn)化而快速?gòu)?fù)制。另外就是一旦我們把推薦系統(tǒng)交付給客戶后,我們也很難給客戶提供持續(xù)及時(shí)的效果優(yōu)化服務(wù)。
因?yàn)樯鲜鲞@些問(wèn)題,我們的推薦系統(tǒng)服務(wù),就從提供外包轉(zhuǎn)向了提供輕量級(jí)的移動(dòng)應(yīng)用推薦服務(wù)接口。這一服務(wù)也可以算是一種SaaS模式,但是與之前其他公司提供的推薦SaaS服務(wù)的重大區(qū)別是我們不需要客戶提供推薦模型訓(xùn)練數(shù)據(jù),客戶僅需要調(diào)用我們的接口獲得關(guān)聯(lián)推薦和個(gè)性化推薦的結(jié)果。這就樣也就沒(méi)有轉(zhuǎn)換客戶數(shù)據(jù)的問(wèn)題,從而極大地降低推薦系統(tǒng)服務(wù)的使用門(mén)檻。而通過(guò)SaaS服務(wù),我們也可以持續(xù)優(yōu)化和升級(jí)推薦算法的效果。
我們能夠提供這樣的服務(wù),主要是隨著TalkingData積累的數(shù)據(jù)量越來(lái)越大,我們逐漸積累了大量的移動(dòng)應(yīng)用使用情況數(shù)據(jù),這些數(shù)據(jù)比下載和瀏覽行為數(shù)據(jù)能更準(zhǔn)確地反映用戶的移動(dòng)應(yīng)用興趣偏好,我們完全具備了不使用客戶的數(shù)據(jù)而提供更好的推薦結(jié)果的能力。移動(dòng)應(yīng)用服務(wù)是作為T(mén)alkingData DMP里的一組接口向外提供服務(wù)的,我們將其作為T(mén)alkingData向外提供數(shù)據(jù)能力的一個(gè)出口。目前TalkingData推薦服務(wù)接口,每天要處理上億的移動(dòng)應(yīng)用使用行為Session來(lái)建立推薦模型,覆蓋30萬(wàn)以上的移動(dòng)應(yīng)用?,F(xiàn)在,已經(jīng)有一些移動(dòng)應(yīng)用換量平臺(tái)使用我們的服務(wù)接口,也有一些移動(dòng)應(yīng)用市場(chǎng)準(zhǔn)備嘗試使用我們的推薦接口來(lái)為用戶提供移動(dòng)應(yīng)用推薦。
近些年來(lái),推薦算法是數(shù)據(jù)挖掘,機(jī)器學(xué)習(xí)學(xué)術(shù)會(huì)議上非常熱門(mén)的主題之一??梢哉f(shuō)相關(guān)的文獻(xiàn)是汗牛充棟,各種新算法和算法改進(jìn)層出不窮。Netflix懸賞100萬(wàn)美元的推薦系統(tǒng)競(jìng)賽更是推動(dòng)了推薦算法研究的熱潮。然而眾多的推薦算法,在實(shí)際應(yīng)用中并不是那么好用。首先對(duì)于最基礎(chǔ)的協(xié)同過(guò)濾算法,即通過(guò)計(jì)算用戶或者物品之間相似性的方法,由于其計(jì)算復(fù)雜度與用戶或者物品的數(shù)量是超線性的關(guān)系,而且需要計(jì)算矩陣乘法,難以并行化,用來(lái)處理大規(guī)模問(wèn)題比較困難。而基于矩陣分解的方法,除了效率問(wèn)題外,就是難以保證有較好的訓(xùn)練數(shù)據(jù)。因?yàn)檫@些算法的假設(shè)是基于每個(gè)用戶和物品都有足夠多的評(píng)分,但是實(shí)際上這是不可能的。另外,矩陣分解算法的目標(biāo)是預(yù)測(cè)評(píng)分值與實(shí)際評(píng)分值最小化, 而實(shí)際應(yīng)用中我們真正關(guān)心的是用戶對(duì)不同物品感興趣程度的排序。最小化評(píng)分誤差,是否就能最小化排序誤差?當(dāng)然,也有一些矩陣分解算法被提出來(lái)用以最小化排序誤差,但是其計(jì)算量的增長(zhǎng)又是十分巨大的。
因此,我們基于現(xiàn)實(shí)的數(shù)據(jù)情況(都是隱式反饋,設(shè)備規(guī)模較大, 和應(yīng)用較多), 采用了在工程上比較好實(shí)現(xiàn),計(jì)算效率較高,結(jié)果也較好解釋, 但是一點(diǎn)也不先進(jìn)的算法,或者說(shuō)算法框架—關(guān)聯(lián)表。關(guān)聯(lián)表算法原理比較簡(jiǎn)單,可以看做是對(duì)關(guān)聯(lián)規(guī)則挖掘的一種簡(jiǎn)化。該算法通過(guò)統(tǒng)計(jì)物品兩兩之間同時(shí)出現(xiàn)的頻次(如一個(gè)設(shè)備在一段時(shí)間內(nèi)使用了哪些應(yīng)用),構(gòu)建出物品到物品的關(guān)聯(lián)表。在進(jìn)行關(guān)聯(lián)推薦時(shí),通過(guò)在關(guān)聯(lián)表中查找目標(biāo)物品的Top N關(guān)聯(lián)物品進(jìn)行推薦。而在進(jìn)行個(gè)性化推薦時(shí),使用用戶最近有行為的那些物品分別查詢關(guān)聯(lián)表,然后再合并這些結(jié)果作為最后的推薦結(jié)果。
下面是一個(gè)關(guān)聯(lián)表構(gòu)建和使用的例子:
基于以上的關(guān)聯(lián)表,做Top 2的關(guān)聯(lián)推薦時(shí), 如果目標(biāo)物品是a2, 推薦的結(jié)果是a5和a3(排除a2)。如果要做Top 2個(gè)性化推薦,有d11: a1, a2, 用a1查關(guān)聯(lián)表(a1, a2)得到a5(3), a3(2), a4(2)用a2查關(guān)聯(lián)表得到a5(5), a3(4), a4(3). 合并以后得到a5(8), a3(6), a4(5), 取前兩個(gè)為a5, a3。在此基礎(chǔ)上,根據(jù)實(shí)際情況的需要,我們還需要對(duì)關(guān)聯(lián)表的結(jié)果進(jìn)行去流行,已避免推薦出來(lái)的全都是最流行的那些應(yīng)用,在這里就不詳述了。
為了平衡長(zhǎng)期興趣和短期興趣,我們采用不同時(shí)間內(nèi)的數(shù)據(jù)建立關(guān)聯(lián)表,比如一個(gè)月,一周和一天的數(shù)據(jù)分別建立關(guān)聯(lián)表。也可以使用不同的數(shù)據(jù)源來(lái)建立關(guān)聯(lián)表,比如使用應(yīng)用的數(shù)據(jù)和安裝應(yīng)用的數(shù)據(jù)。然后再通過(guò)多個(gè)關(guān)聯(lián)表的加權(quán)結(jié)果來(lái)獲得最后的結(jié)果。實(shí)際上,除了用用戶行為數(shù)據(jù)來(lái)統(tǒng)計(jì)應(yīng)用之間的關(guān)聯(lián)程度來(lái)建立關(guān)聯(lián)表外,還可以使用其他的數(shù)據(jù)和方法來(lái)構(gòu)建物品兩兩之間的關(guān)系。比如為了解決應(yīng)用的冷啟動(dòng)問(wèn)題,我們使用應(yīng)用的介紹文本,采用文本處理的一些技術(shù)建立應(yīng)用之間的關(guān)聯(lián)關(guān)系。因此,我們推薦系統(tǒng)的核心就是一系列這樣的關(guān)聯(lián)表。在做推薦時(shí),通過(guò)一定的規(guī)則根據(jù)輸入?yún)?shù)查詢各個(gè)關(guān)聯(lián)表,然后融合也這些關(guān)聯(lián)表的結(jié)合,作為最終的推薦結(jié)果。關(guān)聯(lián)表方法,從算法的角度上看無(wú)疑是十分簡(jiǎn)單的,但是是非常適合工程化的。從我們的實(shí)踐來(lái)看,在很多情況下,在精度上并不比先進(jìn)算法有太大的差距。
【廣告投放優(yōu)化】
TalkingData積累了大量移動(dòng)數(shù)據(jù),完全具備進(jìn)行廣告精準(zhǔn)投放的能力。但是作為第三方數(shù)據(jù)平臺(tái),我們嚴(yán)守中立,不會(huì)從事任何具體的廣告投放業(yè)務(wù),我們僅僅是為移動(dòng)廣告生態(tài)系統(tǒng)提供數(shù)據(jù)能力,提高整個(gè)生態(tài)系統(tǒng)的效率。
我們的移動(dòng)DMP可以提供移動(dòng)設(shè)備的應(yīng)用興趣等標(biāo)簽,廣告主、網(wǎng)盟、DSP都可以通過(guò)我們的DMP平臺(tái)來(lái)獲得受眾數(shù)據(jù)來(lái)優(yōu)化廣告投放。但是也有一些合作伙伴,希望我們能夠直接提供投放的目標(biāo)設(shè)備或者媒體。為了提供較好的結(jié)果,我們使用超過(guò)1.5億移動(dòng)設(shè)備使用行為作為訓(xùn)練數(shù)據(jù),特征空間超過(guò)180萬(wàn)維,以使用過(guò)投放目標(biāo)應(yīng)用的設(shè)備為正樣本進(jìn)行訓(xùn)練。為了能夠?qū)λ性O(shè)備進(jìn)行預(yù)測(cè)并輸出所有應(yīng)用與目標(biāo)應(yīng)用的關(guān)系,我們選擇使用Logistic Regression算法進(jìn)行訓(xùn)練。Logistic Regress也是處理大規(guī)模分類問(wèn)題的常用算法,模型和訓(xùn)練過(guò)程相對(duì)簡(jiǎn)單,模型的可解釋性也強(qiáng)。
但是這個(gè)規(guī)模的問(wèn)題,如果采用一般的算法實(shí)現(xiàn),如MLLib的實(shí)現(xiàn),在我們的集群上最少也需要幾個(gè)小時(shí)的時(shí)間進(jìn)行訓(xùn)練, 這會(huì)長(zhǎng)時(shí)間占據(jù)集群資源影響其他任務(wù)的完成。 而且這個(gè)學(xué)習(xí)問(wèn)題,除了數(shù)據(jù)規(guī)模比較大以外,還有一個(gè)挑戰(zhàn)就是正樣本數(shù)量通常較少。因?yàn)樾枰斗艔V告的應(yīng)用,通常使用的用戶不會(huì)太多。我們遇到的情況,正樣本從幾百到幾百萬(wàn)都有,但即使是幾百萬(wàn)的正樣本,相對(duì)于1.5億的訓(xùn)練樣本,正樣本比例也是極低的,不過(guò)千分之幾。在這種情況下,一般很難訓(xùn)練得到較好的模型,我們使用過(guò)MLLib的LR算法進(jìn)行訓(xùn)練,即使有幾百萬(wàn)的正樣本,模型的AUC指標(biāo)也僅比0.5高一點(diǎn),基本不具備區(qū)分正負(fù)樣本的能力。
這種情況下,一般可以對(duì)訓(xùn)練數(shù)據(jù)采樣來(lái)增加正樣本的比例來(lái)改善的學(xué)習(xí)結(jié)果。采樣有兩種方式,一種是增加正樣本數(shù)量,另一種是減少負(fù)樣本數(shù)量。前者會(huì)增加訓(xùn)練樣本的數(shù)量而增加計(jì)算量。而后者又因?yàn)橛脩粜袨閿?shù)據(jù)是稀疏數(shù)據(jù)且維度很高,如果丟棄大量的負(fù)樣本,就會(huì)丟棄大量的特征,使得在預(yù)測(cè)時(shí)對(duì)只有這些特征的設(shè)備無(wú)法進(jìn)行預(yù)測(cè)。因此我們不希望通過(guò)調(diào)整樣本比例的方式來(lái)解決這個(gè)問(wèn)題。為了解決訓(xùn)練效率和樣本偏倚的問(wèn)題,我們優(yōu)化了Logistic Regression算法求解的過(guò)程,使得訓(xùn)練過(guò)程只需要掃描數(shù)據(jù)一遍即可達(dá)到收斂,而且在樣本偏倚很嚴(yán)重的情況下也能達(dá)到較好的效果。在僅占用集群8%資源的情況下,Logistic Regression算法僅需5分鐘即可完成具有180萬(wàn)維特征,1.5億樣本的訓(xùn)練。從測(cè)試情況來(lái)看,在正樣本較多的情況下(幾十萬(wàn)到幾百萬(wàn)),AUC基本都在0.7以上,很多時(shí)候超過(guò)0.8,甚至0.9。而在正樣本較少的情況下(幾百到幾千),一般也能達(dá)到0.6以上的AUC。 從實(shí)際廣告投放情況來(lái)看,通常能提高50%以上的轉(zhuǎn)化率。
雖然Logistic Regression算法已經(jīng)優(yōu)化得很快了,但是在有多個(gè)優(yōu)化任務(wù)的時(shí)候,還是可能會(huì)感到速度太慢。曾有過(guò)要跑500個(gè)任務(wù)的情況,一個(gè)任務(wù)跑5分鐘,就需要2500分鐘,接近42個(gè)小時(shí)。實(shí)際上500個(gè)任務(wù),就需要掃描數(shù)據(jù)500次,這是最大的開(kāi)銷。實(shí)際上,對(duì)于這500個(gè)任務(wù),使用的都是同一份數(shù)據(jù)。其格式如下:
設(shè)備id, 應(yīng)用1, 應(yīng)用2, 應(yīng)用3……
只是每個(gè)任務(wù)會(huì)指定一個(gè)應(yīng)用為學(xué)習(xí)目標(biāo),其余的應(yīng)用則為特征。把原始數(shù)據(jù)根據(jù)指定應(yīng)用加工成訓(xùn)練數(shù)據(jù),這在Spark中是非常容易完成的。但是每個(gè)任務(wù)都這么干一次,就會(huì)多次的讀取這個(gè)數(shù)據(jù)。顯然,這是非常不經(jīng)濟(jì)的。要提高效率,就需要消除這些冗余IO操作,只進(jìn)行一次數(shù)據(jù)讀取。因?yàn)槲覀兊乃惴ㄊ窃诿總€(gè)數(shù)據(jù)分片上對(duì)數(shù)據(jù)逐條處理,因此對(duì)一條數(shù)據(jù),進(jìn)行多種不同的處理并沒(méi)有難度,只是在最后的Reduce階段,需要對(duì)不同分片上不同任務(wù)的模型結(jié)果進(jìn)行整合,這在技術(shù)上不是什么難題。批量訓(xùn)練程序的效率是非常高的,對(duì)于500個(gè)任務(wù),批量訓(xùn)練程序只需要50分鐘就可以完成訓(xùn)練,訓(xùn)練時(shí)間縮短到原來(lái)的2%。平均一個(gè)任務(wù)(有1.5億訓(xùn)練樣本,180萬(wàn)的特征空間)的訓(xùn)練時(shí)間為6秒。批量訓(xùn)練程序的限制在于內(nèi)存,任務(wù)越多,對(duì)應(yīng)的模型越多,占用的內(nèi)存就越大。目前的數(shù)據(jù)情況能夠支撐大約1000個(gè)模型。
【用戶畫(huà)像】
TalkingData積累的數(shù)據(jù)以移動(dòng)設(shè)備的行為數(shù)據(jù)為主,無(wú)法直接獲得設(shè)備的興趣標(biāo)簽。而DMP向外提供數(shù)據(jù)時(shí),又必須以標(biāo)簽的形式向外提供數(shù)據(jù),而且直接提供行為數(shù)據(jù)也對(duì)隱私保護(hù)不利。目前主要是利用移動(dòng)應(yīng)用的標(biāo)簽(由我們的專業(yè)團(tuán)隊(duì)人工標(biāo)注)和設(shè)備使用應(yīng)用的數(shù)據(jù)對(duì)設(shè)備進(jìn)行標(biāo)簽標(biāo)注。除了為每個(gè)設(shè)備畫(huà)像,有時(shí)候我們需要對(duì)某個(gè)或者某類應(yīng)用的使用者進(jìn)行群體畫(huà)像。
我們?cè)ㄟ^(guò)直接統(tǒng)計(jì)用戶群使用過(guò)的其他應(yīng)用比例作為用戶畫(huà)像的基礎(chǔ),但是發(fā)現(xiàn)由于應(yīng)用活躍程度的長(zhǎng)尾效應(yīng),不管是什么人群,使用率最高的應(yīng)用基本都是微信,QQ這些平臺(tái)級(jí)應(yīng)用,也就沒(méi)有辦法總結(jié)出這個(gè)人群的特征了。而如果將這個(gè)人群的各個(gè)應(yīng)用的使用率除以所有設(shè)備上的應(yīng)用使用率,得到應(yīng)用使用率的提升率,又會(huì)突出那些使用率很低的應(yīng)用。通過(guò)調(diào)整公式和參數(shù),可以在提升率和使用率之間做一些妥協(xié),但很難達(dá)到理想的狀態(tài)。
為了解決這個(gè)問(wèn)題,我們將這個(gè)問(wèn)題作為分類問(wèn)題,使用Logistic Regression模型來(lái)處理,以獲得模型中各個(gè)特征(即應(yīng)用)的系數(shù)作為關(guān)聯(lián)程度的分值,取得了非常好的效果。這個(gè)學(xué)習(xí)問(wèn)題與廣告投放優(yōu)化中的問(wèn)題是完全一樣的,都是以某個(gè)或者某些應(yīng)用的使用設(shè)備為正樣本,其他設(shè)備為負(fù)樣本,而以其他的應(yīng)用作為特征,訓(xùn)練Logistic Regression模型,從而得到各個(gè)應(yīng)用與目標(biāo)人群的關(guān)聯(lián)程度。
從訓(xùn)練得到的結(jié)果來(lái)看,流行度高的應(yīng)用都得到了抑制,而關(guān)聯(lián)程度高的應(yīng)用使用率也不會(huì)太低。得到了人群的關(guān)聯(lián)應(yīng)用后,可以再利用這些應(yīng)用的標(biāo)簽為這個(gè)人群標(biāo)注興趣標(biāo)簽。用這個(gè)方法,我們?yōu)檎猩蹄y行掌上生活,和一些廣告的受眾人群做了畫(huà)像,都取得了比較好的效果。
【游戲數(shù)據(jù)挖掘】
TalkingData的游戲運(yùn)營(yíng)分析平臺(tái),是國(guó)內(nèi)手游運(yùn)營(yíng)分析工具的開(kāi)創(chuàng)者。目前為超過(guò)3萬(wàn)款游戲服務(wù),其中包括消滅星星、植物大戰(zhàn)僵尸這些非常受歡迎的游戲。游戲運(yùn)營(yíng)分析平臺(tái)可以看作應(yīng)用統(tǒng)計(jì)平臺(tái)的游戲?qū)I(yè)版,在數(shù)據(jù)收集上增加了游戲相關(guān)的一些標(biāo)準(zhǔn)事件如升級(jí),虛擬幣消費(fèi),付費(fèi)等。
因?yàn)門(mén)alkingData的游戲運(yùn)營(yíng)分析平臺(tái)的定位,不僅僅是提供統(tǒng)計(jì)指標(biāo),還需要一定的預(yù)測(cè)能力,為游戲運(yùn)營(yíng)方預(yù)測(cè)哪些用戶可能流失,哪些用戶有可能付費(fèi)。流失預(yù)測(cè)和付費(fèi)預(yù)測(cè),都是分類問(wèn)題。因?yàn)槲覀冃枰紤]同時(shí)為3萬(wàn)多款游戲提供這樣的預(yù)測(cè),我們沒(méi)辦法逐個(gè)分析和抽取每款游戲收集的數(shù)據(jù),特別是自定義事件來(lái)作為訓(xùn)練的特征。因此從規(guī)模化的角度考慮,我們立足于使用十幾個(gè)標(biāo)準(zhǔn)化事件的數(shù)據(jù)作為特征。
而對(duì)于自定義事件,我們也將其作為標(biāo)準(zhǔn)化事件來(lái)使用,僅使用自定義事件的總次數(shù),和出現(xiàn)的不同的自定義事件的種數(shù)作為特征。我們認(rèn)為一個(gè)玩家產(chǎn)生的自定義事件的次數(shù)和種類,與玩家對(duì)這個(gè)游戲的興趣和投入程度應(yīng)該是正相關(guān)的。這樣,既能利用一些自定義事件的信息,但是又不需要對(duì)每個(gè)游戲的自定義事件做深入分析。當(dāng)然,這個(gè)方案是預(yù)測(cè)精度向工程可行性的妥協(xié)方案,必然是要損失一定的精度。但是從我們的測(cè)試結(jié)果來(lái)看,預(yù)測(cè)精度還是可以接受的。這個(gè)工作與前面提到的廣告投放優(yōu)化問(wèn)題,在規(guī)模上也有一些不同。對(duì)于每一個(gè)游戲而言,都不是一個(gè)大規(guī)模的機(jī)器學(xué)習(xí)問(wèn)題,訓(xùn)練樣本和最多也就百萬(wàn)規(guī)模,而特征數(shù)量?jī)H有十幾維。用我們優(yōu)化過(guò)的Logistic Regression算法,這樣的規(guī)模單機(jī)訓(xùn)練僅需要十幾秒的事件即可完成計(jì)算。但另一方面,因?yàn)樾枰С炙杏螒?,每次需要?xùn)練3萬(wàn)多個(gè)模型。
這種情況下,運(yùn)用Spark的并行能力來(lái)加速每個(gè)任務(wù)的訓(xùn)練速度沒(méi)有什么意義,反而會(huì)因?yàn)槎喙?jié)點(diǎn)之間的同步問(wèn)題,浪費(fèi)掉不少計(jì)算能力。因此,我們?cè)诿總€(gè)游戲的訓(xùn)練數(shù)據(jù)和預(yù)測(cè)數(shù)據(jù)處理好以后,把每一個(gè)游戲的數(shù)據(jù)Shuffle到一起,然后在Reduce過(guò)程中進(jìn)行單機(jī)的Logistic Regression算法模型訓(xùn)練,然后進(jìn)行預(yù)測(cè)。實(shí)際上,這里利用了Spark的并行能力來(lái)調(diào)度多個(gè)單機(jī)任務(wù)在集群上執(zhí)行。
總結(jié):機(jī)器學(xué)習(xí)能力服務(wù)化
前面介紹了我們?cè)跈C(jī)器學(xué)習(xí)方面的一些工作。最后,總結(jié)一下我們的一點(diǎn)工作經(jīng)驗(yàn)。TalkingData作為一個(gè)數(shù)據(jù)公司,很多業(yè)務(wù)都需要機(jī)器學(xué)習(xí)能力的支持,而我們的機(jī)器學(xué)習(xí)團(tuán)隊(duì)規(guī)模并不大,無(wú)法對(duì)每一個(gè)業(yè)務(wù)需求都做到及時(shí)響應(yīng)。比如廣告投放優(yōu)化的工作,每次業(yè)務(wù)部門(mén)接到客戶的需求,都需要來(lái)聯(lián)系我們,讓我們跑結(jié)果。這種方式讓我們經(jīng)常要干一些重復(fù)勞動(dòng),每次修改一下腳本,然后向Spark集群提交任務(wù),跑出結(jié)果,再篩選設(shè)備和媒體出來(lái)。而客戶的需求也得不到及時(shí)的響應(yīng)。
為了解決這個(gè)問(wèn)題,我們就把這個(gè)機(jī)器學(xué)習(xí)的能力進(jìn)行了服務(wù)化,提供了Web界面給我們的業(yè)務(wù)部門(mén)使用。他們收到客戶需求后,就不需要再找我們了,而是直接使用Web工具,自動(dòng)生成結(jié)果。這個(gè)工具幾乎不涉及機(jī)器學(xué)習(xí)的專業(yè)知識(shí),使用者僅需要指定投放的目標(biāo)應(yīng)用是哪一個(gè)就行。這樣,我們免去了一些沒(méi)有太多意義的重復(fù)性勞動(dòng),又讓業(yè)務(wù)部門(mén)不再需要依賴我們來(lái)跑結(jié)果,提高了雙方工作效率。
移動(dòng)應(yīng)用推薦服務(wù)接口也是一個(gè)機(jī)器學(xué)習(xí)能力服務(wù)化的例子,我們把為客戶部署推薦系統(tǒng),改為了提供推薦服務(wù),而且進(jìn)一步利用了我們的數(shù)據(jù)能力,降低用戶使用門(mén)檻。而我們也可以把精力集中在提供更高質(zhì)量的標(biāo)準(zhǔn)化服務(wù),而不是為客戶的需求變化而疲于奔命。
基于這些經(jīng)驗(yàn),我們認(rèn)為一個(gè)機(jī)器學(xué)習(xí)團(tuán)隊(duì),不僅要能提供好的機(jī)器學(xué)習(xí)能力(高效精準(zhǔn)的算法),還需要把這些能力盡可能的服務(wù)化,為其他部門(mén)或者是客戶提供簡(jiǎn)單易用的機(jī)器學(xué)習(xí)服務(wù)。機(jī)器學(xué)習(xí)團(tuán)隊(duì)的工作應(yīng)該是不斷解決新的問(wèn)題,把這些問(wèn)題的解決方案固化成服務(wù)給公司內(nèi)外的用戶來(lái)使用。當(dāng)我們解決了一個(gè)問(wèn)題時(shí),就不要再讓這個(gè)問(wèn)題成為我們的日常性工作,而牽扯我們解決新問(wèn)題的精力。
End.
- 蜜度索驥:以跨模態(tài)檢索技術(shù)助力“企宣”向上生長(zhǎng)
- 小米新車發(fā)布:YU7亮相,小米注冊(cè)全新商標(biāo),揭秘第二款車的神秘面紗
- 一汽大眾高層變動(dòng):潘占福"下課",誰(shuí)將接任黨委書(shū)記、總經(jīng)理?
- 2024新能源汽車行業(yè)破繭而出:技術(shù)落地與綠色變革的雙重挑戰(zhàn)
- 中國(guó)新能源市場(chǎng)大熱:最高省市滲透率超7成,油車逐漸淡出視線
- 特斯拉Cybertruck漏油問(wèn)題嚴(yán)重,提車3天需維修1個(gè)月,車主怒火中燒
- 360大模型:重新定義AGI,打破行業(yè)現(xiàn)狀
- 小米汽車與蔚來(lái)聯(lián)手破解充電難題:合作共贏,補(bǔ)能無(wú)憂
- 谷歌秘密探索:Claude模型助其Gemini AI升級(jí),揭秘AI未來(lái)發(fā)展新路徑
- 辛巴病痛自述引淚奔,直播間真情流露
- 歐盟"有條件"批準(zhǔn)巨額并購(gòu):Synopsys對(duì)Ansys的收購(gòu)面臨挑戰(zhàn)
免責(zé)聲明:本網(wǎng)站內(nèi)容主要來(lái)自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書(shū)面權(quán)利通知或不實(shí)情況說(shuō)明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開(kāi)相關(guān)鏈接。