日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

关于推荐的一个算法工程师访谈,有一些内容值得看看

發(fā)布時(shí)間:2025/3/17 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于推荐的一个算法工程师访谈,有一些内容值得看看 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http://www.csdn.net/article/2015-09-30/2825828

?


基于Spark GraphX,棄GBDT和LR用FM

發(fā)表于2015-09-30 09:53|?9644次閱讀| 來(lái)源CSDN|?7?條評(píng)論| 作者楊鵬 摘要:9月29日20:30-21:30,算法工程師楊鵬在CSDN人工智能用戶群分享了“世紀(jì)佳緣推薦和機(jī)器學(xué)習(xí)算法實(shí)踐”。他主要介紹了基于圖算法產(chǎn)生候選集、排序算法的選擇,以及建模過(guò)程中的一些經(jīng)驗(yàn)心得。

以下為楊鵬分享實(shí)錄:

大家好,我叫楊鵬,主要關(guān)注于推薦和機(jī)器學(xué)習(xí)方面。我今天分享一下世紀(jì)佳緣在推薦方面的嘗試和心得。

世紀(jì)佳緣推薦場(chǎng)景

先說(shuō)一下我們的推薦場(chǎng)景。我們使用推薦的場(chǎng)景跟電影、商品推薦有很大的不同,商品的推薦可能只考慮到轉(zhuǎn)化就可以了,我們要考慮推薦鏈的更長(zhǎng)一些。

我們的情況:用戶登錄網(wǎng)站,算法推薦出用戶可能感興趣的人,用戶發(fā)信,收信用戶看信。最大的不同點(diǎn)在于,我們的item也是人,設(shè)計(jì)算法時(shí)也要考慮item的感受。

拿亞馬遜來(lái)類(lèi)比,亞馬遜可能只需要考慮把一本書(shū)推薦給某個(gè)人,我們還要考慮這本書(shū)是不是想被推薦給這個(gè)人。舉一個(gè)極端的例子,如果我們只是想提高男性用戶發(fā)信,我們只需要給所有人推薦美女,這樣發(fā)信量一定會(huì)暴漲。但是這樣做會(huì)引發(fā)很多問(wèn)題:1)美女一天不可能讀上千封信;2)美女對(duì)于一些條件不好的男性根本沒(méi)興趣;3)非美女收不到信。

所以無(wú)論是在產(chǎn)生候選,還是在排序的時(shí)候,我們都要同時(shí)考慮user和item。

以上是我們?cè)谕扑]場(chǎng)景上比較特殊的地方。

基于圖算法產(chǎn)生候選集

下面我主要說(shuō)兩個(gè)主題,先說(shuō)我們?nèi)绾萎a(chǎn)生推薦。今天主要說(shuō)一下基于圖的算法,我們的圖算法是在Spark上實(shí)現(xiàn)的,使用用戶歷史發(fā)信數(shù)據(jù),計(jì)算得到用戶的推薦列表。(世紀(jì)佳緣對(duì)Spark的理解,可以參考這個(gè)文檔:世紀(jì)佳緣吳金龍:Spark介紹——編輯注)

我們的數(shù)據(jù)很稀疏,在圖算法中,對(duì)于數(shù)據(jù)比較多的用戶使用一跳節(jié)點(diǎn),對(duì)于數(shù)據(jù)少的用戶使用二跳甚至三跳節(jié)點(diǎn)的數(shù)據(jù),這樣可以避開(kāi)CF中計(jì)算相似度的問(wèn)題,對(duì)數(shù)據(jù)少的用戶也能產(chǎn)生足夠多的推薦。

當(dāng)時(shí)遇到的主要問(wèn)題是數(shù)據(jù):一是數(shù)據(jù)太大,二是數(shù)據(jù)質(zhì)量不高。

對(duì)那些出度(發(fā)信)和入度(收信)很多的點(diǎn)都要想辦法進(jìn)行抽樣,否則會(huì)在計(jì)算時(shí)會(huì)耗盡內(nèi)存。抽樣時(shí)也盡量提高數(shù)據(jù)質(zhì)量。

對(duì)于收信很多的用戶,抽樣方法很簡(jiǎn)單,留下用戶看了的信,去掉沒(méi)看過(guò)的。對(duì)于發(fā)信的抽樣,當(dāng)然也可以只留下被看過(guò)的信,但是種方法有一點(diǎn)講不通,因?yàn)榭床豢葱攀钦驹趇tem的角度考慮的,對(duì)發(fā)信抽樣,應(yīng)該站在user的角度。

我們嘗試了直接扔掉發(fā)信過(guò)多的用戶,隨機(jī)抽樣,保留最近數(shù)據(jù)幾種方法。但是這樣的方法都是很盲目的。對(duì)于發(fā)信而言,最主要的度量應(yīng)該是:發(fā)信那一刻,用戶是不是認(rèn)真的。如果用戶發(fā)信是很隨意的,沒(méi)有經(jīng)過(guò)篩選,那這個(gè)數(shù)據(jù)其實(shí)沒(méi)有多大意義。

