《基于mahout on spark + elastic search搭建item推薦系統(tǒng)》

項(xiàng)目的背景

推薦系統(tǒng)可以在用戶沒有明確表述需求的情況下,給出準(zhǔn)確的,甚至超出預(yù)期的建議結(jié)果委造,以提升用戶滿意度和GMV渗稍。

典型的推薦場景如下:
電商佩迟,根據(jù)商品推薦商品

用戶點(diǎn)擊的詳情頁商品
推薦商品列表

根據(jù)推薦位置劃分合適的推薦算法

推薦算法有很多種,但是在互聯(lián)網(wǎng)行業(yè)使用較多實(shí)現(xiàn)效率高的算是“協(xié)同過濾”竿屹。但是根據(jù)不同的位置用戶接受程度的不同报强,又有所區(qū)分。
推薦算法的分類拱燃,可以參考這篇博文
http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/index.html

本項(xiàng)目的主要目標(biāo):
基于項(xiàng)目的協(xié)同過濾推薦
基于項(xiàng)目的協(xié)同過濾推薦的基本原理也是類似的秉溉,只是說它使用所有用戶對物品或者信息的偏好,發(fā)現(xiàn)物品和物品之間的相似度碗誉,然后根據(jù)用戶的歷史偏好信息召嘶,將類似的物品推薦給用戶,下圖 很好的詮釋了它的基本原理哮缺。

基于item的推薦

假設(shè)用戶 A 喜歡物品 A 和物品 C弄跌,用戶 B 喜歡物品 A,物品 B 和物品 C尝苇,用戶 C 喜歡物品 A铛只,從這些用戶的歷史喜好可以分析出物品 A 和物品 C 時(shí)比較類似的埠胖,喜歡物品 A 的人都喜歡物品 C,基于這個(gè)數(shù)據(jù)可以推斷用戶 C 很有可能也喜歡物品 C淳玩,所以系統(tǒng)會(huì)將物品 C 推薦給用戶 C直撤。
與上面講的類似,基于項(xiàng)目的協(xié)同過濾推薦和基于內(nèi)容的推薦其實(shí)都是基于物品相似度預(yù)測推薦蜕着,只是相似度計(jì)算的方法不一樣谋竖,前者是從用戶歷史的偏好推斷,而后者是基于物品本身的屬性特征信息侮东。

架構(gòu)設(shè)計(jì)目標(biāo)

  1. 實(shí)時(shí):訂閱推薦系統(tǒng)關(guān)注的數(shù)據(jù)流:推薦商品點(diǎn)擊數(shù)據(jù)圈盔。實(shí)時(shí)記錄推薦過,點(diǎn)擊過的商品悄雅。

  2. 非實(shí)時(shí):復(fù)用現(xiàn)有的離線數(shù)據(jù)集驱敲,如:用戶屬性,商品屬性宽闲,商品喜歡众眨,買手關(guān)注,商品購買記錄容诬。

  3. 初版推薦算法娩梨,基于item推薦item。結(jié)果出現(xiàn)在app商品詳情頁览徒。
    數(shù)據(jù)出現(xiàn)的具體策略:
    (1) 優(yōu)先基于item的協(xié)同過濾items 集合
    (2) 同類目下最熱門的items集合(by search)
    (3) 同類目下最新的items集合(by search)

  4. 在商品詳情頁的底部嘗試如下算法流程
    A)基于協(xié)同過濾的item推薦
    1) 使用詳情頁item內(nèi)容狈定;使用該用戶歷史購買/喜歡/點(diǎn)擊商品的item內(nèi)容的共現(xiàn)性質(zhì)的協(xié)同過濾算法。
    原因:此處給出基于物品的推薦更好被用戶理解(沒有差別特別巨大的商品推薦出來)习蓬。
    為了解決冷啟動(dòng)問題:
    B)基于item內(nèi)容的推薦
    1) 同二級分類下面的熱門商品/最新鮮商品
    2) 基于搜索纽什,標(biāo)題丟進(jìn)query檢索,取top k結(jié)果躲叼,也可以使用類目做進(jìn)一步的限制芦缰。
    3) 將來有更多的標(biāo)簽后,可以使用elasticsearch的more like this功能枫慷。
    C)過濾掉已經(jīng)溝通過/喜歡過/展示過的數(shù)據(jù)

  5. 未來
    隨著分享和曬單的數(shù)據(jù)增多让蕾,可以在“發(fā)現(xiàn)”tab引入基于用戶維度的協(xié)同過濾推薦。
    “今日推薦”:根據(jù)user維度的協(xié)同過濾和熱度綜合或听。

