本文闡述整個推薦體系從0搭建的全流程,也是最近以來一直深入研究的成果展現(xiàn)。因原文太長,故此切分成3部分發(fā)送,每天發(fā)送1篇。全文結(jié)構(gòu)為:上篇:第零章概述,第一章標(biāo)簽體系搭建;中篇:第三章用戶體系,第四章項目體系,下篇:第五章推薦體系,第六章評估體系,第七章全文總結(jié),第八章參考資料。 內(nèi)容相對全而深入,希望有推薦體系搭建意愿的平臺或者產(chǎn)品經(jīng)理,能夠給予一定的幫助就好。另,求工作。 0. 概述隨著信息技術(shù)的迅速發(fā)展和信息內(nèi)容的日益增長,“信息過載”問題愈來愈嚴(yán)重,愈發(fā)帶來很大的信息負擔(dān)。推薦系統(tǒng)可以有效緩解此難題,從而得到推崇并加以廣泛應(yīng)用。 簡單來說:推薦系統(tǒng)是通過挖掘用戶與項目之間的二元關(guān)系,幫助用戶從大量數(shù)據(jù)中發(fā)現(xiàn)其可能感興趣的項目如網(wǎng)頁、服務(wù)、商品、人等,并生成個性化推薦以滿足個性化需求。目前市場上對于電子商務(wù)的推薦系統(tǒng)有亞馬遜、阿里巴巴、豆瓣網(wǎng)、當(dāng)當(dāng)網(wǎng)等,信息檢索的有谷歌、雅虎、百度等,以及在其它周邊領(lǐng)域廣泛運用如移動應(yīng)用、電子旅游、互聯(lián)網(wǎng)廣告等。本文只闡述網(wǎng)頁內(nèi)容,特制新聞方面的項目體系搭建。 研究者認為根據(jù)施拉姆信息選擇公式,人們對媒體的注意或選擇的可能性(然率)與它能夠提供的報償(價值)程度成正比,與人們獲得它的代價(費力)程度成反比。也就是說:人們愿意用最小的代價獲取價值最大的新聞信息。由此,媒體要從認知接收方面,減輕受眾的“費力”程度,提升信息或傳媒的價值,樹立品牌意識,形成規(guī)模效應(yīng);擁有與眾不同的品味和特色,將自己在受眾眼中的“可讀”形象轉(zhuǎn)變成“必讀”形象,從而使用戶對媒介產(chǎn)品形成強烈的信賴感和依賴感,在受眾心中形成穩(wěn)定的獨特風(fēng)格。 下圖是一般情況下的推薦系統(tǒng)基本框架(圖片取自網(wǎng)絡(luò)): 從最初的數(shù)據(jù)收集,到最末端的展示階段,中間還經(jīng)過數(shù)據(jù)處理以及生成環(huán)節(jié),處理大多數(shù)所指提取特征初處理,生成一般是指利用特征來選取相應(yīng)算法進行匹配計算。數(shù)據(jù)的整個生命周期如下: 也就是從數(shù)據(jù)獲取,一直到最后的加工輸出,經(jīng)歷的整個環(huán)節(jié),最終給我們提供相應(yīng)的有效信息,采取相應(yīng)的有效手段,才是數(shù)據(jù)價值的最終體現(xiàn)。 在正式開始前,對于數(shù)據(jù)收集的要求也是很高,如果數(shù)據(jù)不準(zhǔn)確或有偏差,很可能之后做的都是徒勞無功,下表為目前常見的數(shù)據(jù)收集時常見的問題: 對于新聞內(nèi)容的推薦系統(tǒng),讓人們最順暢獲取到人們想看到的內(nèi)容,從而形成核心競爭力。推薦系統(tǒng)的常規(guī)推薦系統(tǒng),一共分為兩條線,第一條線是用戶,第二條線是項目,計算兩者間的相關(guān)近似值,從而完成推薦。計算近似值一定有所媒介,這個媒介就是標(biāo)簽(Tag)系統(tǒng),所以在建設(shè)整個體系之前,最優(yōu)先需要建設(shè)的就是標(biāo)簽系統(tǒng),其次是用戶體系,也就是用戶模型,我們在感知用戶唯一的途徑就是通過用戶操作,換言之既用戶行為,所以相對用戶行為微妙的變化,要求我們的用戶體系是十分敏感的,而最后是項目體系,這里特指新聞內(nèi)容。 下面將從產(chǎn)品層面盡量描述如何搭建推薦體系相關(guān)流程及細節(jié),整體搭建思路流程如下: 整體相對比較復(fù)雜,下面將逐一闡述其中細節(jié)。 1. 標(biāo)簽體系1.1 搭建流程要做標(biāo)簽體系,我們要先確定的就是系統(tǒng)結(jié)構(gòu),常規(guī)來看一般都是講標(biāo)簽隨內(nèi)容或用戶建設(shè)(但是我覺得那樣是不完整的,在之后獲取不到更加有效有幫助的信息,這也就是為什么我認為一定要將標(biāo)簽體系一定要單獨拎出來的原因)。 在確定系統(tǒng)結(jié)構(gòu)之后,我們要進行相關(guān)的算法選擇,并且大致選定學(xué)習(xí)的范圍和地點,以供機器學(xué)習(xí),至此整個標(biāo)簽體系的搭建流程就此完畢。隨著不斷的內(nèi)容填充進來,要有相應(yīng)的標(biāo)簽不斷補充進來。這是一個長期的過程,并且也需要及時依據(jù)用戶反饋修正算法,實時調(diào)整,并非一日之功。 1.2 二維化結(jié)構(gòu)常規(guī)網(wǎng)絡(luò)的標(biāo)簽是隨用戶和內(nèi)容添加的,但是會有局限性,也就是標(biāo)簽體系較難或無法透徹追查其它相關(guān)聯(lián)內(nèi)容。實際上標(biāo)簽體系的核心價值,體現(xiàn)在相應(yīng)建立起信息和人、人與人之間的關(guān)聯(lián)。所以我在思考:如何能夠進行最深入的追查最深處的關(guān)聯(lián)?有一個常規(guī)方案就是單獨建立標(biāo)簽體系,將標(biāo)簽平鋪于系統(tǒng)中,也就是二維化。通過機器學(xué)習(xí),建立標(biāo)簽的基本聯(lián)系網(wǎng)絡(luò),之后貼合于用戶與內(nèi)容中即可。無立體結(jié)構(gòu)的上下層級展示,好處是可以避免了一維化的后果。換句話說如果有層級,那么不可避免的就會變成一級、二級。 簡單來說:與某標(biāo)簽周遭相關(guān)聯(lián)的一切標(biāo)簽均展示;那周遭的標(biāo)簽還會又有標(biāo)簽,再展示;也就變成無窮盡的立體結(jié)構(gòu)化的標(biāo)簽網(wǎng)絡(luò),也就是價值基礎(chǔ)。最終價值的輸出還要結(jié)合其它的相關(guān)行為、操作、用戶物理屬性、內(nèi)容載體以及效果評定等因素綜合考量。 1.3 機器學(xué)習(xí)常規(guī)機器訓(xùn)練流程是:先確定方法→訓(xùn)練集→特征選取→訓(xùn)練→分類器;分類:新樣本→特征選取→分類→判決。 所以最開始我們就要確定機器學(xué)習(xí)的方法。方法有許多種,需要具體根據(jù)情況來具體確定。下面僅以產(chǎn)品角度羅列常見經(jīng)典的機器學(xué)習(xí)方法、特點、利弊等。以供數(shù)據(jù)工程師進行選擇、對比,輔助做出最優(yōu)選擇,以供參考。 方法當(dāng)中,首先分為兩個大類別:監(jiān)督學(xué)習(xí)和非監(jiān)督學(xué)習(xí)。監(jiān)督學(xué)習(xí)又稱為分類或者歸納學(xué)習(xí)。幾乎適用于所有領(lǐng)域,包括內(nèi)容處理。常見算法有決策樹、貝葉斯模型、KNN、SVM等。 與這一方式相對的是非監(jiān)督學(xué)習(xí),在這種方式中,所有的類屬性都是未知的,從零開始摸索,算法需要根據(jù)數(shù)據(jù)集的特征自動產(chǎn)生類屬性。其中算法中用于進行學(xué)習(xí)的數(shù)據(jù)集叫做訓(xùn)練數(shù)據(jù)集:當(dāng)使用學(xué)習(xí)算法用訓(xùn)練數(shù)據(jù)集學(xué)習(xí)得到一個模型以后,我們使用測試數(shù)據(jù)集來評測這個模型的精準(zhǔn)度。常見的有聚類、特征矩陣。下表為常規(guī)推薦算法的分類,一共是三類:分類算法、關(guān)聯(lián)規(guī)則和聚類,依據(jù)不同場景選擇不同算法進行調(diào)整即可。表格后面列出最常用算法的利弊以及用人話描述的算法原理,以供產(chǎn)品同事參考。 樸素貝葉斯: 對于給出的待分類項,求解在此項出現(xiàn)的條件下各個類別出現(xiàn)的概率;哪個最大,就認為此待分類項屬于哪個類別。非常好理解,單純的概率問題。 優(yōu)點:算法十分穩(wěn)定,并且對數(shù)據(jù)參數(shù)無要求;運用較為簡單。 缺點:在屬性個數(shù)比較多或者屬性之間相關(guān)性較大時效率不理想,并且重前期數(shù)據(jù)格式,需要知道先驗概率,存在一定錯誤率。但是結(jié)合聚類算法,可以一定程度解決屬性個數(shù)問題。 使用場景:常見于垃圾郵件分類場景。 決策樹: 哈利波特中的分院帽應(yīng)用的是個非常典型的決策樹模型:帽子往學(xué)生頭上一扣,讀取學(xué)生的顯著特征,然后分到某個類別里。所以你看,哈利波特一開始表現(xiàn)出來的特征都是格蘭芬多的特征,分院帽讀取數(shù)據(jù)時候發(fā)現(xiàn)這個人有兩類顯著特征,于是猶豫不決,最后還是波特自己提出了要求,這就證明應(yīng)用模型時的人工干預(yù)必不可少。 優(yōu)點:決策樹較為通俗易懂,并且對數(shù)據(jù)格式不敏感,較為聰明;易于通過靜態(tài)測試測量模型可信度,善于短時間處理大量數(shù)據(jù)源,對屬性數(shù)量兼容性好,有很好的擴展性。 缺點:對樣本數(shù)量不一致的數(shù)據(jù),結(jié)果有偏向,處理缺失數(shù)據(jù)時候會有困難,并且有過度擬合現(xiàn)象,容易忽略數(shù)據(jù)集中屬性之間的相關(guān)性。 使用場景:可結(jié)合隨機森林算法,減少相應(yīng)過度擬合現(xiàn)象。常見于用戶行為分析場景。 KNN: 說白了就是我們要尋找鄰居,但是為什么要尋找鄰居?如何選取鄰居,選取多少鄰居?怎么樣去尋找我們想要的鄰居,以及如何利用鄰居來解決分類問題這是KNN算法需要解決的幾大問題。 為什么我們要尋找鄰居?古話說的好:人以類聚,物以群分。要想知道一個人怎么樣,去看看他的朋友就知道了。我們?nèi)绻袛嘁粋€樣本點的類別,去看看和它相似的樣本點的類別就行了。 優(yōu)點:該算法簡單有效,重新訓(xùn)練代價較低,對于類域有較差或重疊較多的樣本較為適合。同樣適用于樣本量較大的情況。 缺點:樣本量較小時反而有誤差。而且該算法是懶散學(xué)習(xí)方法,不主動,類別評分不規(guī)格且輸出可解釋性不高。當(dāng)樣本量不平衡時,有可能導(dǎo)致當(dāng)輸入一個新樣本時,該樣本的K個鄰居中大容量類的樣本占多數(shù),并且計算量較大??梢圆捎脵?quán)值的方法,和該樣本距離小的鄰居權(quán)值大,來改進問題,對于計算量較大,可以事先對已知樣本點進行剪輯,去除對分類作用不大的樣本來優(yōu)化。 使用場景:常見于預(yù)測價格場景。 SVM: 說到這個算法之前,先得配一張圖: 這圖啥意思呢?不用管。但是這兩種分法哪種更好呢?從直觀上來說,顯然右側(cè)好。也就是分割的間隙越大越好,把兩個類別的點分得越開越好。就像我們平時判斷一個人是男還是女,就是很難出現(xiàn)分錯的情況,這就是男、女兩個類別之間的間隙非常的大導(dǎo)致的,讓我們可以更準(zhǔn)確的進行分類。從實踐的角度來說,這樣的效果非常好,錯誤率低。 優(yōu)點:該算法適用于樣本量較小的情況,可提高泛化性能,可解決高維度問題。并且對線性和非線性問題均可解決,可避免神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)選擇和局部極小點問題。 缺點:對缺失數(shù)據(jù)較敏感,對非線性問題沒有通用解決方案,需要選擇核函數(shù)來處理,算法使用并且極其復(fù)雜。 使用場景:常見于社交網(wǎng)站用戶分類場景。 Ad boosting: 這個算法說實話我也解釋不清,沒真正運用過,憑自己查資料的理解試著說一下。這個算法核心的思想是整合多個弱分類器,成為一個強大的分類器。這時候,集合分類器出現(xiàn)了。用人話說就是三個臭皮匠賽過諸葛亮,好理解了吧?識別一組條件特征概念判斷的正確率比隨機猜測略好,但是還不夠,這就是弱分類器;多個弱分類器的效果疊加起來,就變成一個強分類器,識別率就會很高了。 優(yōu)點:該算法精度較高,可用任意方法構(gòu)建子分類器;使用簡單分類器時結(jié)果容易理解,且弱分類器構(gòu)造極其簡單,而且不用做特征篩選,不用擔(dān)心過度擬合情況。 缺點:對離群值比較敏感。 使用場景:常見于人臉檢測、目標(biāo)識別場景。 K-means: 給你一萬個人,分成四群,需要能夠解釋每一群人的突出特征,如果有兩群人的特征很相似,那就要重新分群了;或者有一群人的特征不明顯,那就要增加分群了。好處在于樣本量大的時候,可以快速分群,但需要在分群后注意每個群體的可解釋性。 優(yōu)點:這個算法屬于經(jīng)典算法,簡單快速,對處理大數(shù)據(jù)集可伸縮,高效。并且在簇密集度高、球狀或團狀時,且有明顯于其他簇區(qū)別時,聚類效果好。 缺點:但是只有簇平均值被定義情況下才能使用,且對分類屬性數(shù)據(jù)不適用,并且要求用戶必須事先給出要生成的簇的數(shù)目。對初始值敏感,不適合發(fā)現(xiàn)非凸面形狀的簇,或者大小差別很大的簇。對噪聲和孤立數(shù)據(jù)敏感,少量該類數(shù)據(jù)能直接影響平均值。 使用場景:常見于CRM篩選目標(biāo)客戶場景。 神經(jīng)網(wǎng)絡(luò): 這個算法不想解釋啥,就想放張圖,覺得不放可惜了。 以上摘要從產(chǎn)品角度來說只要大概心里有數(shù)即可,一般情況下從產(chǎn)品數(shù)據(jù)、應(yīng)用場景等決定。 一般來看,冷啟動期間應(yīng)選擇非監(jiān)督學(xué)習(xí),如聚類;等數(shù)據(jù)豐富之后,轉(zhuǎn)換為監(jiān)督學(xué)習(xí),擇優(yōu)選擇算法方可;但仍需具體問題具體分析。更多的還是配合技術(shù)、算法人員來選擇和實現(xiàn),詳細算法和原理、公式等可以到后面附錄1進行查看,給予參考。 1.4 學(xué)習(xí)地點這里我建議從百科類產(chǎn)品進行機器學(xué)習(xí),國內(nèi)最大的百科就是百度百科了,在國際上自然還有維基百科。 查了一些相關(guān)方法,發(fā)現(xiàn)從百度百科利用機器學(xué)習(xí)標(biāo)簽,已經(jīng)有相應(yīng)的案例并且成本相對不是很大,具體的方法也放在后文中的附錄2中。 文中探究的是微博標(biāo)簽相關(guān)的項目,與本文無關(guān),但整體思路可借鑒。大致流程為先抓取頁面下相關(guān)標(biāo)簽內(nèi)容,要注意特殊情況,會有歧義頁面;將標(biāo)簽抓取存儲之后通過算法計算之間的關(guān)聯(lián)性、權(quán)重分數(shù),而后輸出驗證。整體的過程非常簡單快捷,能在前期非??焖俚难a充相關(guān)數(shù)據(jù),但是要注意數(shù)據(jù)量的問題,很可能導(dǎo)致無窮,所以收集哪些主要領(lǐng)域,收集多少,是需要我們最開始定義好的,及時踩剎車。 1.5 輸出展示這里的展示更多指的還是相應(yīng)的后臺頁面,要滿足幾個條件:其中最基本的一定要滿足可視化的要求,點擊標(biāo)簽以后相應(yīng)的關(guān)聯(lián)標(biāo)簽可形成關(guān)聯(lián)展示;可以選擇展示兩級或者三級,清晰直觀的看到關(guān)聯(lián)情況。更進一步的是點擊后,每個標(biāo)簽里面的詳細情況也會展示出來。比如說標(biāo)簽的歷史類型情況、載體情況、分別的打開情況、受眾用戶群體,所以這也是需要依托于用戶體系的相關(guān)標(biāo)簽結(jié)合之后的產(chǎn)出物。 結(jié)合基本數(shù)據(jù)維度比如昨日新增多少標(biāo)簽、文章類型走向是什么樣的受眾是什么樣的走向,都是屬于基礎(chǔ)數(shù)據(jù)范疇,達到實時監(jiān)控,定位報警的作用。 1.6 小結(jié)總結(jié) 本節(jié)總體來說闡述了搭建標(biāo)簽體系的整體流程和相關(guān)經(jīng)典算法的展示與利弊分析,并且提供了標(biāo)簽學(xué)習(xí)機制的思路。下面,將進行用戶模型的體系搭建,詳見明日發(fā)布的中篇。 附錄1 常見機器學(xué)習(xí)方法算法附錄2 提取百度百科標(biāo)簽建立關(guān)聯(lián)性思路百度百科介紹 構(gòu)成百度百科的基礎(chǔ)內(nèi)容是詞條。一個詞條頁面大致可以分為百科名片、詞條正文、開放分類、相關(guān)詞條、參考資料和擴展閱讀這個幾個部分,根據(jù)每個詞條的具體情況,某些部分可以沒有。 其中,百科名片是詞條的概括性描述;詞條正文是可以由多個段落組成的對詞條的詳細描述;開放分類提供詞條的屬性標(biāo)簽,最多有5個,通常這種標(biāo)簽具有一定的類別信息;相關(guān)詞條是與當(dāng)前詞條聯(lián)系比較緊密的相關(guān)條目,而一般這種聯(lián)系必須是橫向的,例如“喬峰”的相關(guān)詞條可以是“段譽”、“阿朱”、“虛竹”等,但不可以是“天龍八部”。 盡管在百科的詞條頁面上,我們只能看到該詞條的開放分類標(biāo)簽;但實際上在百科內(nèi)部,有一個具有層次的三層分類體系。第一層具有十二個大類;每個大類下面又包含若干個中類,這就是第二層分類;每個中類下面又可細分為若干個小類。 生成方法 我們將百度百科三層分類體系第三層的小類別作為查詢,在百度百科中將搜索得到該類別下的詞條頁面。但是通過這種方式,對于每一個小類別,我們最多只能獲取760個相關(guān)的詞條頁面,而更多的實際上可以被劃分為該類別的詞條頁面,我們獲取不到。 我們搜索“技術(shù)_互聯(lián)網(wǎng)_電子商務(wù)”類別下的頁面,結(jié)果顯示共有詞條3469個,但是,我們遍歷搜索結(jié)果頁面,最多只能查看到760個詞條頁面。在該方法中,我們需要使用百度百科的三層分類體系例如“技術(shù)_互聯(lián)網(wǎng)_編程”、“生活_娛樂_影視”作為用戶的標(biāo)簽候選集合。因此,我們可利用的資源便是能夠獲取到的每個小類別下的最多760個詞條頁面。 我們通過分析用戶發(fā)布的微博,將其最感興趣的百科三層類別作為他的標(biāo)簽。方法的主要思想是:將用戶發(fā)布的每一條微博映射到最相關(guān)的百科詞條頁面,獲取其類別,通過一定的投票策略決策出用戶的標(biāo)簽。 下面,具體介紹一下方法中涉及的關(guān)鍵步驟。 百科頁面獲取與處理 我們按照百度百科提供的開放分類瀏覽頁面,爬取到所有第三層小類別的查詢URL,形如http://baike.baidu.com/taglist?tag=****,該URL指向的就是該類別標(biāo)簽的搜索頁面。我們通過解析該搜索頁面,下載得到百科開放的760 個相關(guān)的詞條頁面。獲取頁面后,并且按照第三層小類別分類存儲后,我們進行正文的提取。詞條頁面一共有兩種,一種是歧義頁面,即一個詞條包含多種義項,下圖所示: 一種是非歧義頁面。我們需要分別對其做處理:對于歧義頁面,將每一個義項單獨作為一個頁面提取出來。我們提取百科頁面的標(biāo)題、百科名片、正文、類別,進行分詞等處理后,建立索引,待后續(xù)使用。 搜索與微博相關(guān)的詞條頁面 給定一條微博,我們需要找到與其相似或者說相關(guān)的百科頁面,以獲取其類別。我們將這個問題轉(zhuǎn)換成為搜索問題。從微博中提煉出查詢,從索引過的百科頁面中搜索出最相關(guān)的。我們使用Indri 對詞條頁面建立索引。Indri 源自Lemur系統(tǒng),是CMU和UMass 聯(lián)合推出的一個用于語言模型和信息檢索研究的系統(tǒng)。在這之上可以實現(xiàn)基于語言模型和傳統(tǒng)的向量空間模型等的檢索。Indri早已經(jīng)受到了學(xué)術(shù)界的廣泛歡迎。 我們將分別抽取微博中的名詞、名詞及形容詞的組合構(gòu)成帶有權(quán)重的查詢,其權(quán)重采用TFIDF 計算得到,構(gòu)造的查詢形如“#weight(0.45巨蟹座0.35性格0.20特點)”。用構(gòu)建的查詢,我們搜尋到與該查詢最相關(guān)的詞條頁面,并獲取其對應(yīng)的類別。 用戶標(biāo)簽生成 假定有m種具有三層分類的類別標(biāo)簽,我們將其作為用戶的候選標(biāo)簽集合,表示為C={}。 給定某個用戶u,抽取其發(fā)布的微博文本集合W={},文本數(shù)目為n。我們分別對其構(gòu)造查詢,得到查詢集合Q={}。對每一個查詢q,我們獲取Top N個結(jié)果,作為該查詢相關(guān)的詞條頁面。因為每個詞條可能屬于若干個類別,因此我們得到的與該查詢(或者說其對應(yīng)的微博)關(guān)聯(lián)的類別可能不止N個。對關(guān)聯(lián)的類別中的每一個類別c,我們計算其分數(shù),如公式。其中, freq(c)指c在該次查詢中出現(xiàn)的頻數(shù),而d是我們設(shè)置的一個常數(shù),例如,我們將其設(shè)置為1,則c的分數(shù)就是在該次查詢中出現(xiàn)的次數(shù);若將d設(shè)置為該類別關(guān)聯(lián)的詞條頁面出現(xiàn)在Top N結(jié)果中的具體位置,則說明c的分數(shù)受到搜索結(jié)果排序的影響,排序越靠前的,對分數(shù)的貢獻越大。 整個查詢過程停止后,我們將對候選標(biāo)簽集合中的每一個標(biāo)簽c計算一個排序分數(shù),可以利用這個算法,其中n 就是指查詢的次數(shù)。我們?nèi)∨判蚯?0 的作為為用戶自動生成的標(biāo)簽。 上篇,完。 |
|