推薦系統:信息系統的雙子星
推薦系統:信息系統的雙子星
說起信息系統,在這個計算機科學與信息科學十分重要的子領域裡有兩個最為核心的問題與應用,堪稱信息系統的雙子星。那便是搜索引擎以及推薦系統。提起搜索引擎知名度肯定是要大得多的。谷歌,必應,百度,可以說我們每天都在用。而提起推薦系統,聽起來名聲沒有那麼響亮,但是實際上,推薦系統對我們的互聯網生活也是具有巨大的影響的。
那麼什麼是推薦系統呢?推薦系統,顧名思義,就是通過用戶的在線數據,可以是搜索和閱讀的紀錄,也可以是用戶在個人資料里所提到的一些用戶個人信息,也可以是用戶在社交軟體里好友的在線數據,更可以是以上所有數據的結合;之後基於對這些信息的分析和歸類,」推薦」用戶可能要購買的產品,可能會購買的服務乃至可能會瀏覽的網頁給用戶。
推薦系統與搜索引擎,有許許多多技術是重合的。那麼其中區別在哪裡呢?其中區別在三個地方:第一,search engine是」pull mode,「recommender system則是」push mode。「第二,search engine是系統掌握主動權,而推薦系統則是用戶掌握主動權。第三,搜索引擎是提供短時間的,不穩定的信息檢索;而推薦系統則是提供更長時間的信息供給。比如一些購物網站會對用戶進行畫像。這是什麼意思呢?您越在購物網站消費,他就越了解您。好比餐廳的服務員,對於老顧客,往往不用開口就知道人家要點什麼菜一樣。
推薦系統曾經還有一個名字,叫做filtering system。推薦系統啊,他好比是化學材料里研究的滲透膜。它的工作過程,你也可以理解為「阻擋」一些冗餘的,不必要的信息。最簡單的就是你要做這個事情,肯定不能給一個印度教徒推薦肉類食物,尤其是牛肉類食物;也不能給穆斯林或者猶太人推薦豬肉食品。你也不可能給一個,已經在教育一欄里寫上「碩士」的用戶推薦購買五年高考三年模擬。當然比較高的境界自然就是,推薦用戶想要,和不想要的東西了。比如,給本人,一個好的推薦系統肯定會通過我平時的上網行為,推薦給我魔獸世界和P社四萌的相關產品,而不是王者榮耀;推薦法國,德國萊茵蘭或者智利的紅酒,而非南非,中國或者澳洲的紅酒;推薦辛辣口味的香腸,而非內臟。好的推薦系統,也是有好處的。可以幫助用戶更快的去找到他們在類似商品中,喜歡的東西,而不是不喜歡的東西。
一個好的系統,對於一個互聯網公司的作用和意義,可能是非常巨大的。一個互聯網公司如果做推薦系統公認做得好,那麼就非常容易拿下巨額的在線廣告銷售單子。其實這個東西大家想一想就會意識到的。推薦系統做得非常好的公司其典型案例就是Facebook。Facebook的推薦系統可以做到什麼程度呢?他們的推薦系統,是網頁級的。可以,相當準確的把握用戶想要瀏覽到什麼樣的網頁。他們不會給用戶推薦用戶不喜歡的網頁。他們推薦的一定是用戶會非常喜歡,非常同意其中觀點的網頁。其實你仔細留心就會發現。如果你在Facebook里公開表達了自己的政治觀點(比如美國總統大選對於兩黨的態度),你就會感覺到,「咦,怎麼我身邊所有人都在支持特朗普/希拉里?」
而其實比較差的案例就是知乎了。你應該也聽過無數人吐槽知乎的live推薦系統吧?比如明明是一個高考很多年了的人啦,卻天天看見的都是什麼「如何考大學」之類的live。這個就是一個非常粗糙,原始乃至淺陋的推薦系統了。一個好的系統來替換他,銷售額甚至可以增加好幾倍。
如果把一個系統做成這樣,那麼其意義就是,用戶必然會對這一社交軟體上癮。因為他在這個軟體里一定非常開心。這是人類的潛意識和本性。您可以思考一下古代的皇帝為什麼,總是會被奸臣的花言巧語所蒙蔽。其實就是同一個道理。當然了,問題也就來了。智能化的社交網路推薦系統,也有可能讓我們失去了,在閱讀和溝通中所應該具有的批判精神。企業為了錢做這些事情是否合適呢?我想這也是政治科學方面,一個非常值得討論的內容。
那麼這樣的一個系統,其理論和設計又該如何去做呢?答案便是,這一問題,其理論核心,就是機器學習與數據挖掘的相關技術。當然,其他的一些演算法也是可以被應用於推薦系統設計的。你可以這樣認為:假如推薦系統是一輛賽車,那麼機器學習和數據挖掘的相關技術,就是賽車的發動機。
理論上,數據挖掘和機器學習的所有演算法都可以被加工成推薦系統所需要的演算法。因為這就涉及到數據挖掘和機器學習的一個本質問題了。熟悉數據挖掘的朋友肯定會知道數據挖掘的兩種維度(這也是韓嘉煒教授的經典總結之一,您可以去先生的經典著作:數據挖掘,概念與技術里的前言部分找到這一思想)。數據挖掘就是兩大維度。其中之一是歸納性問題。就是總結過去。其中之二是預測性問題,那便是預測未來。我們通過很好的演算法去總結過去,在這個基礎上去預測未來,這就是推薦系統的意義所在了。
推薦系統實際上有兩種最基本的設計思路:content-based filtering,基於內容的推薦。還有另一個是collaborative-filtering,基於用戶的推薦。其實你仔細想想不管咋做這個事,也就這兩種思路而已。當然了,現代用的商業推薦系統所採用的技術比這個要複雜得多。
現在我們分別,對這兩種設計思路進行介紹。
1. content-based filtering:基於內容的推薦
這個演算法的思想就是:「推薦用戶過去喜歡的內容。」挖掘數據,提取信息,尋找相似性。
舉一個例子,如果一個用戶是一個,超級的暴雪遊戲或者P社遊戲迷。那麼他在更長時間內購買,暴雪和P社的遊戲的概率是非常高的。用戶在互聯網上瀏覽,訪問等等會留下大量的數據。這些數據一般都是文本數據。當然,這些東西往往都是非結構化數據。假如我們做一個,基於非結構文本的數據挖掘系統出來,我們肯定會從中提取大量非常有效的信息的。當然了,這一塊的技術其實目前已經比較成熟了。尤其是著名計算機科學家韓嘉煒先生在這一領域做出了非常突出的貢獻。韓先生寫過一本書:Phrase Mining from Massive Text and Its Applications,就是專門用來解決這個問題的。網上也有許多開源的工具可以用。
有了這種挖數據的方法,企業只要著重於,去挖兩種數據就行了。其中之一是用戶的偏好(比如,有大量的搜索內容與某種網路遊戲相關,關注公共主頁或者公眾號,有大量的內容與四川美食有關,等等,就是這種數據。當然,dislike方面的決定權也是很重要的。比如你絕對不能給印度教徒推薦牛肉食品,給穆斯林和猶太人推薦豬肉食品)。另外一個,就是用戶在社交軟體上與社交網路軟體的交互(interaction)。有了這兩種信息,就可以,開始構建推薦系統了。
那麼我們如何去讓推薦系統運行起來呢?答案就是用相似性衡量的演算法。在數據挖掘上衡量相似性的演算法有非常多。都是可以用來參考的。在這裡我特別點名一種演算法:tf-idf演算法。可以說是所有推薦系統演算法里最重要的一種。
2. collaborative-filtering,基於用戶的推薦
社交網路這個東西,本質上還是要做人和人打交道的。那麼其實還有一種,設計推薦系統的思路,就是基於用戶去做推薦。在商業分析里有一個東西,叫用戶畫像。比如你不太可能給一個月收入只有2000的用戶,去推薦去非洲的豪華20天旅遊項目(去非洲旅遊要比去歐洲和北美貴得多);也不太可能給一個,宅男,推薦運動健身會員卡。這種思路就是,基於對用戶去做分析,來推薦,這種用戶可能會喜歡什麼東西,會購買什麼東西。
這種主要做的思路,就有兩個。其中第一個,便是對用戶本身進行分析。比如,對用戶的朋友圈,對用戶的twitter post,對用戶關注什麼公眾號進行分析。另一個,則是對用戶的好友,都喜歡什麼,進行分析。或者更為直接的,向用戶推薦,用戶的好友購買的商品,選擇的服務。而根據一般的工業界的經驗,後一種方法往往具有非常強大的能力。
當然了,關於推薦系統這樣一個在工業界具有巨大意義的大計算機科學和信息科學問題,這一篇小文章也只能起拋磚引玉的作用。對推薦系統感興趣的朋友可以參考著名的計算機科學書籍:推薦系統:技術,評估與高效演算法;以及文本數據挖掘,文本信息檢索以及機器學習實戰類型的書籍,論文等等。
推薦閱讀:
※從演算法到案例:推薦系統必讀的10篇精選技術文章
※推薦系統:Next Basket Recommendation
※推薦系統:Attention Model
※《推薦系統實踐》學習筆記(按照用戶相似度推薦電影)
※大數據交友推薦系統LikeU註冊流程優化