整體架構(gòu)

架構(gòu)圖

說明

  1. 離線系統(tǒng)負(fù)責(zé)算法的數(shù)據(jù)搜集探孝,數(shù)據(jù)來源于2處
    1)mysql集群:如用戶表,商品表神帅,贊等等再姑。
    2)消息隊(duì)列:如用戶準(zhǔn)實(shí)時(shí)的點(diǎn)擊,贊等交互行為日志找御。

  2. 在線使用elastic search提供服務(wù)
    我個(gè)人感覺的優(yōu)點(diǎn)如下:
    1)復(fù)用搜索服務(wù)集群元镀,開發(fā)效率穩(wěn)定性比較有保證绍填。
    2)通過搜索的方式召回,天然去除了熱點(diǎn)帶來的“馬太效應(yīng)”的問題栖疑。
    3)通過elastic search的多列讨永,天然支持多列的boosting推薦。
    具體請參考這篇博客:http://occamsmachete.com/ml/2014/10/07/creating-a-unified-recommender-with-mahout-and-a-search-engine/

  3. 計(jì)算集群
    1)需要先搭建好spark和mahout
    2)本項(xiàng)目主要使用了其中的spark-itemsimilarity 算法遇革,我們主要集中于數(shù)據(jù)實(shí)時(shí)全面的準(zhǔn)備即可卿闹。
    詳細(xì)請參考:https://mahout.apache.org/users/algorithms/intro-cooccurrence-spark.html

  4. 在線請求
    一個(gè)典型的query如下:
    {
    "query":{
    "query_string":{
    "query":"rec_buy^3:68827 OR rec_like^1: 68827 "
    }}
    }
    通過購買或者喜歡召回item相似的商品作為推薦list。并可根據(jù)業(yè)務(wù)調(diào)整不同的重要性萝快,如這個(gè)query锻霎,我們認(rèn)為購買行為比點(diǎn)贊行為更能反映用戶的喜好。
    最終返回的結(jié)果list需要去除用戶已經(jīng)購買過或?yàn)g覽過的商品集合揪漩。

上線效果

由于使用elastic search集群旋恼,在gc正常下,系統(tǒng)運(yùn)行十分穩(wěn)定
顯著提升了用戶的停留時(shí)間和gmv
在更全面更快速搜集好用戶行為數(shù)據(jù)后奄容,有希望進(jìn)一步提升推薦的效果

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末冰更,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子昂勒,更是在濱河造成了極大的恐慌蜀细,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件戈盈,死亡現(xiàn)場離奇詭異奠衔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)塘娶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門涣觉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人血柳,你說我怎么就攤上這事∩祝” “怎么了难捌?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鸦难。 經(jīng)常有香客問我根吁,道長,這世上最難降的妖魔是什么合蔽? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任击敌,我火速辦了婚禮,結(jié)果婚禮上拴事,老公的妹妹穿的比我還像新娘沃斤。我一直安慰自己圣蝎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布衡瓶。 她就那樣靜靜地躺著徘公,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哮针。 梳的紋絲不亂的頭發(fā)上关面,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機(jī)與錄音十厢,去河邊找鬼等太。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蛮放,可吹牛的內(nèi)容都是我干的缩抡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼筛武,長吁一口氣:“原來是場噩夢啊……” “哼缝其!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起徘六,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤内边,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后待锈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體漠其,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年竿音,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了和屎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡春瞬,死狀恐怖柴信,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宽气,我是刑警寧澤随常,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站萄涯,受9級特大地震影響绪氛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜涝影,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一枣察、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦序目、人聲如沸臂痕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刻蟹。三九已至,卻和暖如春嘿辟,著一層夾襖步出監(jiān)牢的瞬間各聘,已是汗流浹背随抠。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工蕉饼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留作彤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓昙读,卻偏偏與公主長得像召调,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子蛮浑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容