解決這個(gè)問(wèn)題當(dāng)然也可以做個(gè)模型,但是太復(fù)雜了,我們使用了一種簡(jiǎn)單的方法:根據(jù)用戶的發(fā)信間隔判斷,比如這封信與上一封信時(shí)間間隔10s以上,我們就認(rèn)為用戶在用心的發(fā)信,保留這個(gè)數(shù)據(jù),否則扔掉。方法很簡(jiǎn)單,但是最終線上的效果卻很好。

我取了一個(gè)發(fā)信很隨意的用戶數(shù)據(jù),統(tǒng)計(jì)了收信人在某個(gè)維度的分布,如下圖所示。

以下則是一個(gè)認(rèn)真發(fā)信的用戶,判斷標(biāo)準(zhǔn)就是剛才說(shuō)的時(shí)間間隔。

可以明顯看出來(lái),認(rèn)真發(fā)信的用戶,只給符合自己要求的人發(fā)信,所以分布會(huì)更集中一些。但是不認(rèn)真的用戶,分布就很散了。

排序算法的實(shí)現(xiàn)

第二個(gè)主題,說(shuō)一下排序。主要是對(duì)上邊產(chǎn)生的候選集排序后把最終結(jié)果展示給用戶。用到的算法也是CTR預(yù)測(cè)中常用到的LR、FM、GBDT等。

前邊說(shuō)過(guò),我們除了要考慮user發(fā)信,還要考慮item會(huì)不會(huì)看信,甚至item會(huì)不會(huì)回信。

因此一次排序通常會(huì)組合好幾個(gè)模型:點(diǎn)擊模型預(yù)測(cè)user從展示里點(diǎn)item的概率,發(fā)信模型預(yù)測(cè)發(fā)信概率,讀信模型預(yù)測(cè)item讀信概率。然后對(duì)這幾種概率做個(gè)組合后得到最終的權(quán)重值。

用到的工具,數(shù)據(jù)怎么處理,都跟大家一樣,沒(méi)什么要說(shuō)的,這里重點(diǎn)提一個(gè)我們用到的評(píng)估方法。

大致就是上圖這條曲線,橫座標(biāo)是預(yù)測(cè)概率的一個(gè)區(qū)間,縱座標(biāo)是在這個(gè)區(qū)間內(nèi)真實(shí)值的平均。比如圖中(0.45, 0.46)的點(diǎn),計(jì)算方法是:

