推薦系統的那點事

aszxqw發表於2014-08-25

 推薦系統的誤區

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

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

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

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

相關文章