深度丨從零搭建推薦體系:概述及標簽體系搭建(上)

8 評論 121361 瀏覽 505 收藏 30 分鐘

本文闡述整個推薦體系從0搭建的全流程,也是最近以來一直深入研究的成果展現。因原文太長,故此切分成3部分發送,每天發送1篇。全文結構為:上篇:第零章概述,第一章標簽體系搭建;中篇:第三章用戶體系,第四章項目體系,下篇:第五章推薦體系,第六章評估體系,第七章全文總結,第八章參考資料。

內容相對全而深入,希望有推薦體系搭建意愿的平臺或者產品經理,能夠給予一定的幫助就好。另,求工作。

0. 概述

隨著信息技術的迅速發展和信息內容的日益增長,“信息過載”問題愈來愈嚴重,愈發帶來很大的信息負擔。推薦系統可以有效緩解此難題,從而得到推崇并加以廣泛應用。

簡單來說:推薦系統是通過挖掘用戶與項目之間的二元關系,幫助用戶從大量數據中發現其可能感興趣的項目如網頁、服務、商品、人等,并生成個性化推薦以滿足個性化需求。目前市場上對于電子商務的推薦系統有亞馬遜、阿里巴巴、豆瓣網、當當網等,信息檢索的有谷歌、雅虎、百度等,以及在其它周邊領域廣泛運用如移動應用、電子旅游、互聯網廣告等。本文只闡述網頁內容,特制新聞方面的項目體系搭建。

研究者認為根據施拉姆信息選擇公式,人們對媒體的注意或選擇的可能性(然率)與它能夠提供的報償(價值)程度成正比,與人們獲得它的代價(費力)程度成反比。也就是說:人們愿意用最小的代價獲取價值最大的新聞信息。由此,媒體要從認知接收方面,減輕受眾的“費力”程度,提升信息或傳媒的價值,樹立品牌意識,形成規模效應;擁有與眾不同的品味和特色,將自己在受眾眼中的“可讀”形象轉變成“必讀”形象,從而使用戶對媒介產品形成強烈的信賴感和依賴感,在受眾心中形成穩定的獨特風格。

下圖是一般情況下的推薦系統基本框架(圖片取自網絡):

1

從最初的數據收集,到最末端的展示階段,中間還經過數據處理以及生成環節,處理大多數所指提取特征初處理,生成一般是指利用特征來選取相應算法進行匹配計算。數據的整個生命周期如下:

2

也就是從數據獲取,一直到最后的加工輸出,經歷的整個環節,最終給我們提供相應的有效信息,采取相應的有效手段,才是數據價值的最終體現。

在正式開始前,對于數據收集的要求也是很高,如果數據不準確或有偏差,很可能之后做的都是徒勞無功,下表為目前常見的數據收集時常見的問題:

3

對于新聞內容的推薦系統,讓人們最順暢獲取到人們想看到的內容,從而形成核心競爭力。推薦系統的常規推薦系統,一共分為兩條線,第一條線是用戶,第二條線是項目,計算兩者間的相關近似值,從而完成推薦。計算近似值一定有所媒介,這個媒介就是標簽(Tag)系統,所以在建設整個體系之前,最優先需要建設的就是標簽系統,其次是用戶體系,也就是用戶模型,我們在感知用戶唯一的途徑就是通過用戶操作,換言之既用戶行為,所以相對用戶行為微妙的變化,要求我們的用戶體系是十分敏感的,而最后是項目體系,這里特指新聞內容。

下面將從產品層面盡量描述如何搭建推薦體系相關流程及細節,整體搭建思路流程如下:

4

整體相對比較復雜,下面將逐一闡述其中細節。

1. 標簽體系

1.1 搭建流程

要做標簽體系,我們要先確定的就是系統結構,常規來看一般都是講標簽隨內容或用戶建設(但是我覺得那樣是不完整的,在之后獲取不到更加有效有幫助的信息,這也就是為什么我認為一定要將標簽體系一定要單獨拎出來的原因)。

在確定系統結構之后,我們要進行相關的算法選擇,并且大致選定學習的范圍和地點,以供機器學習,至此整個標簽體系的搭建流程就此完畢。隨著不斷的內容填充進來,要有相應的標簽不斷補充進來。這是一個長期的過程,并且也需要及時依據用戶反饋修正算法,實時調整,并非一日之功。

