尋路推薦 豆瓣推薦系統實踐之路
文|穩國柱(文章來自 不周山)
兩年多前,我在阿里技術沙龍講了一個名為 “尋路推薦”的topic ,介紹了自己在豆瓣時代做的幾個典型案例,屬于比較務實的一個topic,自己把它定位為“實踐篇”。隨后一直想整理一個務虛版的“理念篇”,作為前置于“執行”的“思辨”過程,順便把自己的尋路歷程補充完整。
來到阿里這大半年,無論技術層面還是產品/業務層面,與前廠對比都非常強烈,也極大地刺激了自己的思維。感謝豆瓣給了我獨立思考的空間和充分實踐的土壤,感謝阿里給了我閱歷上的增長,很多想法在這半年里開始成形。適逢@仁基再次邀請我去他的團隊做個分享,也不希望帶著“負債”離開,就找時間做了個階段性總結。本來想小規模低調一點,不料會后不少同學得知后強烈要求加場。實在口干舌燥無力再戰,就在lastday把分享會上那些尚未完全成熟的觀點整理一下,寫了下來。
產品與算法
這張圖想說明一個問題,互聯網幾個主要算法領域中人員與底層技術、業務產品之間的相對關系。廣告投放是一個問題定義得非常清晰的領域,大部分時候算法人員只需要針對一個確定的指標去優化即可。搜索領域稍前置一些,特別在近年大家都喜歡談論搜索結果個性化之后。至于推薦,其實我現在更愿意提推薦產品,而非推薦技術。初入門的人總喜歡問學推薦需要學些什么算法,其實算法層面你需要懂的特定性的知識并不多,大部分還是傳統的統計學、機器學習的知識和模型,加上一些常用的協同過濾、矩陣分解模型。過多地去鉆研那些打著推薦系統幌子的特定新型算法反而是鉆牛角尖了,發發paper可以,實用性不高,這個領域有更重要的問題值得你去關注。
關于產品與算法的關系,我覺得@橫云有一句話總結得挺好,產品是1,算法是0(雖然我常跟別人說類似的意思,但我覺得這個描述足夠簡練傳神),沒有合適的產品之前,算法對用戶幾乎不產生什么價值,一旦產品成立,算法能讓產品實現質的飛躍。對于跟產品端走得更近的推薦算法而言,這個效應尤其明顯。
這里有一個案例,是我們前陣子跟的手機淘寶商品詳情頁的同店商品推薦,在一個較長期的純粹算法層面的ctr預估版本的改進中,點擊率提升了幾個百分點。后來我們發現該模塊的數據來源于兩處——算法和賣家自定義。而實際上,后一個來源幾乎不起作用,因為不可能有哪個賣家會去維護成百上千的商品之間的關聯關系(不知道該產品當初是如何設計出來的)。實際數據對比也顯示算法來源產生的點擊和成交都三倍于店家自定義的數據結果。如果我們在業務上推動數據源全切換到算法來源,預期帶來的效果提升比之前純粹的算法改進要高出一倍。這個提升不牽涉到任何的模型改進,但需要算法人員保持對業務的關注和理解,而不是一直躲在后面。
這是個很簡單但足夠說明問題的案例,實際工作中復雜的產品模型對算法人員產生的誤導會更多,我也會更加關注產品本身的定義,它是否是一個適合融入算法的土壤,或者什么形態才是產品和算法最好的契合點,而不是著眼于盲目鋪開算法業務。
說到這里,讓我想起幾年前中國推薦社區早期熱門討論的一個話題:推薦技術是否能成就一個偉大的產品(公司),就像搜索技術之于google一樣。我的觀點,基于推薦技術對產品的強烈依附關系,它不會反過來促成一個產品,但它終將成就一種用戶習慣(就像現在用戶對搜索的認知一樣,但個性化影響的用戶習慣必將深遠得多),特別是在現在的科技發展方向越來越貼近我們自身的時代,這也是一個激勵我接下來去繼續探索的領域。
推薦算法的土壤
既然說推薦算法需要有一個合適的產品/土壤才能更好地發揮作用。那么這個土壤是什么,是否我們擁有了錘子,滿世界的產品都可以當做釘子去敲?事實上這是很常見的現象,也是我比較反感的無腦個性化的做法。
在我看來,個性化技術是解決信息過載的工具,一個產品要引入個性化,首先要滿足兩個先決條件:
- 1、item數量足夠多
- 2、item類型對用戶產生的分眾
不滿足這兩個條件,強行為了個性化而個性化,結果只能是巧婦難為無米之炊。我見過的,滿腔熱情上個性化,結果很快遇到瓶頸,反過來抱怨算法或者算法人員本身的情況并不鮮見。
拿我以前做過的電影、圖書做對比,就是兩個非常不一樣的市場。對于第一個先決條件,每年新產出的圖書數量至少比電影高一個數量級。而且,圖書在種類和分眾性上也顯然比電影強得多,特別是在國內環境對于電影偏好趨同性高度一致的情況下。兩相對比,圖書市場明顯更適合做個性化,這也是個性化商用技術最早由amazon圖書發端的一個原因。而幾年前豆瓣各產品線分拆,算法技術也獨立發展,圖書更強調個性化,電影更強調熱門與根據標簽篩選,也是同樣道理。
以上論述不意味著電影就不需要個性化,比如netflix,在美帝可被接觸到的優質片源更多,用戶品味更分散的條件下,個性化仍然是必須的,特別是近年來netflix的業務不僅局限于電影之后。
一個產品從零開始考慮上個性化,未必要一蹴而就,它有一個判斷的漸進路徑:排行榜->分類排行榜->分人群個性化->針對個人的個性化。如果前一個方案能解決問題,就沒必要走到下一步。即便走到最極致的個性化,之前幾步的解決方案也需要同時存在于系統之中。
算法效果的度量
我經歷的兩家公司正好代表了兩種不同類型的推薦訴求——基于用戶社區的興趣型推薦,和以商業目標實現為前提的推薦(市面上還有其它類型差別較大的推薦)。注意到它們的差異,并采取不同的措施是件相當有價值的事情。
- 前者更關注長期的效果,用戶是否愿意在你的社區留下來;后者更關注短期效果,用戶在當前session是否會形成交易
- 前者更關注user;后者更關注uv。
- 推薦新item的重要性,前者是明顯高于后者的,因為用戶的主要訴求就是發現。曾經做豆瓣fm的時候,有一個dj的算法指標效果非常好,但它無法單獨工作,因為它會導致用戶的興趣迅速收斂,只能在某個圈子里打轉。
算法效果的度量方式往往決定了你努力的方向,面向不同類型的推薦,其中一個重要措施,就是不要采用同樣一套標準去衡量你的工作結果。這點我在很多技術paper中都沒有看到有成系統的論述,這跟paper通常只論述通用性問題而非特定性問題有關,于是導致了在實踐中永遠只看到ctr、precision/recall、rmse那樣的衡量指標。那是衡量一個單一算法,而不是一個推薦系統的指標,或者說,不是衡量跟它綁定在一起的推薦產品的指標。要推動產品和算法形成一個適合自身的指標非常困難,需要多方人員的認知并達成共識。
當你在做一個用戶產品的時候,算法指標會變得尤其苛刻,直白一點,個性化,是要讓所有人都滿意,而不是為了統計上80%人的體驗而犧牲掉剩下20%人的體驗。這點我有深刻的體會,以前做豆瓣fm的時候,從算法整體指標來看效果還不錯,但總是會有用戶抱怨這些那些的問題。后來我才意識到,一個連《統計數字會說謊》都沒有告訴我的道理——統計數字的代表性導致的局限性。一個反映了80%的用戶在80%的時間里覺得滿意的指標,對于一個號稱個性化,并且是面向挑剔的興趣社區的個性化,是遠遠不夠的。
另一個案例比方說淘寶搜索個性化,如果我們衡量的指標是ctr、cvr,只要我們照顧好那80%大眾用戶和爆款商品,就能用最簡單的方法獲得最好看的統計數字指標。然后用他們產生的數據繼續訓練我們的模型,同時強化了這個結果。于是那20%(或許價值巨大)的用戶永遠也無法進入我們的視野,這終歸是個蹩腳的個性化系統。
我又想起那篇文章 To Personalize or Not: A Risk Management Perspective ,是否所有人都需要個性化。或者我可以理解為,目前的個性化滿足不了所有人的要求,有些用戶寧可不要個性化。
算法人員的推動力
算法工作跟工程開發工作最大的不一樣在于:算法產出是不可被直觀測量的。如果流程正常,工程開發的產出是有產品文檔、設計稿來驗證的,功能缺陷、交互/界面有出入,一目了然。而算法,特別是個性化算法,是無法通過直觀的手段來測量的。傳統的測試手段只能測量其可用性,而不能測量其有效性。
這點差異導致了產品人員無法像管理開發效果那樣管理算法效果,也是導致優秀的算法產品人員匱乏的重要原因。這不應認為給算法人員帶來了什么優越感,相反,要使得自己的工作產生合理的價值,算法人員更應該站出來,主動填補算法與產品之間的空隙。因為正如第一點所說,算法價值的實現離不開產品。
要么有一個懂算法的產品經理,要么有一個能用產品語言說話的算法工程師。在我看來,后一個人必須具備的素質,除開工程能力和算法能力之外,還有對業務本身的理解,對產品流程的認知,以及良好的溝通能力、邏輯思維能力,這也是我招聘算法工程師的一個額外的標準。
人與推薦系統的相互作用
算法都依賴于數據,而推薦算法是一個極端依賴人與系統交互數據的實現。這里的“人”包括內部的編輯、運營人員,也包括外部最廣泛的用戶。內部的人員可以為算法產生有價值的推動,比如pandora的genome項目、精選集的產生、負樣本的收集、推薦規則從經驗到機器的總結和遷移;另外,外部的用戶與系統交互產生的數據是否無偏地覆蓋了用戶的偏好?
有經驗的人都知道,數據質量決定了算法效果的上界,算法模型的變換、算法參數的調優只不過是在努力逼近這個上界而已。所以,要想讓你的算法產生更好的效果,有兩種途徑:優化算法;或者優化數據——具體到推薦領域,主要是優化人與系統的交互數據,但這不是單純的算法問題。
目前大部分的優化都集中在算法層面上,而忽略了數據優化。一大原因是產品和算法人員的割裂,各自管理著自己擅長的事情。一個典型的例子是:在一個孤立的算法系統中,用戶接收到的數據大部分來自于系統的推薦,系統收集到的也是用戶基于這份數據的反饋信息,基于這個數據去訓練模型,再度強化了之前的結果。用自動化系統的術語來說,這是一個正反饋加強的系統,而不是一個負反饋糾錯的系統。豆瓣fm由于產品形態上整個音樂生態系統不完備,用戶反饋的數據大都是基于系統推送的結果,就存在著這方面的問題。電商搜索引擎這個問題也很嚴重,在搜索是主要路徑且搜索結果ctr目標的導向下,爆款會不斷強化自身的爆款特性,導致更多優質數據無法進入模型的篩選范圍。另一個例子是我以前所在的微淘產品,由于kpi的壓力,運營做了很多無節操的誤導用戶關注微淘賬號的事情,導致整個微淘關注數據基本不可用。
一言蔽之,不要過度迷信算法的作用,要充分利用產品和生態的力量。數據優化的增益能極大提升算法優化的上界。
尾聲
不知不覺吐了不少文字,好像比我當天講的還要多。其實每個子標題都可以獨立成文,都放一起有點太擁擠。但務虛的東西終歸難以展開太多,就像無根之木難以拔高一樣,再談深入就變忽悠了。希望將來的實踐把根基打扎實,能有機會逐個展開。
End.