?

  • 取所有預(yù)測(cè)值在[0.445, 0.455)的真實(shí)值,記為X;
  • avg(X)為縱座標(biāo)值;
  • ?

    這條曲線最完美的情況應(yīng)該是只有(0, 0),(1, 1)點(diǎn)有值,當(dāng)然算法不可能做到這樣。次好的情況,畫(huà)出來(lái)的線應(yīng)該與 y=x 重合。

    之前說(shuō)過(guò),我們的排序是把多個(gè)算法出來(lái)的概率值作組合,所以對(duì)每個(gè)算法的效果除了要求排序正確,還希望預(yù)測(cè)的概率值也盡量接近真實(shí)值。

    ROC、NDCG可以很好的度量排序,但是沒(méi)法度量真實(shí)值與預(yù)測(cè)值的偏差,這就是為什么我們特別關(guān)注這條線。

    經(jīng)驗(yàn)心得

    最后說(shuō)一下我們幾次算法嘗試時(shí)遇到的問(wèn)題。

    1.測(cè)試Facebook論文中提到的用GBDT提取特征的方法。

    當(dāng)時(shí)為了方便,我們直接把給LR的特征作為GBDT的特征,然后把得到的葉子節(jié)點(diǎn)作為特征,與原來(lái)的特征組合到一起再扔給LR。(可以參考這篇博客:CTR預(yù)估中GBDT與LR融合方案——編輯注)

    線下效果和線上效果都有提升,我們推廣了這個(gè)方法,但是發(fā)現(xiàn)其中一個(gè)模型沒(méi)有任何效果。

    排查問(wèn)題的時(shí)候發(fā)現(xiàn),這個(gè)模型對(duì)所有特征作了離散化,出來(lái)的特征值全部非0即1。GBDT本來(lái)就是個(gè)樹(shù)模型,能很好的處理非線性特征,使用離散化后的特征反而沒(méi)什么效果。而且對(duì)于這種只有0、1值的情況,GBDT出現(xiàn)了不收斂的現(xiàn)象。

    2.不同的場(chǎng)景,使用不同的算法。

    LR是我們最常使用的,所以在做點(diǎn)擊模型時(shí),自然也是先上了LR,但是線上效果并不好。后來(lái)上FM,效果卻好的出奇。

    如果登錄過(guò)我們的網(wǎng)站,很容易發(fā)現(xiàn)原因:展示的場(chǎng)景,只能看到頭像、地區(qū)、年齡等幾個(gè)屬性,LR使用了大量用戶看不到的特征,這些特征對(duì)于模型來(lái)說(shuō)是沒(méi)有意義的。

    That's all,我今天分享就到這里了。

    Q&A

    問(wèn):能否再詳細(xì)介紹一下推薦系統(tǒng)所采用的工具?

    答:R的話,我們主要用Liblinear;FM主要用SVDFeature;數(shù)據(jù)主要放Hive;Redis、Memcache和MongoDB都會(huì)用到;實(shí)時(shí)計(jì)算,會(huì)對(duì)接Kafka。

    問(wèn):不實(shí)時(shí)計(jì)算可以嗎?哪些方面是需要實(shí)時(shí)計(jì)算?

    答:最主要的計(jì)算,還是離線算好的。比如實(shí)時(shí)的排序,因?yàn)橥扑]列表動(dòng)態(tài)生成,排序只能做成實(shí)時(shí)的。

    問(wèn):請(qǐng)問(wèn)主要的算法用得什么語(yǔ)言開(kāi)發(fā)的?

    答:線上Java,線下的代碼就很隨意了,Python/Java/Shell/Hive,什么方便用什么。

    問(wèn):做算法時(shí),你覺(jué)的最大的障礙是啥?如何解決這些障礙?可以談?wù)劸唧w實(shí)現(xiàn)上遇到的一些困難。

    答:很多時(shí)候,一個(gè)模型效果不好,但是卻不知道從哪里著手改進(jìn)。不知道加什么樣的特征會(huì)有效,換模型也沒(méi)有效果,試過(guò)了能想到的所有方法。

    問(wèn):對(duì)數(shù)學(xué)要求高嗎?

    答:我自己主要做開(kāi)發(fā)工作,數(shù)學(xué)有要求,但是不是那么高,能看懂論文就好。

    問(wèn):楊老師,你們對(duì)用戶的習(xí)慣有研究嗎?如何做的?

    答:用戶習(xí)慣,我們主要會(huì)統(tǒng)計(jì)一些數(shù)據(jù),比如用戶經(jīng)常給多少歲的人發(fā)信,然后把這個(gè)統(tǒng)計(jì)作為特征放到模型里。

    問(wèn):請(qǐng)問(wèn)下,在使用算法的過(guò)程中,對(duì)于對(duì)應(yīng)算法的具體推演過(guò)程你們需要全部理解透么。感覺(jué)有時(shí)候一個(gè)算法對(duì)數(shù)學(xué)的要求好高啊,想理清緣由難度蠻大的。

    答:不需要全部理解透,至少我看了很多遍EM的推導(dǎo),現(xiàn)在推,我還是不會(huì)。但是我知道EM推導(dǎo)大概怎么回事。

    問(wèn):一般你們?cè)趺礃訌臑榻鉀Q某個(gè)問(wèn)題,而選擇需要利用哪些維度,然后出發(fā)去構(gòu)建模型的?

    答:這個(gè)主要還是個(gè)人經(jīng)驗(yàn),做的多了,很容易就能找到最有效的特征。

    問(wèn):模型是基于已有的一些文章的還是在實(shí)驗(yàn)過(guò)程中改進(jìn)的,有專門(mén)的算法部?

    答:模型主要還是基于已有的,除非很不符合我們的需要,否則很少去改。

    問(wèn):一些常用算法的推導(dǎo),特性,用法都的知道嗎?

    答:常用算法肯定是要知道的。

    問(wèn):楊老師,你剛剛學(xué)習(xí)的時(shí)候,從哪個(gè)簡(jiǎn)單示例或者文檔入手的?

    答:《集體智慧編程》。

    問(wèn):能否介紹佳緣的推薦目前的實(shí)際效果,下一步的改進(jìn)方向?

    答:分算法和場(chǎng)景,整體上看,如果原來(lái)什么算法都沒(méi)有,可能會(huì)有50%左右的提升。下一步的方向,主要是具體細(xì)分用戶,或者從其它維度細(xì)分算法。之前的只關(guān)注了按場(chǎng)景細(xì)分,以后細(xì)分的維度會(huì)拓寬些。

    問(wèn):請(qǐng)問(wèn)您認(rèn)為應(yīng)屆生應(yīng)該怎樣往機(jī)器學(xué)習(xí)方向發(fā)展呢?

    答:環(huán)境是最重要的,如果真想做,找個(gè)真正做這個(gè)的公司。我一直想做游戲,到現(xiàn)在都沒(méi)做成[Smile]。

    總結(jié)

    以上是生活随笔為你收集整理的关于推荐的一个算法工程师访谈,有一些内容值得看看的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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