日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

基于PredictionIO的推荐引擎打造,及大规模多标签分类探索

發(fā)布時(shí)間:2025/3/21 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于PredictionIO的推荐引擎打造,及大规模多标签分类探索 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


基于PredictionIO的推薦引擎打造,及大規(guī)模多標(biāo)簽分類探索

摘要:在2015年3月21日的北京Spark Meetup第六次活動(dòng)上,尹緒森就如何使用PredictionIO打造一個(gè)定制化推薦引擎進(jìn)行了詳細(xì)介紹,白剛則分享了新浪在大規(guī)模多標(biāo)簽分類上的探索。

在2015年3月21日的北京Spark Meetup第六次活動(dòng)上,一場(chǎng)基于Spark的機(jī)器學(xué)習(xí)專題分享由微軟Julien Pierre、新浪網(wǎng)白剛與Intel研究院尹緒森聯(lián)手打造。

Julien Pierre:Apache Spark in ASG


微軟ASG產(chǎn)品經(jīng)理 Julien Pierre

Julien Pierre首先進(jìn)行了開場(chǎng)發(fā)言,并為大家分享Spark在ASG團(tuán)隊(duì)的應(yīng)用情況。

通過Julien了解到,其團(tuán)隊(duì)主要工作集中在Spark SQL和MLlib兩個(gè)組件,基于Spark做一些交互式分析,其中包括:將Spark與現(xiàn)有的查詢工具(Avacado整合)、使用Spark填補(bǔ)SQL Server DB和Cosmos之間規(guī)模的數(shù)據(jù)處理空白,以及使用Spark處理Bing和Office數(shù)據(jù)集。Julien表示,在小(1TB以內(nèi))數(shù)據(jù)集的處理上,SQL Server DB非常適合,它可以將延時(shí)控制在1分鐘之內(nèi);而在大數(shù)據(jù)集(100TB以上)的處理上,Cosmos可以在小時(shí)級(jí)別搞定;而使用Spark,剛好填補(bǔ)了數(shù)據(jù)處理上1-100TB的空檔,在1分鐘以內(nèi)對(duì)數(shù)據(jù)進(jìn)行處理。

尹緒森:Use PredictionIO to build your own recommendation engine & MLlib 最新成果


Intel研究院工程師 尹緒森?

尹緒森在本次Meetup上主要分享了兩個(gè)話題——使用PredictionIO來打造一個(gè)推薦引擎以及MLlib的最新成果。

PredictionIO

尹緒森首先介紹了PredictionIO,他表示,推薦系統(tǒng)打造過程中,除下Spark,系統(tǒng)還需要其他組件,而PredictionIO就是基于Spark一個(gè)完整的端到端Pipeline,讓用戶可以非常簡(jiǎn)單的從零開始搭建一個(gè)推薦系統(tǒng)。


