推薦系統

motorola-razr-v3-fight-small-81373

回想起來,我也算是國內接觸推薦系統較早的人之一了,最近和人聊天,覺得不少人對推薦系統有所誤解,以為需要多麼高大上的算法才能搭建起來的,我只想說我經常說的那句話【不是這樣的】,所以有了這篇文章。

第一次接觸【推薦系統】是在兩年前在某高校的互聯網信息處理實驗室的時候,那時候,【機器學習】和【大數據】都是新概念,但是差不多半年後,【大數據】的概念就開始風靡全球了,到現在已經被爆炒得面目全非。

那年還因此買了一本項亮的書《推薦系統實踐》,那本書和現在的很多熱​​門書籍一樣,都是跟著概念熱起來的。雖然有一些作者自己的實戰經驗在裡面,但是總體上來說並沒有太多值得重複翻開的地方。

幾乎所有宣揚【推薦系統】的人,都要拿【啤酒和尿布】,【亞馬遜推薦佔營收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. 當一個做推薦系統的部門開始重視【數據清理,數據標柱,效果評測,數據統計,數據分析】這些所謂的髒活累活,這樣的推薦系統才會有救。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s