5

1.2 二維化結構

常規網絡的標簽是隨用戶和內容添加的,但是會有局限性,也就是標簽體系較難或無法透徹追查其它相關聯內容。實際上標簽體系的核心價值,體現在相應建立起信息和人、人與人之間的關聯。所以我在思考:如何能夠進行最深入的追查最深處的關聯?有一個常規方案就是單獨建立標簽體系,將標簽平鋪于系統中,也就是二維化。通過機器學習,建立標簽的基本聯系網絡,之后貼合于用戶與內容中即可。無立體結構的上下層級展示,好處是可以避免了一維化的后果。換句話說如果有層級,那么不可避免的就會變成一級、二級。

簡單來說:與某標簽周遭相關聯的一切標簽均展示;那周遭的標簽還會又有標簽,再展示;也就變成無窮盡的立體結構化的標簽網絡,也就是價值基礎。最終價值的輸出還要結合其它的相關行為、操作、用戶物理屬性、內容載體以及效果評定等因素綜合考量。

1.3 機器學習

常規機器訓練流程是:先確定方法→訓練集→特征選取→訓練→分類器;分類:新樣本→特征選取→分類→判決。

所以最開始我們就要確定機器學習的方法。方法有許多種,需要具體根據情況來具體確定。下面僅以產品角度羅列常見經典的機器學習方法、特點、利弊等。以供數據工程師進行選擇、對比,輔助做出最優選擇,以供參考。

方法當中,首先分為兩個大類別:監督學習和非監督學習。監督學習又稱為分類或者歸納學習。幾乎適用于所有領域,包括內容處理。常見算法有決策樹、貝葉斯模型、KNN、SVM等。

與這一方式相對的是非監督學習,在這種方式中,所有的類屬性都是未知的,從零開始摸索,算法需要根據數據集的特征自動產生類屬性。其中算法中用于進行學習的數據集叫做訓練數據集:當使用學習算法用訓練數據集學習得到一個模型以后,我們使用測試數據集來評測這個模型的精準度。常見的有聚類、特征矩陣。下表為常規推薦算法的分類,一共是三類:分類算法、關聯規則和聚類,依據不同場景選擇不同算法進行調整即可。表格后面列出最常用算法的利弊以及用人話描述的算法原理,以供產品同事參考。

6

樸素貝葉斯:

對于給出的待分類項,求解在此項出現的條件下各個類別出現的概率;哪個最大,就認為此待分類項屬于哪個類別。非常好理解,單純的概率問題。

優點:算法十分穩定,并且對數據參數無要求;運用較為簡單。

缺點:在屬性個數比較多或者屬性之間相關性較大時效率不理想,并且重前期數據格式,需要知道先驗概率,存在一定錯誤率。但是結合聚類算法,可以一定程度解決屬性個數問題。

使用場景:常見于垃圾郵件分類場景。

決策樹:

哈利波特中的分院帽應用的是個非常典型的決策樹模型:帽子往學生頭上一扣,讀取學生的顯著特征,然后分到某個類別里。所以你看,哈利波特一開始表現出來的特征都是格蘭芬多的特征,分院帽讀取數據時候發現這個人有兩類顯著特征,于是猶豫不決,最后還是波特自己提出了要求,這就證明應用模型時的人工干預必不可少。

優點:決策樹較為通俗易懂,并且對數據格式不敏感,較為聰明;易于通過靜態測試測量模型可信度,善于短時間處理大量數據源,對屬性數量兼容性好,有很好的擴展性。

缺點:對樣本數量不一致的數據,結果有偏向,處理缺失數據時候會有困難,并且有過度擬合現象,容易忽略數據集中屬性之間的相關性。

使用場景:可結合隨機森林算法,減少相應過度擬合現象。常見于用戶行為分析場景。

KNN:

說白了就是我們要尋找鄰居,但是為什么要尋找鄰居?如何選取鄰居,選取多少鄰居?怎么樣去尋找我們想要的鄰居,以及如何利用鄰居來解決分類問題這是KNN算法需要解決的幾大問題。

