摘要:從這個結(jié)果來看,洛奇非常適合推薦給喜歡終結(jié)者的用戶的。你需要能夠深入了解所使用的評分方法才能建立起真正優(yōu)秀的推薦系統(tǒng)。使用,阿甘正傳的評分是,幾乎為。
聚合:找出喜歡這部電影的人們同時還喜歡哪些電影
? ? ? ?假設(shè)你運營了一個電影網(wǎng)站,你有很多用戶,并且想知道如何推薦給這些用戶他們喜歡的電影。一個辦法是,把每個用戶作為一個文檔創(chuàng)建索引,如下所示(movies_liked被設(shè)置為被分詞的字段,并且用于搜索):
PUT recs/user/1 { "movies_liked": ["Forrest Gump", "Terminator", "Rambo", "Rocky", "Good Will Hunting"]} PUT recs/user/2 { "movies_liked": ["Forrest Gump", "Terminator", "Rocky IV", "Rocky", "Rocky II", "Predator"]} PUT recs/user/3 { "movies_liked": ["Forrest Gump", "The Thin Red Line", "Good Will Hunting", "Rocky II", "Predator", "Batman"]} PUT recs/user/4 { "movies_liked": ["Forrest Gump", "Something about Mary", "Sixteen Candles"]}
? ? ? ?我們想給喜歡《終結(jié)者》的用戶進(jìn)行推薦。也就說,我們需要知道喜歡《終結(jié)者》這部電影的用戶還喜歡哪些電影。這是非常常見的“購物籃分析” - 推薦系統(tǒng)的基礎(chǔ)組件。“購物籃分析”來源于分析用戶的購物籃并且統(tǒng)計出用戶感興趣物品間的關(guān)系。研究案例表明,通常在雜貨鋪購買尿片的人同時會選擇購買啤酒。深入洞察此類行為將有助于提升用戶和商家的價值。本文我們聚焦在《終結(jié)者》并找出對這部電影可能感興趣的潛在用戶。
? ? ? ?利用那些存儲了用戶觀影歷史的ElasticSearch文檔,我們?nèi)绾握页隹催^《終結(jié)者》的觀眾喜歡什么呢?立刻能想到的辦法是進(jìn)行“項”的聚合。項聚合可以得出當(dāng)前搜索結(jié)果中特定字段所包含的項的數(shù)量。在某些應(yīng)用中項可能會是電影的ID,但是在這個案例中使用“標(biāo)題”。我們將搜索“終結(jié)者”關(guān)鍵詞并聚合結(jié)果中的“movies_liked”字段從而得出觀看《終結(jié)者》的用戶同時喜歡其他電影的名稱以及數(shù)量。最終結(jié)果展示如下:
"movies_like_terminator": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [{ "key": "Forrest Gump", "doc_count": 2 }, { "key": "Rocky", "doc_count": 2 }, { "key": "Terminator", "doc_count": 2 }, { "key": "Good Will Hunting", "doc_count": 1 } }
? ? ? ?通過上述的用戶記錄,你可以了解到喜歡《終結(jié)者》的用戶中有兩個人同時喜歡《阿甘正傳》,兩個人同時喜歡《洛奇》。此外,如果我們對你最喜歡的電影重復(fù)這樣的操作(搜索《終結(jié)者》或者《鐵血戰(zhàn)士》或者《情到深處》等你喜歡的電影),然后你會得到一些協(xié)同過濾:發(fā)起一個搜索,找到那些和你喜歡同樣電影的用戶。然后你可以比較下還未看過的電影和你喜歡的電影同時出現(xiàn)的次數(shù)。
? ? ? ?但是這種簡單計數(shù)的方法是否足夠好呢?我們在其它文章中進(jìn)行了討論,認(rèn)為用簡單統(tǒng)計同時出現(xiàn)的次數(shù)的方法實現(xiàn)推薦系統(tǒng)是一種很差的方法。簡單計數(shù)法優(yōu)先考慮的是全局的普遍關(guān)系,而不是有意義的關(guān)系。例如在這個例子中,每個人都喜歡《阿甘正傳》。如果我們用這種方法做推薦,那么每個用戶都被推薦了《阿甘正傳》。我們把這種問題稱為“奧普拉讀書俱樂部”問題,這些關(guān)系普遍存在但不是特別有用。
? ? ? ?這里更有趣的是關(guān)于電影《終結(jié)者》的相關(guān)計數(shù)結(jié)果。以《洛奇》為例。每個喜歡《洛奇》的用戶都喜歡《終結(jié)者》,竟然有100%的重合率!換句話說,《洛奇》在有條件時(喜歡看《終結(jié)者》)出現(xiàn)的的比率為100%,在全局中(無條件時)出現(xiàn)的比率僅為50%(有2人喜歡《洛奇》,共有4人)。從這個結(jié)果來看,《洛奇》非常適合推薦給喜歡《終結(jié)者》的用戶的。
使用顯著項度量人和物之間的關(guān)系? ? ? ?要解決簡單計數(shù)法帶來的問題,利用顯著項來聚合是一個更好的方法。這種聚合方法度量了我們所需要的這種在統(tǒng)計學(xué)意義上更重要、更有意義的推薦的關(guān)系。它的作用不是計算簡單的項的計數(shù),而是計算項在當(dāng)前結(jié)果中相比于在背景語料庫中的統(tǒng)計顯著性。在《購物籃筐分析》一文中,我們討論了正反兩種評價顯著性的不同方法。現(xiàn)在,我們來探討一下顯著項能干什么。
在我們深入之前,我們先把這種方法拿出來看看:
POST recs/user/_search { "query": { "match": { "movies_liked": "Terminator" } }, "aggregations": { "movies_like_terminator": { "significant_terms": { "field": "movies_liked", "min_doc_count": 1 } } } }
? ? ? ?上面(與簡單計數(shù)法)唯一的的不同是我們用到了significant_term運算。為了讓這個操作在我們這個極小規(guī)模的數(shù)據(jù)集上能獲得較好的結(jié)果,我們將min_doc_count設(shè)為1(項關(guān)聯(lián)的文檔數(shù)大于等于1)。
事實上,這一查詢解決了以上的問題,我們可以發(fā)現(xiàn)《阿甘正傳》在推薦中沒有出現(xiàn),得到的推薦顯得更合適:
"buckets": [{ "key": "Rocky", "doc_count": 2, "score": 1, "bg_count": 2 }, { "key": "Terminator", "doc_count": 2, "score": 1, "bg_count": 2 }, { "key": "Rambo", "doc_count": 1, "score": 0.5, "bg_count": 1 }, { "key": "Rocky IV", "doc_count": 1, "score": 0.5, "bg_count": 1 }]深入研究JLH顯著評分
? ? ? ?到此為止了嗎?我們還需繼續(xù)研究:需要理解評分方法在你的數(shù)據(jù)上是如何工作的。你需要能夠深入了解所使用的評分方法才能建立起真正優(yōu)秀的推薦系統(tǒng)。如何根據(jù)顯著項得到上面的排名?正如我們在《購物籃分析》一文中所見,不同形式的計分方法有它們自己的優(yōu)缺點。選擇錯誤的方法可能在推薦的質(zhì)量方面造成嚴(yán)重的后果。
? ? ? ?我不打算剖析文中出現(xiàn)的所有顯著項(有很多項),但我們還是要深入了解這種方法來教自己如何思考這些問題。這種方法被稱為JLH。評分公式是:
(foregroundPercentage / backgroundPercentage) * (foregroundPercentage - backgroundPercentage)
? ? ? ?“Foreground”的意思是該項在當(dāng)前搜索結(jié)果中出現(xiàn)的百分比(檢索結(jié)果中用戶喜歡我們的電影名稱百分比)。 例如,《第一滴血》的“Foreground”在《終結(jié)者》搜索結(jié)果中占比是100%。 “Background” 是整個集合的全局百分比。例如,《第一滴血》的是50%。
JLH對普通物品的評分? ? ? ?你將如何評價某一個評分體系是否適合你的用例?讓我們想象幾個場景,考慮不同場景下的得分。然后,可以批判地思考他們在現(xiàn)實的數(shù)據(jù)中如何展示。我們繼續(xù)使用電影為例,這些數(shù)據(jù)都是假設(shè)的:分析JLH評分所用的并不是Netflix或Movielens網(wǎng)站上的真正數(shù)據(jù)。
? ? ? ?第一個場景,我們已經(jīng)討論過的是每個人都喜歡的電影。在我們的數(shù)據(jù)集中,這是《阿甘正傳》。99.999%的用戶喜歡《阿甘正傳》。
? ? ? ?事實上,這種非常受歡迎的電影對JLH評分不太好。使用(Foreground / Background),《阿甘正傳》的評分是100 / 99.999,幾乎為1。同樣,(Foreground - Background)=(100 - 99.999),幾乎為0。 正如你將看到的,這是一個相當(dāng)?shù)偷腏LH評分。
? ? ? ?這樣公平嗎?我認(rèn)為,在大多數(shù)領(lǐng)域里,一個物品被接近100%的用戶喜歡是少見的。更有可能的是,很少有人對電影具有可衡量的偏好。 例如,或許每個人都喜歡《阿甘正傳》,但大多數(shù)的“喜歡”是評級或點擊(并不實際觀看),不是100%的用戶與《阿甘正傳》有交集。 當(dāng)然,我喜歡《阿甘正傳》,但上次我看到它大概是10年前。 這是一個被動的偏好。 當(dāng)我看到它出現(xiàn)在Netflix上時,我不太可能會興奮。
? ? ? ?現(xiàn)實中更常見,最流行的電影或節(jié)目是有20%的用戶喜歡的東西。那么JLH的得分如何呢?比如《心靈捕手》,如果這組用戶中的100%都喜歡,那么最高得分將是(100/20)(100-20)= 5 80 = 400。比《阿甘正傳》要高很多。
平均聲望的物品? ? ? ?大多數(shù)影片會顯示喜歡此影片用戶的百分比。讓我們來看一個平均電影:《洛奇IV》,有4%的用戶喜歡。
? ? ? ?《洛奇IV》使用JLH評分公平嗎?如果“Foreground”的用戶中100%喜歡《洛奇IV》,我們得到(100/4)(100 - 4)或25 96 = 2400。明顯超過被推薦的《心靈捕手》!
更多“正常”偏差? ? ? ?《心靈捕手》非常受歡迎得分400,《洛奇IV》受歡迎程度一般得分2400。似乎JLH評分方式對于推薦系統(tǒng)來說有些糟糕?讓我們考慮這些“最佳情況”場景的可能性。 100%的用戶喜歡一個電影的同時又喜歡另一個電影合理嗎?喜歡電影的"Foreground"概率偏離“Background”的可能性有多大?
? ? ? ?這很大程度上取決于數(shù)據(jù)中物品偏好的相對分布。例如,人們可以說,如果你喜歡《洛奇III》,你很可能會喜歡《洛奇IV》,也許接近100%重疊。
? ? ? ?如果你的數(shù)據(jù)集“Background”和“Foreground”的差距不大,也許這不是一個大事。 例如,讓我們考慮“Foreground”的值基于以“Background”百分比為中心的正態(tài)分布的情況。讓我們考慮“Background”和“Foreground”之間的恒定變化是大約75%的變化(《洛奇IV》大概是7 +/- 3%; 《心靈捕手》大概20 +/- 15%)。 在這些也許更現(xiàn)實的情況下,我們將期望得分:
? ? ? ?《洛奇IV》最佳得分:(7/4)*(7-4)= 5.25
? ? ? ?《心靈捕手》最佳分?jǐn)?shù):(35/20)*(35 - 20)= 26.25
? ? ? ?第一項(除法)中兩部電影評分接近。另一項(減法)拉開了兩部電影的差距。
? ? ? ?為什么會這樣?作為JLH的創(chuàng)建者,Mark Harwood指出,這正是JLH設(shè)計的目的。JLH反映了許多推薦系統(tǒng)數(shù)據(jù)集中看到的模式:受歡迎的物品受歡迎程度不會發(fā)生太大變化。如果幾乎每個人都買雞蛋,那么分析煎蛋商品對雞蛋銷量影響就會非常小,即便如此,我們?nèi)匀幌胍@些煎蛋廚師一些建議:即使只能輕微增加雞蛋的銷量也很重要。
作者信息
本文系LeapCloud團(tuán)隊_云服務(wù)研發(fā)成員:秦鵬【原創(chuàng)】
現(xiàn)任LeapCloud服務(wù)與架構(gòu)部負(fù)責(zé)人,負(fù)責(zé)公司云平臺、云應(yīng)用的后端研發(fā)和維護(hù)工作。有多年分布式、高并發(fā)場景的實戰(zhàn)經(jīng)驗;目前在分布式存儲、緩存、中間件、容器技術(shù)、微服務(wù)、公有云等領(lǐng)域均有涉獵。畢業(yè)于上海交通大學(xué),曾供職于SAP,后投身MaxLeap致力于為開發(fā)者提供快穩(wěn)定、可靠的云服務(wù)。
微信公眾號:MaxLeap_yidongyanfa
相關(guān)文章
飛馳在Mesos的渦輪引擎上
作者往期佳作
微服務(wù)實戰(zhàn):從架構(gòu)到發(fā)布(一)
微服務(wù)實戰(zhàn):從架構(gòu)到發(fā)布(二)
從應(yīng)用到平臺 – 云服務(wù)架構(gòu)的演進(jìn)過程
基于PaaS和SaaS研發(fā)的商業(yè)云平臺實戰(zhàn)
想要了解APP制作、開發(fā)?歡迎加入技術(shù)交流QQ群:480843919
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/25166.html
摘要:最初,它是以開源項目為應(yīng)用主體的,結(jié)合詞典分詞和文法分析算法的中文分詞組件。填補了國內(nèi)中文分詞方面開源組件的空白,致力于此并希翼成為互聯(lián)網(wǎng)網(wǎng)站首選的中文分詞開源組件。中文分詞追求分詞的高效率和用戶良好體驗。 1:Elasticsearch的開源中文分詞器 IK Analysis(Star:2471) IK中文分詞器在Elasticsearch上的使用。原生IK中文分詞是從文件系統(tǒng)中讀取...
摘要:可以通過大數(shù)據(jù)生態(tài)的一系列工具生態(tài)來解決大數(shù)據(jù)問題數(shù)據(jù)分片主要有兩種方式哈希和范圍。哈希的問題是范圍查詢支持不佳,范圍的問題是可能冷熱數(shù)據(jù)不均。 后端好書閱讀與推薦系列文章:后端好書閱讀與推薦后端好書閱讀與推薦(續(xù))后端好書閱讀與推薦(續(xù)二)后端好書閱讀與推薦(續(xù)三)后端好書閱讀與推薦(續(xù)四)后端好書閱讀與推薦(續(xù)五)后端好書閱讀與推薦(續(xù)六) Elasticsearch權(quán)威指南 El...
摘要:可以通過大數(shù)據(jù)生態(tài)的一系列工具生態(tài)來解決大數(shù)據(jù)問題數(shù)據(jù)分片主要有兩種方式哈希和范圍。哈希的問題是范圍查詢支持不佳,范圍的問題是可能冷熱數(shù)據(jù)不均。 后端好書閱讀與推薦系列文章:后端好書閱讀與推薦后端好書閱讀與推薦(續(xù))后端好書閱讀與推薦(續(xù)二)后端好書閱讀與推薦(續(xù)三)后端好書閱讀與推薦(續(xù)四)后端好書閱讀與推薦(續(xù)五)后端好書閱讀與推薦(續(xù)六) Elasticsearch權(quán)威指南 El...
閱讀 1357·2021-11-24 09:39
閱讀 1346·2021-11-04 16:12
閱讀 2682·2021-09-24 09:47
閱讀 3337·2021-09-01 10:50
閱讀 1477·2019-08-30 15:55
閱讀 1423·2019-08-30 15:43
閱讀 642·2019-08-30 11:08
閱讀 3578·2019-08-23 18:33