亞馬遜的CEO Jeff Bezos曾經說過,他的夢想是“如果我有100萬個使用者,我就要為他們做100萬個亞馬遜網站”。智慧推薦系統承載的就是這個夢想,即通過資料探勘技 術,為每一個使用者實現個性化的推薦結果,讓每個使用者更便捷的獲取資訊。為了實現這個夢想,過去十餘年間,無數頂尖技術專家和工程師投身於推薦演算法和技術的 研究與應用中,很多優秀的方法被提出,很多技術難題被攻克。在今天的網際網路應用中,越來越多“聰明”的推薦系統被開發出來,並被廣大使用者信賴和使用。
圖片說明
智慧推薦系統充分運用了機器學習、資料探勘、搜尋引擎、自然語言處理等相關領域的技術。但推薦系統並不神祕,事實上,推薦在我們身邊無處不在。對廣 大軟體開發工程師們來說,能夠投身於推薦系統的研發,是一件既有趣又充滿挑戰的工作。想要成功的開發一套效果良好的推薦系統,有一系列值得重視的關鍵點, 文字對此進行了總結,具體列舉如下。
1 充分運用顯式隱式反饋資料
資料是一切推薦系統的基礎。良好的推薦效果一定是來自於豐富而準確的資料。這些資料既包括了使用者(user)和待推薦物品(item)相關的基礎信 息(注:item和具體的推薦場景相關,可以是商品、影片、音樂、新聞等,如果是進行好友推薦,那麼item也可以是user本身),另一方面,user 和item之間在網站或應用中發生的使用者行為和關係資料也非常重要。因為這些使用者行為和關係資料能真實的反映每個使用者的偏好和習慣。採集這些基礎資料,並 做好清洗和預處理,是整個推薦系統的基石。
使用者行為資料,又可細分為兩部分:顯式反饋資料(explicit feedbacks)和隱式反饋(implicit feedbacks)資料。顯式反饋是指能明確表達使用者好惡的行為資料,例如使用者對某商品的購買、收-藏、評分等資料。與之相反,隱式反饋資料是指無法直 接體現使用者偏好的行為,例如使用者在網站中的點選、瀏覽、停留、跳轉、關閉等行為。通過挖掘顯式反饋資料能明確把握使用者的偏好,但在很多應用中,顯式反饋數 據通常很稀疏,導致對使用者偏好的挖掘無法深入。這個問題在一些剛上線的應用、或者偏冷門的物品或使用者身上反映尤其明顯。在這種情況下,使用者的隱式反饋資料 就顯得尤為重要。因為雖然使用者在網站中的點選等行為很龐雜,但其中蘊藏了大量資訊。在2006-2008年間進行的國際著名推薦競賽Netflix Prize中,冠軍隊成員Yehuda Koren發現將使用者租用影片的記錄,轉換為特徵向量注入奇異值分解演算法(SVD)用於影響使用者興趣向量,能夠很好的提高推薦準確率。
基礎資料的預處理對推薦效果的提升也非常有幫助。以2012年的ACM KDD-Cup(國際資料探勘競賽)為例,訓練樣本中,負樣本的數量居然達到了總樣本數量的92.82%,但是通過仔細分析這些負樣本,發現其中有大量樣 本存在噪音,通過一系列的Session分析和篩選方法,從中保留了11.2%的樣本進行後續推薦挖掘,不僅成功提高了推薦精度,而且大大減少了運算量。 所以充分利用各類顯式和隱式資料,並做好資料的預處理,保證輸入資料的質量,是第一個關鍵點。
2 多種方法的融合
經過多年的發展,很多種推薦演算法被提出來。常見的推薦方法,從大類上分,有基於歷史行為(Memory-based)的方法、基於模型 (Model-based)的方法、基於內容(Content-based)方法等。在Memory-based方法這個方向,又可進一步細分為基於物品 的協同過濾演算法(item-based collaborative filtering)、基於使用者的協同過濾演算法(user-based collaborative filtering)、關聯規則(association rule)等;Model-based方法常用的包括Random Walk、pLSA、SVD、SVD++等。每種方法在具體實施時,針對不同的問題又有很多不同的實現方案,例如在基於物品的協同過濾演算法(item- based collaborative filtering)中,item之間相似度計算公式(Similarity)也可能有很多很多種變化。
在系統推薦的結果以外,還有一類傳統的方式是通過專家進行推薦。這些專家可以是一些有經驗的編輯,也可以是社群中意見領袖等。這些領域專家推薦的結果,在很多實際應用中,可以作為演算法推薦結果的有益補充。
事實上,在實踐中並沒有任何一種方法在實踐中始終佔據壓倒性的優勢,它們各有千秋,分別有其各自合適的應用場景,因此因地制宜根據不同的場景,挑選不同的方法,並有機的結合起來,能讓推薦效果得到極大的提升。常見的融合方法包括Restricted Boltzmann Machines(RBM), Gradient Boosted Decision Trees(GBDT),Logistic Regression(LR)等,這方面歷次推薦競賽中有很多相關文章,可以看到為了提升推薦效果,將不同演算法的結果能夠取長補短,各自發揮價值,是極為 有效的。
3 重視時間因素
使用者的行為是存在很強的時間規律的。例如通常人們中午會吃飯、週末會休假、過年會回家團圓等等。使用者在各個應用中的行為也同樣有規律可以挖掘,用好時間這個特徵,在很多推薦場景下,會對推薦效果的提升有很大的幫助。
使用者行為日誌中,行為發生的時間戳(timestamp)通常都會被記錄。這個時間戳能從user和item兩方面來進行分析。從user的角度來 看:user的興趣往往會隨著時間不斷變化,幾年前的興趣和當前的興趣可能是不同的;另一方面,user的行為也存在一定的規律,例如工作日的行為是類似 的,而在週末裡user的行為也會變化,甚至在同一天中,上午和晚上的user行為和偏好也會有各種不同的規律。
從item的角度來看,流行度隨著時間會有規律性的波動,通過持續挖掘user與item之間的行為在一段時間內的記錄,往往能夠發掘出這種規律,並進而用於指導我們預測user在後續某個時刻的行為,提高推薦的準確率。
時間因素的一些常見處理方案包括:1)在協同過濾計算user或者item相似度的公式中,增加時間因子,發揮相近時間的作用;2)將時間離散對映 到自然月、周、日、小時等時間片中,並分別進行統計計算,並進而將累積的資料用於特定的迴歸模型(Regression models)中,指導結果預測;3)將時間作為線性連續變數,用於訓練模型引數等。
4 特定推薦場景需要使用地域特徵
有一些推薦場景是和使用者所處地域密切相關的,尤其對一些LBS、O2O的應用來說,一旦離開地域這個特徵,那麼智慧推薦的效果根本就無從談起。例如 當需要推薦一個餐館時,如果不考慮使用者當前所在的位置,那麼即使某餐館和當前使用者的口味匹配度非常高,但遠在天邊,這個推薦也是毫無價值的。
目前推薦系統在地域特徵的使用還停留在較為原始的狀態,通常需要讓使用者手工篩選推薦結果所在的區域(如省、市、區、縣等),或者指定若干半徑範圍內 的結果。這種方式不僅操作繁瑣,而且缺乏對地域資訊的細緻分析。例如地點A和B的地圖直線距離雖然較遠,但兩點間有地鐵直接往返,而另一地點C雖然地圖直 線距離A很近,但兩點間需要繞行交通不便。另外從使用者角度來說,每天活動的地域總是存在規律的,例如工作日白天,往往活動區域在工作地點附近,夜晚的時間 會在家附近等。
在基於地理位置資訊的應用中,需要更聰明的挖掘使用者對地域的偏好(而且這種偏好往往和時間緊密聯絡),例如在基於使用者的協同過濾中,將類似地域使用者 活躍使用者的行為,作為推薦的依據,即認為活動地域相似的使用者,可能存在一定相同的偏好。或者使用基於物品的協同過濾思想,在計算item之間相似度時引入 地域特徵。在Latent Factor Model中,將使用者的活動地域作為隱式反饋來作用於使用者特徵向量等,都是可行的方案。
手機是進行基於地域資訊推薦的最好載體,隨著移動網際網路應用越來越普及,期待未來有更多基於地域資訊的推薦產品的問世。
5 SNS關係的使用
社交網路近年來得到了突飛猛進的發展,使用者不再是單純的內容接收者,而是能夠主動的建立使用者之間的關係。這些關係,可以劃分為顯式關係 (explicit relations)和隱式關係(implicit relations)。顯式關係指的是使用者已明確建立的相關關係,例如在微博中關注/被關注某人等,或者在社群中加為好友等。而隱式關係指使用者之間存在一 些互動行為,但這些行為不能明確指示使用者間的關係。例如使用者在微博中點選、評論、轉發另一個使用者的帖子,如果在網路遊戲世界中另一個玩家交談,或者PK 等。隱式關係雖然並不如顯式關係那樣明確,但比顯式關係要豐富的多。
所以在一些對推薦精度要求很高的應用場景下,顯式關係需要發揮主要作用;而對一些需要 提高推薦召回率和推薦結果多樣性的場景下,尤其是當顯式關係面臨資料稀疏性的問題時(注:這個問題在推薦應用中普遍存在),充分利用隱式關係能起到非常好 的效果。以今年的KDD-Cup競賽為例,在騰訊微博的好友推薦系統上,我們通過在SVD++模型中增加隱式關係,處理資料稀疏性的問題,能夠將推薦準確 率提升5.5%
此外,移動網際網路的普及,讓SNS關係使用起來更加便捷,而且加上地域資訊,產生了像微信這樣新穎的移動應用,而SNS關係和地域特徵的結合使用,一定會讓推薦系統也產生出更受歡迎的結果。
6 緩解冷啟動問題
冷啟動是推薦系統最為悠久的一個問題,伴隨推薦系統誕生至今。這是因為推薦系統效果提升的關鍵天然在於資料,而當新使用者、或新物品等剛上線時,由於積累的資料極為稀少,大量方法在最初這段時間難以生效。
冷啟動問題又可細分為user冷啟動或者item的冷啟動。user冷啟動在一些場景普遍存在,例如在一些短視訊網站,由於user沒有登入瀏覽的 習慣,因此大量來訪使用者都是陌生的cookie使用者,如何對這些user進行推薦是至關重要的。常見的思路包括:1)採用熱門推薦(排行榜)結果。雖然排 行榜是一個看似簡單的方法,但設計良好、的排行榜並不如想象中簡單,排行榜如何計算,基於哪些統計特徵,都是值得深究的。2)充分利用有限的使用者資訊來迅 速捕捉偏好。例如使用者的來源ip、訪問時間、最初點選的幾個結果的屬性,都需要被充分運用。3)為新使用者設定簡單的口味測試,根據使用者提交的答案主動收集 使用者偏好。
常見的方案包括為提供一些預先精心設計的選項,通過使用者的選擇迅速建立使用者模型。在設計選項時,一些注意點包括:A)必須要有代表性的選 項;B)選項需要相對熱門,或有一定的使用者知名度;C)選項之間要有區分度。
item冷啟動的問題在一些item頻繁更新的應用中普遍存在,例如一些電子商務網站會不斷上架新商品,這些新商品由於缺少點選,很難進行推薦。但 基於內容的方法(content-based)往往此時能發揮關鍵作用。根據item的類別、標籤、關鍵詞等初始特徵,能計算item之間的關聯度。儘管 很多對比評測表明,基於內容的推薦演算法往往推薦精度不夠高,但這種方法在處理item冷啟動時有先天的優勢,所以在工程實踐中可以注意使用。
7 推薦結果的展現方式不可忽略
推薦系統絕不僅僅侷限於推薦演算法和架構,而是一個完整的系統。其中推薦結果的展現方案是這個系統中極為重要的一環,開發一個推薦系統時,這個環節往往被工程師們忽略,但推薦結果最終呈現給使用者的位置、提供哪些資訊,往往起到舉足輕重的作用。
這裡需要注意的關鍵點包括:1)不同item的推薦,由於使用者關注點不同,展現的方案也需要不同,要儘量凸顯出使用者的關注重點。例如推薦一個服飾 時,縮圖對使用者的點選意願起到極為重要的作用;而推薦服務類商品時(例如旅遊線路),天數、價格、是否優惠等資訊,才是使用者關注的重點;2)推薦展示的 場景和位置,需要符合使用者的行為習慣。求職社交網站LinkedIn的對比實驗表明,在使用者申請完一個工作的之前或之後分別展示推薦結果,前者的點選率是 後者的10倍。在網頁正中或右側邊欄放置推薦結果,點選率也相差5倍之多。
在展現方式中,另一個極為重要的方面是提供推薦理由。因為通過展現推薦理由,能夠贏得使用者的信任,進而讓使用者更容易接受推薦給他的結果。例如直接為 A使用者給出一個猜她喜歡的視訊V,可能很難信任。但如果同時給出推薦理由:“和你口味相似的B和C都收-藏了該視訊”,那麼能很好的提升使用者的信任感。另 外,推薦理由本身也是對推薦結果的一個良好的補充描述。例如推薦一本小說,按傳統方案只提供小說名稱、封面,讀者很難獲取足夠的資訊,但如果提供推薦理 由:“本週銷售量最多”或者“起點白金作家XXX最新作品”,對提升推薦成功率有很大的幫助。
合適的推薦結果的展示方案,需要技術、產品、UI、UED等充分結合,對使用者需求和使用者心裡有細緻入微的把握,往往能起到事半功倍的效果。
8 明確優化目標和評估手段
開發一個初步可用的推薦系統並不難,難的是如何在原有推薦效果的基礎上精益求精,更進一步。優化目標和評估手段的確定是解決這個問題的關鍵所在。首 先需要確定系統的優化目標。例如有些推薦系統追求推薦結果的點選率;有些則還考慮點選後的實際轉化或成交效果;有些推薦場景更關注推薦結果的新穎性,即希 望更多的將本站新收錄的物品展現給使用者;另一些則更重視結果的多樣性。
在推薦系統的目標明確後,隨之而來的問題是,如何量化的評價這些推薦目標?傳統的評分預測問題通常使用均方根誤差(RMSE)或者平均絕對誤差 (MAE)等計算方法。但在實際應用中Top-N推薦更為常見,這種場景下NDCG(Normalized Discounted Cumulative Gain)或MAP(Mean Average Precision)是普遍使用的衡量方法。
由於推薦系統經常借鑑相關領域的一些技術,如廣告學或搜尋系統,因此計算廣告學中的pCTR或者搜尋系統的Precision-Recall曲線等也經常用於評估推薦效果的優劣。有些系統甚至直接將推薦系統轉化為一個機器學習問題,評估手段也隨之轉化為對應問題的方法。
實際系統中,往往是多個指標(點選率、準確率、覆蓋率、多樣性、新穎性等)共同作用,並且按照產品的實際需求,加權折衷後進行結果評測。測試方法也 有線上A/B Testing以及人工評測等。無論採用何種方法,一個成熟的推薦系統一定要建立在明確的優化目標和評測系統之上,它們像一把尺子,丈量著推薦系統每次前 進的腳步。
9 時效性問題
正所謂“天下武功,唯快不破”,推薦系統要能及時捕捉使用者需求的變化,反饋到模型中,並及時響應使用者請求,實時提供線上服務。因為使用者是挑剔的、也是缺乏耐心的,新使用者尤其如此,如果一個推薦系統無法在較短的時間內調整結果以迎合使用者,那麼使用者會迅速流失。
推薦系統的時效性首先體現在能靈敏捕捉使用者反饋,這些反饋既包括正反饋(使用者喜愛),也需要收集負反饋(使用者不感興趣的)。很多推薦系統往往忽略了負反饋樣本的收集,而事實上,有效的收集使用者的正負反饋,並進行對比訓練,能夠更全面準確的掌握使用者偏好。
在使用者反饋收集的基礎上,還需要能夠及時更新後臺的推薦模型。很多推薦系統後端的使用者模型和物品模型,都需要通過大量使用者日誌來進行挖掘運算,計算 開銷大,所以一個設計良好的推薦系統,需要將離線挖掘和線上服務系統進行有機的結合。離線系統可以設計得比較“厚”,即演算法複雜,模型龐大,更新緩慢。而 線上系統則傾向於設計得輕巧靈活,能及時將捕獲的正負反饋資訊傳遞進來,修改線上模型,捕獲使用者短期興趣變化,從而快速修正推薦結果。
10 大資料探勘和效能優化
大資料探勘是近年來的研究熱點,得益於分散式計算技術的廣泛使用,系統吞吐的資料規模越來越大,離線資料探勘的能力也越來越強,處理大量使用者行為數 據變得越來越便捷。但在推薦挖掘中,系統能夠提供的運算能力和實際的運算需求之間,始終存在矛盾,所以如果有效合理的分配運算資源十分重要。這裡需要在挖 掘深度上進行合理的分配。對重點的使用者或者item,可以分配更多的資源,進行更深入的挖掘。對基礎資料也是如此,高質量的資料可以用於更詳細的分析,而 低價值的資料可能只需要簡化處理流程。
後端的離線系統往往還需要定期更新模型,這裡模型的全量或增量更新方式也是一個值得關注的點。以使用者模型為例,並非所有使用者的個性化模型都需要頻繁 更新,活躍的、高貢獻值的使用者,應該需要更頻繁的予以更新。對item也類似,熱門item和冷門item更新技術的週期可以不同。
在大資料推薦系統的效能優化方面,還有一些常用的技巧,例如倒排索引的使用,cache機制的充分運用等。
總結
智慧推薦系統是一個系統工程,依賴資料、架構、演算法、人機互動等環節的有機結合,形成合力。本文列舉的十個關鍵點,是作者在開發推薦系統中積累的一 些經驗與心得,希望能拋磚引玉,與大家共同探討。我們開發推薦系統的目標,是通過個性化資料探勘技術,將“千人一面”變為“千人千面”,因為大千世界、芸 芸眾生,原本就是多姿多彩的,希望智慧推薦系統能讓這個世界變得更人性化、更豐富、更美好。