為什么我們要尋找鄰居?古話說的好:人以類聚,物以群分。要想知道一個人怎么樣,去看看他的朋友就知道了。我們如果要判斷一個樣本點的類別,去看看和它相似的樣本點的類別就行了。

優點:該算法簡單有效,重新訓練代價較低,對于類域有較差或重疊較多的樣本較為適合。同樣適用于樣本量較大的情況。

缺點:樣本量較小時反而有誤差。而且該算法是懶散學習方法,不主動,類別評分不規格且輸出可解釋性不高。當樣本量不平衡時,有可能導致當輸入一個新樣本時,該樣本的K個鄰居中大容量類的樣本占多數,并且計算量較大??梢圆捎脵嘀档姆椒?,和該樣本距離小的鄰居權值大,來改進問題,對于計算量較大,可以事先對已知樣本點進行剪輯,去除對分類作用不大的樣本來優化。

使用場景:常見于預測價格場景。

SVM:

說到這個算法之前,先得配一張圖:

7

這圖啥意思呢?不用管。但是這兩種分法哪種更好呢?從直觀上來說,顯然右側好。也就是分割的間隙越大越好,把兩個類別的點分得越開越好。就像我們平時判斷一個人是男還是女,就是很難出現分錯的情況,這就是男、女兩個類別之間的間隙非常的大導致的,讓我們可以更準確的進行分類。從實踐的角度來說,這樣的效果非常好,錯誤率低。

優點:該算法適用于樣本量較小的情況,可提高泛化性能,可解決高維度問題。并且對線性和非線性問題均可解決,可避免神經網絡結構選擇和局部極小點問題。

缺點:對缺失數據較敏感,對非線性問題沒有通用解決方案,需要選擇核函數來處理,算法使用并且極其復雜。

使用場景:常見于社交網站用戶分類場景。

Ad boosting:

這個算法說實話我也解釋不清,沒真正運用過,憑自己查資料的理解試著說一下。這個算法核心的思想是整合多個弱分類器,成為一個強大的分類器。這時候,集合分類器出現了。用人話說就是三個臭皮匠賽過諸葛亮,好理解了吧?識別一組條件特征概念判斷的正確率比隨機猜測略好,但是還不夠,這就是弱分類器;多個弱分類器的效果疊加起來,就變成一個強分類器,識別率就會很高了。

優點:該算法精度較高,可用任意方法構建子分類器;使用簡單分類器時結果容易理解,且弱分類器構造極其簡單,而且不用做特征篩選,不用擔心過度擬合情況。

缺點:對離群值比較敏感。

使用場景:常見于人臉檢測、目標識別場景。

K-means:

給你一萬個人,分成四群,需要能夠解釋每一群人的突出特征,如果有兩群人的特征很相似,那就要重新分群了;或者有一群人的特征不明顯,那就要增加分群了。好處在于樣本量大的時候,可以快速分群,但需要在分群后注意每個群體的可解釋性。

優點:這個算法屬于經典算法,簡單快速,對處理大數據集可伸縮,高效。并且在簇密集度高、球狀或團狀時,且有明顯于其他簇區別時,聚類效果好。

缺點:但是只有簇平均值被定義情況下才能使用,且對分類屬性數據不適用,并且要求用戶必須事先給出要生成的簇的數目。對初始值敏感,不適合發現非凸面形狀的簇,或者大小差別很大的簇。對噪聲和孤立數據敏感,少量該類數據能直接影響平均值。

使用場景:常見于CRM篩選目標客戶場景。

神經網絡:

這個算法不想解釋啥,就想放張圖,覺得不放可惜了。

8

以上摘要從產品角度來說只要大概心里有數即可,一般情況下從產品數據、應用場景等決定。

一般來看,冷啟動期間應選擇非監督學習,如聚類;等數據豐富之后,轉換為監督學習,擇優選擇算法方可;但仍需具體問題具體分析。更多的還是配合技術、算法人員來選擇和實現,詳細算法和原理、公式等可以到后面附錄1進行查看,給予參考。

1.4 學習地點

這里我建議從百科類產品進行機器學習,國內最大的百科就是百度百科了,在國際上自然還有維基百科。

查了一些相關方法,發現從百度百科利用機器學習標簽,已經有相應的案例并且成本相對不是很大,具體的方法也放在后文中的附錄2中。