整個(gè)Pipeline流程如圖所示,其中Spark是整個(gè)管道的核心,整個(gè)Pipeline主要分為以下幾步:

  • (可選)PredictionIO使用Event Server來導(dǎo)入數(shù)據(jù)并存儲(chǔ)到HBase中;
  • 隨后這些數(shù)據(jù)進(jìn)入一個(gè)基于Spark的PredictionIO Engine,PredictionIO Engine可能包括一個(gè)用于導(dǎo)入數(shù)據(jù)的Data Source,一個(gè)用于數(shù)據(jù)處理ETL等的Data Preparator;同時(shí),一個(gè)推薦系統(tǒng)可能包括多個(gè)算法,因此數(shù)據(jù)需要放到不同的Algorithm中做training;
  • 在做完training之后生成模型,這里用戶可以根據(jù)需求來編寫持久化方法,確定數(shù)據(jù)儲(chǔ)存的位置,是本地文件系統(tǒng)亦或是HDFS;
  • 有了這些model之后,下一步需要做的是serving以響應(yīng)用戶的請(qǐng)求,接受用戶的一些查詢從而生成結(jié)果。
  • 如上所述,一個(gè)完整的Pipeline中同時(shí)存在多個(gè)組件,比如:HBase,為EventServer存儲(chǔ)event;Spark,用于數(shù)據(jù)或者模型的處理;HDFS,用于存儲(chǔ)模型;Elasticsearch,用于元數(shù)據(jù)的處理。而對(duì)于用戶來說,使用PredictionIO來構(gòu)建Pipeline只需要實(shí)現(xiàn)4個(gè)部分:

    • Data Source and Data Preparator
    • Algorithm
    • Serving
    • Evaluation Metrics

    Engine

    在PredictionIO中,Engine是一個(gè)比較核心的部分。在這里,尹緒森通過兩個(gè)用例來講述:

    Engine A:Train predictive model


    數(shù)據(jù)從Event Server讀取=》通過Data Source后形成TrainingData=》通過Preparator處理后形成PreparedData=》發(fā)送到不同的Training模塊(Algorithm & model)進(jìn)行訓(xùn)練。

    Engine B:Respond to dynamic query


    Mobile App向Engine提交查詢(輸入)請(qǐng)求,隨后會(huì)發(fā)送到3個(gè)Training模塊(Algorithm & model),生成結(jié)果并通過用戶自定義的算法將3個(gè)結(jié)果進(jìn)行整合,從而產(chǎn)生一個(gè)Predicted Results,并交由Serving呈現(xiàn)在Mobile App。

    最后,尹緒森通過實(shí)際代碼講解了如何使用PredictionIO打造一個(gè)基于Spark的Pipeline。

    Recent news of MLlib


    尹緒森表示,在之前版本,Spark的各個(gè)組件(比如MLlib、Graphx、Core)相對(duì)獨(dú)立,而在1.3發(fā)布后,當(dāng)下已經(jīng)有了一個(gè)融合的趨勢(shì),更加方便用戶使用。最明顯的變化就是MLlib和Spark SQL,其中SparkSQL把SchemaRDD封裝成新的DataFrame API,同時(shí)基于MLlib和SQL發(fā)展出一個(gè)MLPackage,它與DataFrame一起提供了更方便的API為用戶使用;而MLlib則與Spark Streaming一起提供了online training的能力,但是目前online training只有3個(gè)算法;最后,在1.3發(fā)布后,MLlib中添加了很多新的算法,其中多個(gè)都是基于GraphX實(shí)現(xiàn),這主要因?yàn)楹芏嗨惴ǘ歼m合用圖來表示,比如LDA(Latent Dirichlet Allocation)。


    分享最后,尹緒森綜述了MLlib近期的幾個(gè)主要更新,其中包括Streaming-wised training、Feature extraction/transformation、LDA on top of GraphX、Multi-logistic regression、Block matrix abstraction、Gaussian Mixture、Isotonic Regression、Power iteration clustering、FPGrowth、Stat、Random forest以及ML package和 DataFrame,并表示ML package和DataFrame是近期最重要的兩個(gè)變化。

    白剛:Multi-Label Classification with Bossting on Apache Spark


    新浪網(wǎng)廣告算法部門高級(jí)工程師 白剛

    白剛在新浪/微博從事廣告算法相關(guān)工作。而本期Meetup上,白剛的分享主要圍繞著新浪門戶的大規(guī)模多標(biāo)簽分類算法工作(項(xiàng)目已上傳到GitHub )。

    背景

    在類似新浪的媒體中,廣告帶來收益,同時(shí)也會(huì)影響到用戶體驗(yàn)。為了減少對(duì)用戶體驗(yàn)的影響(甚至是對(duì)用戶體驗(yàn)產(chǎn)生幫助),如何區(qū)分“用戶屬于哪個(gè)人群,是哪些廣告的潛在受眾”至關(guān)重要,也就是如何做好user profiling。


    如上圖所示,每個(gè)用戶都有著不同的興趣,同時(shí)每個(gè)人也擁有著多個(gè)興趣,因此實(shí)際問題歸結(jié)于如何給用戶打上對(duì)應(yīng)的標(biāo)簽。

    問題與求解

    在機(jī)器學(xué)習(xí)領(lǐng)域,上述的問題被抽象為模型的建立和預(yù)測(cè):根據(jù)給出的user feature x,輸出符合其興趣的標(biāo)簽集合L,即F :X →L。這里需要做的則是通過一個(gè)superwise的方法對(duì)模型進(jìn)行訓(xùn)練。


    所使用數(shù)據(jù)集:Feature是用戶的抽象行為;X,一個(gè)N維的向量;L則是具體的Label集合,同樣是一個(gè)向量,每個(gè)維度的值是正一和負(fù)一,表示加或者不加某一個(gè)Label。訓(xùn)練的最終目標(biāo)是最小化Hamming Loss——即每個(gè)Label的錯(cuò)誤率。在這里,白剛從簡(jiǎn)單的方案介紹,然后針對(duì)其缺點(diǎn),給出了scalable的方案:

    1. Per-label bin-classification?

    為了得到這個(gè)vector-valued function F :X →L,這里需要為每個(gè)l∈L都訓(xùn)練一個(gè)binary classifier,預(yù)測(cè)時(shí)將判斷每一個(gè)標(biāo)簽上的結(jié)果。

    • lOne- versus-all implemented in LibSVM、scikit-learn
    • lAd targeting往往使用per-campaign model,為每一個(gè)ad compaign訓(xùn)練一個(gè)二分類模型

    這個(gè)途徑主要基于一些已有技術(shù),比如LR、SVM等二分類模型,因此易于驗(yàn)證。但是這個(gè)模型有個(gè)比較明顯的缺點(diǎn),即擴(kuò)展性差——逐個(gè)標(biāo)簽訓(xùn)練模型是個(gè)比較低效的途徑,隨著標(biāo)簽數(shù)的增加,訓(xùn)練耗時(shí)也明顯增加。

    2. Multi-Label Classification

    基于上述思考,新的目標(biāo)被確定:首先,模型本身的輸出就是多標(biāo)簽結(jié)果,而不是組合多個(gè)二分類的模型去獲得最終結(jié)果;其次,訓(xùn)練過程是最小化Hamming loss,這樣一個(gè)目標(biāo)可以讓多標(biāo)簽的分類更準(zhǔn);最后,必須是可擴(kuò)展的,不管是在Feature的維度上,還是在Label的維度上,亦或是數(shù)據(jù)集的大小上,都能適應(yīng)一個(gè)很大的規(guī)模。

    在考量了多個(gè)解決問題的方案后,Boosting最終被選擇,這主要因?yàn)锽oosting在這個(gè)場(chǎng)景下可以更加的高效和方便,同時(shí)在Spark上實(shí)現(xiàn)Boosting這個(gè)多迭代的方式也非常適合。這個(gè)方案主要涉及到兩篇文獻(xiàn)和一個(gè)開源的實(shí)現(xiàn):

    文獻(xiàn)1:Improved Boosting Algorithms Using Confidence-rated Predictions( Robert E. Schapire & Yoram Singer)。提出了AdaBoost.MH算法,它主要是對(duì)AdaBoost的擴(kuò)展。

    文獻(xiàn)2:The Return of AdaBoost.MH: Multi-class Hamming Trees,2014年由Kegl提出。該方法主要是對(duì)AdaBoost.MH里的base learners做Factorization,將Decision stump和Hamming tree作為base learner。需要注意的是,該方法還處于初級(jí)階段。

    開源實(shí)現(xiàn):前述算法的一個(gè)CPP單機(jī)開源實(shí)現(xiàn)。http://multiboost.org。當(dāng)然,在這里希望得到的是通過Spark實(shí)現(xiàn)一個(gè)更具擴(kuò)展性,更容易并行的方案。


    分享期間,白剛詳細(xì)的介紹了上述3點(diǎn)工作原理及學(xué)習(xí)機(jī)制,并針對(duì)Spark上的實(shí)現(xiàn)進(jìn)行了詳細(xì)講解,其中包括:

    • 多標(biāo)簽情況下弱分類器的系數(shù)的計(jì)算及其數(shù)學(xué)意義。
    • Base learner的訓(xùn)練、根據(jù)14年那篇文獻(xiàn)的介紹,把弱分類器分解成一個(gè)只與feature相關(guān)、與label無關(guān)的函數(shù)和一個(gè)只需label相關(guān)、與feature無關(guān)的向量。前者把feature space做劃分,后者在每個(gè)label上對(duì)前者的劃分做修正。

    Multiboost on Spark

    1. Strong Learner on Apache Spark


    AdaBoost.MH on Apache Spark

    與Spark的結(jié)合,Strong Learner主要在Spark的driver program中實(shí)現(xiàn)算法邏輯,Base Learner類型作為類型參數(shù)。其中不同Base Learner可替換,實(shí)現(xiàn)可插拔,并實(shí)現(xiàn)了Base Learner的training邏輯與strong learner解耦。代碼參見GitHub。

    2. Base Learner on Apache Spark

    這個(gè)部分的工作主要是對(duì)弱分類器邏輯實(shí)現(xiàn)的封裝,其最核心內(nèi)容就是實(shí)現(xiàn)baseLearnerAlgo.run(iterData.dataSet)。


    通過參考2014年的文獻(xiàn),主要分享了這三個(gè)方面的多標(biāo)簽弱分類算法:

    Decision stump:一個(gè)只有一個(gè)節(jié)點(diǎn)的決策樹,只有兩個(gè)模型參數(shù)。J,feature的index,即選擇哪一個(gè)維度的feature去考慮;b,是一個(gè)threshold,當(dāng)在這個(gè)維度上feature的值大于threshold的時(shí)候則劃分為正的部分,反之則劃分到負(fù)的部分。


    同時(shí)期訓(xùn)練過程就是尋找最優(yōu)的分隔(j, threshold)的過程

    Hamming tree:Decision stump作為節(jié)點(diǎn)的決策樹。

    Generalized bin-classifier方案:φ(x)使用任意二分類模型,與v一起來最大化class-wise edge/最小化exp loss。

    3. Decision Stump on Apache Spark


    對(duì)比單機(jī)版,在Spark中的實(shí)現(xiàn)并不會(huì)真正的去做排序,而是通過flatMap==》reduceByKey的方式實(shí)現(xiàn)。


    Decision Stump的實(shí)現(xiàn)

    在具體的實(shí)現(xiàn)過程中,白剛展示了Decision Stump的模型效果和訓(xùn)練過程Spark集群負(fù)載等數(shù)據(jù),分析其中存在的一些問題:首先,它是一個(gè)非常弱的二分類模型;其次,Decision stump模型訓(xùn)練的數(shù)據(jù)傳輸量很大;最后,Tree-based模型,并不適合高維稀疏數(shù)據(jù)。因此,需要一個(gè)更強(qiáng)的,更易于訓(xùn)練,并且適應(yīng)高維稀疏數(shù)據(jù)的φ(.)來針對(duì)feature space做二元?jiǎng)澐帧?/p>

    4. Generalized binary φ on Apache Spark


    白剛表示,通過對(duì)Spark的考量發(fā)現(xiàn),Spark.mllib.classification中已有的模型和算法就符合我們的要求:首先,SVM和LR是比較強(qiáng)的二分類模型;其次,訓(xùn)練過程采用GradientDescent或者LBFGS的數(shù)值優(yōu)化方法,易于訓(xùn)練、效率較高;最后使用SparseVector,支持高維稀疏數(shù)據(jù)。關(guān)于使用些模型的正確性的依據(jù),在AdaBoost機(jī)制中,只要base learner比random guess(正確率0.5)好,整體就是收斂的,由于弱分類器中的vote vector的存在,可以保證每個(gè)label上的錯(cuò)誤率都小于0.5。

    后續(xù)工作


    分享最后,白剛對(duì)現(xiàn)有的不足之處和可以優(yōu)化的方向進(jìn)行了總結(jié),并邀請(qǐng)大家參與這個(gè)已經(jīng)投放在GitHub上的項(xiàng)目,fork及pull request。

    總結(jié)

    以上是生活随笔為你收集整理的基于PredictionIO的推荐引擎打造,及大规模多标签分类探索的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。