在日前舉行的2017 CSDI 中國軟件研發管理行業峯會上,包括摩拜單車創始人及CTO夏一平、華爲首席系統工程專家徐琦海、京東雲、攜程等一線互聯網企業大數據平臺負責人等在內的技術大咖齊聚一堂,分享了各自領域的頂尖技術實踐。在峯會大數據專場上,達觀數據CTO紀達麒圍繞「數據挖掘算法落地實踐」作了主題演講,就個性化推薦系統商業化的五大要素進行了詳細探討。下面爲你們獻上演講的精華內容。算法
機器學習的原理並不神祕
最近「人工智能」特別火。「人工智能」的概念雖然很高大上,但從算法角度來講,離咱們是很近的。這些算法之因此可以獲得普遍地應用,很大程度上是由於機器學習和人類學習很像,在本質上有不少類似性。
從人類學習的角度來講,咱們教一個小朋友學數學,咱們先要給他一些課本上的例題,讓他知道加減乘除大概是怎麼回事;而後給他一本習題集,讓他不斷地去算,去對答案,最終學得四則運算的技能。
在這個過程當中,例題和習題就是訓練樣本,經過訓練樣本得到標準答案的過程,就是「訓練」。「訓練」的最終目的,是要找到一個「目標函數」。有訓練樣本,經過訓練找到目標函數,這就是機器「學習」的方式,它和人類學習是很類似的。
舉個實際的例子,好比咱們的天氣預報系統就是按照這個方式「學習」出來的一我的工智能系統。爲了有一個好的預測結果,咱們先要普遍地採集溫度、溼度、風速、氣壓等各種數據和特徵,構造訓練樣本;而後,根據以前是否下雨以及降雨量的結果,獲得一個量化的目標函數;接下來,再經過創建一個學習模型並反覆糾正完成一套訓練過程,不斷優化咱們的目標函數,獲得儘量準確的預報結果。
接下來咱們要展開講的個性化推薦算法也是如此。它的實際操做須要克服不少細節問題,可是其基礎是很容易理解的。架構
推薦算法的演進之路
對於一個內容提供商,無論是新聞媒體或者是電商,或者是文學網站,它們提供給用戶的內容老是按照必定指標來作推薦的。爲此誕生了不少經典的作法,可是最後的效果仍然不盡如人意,還有很大的提高空間。
最簡單的方法是單一指標推薦,也叫「熱門推薦」。好比就按點擊量或者銷量來作排序,優先推送閱讀人數最多、購買人數最多的產品。各類類型的「熱搜」「熱銷」類榜單就是如此。採用單一指標推薦最大的問題,是沒有「個性化」。沒有「個性化」會致使兩個顯著的後果——首先是體驗相對較差,用戶心裏深處「想要變得不一樣」的需求沒有被激發出來;另一個問題,就是馬太效應明顯,自己獲得曝光的產品會持續獲得曝光,而處於長尾上的商品則持續得不到曝光,等於大量質量不錯的產品或內容其實被閒置了。
併發
圖一:傳統排行榜的邏輯機器學習
爲了解決這兩個問題,出現了兩種針對性的方案,即基於用戶(user)信息和物品(item)信息分別來作推薦。
根據物品信息來作推薦,關鍵是對物品的基本屬性、類別、標籤等進行標註,經過對物品信息的深度分析,爲用戶推薦和他以前瀏覽記錄類似的物品。在這個過程當中,要推薦的物品的形態是清楚了,但用戶的畫像仍然是模糊的。
根據用戶信息來作推薦,關鍵是根據用戶的行爲日誌來刻畫他的偏好。經過對用戶喜歡點什麼,來爲這個用戶創建他的偏好模型,而後向他推送他偏好的那些內容。在這個過程當中,用戶畫像是有些清晰了,可是用戶仍然是個體化的,不一樣用戶之間的類似性、用戶行爲的社會性並無獲得比較好的體現,推薦的精度也並無一個很好的提高。
針對這些問題,出現了「協同過濾」的算法。協同過濾算法的核心,是利用羣體智慧。具體來說,分爲基於物品的協同過濾和基於用戶的協同過濾。舉例來講,基於物品的協同過濾的思路,是說在一大羣人中,咱們發現看劉德華的人不少都會看張學友,這說明張學友和劉德華有類似度,那之後碰到點擊劉德華的人,咱們能夠爲他推薦張學友。而基於用戶的協同過濾是說,在一大羣人中,咱們發現A和B兩我的都喜歡看好萊塢大片,好比他們都看了變形金剛、木乃伊、神奇女俠,這說明A和B是同好中人,後面用戶A又看了加勒比海盜,那就能夠把加勒比海盜也推薦給B。
在商業實戰中,協同過濾一般會和對物品以及用戶的深度分析相結合,並進行進一步的模型融合,從而獲得一個精準度更高的效果。好比基於物品的協同過濾在Amazon、Netflix等網站中成功應用,能爲用戶推薦同領域的更深刻的結果;而基於用戶的協同過濾則傾向於推薦範圍更寬泛而熱門的內容,在特定場景下運用,能實現跨領域、使人耳目一新的結果。
圖二:協同過濾的模型融合分佈式
除了協同過濾,隱語義模型的普遍應用也是一個重要的技術突破。之前傳統的分析方式分爲兩步,第一步是對用戶打標籤,好比「15-20歲,男性」;有了這個標籤,第二步是根據這些標籤來映射到結果。這兩步都存在一些「硬傷」。首先,根據用戶信息打出的標籤不必定準確,好比用戶填的註冊年齡,不必定是真實的年齡;其次,經過標籤來對其偏好的物品進行映射,準確度也不高。好比男性中確實很大部分喜歡體育類內容,可是全部男性都要給他們推送體育類內容嗎?這樣的推薦精準度是比較差的。隱語義模型的核心,是超越這些表層語義標籤的維度,經過機器學習技術,挖掘用戶行爲中更深層的潛在關聯,從而避免人工貼標籤粗放、主觀的缺點,使得推薦精準度更高。
協同過濾和隱語義模型已經應用在愈來愈多的商業場景中。不過,對於一個成功的算法來講,僅僅明確其模型基礎是不夠的,還必需要具有下面所說的這些重要優勢。函數
五大要素缺一不可
從整個行業的實踐來看,有五個要素相當重要,即自我進化、快速建模、模型融合、開放架構以及性能/效果/資源的良好平衡。具有這五個要素的算法,纔能有效應對海量實時數據的吞吐,並高效持續地進行運轉。
自我進化
一個推薦系統要長期運行,首先要解決的就是自我進化的問題。用戶的興趣、物品的價值以及用戶數據的時效性都會隨着時間的推延而變化。用戶的興趣有長期和短時間的興趣,曾經的短時間興趣並不能對預測其將來行爲提供很好的參考;物品的價值也有它的高峯期和平原期,如今賣得好的產品未必之後也賣得好,反之亦然。
圖三 模型融合高併發
之前針對用戶興趣、物品價值的變化,一般是用人工設定規則的方法來加以應對。隨着數據量呈幾何級的增加,人工設定規則繁瑣且低效的弱點愈來愈明顯。人工設定100條、1000條規則可能還行,可是100萬、1000萬條規則呢?根本不可行。與之相比,經過算法設計,驅動推薦系統不斷進行自我進化,不但更可行,並且更精準高效。
快速建模
在信息的洪流裹挾下,用戶在每一個平臺停留的時間是頗有限的,這就要求推薦系統必須根據這很短的停留時間內用戶的行爲數據,快速地捕捉其興趣,爲其創建和更新興趣模型,從而迅速爲其推薦個性化的內容。
對於新用戶來講,這個問題特別明顯,業界稱之爲「冷啓動」問題。解決冷啓動問題,從徹底空白到創建起一個能夠提供有效參考的用戶模型一般須要幾天。這個漫長的週期在實際的商業化過程當中是很致命的。很難想象一個用戶若是沒有在首次瀏覽時得到滿意印象後之後仍會常常來光顧。
要解決冷啓動問題,有不少種方案,好比能夠經過外部信息,如IP地址,註冊信息等來完善用戶的標籤體系。但更重要的是,咱們能夠選擇那些接受度比較高、同時又能表明細分領域的物品來測試用戶的興趣點。如何選擇這些物品,以確保能快速地明確用戶興趣,是問題的核心。一個能快速捕捉到用戶興趣的推薦系統,是確保用戶留存、提高用戶轉化率的重要因素。
模型融合
前面講協同過濾時咱們已經提到,商用的推薦算法中都融合了多套算法,以得到更佳的效果。在機器學習領域,每個單一算法都是針對一類特定的問題,於是針對同一個推薦任務,不一樣的算法效果相差很大。可是,實踐中的推薦任務千差萬別,每一個任務適應的算法每每並不相同,在這種狀況下,將多個算法的預測結果進行融合,每每能取得10%以上的優化效果。
模型融合的出發點是想創建一個通用性更強的解決方案,以期用一個較通常的算法模型,來爲儘量多的任務提供支持。如何儘可能兼顧「通用性」和「優化效果」,是在進行模型融合過程當中須要考慮的關鍵。在實踐中,咱們開發出的獨有專利的雙層疊加算法模型就是這方面的一個典型案例,如今已經成爲咱們向客戶提供推薦服務的技術基礎。
開放架構
從推薦算法發展的歷史來看,新的算法始終在不斷的涌現,尤爲是隨着深度學習興起以後,各類新興算法更是層出不窮,包括強化學習、遷移學習等新方法、新領域都開始受到愈來愈多的關注。
對於一個優秀的推薦系統來講,即便如今的推薦效果已經至關好,但必須對新興算法也持有海納百川、兼容幷蓄的態度,才能不斷地進一步優化提高本身。要作到這樣的理想狀態,整個系統架構的開放性是相當重要的。好比我原來是採用協同過濾來作推薦的,如今要接入深度學習的算法,怎樣才能保證我原來的系統仍然高效穩定的運行?若是是見獵心喜,跟風趕潮流地接入新算法,會有很大風險,系統的效率和穩定性可能都會打折扣。如何解決這個問題,是咱們在作架構設計的時候一開始就該有所考慮的。
性能/效果/資源的平衡
和之前相比,如今的數據量的增加能夠說是爆炸式的。用戶數、商品數的急劇增加,隨之而來的是爲他們創建的模型的數量呈現幾何級增加——每一個用戶不只有長期興趣模型還有短時間興趣模型,每一個商品也要創建時效性變化的模型,並且在高併發的場景下,全部這些事情都須要在極短的時間內完成,可是運算所需的硬件資源倒是有限的,這時候就須要在資源消耗和運算效果中找到一個平衡。
好比你們都知道分佈式計算是解決海量數據運算的一個解決方案,可是分佈式數據很難知足時效性方面的要求。要知足時效性的需求,很重要的一點就是要簡化模型,去掉沒必要要的用戶特徵,從而下降運算量,並同時緩解存儲資源緊張的問題。可是,下降了運算量以後,會不會對推薦效果產生消極影響?如何平衡好運算量和推薦效果,這也是一個大課題。
圖四:三層火箭模型性能
在實際中,咱們的操做方式是,專門抽取出高價值的用戶和物品,讓它們享受更復雜的算法和更快的更新頻率,同時構建「三級火箭」的算法體系。「三級火箭」的核心思想是,按照離線、近線、在線這三個步驟,將一整套推薦算法拆分紅三個部分。好比,對海量用戶日誌進行深刻挖掘徹底能夠獨立進行,能夠離線進行操做;Cache、Model的及時更新、迅速捕捉用戶點擊反饋以及一些較輕量級的推薦算法的運行能夠在近線部分進行完成;在線部分則負責及時響應請求並返回結果,保證高可靠高併發的能力。在算法設計中應用相似的思路,能夠分攤運算壓力,提高運算效率。學習