文中探究的是微博標簽相關的項目,與本文無關,但整體思路可借鑒。大致流程為先抓取頁面下相關標簽內容,要注意特殊情況,會有歧義頁面;將標簽抓取存儲之后通過算法計算之間的關聯性、權重分數,而后輸出驗證。整體的過程非常簡單快捷,能在前期非??焖俚难a充相關數據,但是要注意數據量的問題,很可能導致無窮,所以收集哪些主要領域,收集多少,是需要我們最開始定義好的,及時踩剎車。

1.5 輸出展示

這里的展示更多指的還是相應的后臺頁面,要滿足幾個條件:其中最基本的一定要滿足可視化的要求,點擊標簽以后相應的關聯標簽可形成關聯展示;可以選擇展示兩級或者三級,清晰直觀的看到關聯情況。更進一步的是點擊后,每個標簽里面的詳細情況也會展示出來。比如說標簽的歷史類型情況、載體情況、分別的打開情況、受眾用戶群體,所以這也是需要依托于用戶體系的相關標簽結合之后的產出物。

結合基本數據維度比如昨日新增多少標簽、文章類型走向是什么樣的受眾是什么樣的走向,都是屬于基礎數據范疇,達到實時監控,定位報警的作用。

1.6 小結總結

本節總體來說闡述了搭建標簽體系的整體流程和相關經典算法的展示與利弊分析,并且提供了標簽學習機制的思路。下面,將進行用戶模型的體系搭建,詳見明日發布的中篇。

附錄1 常見機器學習方法算法

12

13

14

15

16

17

18

19

20

21

22

23

附錄2 提取百度百科標簽建立關聯性思路

百度百科介紹

構成百度百科的基礎內容是詞條。一個詞條頁面大致可以分為百科名片、詞條正文、開放分類、相關詞條、參考資料和擴展閱讀這個幾個部分,根據每個詞條的具體情況,某些部分可以沒有。

其中,百科名片是詞條的概括性描述;詞條正文是可以由多個段落組成的對詞條的詳細描述;開放分類提供詞條的屬性標簽,最多有5個,通常這種標簽具有一定的類別信息;相關詞條是與當前詞條聯系比較緊密的相關條目,而一般這種聯系必須是橫向的,例如“喬峰”的相關詞條可以是“段譽”、“阿朱”、“虛竹”等,但不可以是“天龍八部”。

1

盡管在百科的詞條頁面上,我們只能看到該詞條的開放分類標簽;但實際上在百科內部,有一個具有層次的三層分類體系。第一層具有十二個大類;每個大類下面又包含若干個中類,這就是第二層分類;每個中類下面又可細分為若干個小類。

2

生成方法

我們將百度百科三層分類體系第三層的小類別作為查詢,在百度百科中將搜索得到該類別下的詞條頁面。但是通過這種方式,對于每一個小類別,我們最多只能獲取760個相關的詞條頁面,而更多的實際上可以被劃分為該類別的詞條頁面,我們獲取不到。

3

我們搜索“技術_互聯網_電子商務”類別下的頁面,結果顯示共有詞條3469個,但是,我們遍歷搜索結果頁面,最多只能查看到760個詞條頁面。在該方法中,我們需要使用百度百科的三層分類體系例如“技術_互聯網_編程”、“生活_娛樂_影視”作為用戶的標簽候選集合。因此,我們可利用的資源便是能夠獲取到的每個小類別下的最多760個詞條頁面。

我們通過分析用戶發布的微博,將其最感興趣的百科三層類別作為他的標簽。方法的主要思想是:將用戶發布的每一條微博映射到最相關的百科詞條頁面,獲取其類別,通過一定的投票策略決策出用戶的標簽。

下面,具體介紹一下方法中涉及的關鍵步驟。

百科頁面獲取與處理

我們按照百度百科提供的開放分類瀏覽頁面,爬取到所有第三層小類別的查詢URL,形如http://baike.baidu.com/taglist?tag=****,該URL指向的就是該類別標簽的搜索頁面。我們通過解析該搜索頁面,下載得到百科開放的760 個相關的詞條頁面。獲取頁面后,并且按照第三層小類別分類存儲后,我們進行正文的提取。詞條頁面一共有兩種,一種是歧義頁面,即一個詞條包含多種義項,下圖所示:

4

一種是非歧義頁面。我們需要分別對其做處理:對于歧義頁面,將每一個義項單獨作為一個頁面提取出來。我們提取百科頁面的標題、百科名片、正文、類別,進行分詞等處理后,建立索引,待后續使用。

搜索與微博相關的詞條頁面

給定一條微博,我們需要找到與其相似或者說相關的百科頁面,以獲取其類別。我們將這個問題轉換成為搜索問題。從微博中提煉出查詢,從索引過的百科頁面中搜索出最相關的。我們使用Indri 對詞條頁面建立索引。Indri 源自Lemur系統,是CMU和UMass 聯合推出的一個用于語言模型和信息檢索研究的系統。在這之上可以實現基于語言模型和傳統的向量空間模型等的檢索。Indri早已經受到了學術界的廣泛歡迎。

我們將分別抽取微博中的名詞、名詞及形容詞的組合構成帶有權重的查詢,其權重采用TFIDF 計算得到,構造的查詢形如“#weight(0.45巨蟹座0.35性格0.20特點)”。用構建的查詢,我們搜尋到與該查詢最相關的詞條頁面,并獲取其對應的類別。

用戶標簽生成

假定有m種具有三層分類的類別標簽,我們將其作為用戶的候選標簽集合,表示為C={}。

給定某個用戶u,抽取其發布的微博文本集合W={},文本數目為n。我們分別對其構造查詢,得到查詢集合Q={}。對每一個查詢q,我們獲取Top N個結果,作為該查詢相關的詞條頁面。因為每個詞條可能屬于若干個類別,因此我們得到的與該查詢(或者說其對應的微博)關聯的類別可能不止N個。對關聯的類別中的每一個類別c,我們計算其分數,如公式。其中, freq(c)指c在該次查詢中出現的頻數,而d是我們設置的一個常數,例如,我們將其設置為1,則c的分數就是在該次查詢中出現的次數;若將d設置為該類別關聯的詞條頁面出現在Top N結果中的具體位置,則說明c的分數受到搜索結果排序的影響,排序越靠前的,對分數的貢獻越大。

整個查詢過程停止后,我們將對候選標簽集合中的每一個標簽c計算一個排序分數,可以利用這個算法,其中n 就是指查詢的次數。我們取排序前10 的作為為用戶自動生成的標簽。

上篇,完。

相關閱讀:

深度丨從零搭建推薦體系:概述及標簽體系搭建(上)

深度丨從零搭建推薦體系:用戶體系、項目體系和推薦體系(中)

深度丨從零搭建推薦體系: 推薦體系和評估體系(下)

個性化推薦技術|產品經理和產品運營的必修課

在談推薦系統之前,請先避免這4個問題

#專欄作家#

吳邢一夫(微信號mystic326531548),人人都是產品經理專欄作家。3年產品經理工作經驗,需求、用戶、數據有深入研究。歡迎交流想法,拒絕無意義添加好友。

本文獨家發布于人人都是產品經理。未經許可,禁止轉載。

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 作者大大您好啊,我是清華的學生,能不能跟您聊聊,請您來清華陸向謙創新創業課上來聊聊 標簽系統 我的微信dy15194612549 請您惠存!謝謝

    來自河南 回復
  2. 如LS。。大部分是例舉算法,并不是實例操作,不過總結也可以的。

    來自上海 回復
  3. 你好,首先感謝的分享。我仔細的看了你的文章。不過你提到的大多都是機器學習的算法,這些是我們都知道的。至于如何針對特有情況進行數據整理與數據立方的構建,我并沒有看到實質性的論述。包括也沒有實質性的算法說明。算法的精髓在于根據實際情況調參,而不是方法論。所以如果你能針對特定任務,對調參進行說明這將是更好的。不過還是感謝的review。

    來自北京 回復
  4. 有收獲,但吐個槽:作者沒有檢查過就發上來了? 看到錯句錯詞的我是一個人嗎 ??

    來自廣東 回復
  5. 根本不知道怎么用 …怎么破?

    來自上海 回復
  6. 太干了~

    來自北京 回復
  7. 期待后面幾篇,都是干貨

    來自江蘇 回復