回想起來,我也算是國內接觸推薦系統較早的人之一了,最近和人聊天,覺得不少人對推薦系統有所誤解,以為需要多么高大上的算法才能搭建起來的,我只想說我經常說的那句話【不是這樣的】,所以有了這篇文章。
第一次接觸【推薦系統】是在兩年前在某高校的互聯網信息處理實驗室的時候,那時候,【機器學習】和【大數據】都是新概念,但是差不多半年后,【大數據】的概念就開始風靡全球了,到現在已經被爆炒得面目全非。
那年還因此買了一本項亮的書《推薦系統實踐》,那本書和現在的很多熱門書籍一樣,都是跟著概念熱起來的。 雖然有一些作者自己的實戰經驗在里面,但是總體上來說并沒有太多值得重復翻開的地方。
幾乎所有宣揚【推薦系統】的人,都要拿【啤酒和尿布】,【亞馬遜推薦占營收20%】之類的經典例子來說力證推薦系統的牛逼之處。到處宣揚【推薦系統】插上【機器學習】等算法的翅膀,就能讓電子商務變得精準無比,能智能的猜出用戶想買的東西。
殊不知,其實這兩個例子和所謂的【算法】其實關系不大。
1. 啤酒和尿布 首先是【啤酒和尿布】,超市的人員發現買啤酒的男人容易順手買尿布。這其實是一種數據分析,是根據數據統計加上人工分析得出,是一種以經驗來改善銷售的行為。和【機器學習】【數據挖掘】等算法的關系不大。 剛接觸【推薦系統】的時候,【協同過濾算法】大熱, 我也曾經迷戀得研究過該算法,以為發現了什么寶貝一樣。但是實際上,在工程中【協同過濾】出來的效果往往慘不忍睹,所謂的【算法工程師】每天能做的就是在那調整【協同過濾】算法的相關參數,然后看看第二天的點擊率有沒有上升。然后調整到最后你會發現,牛逼哄哄的【協同過濾】其實還不如簡簡單單的【看了又看】效果來的好,雖然協同過濾算法本質上也是一種【看了又看】的思想。
2. 亞馬遜的推薦系統 亞馬遜的推薦系統占了營收比,我記得是20%,不知道現在上升了還是下降了。這個說辭會讓很多人誤以為只要你搞好了推薦系統,你的營收就能上升20%以上一樣。其實不然,對于亞馬遜來說,為什么推薦能起到這么高的銷量,一個很重要的原因在于,【亞馬遜的首頁點擊率高的部分位置劃分給了推薦系統的】,從廣告學上講,廣告位置的好壞極大的決定了廣告的銷量。這個很容易理解,假設你的產品的廣告牌能掛上天安門城樓的話,你覺得你還需要擔心該產品的銷量嗎?
當然不可否定的是亞馬遜的推薦系統應該是很牛逼的,但是這并不說明他們采用的【推薦算法】非常牛逼。推薦系統我認為其實和搜索系統并無太大差異,我一直認為推薦系統其實只是一個個性化的搜索引擎。之前在【秘密】上很火的有個爆料是:“360搜索的Rank剛開始就是用【機器學習】的算法去做,屎一樣的效果,是我把百度的基于規則的算法偷過去之后才變好的。” ,這個爆料出來不少人諷刺【基于規則】,覺得這是在黑百度的算法。 其實不是這樣的,記得當時阿里搜索挖了一個谷歌搜索的員工,該人在阿里分享的時候就說過:【谷歌的搜索效果比別人好的原因就是規則庫牛逼,關于算法使用的都是成熟的人盡皆知的算法,并沒什么新奇酷的算法】。 可能也是這個原因,谷歌研究院的科學家幾乎全是【工程師背景】出身的。還記得上次【CCF推薦系統前言講座】,剛開始叫了幾個學院派的講師在那大講特講各種酷炫掉渣天的算法,然后淘寶的大數據負責人車品覺 上臺之后直接來了句【我們實驗出各種算法效果不太好,還不如最基本的 關聯規則效果來的好】直接把前面的學院派專家們打臉打得都腫了。
我心目中的推薦系統 不管是電商,或者是新聞,都有【個性化推薦】和【熱門推薦】的取舍。一個商品熱門或者點擊量高是有其原因的。所以將熱門的東西推薦給用戶是非常合情合理的,因為既然熱門,也側面說明了很大概率上該用戶也會喜歡該商品。而【個性化推薦】本質上是為了解決【長尾】問題,把那些不熱門的東西,但是很可能符合某特定用戶品味的商品【挖掘】出來,推薦給特定的用戶群。
首先,在推薦中,醒目的推薦位應該是【熱門推薦】或者【人工推薦】,【人工推薦】是指比如在體育新聞中,巴薩奪冠之類的大新聞是直接讓編輯來【人工推薦】即可,就是此新聞一出,馬上登上頭條,而不是在那磨磨唧唧的計算特征值,計算相似度,計算是否符合用戶興趣。 對于推薦中的【冷啟動】,最理想的推薦就是【相關推薦】。說到這里,整個推薦系統的 80% 已經搭建完畢,【熱門推薦+人工推薦+相關推薦】,這三者都是【個性化】都沒什么關系,也算法關系也不大,但是這三者效果的好壞就決定了整個系統推薦效果好壞的 80% 。好多人連最基本的這三者都沒有做好,就開始想一步登天,很可惜,這樣的捷徑是不存在的。 接下來是 20% 的【個性化】的做法,如上所說,個性化是為了解決【長尾】問題,正是因為長尾占商品的 20% ,所以在此我認為【個性化】其實也只有 20% 。要解決個性化,首先就是要對用戶分析,最成熟的辦法就是對用戶打標簽(是否讓你想起來社交網絡為什么經常讓你選用合適的標簽描述自己,沒錯,就是為了分析你)。
其實,給用戶打標簽,逼格更高的說法叫【用戶特征提取】或者【用戶行為分析】。說到這兩個詞,那些所謂的算法工程師可能就會開始扯什么高大上的算法,機器學習,自然語言處理,數據挖掘等各種算法。其實在我看來,算法很大情況根本派不上用場,我認為這方面的關鍵在于【數據統計 + 人工分析】。將用戶的瀏覽記錄等記錄下來,統計他最常點擊的東西,最常去的頻道,然后給他打上這些頻道或者商品的標簽。或者收集更詳細的信息,比如年齡,打上【青少年,男人,女人,老人】等標簽,根據這些標簽進行推薦。比如當推薦護膚的商品時,就可以偏向于女人,推薦運動產品時,就可以偏向于男人和青少年,推薦保健品時,就可以偏向于老年人。所以,光看年齡這個標簽的維度,就可以做很多文章。所以標簽庫的設計和積累,是非常廣泛和重要的,而這方面需要大量依賴于【人工分析】,而不是看論文調算法能做到的。 就好比現在的中文分詞,拼到最后大家都在比詞庫的積累,誰的詞庫好,誰的效果就好,【搜狗】的【拼音輸入法】效果好也是因為詞庫比別人好。
最后就是根據標簽的定向推薦,這個推薦概率是有【權重設置】在里面,就比如剛才對年齡這個維度的權重,是需要給予對應的權重值,如何給定呢?其實就是【拍腦袋】,當然,如果有某些公司已經得出經驗值了直接可以拿來用就會更好。但是在拍完腦袋之后需要做的就是觀察點擊率變化,查Bad Case,然后再對權重進行調整,也就是根據評測和反饋來調整,沒有【評測和反饋】,整個系統等于是一個黑盒,談何優化?在我看來,【推薦系統】本質上首先是一個系統,需要不斷的對各種效果進行【評測】,查各種【Bad Case】,而這些都不是看論文可以學到的東西。
總結 1、實力派的【算法工程師】往往都是ABC[always be coding],這樣的算法工程師才能根據實際問題建立模型或者建立規則庫,是真正能解決問題的人。往往是一些有研究背景,經驗豐富的研究員,更加重視工程,因為工程架構上一些恰當合理的設計,效果往往就能遠遠高過于模型算法優化。
2、學院派的【算法工程師】往往是為了算法而算法,而不是為了解決推薦系統的問題去找最適合算法。這也是為什么大公司經常招了一些博士畢業的算法工程師后,不是研究算法而是讓他們整天在那看數據報表?【因為發現算法沒啥好研究,只能讓他們在那看看報表找找規律了。】
3、【幾乎所有所謂的智能推薦算法都是花拳繡腿】
4、當一個做推薦系統的部門開始重視【數據清理,數據標柱,效果評測,數據統計,數據分析】這些所謂的臟活累活,這樣的推薦系統才會有救。