現在主要做編程。當年學習網路主要看《TCP/IP詳解:卷一》,還有cisco一系列的書。
軟體除了抓包軟體,還要選一個配置終端比如secureCRT,安裝系統的虛擬機比如VMware,接下來當然要推薦各種模擬環境。
小巧如Cisco Packet Tracer,雖然只是個模擬器,但是可以配置各種協議,發包還有動畫,可以點擊看每一步在做什麼。另外還可以搜集各種題目(pka)進行配置。(ccna級別的實驗都可以做)
gns3是陪伴我最久,在路由的模擬上比Cisco Packet Tracer要逼真,因為載入的cisco的路由器鏡像(為此當年下30G左右的cisco鏡像,然後常用的就2個),結合qemu以及虛擬機基本上常見網路環境都罩得住。(ccnp基本的實驗都可以做)
大殺器WEB-IOU,有了圖形配置界面,模擬路由交換實驗都不是事。(據說ccie的實驗也可以做)
ensp,集各家之長,華為良心出品,中文手冊很棒。不知道某個協議是什麼,怎麼配,都可以看手冊解決。
自從用上了這些模擬器,做一些實驗都懶得跑實驗室玩路由交換了,相比於插網線搬機器,還是在軟體上拖拖拽拽方便。
當然以上模擬器對二層交換機的模擬支持的不是很完全,有條件的話可以在真機上配置。
ps:不做網路好多年。。。不知道這幾年有沒有出更好的模擬器
推薦一下當年的資源(最好自己找下相關資源,我的推薦並不是最新的),可以去看下鴻鵠論壇,還有yeslab現任明教教主講的tcp/ip
② 推薦系統的主要推薦方法
基於內容的推薦(Content-based Recommendation)是信息過濾技術的延續與發展,它是建立在項目的內容信息上作出推薦的,而不需要依據用戶對項目的評價意見,更多地需要用機 器學習的方法從關於內容的特徵描述的事例中得到用戶的興趣資料。在基於內容的推薦系統中,項目或對象是通過相關的特徵的屬性來定義,系統基於用戶評價對象 的特徵,學慣用戶的興趣,考察用戶資料與待預測項目的相匹配程度。用戶的資料模型取決於所用學習方法,常用的有決策樹、神經網路和基於向量的表示方法等。 基於內容的用戶資料是需要有用戶的歷史數據,用戶資料模型可能隨著用戶的偏好改變而發生變化。
基於內容推薦方法的優點是:1)不需要其它用戶的數據,沒有冷開始問題和稀疏問題。2)能為具有特殊興趣愛好的用戶進行推薦。3)能推薦新的或不是很流行的項目,沒有新項目問題。4)通過列出推薦項目的內容特徵,可以解釋為什麼推薦那些項目。5)已有比較好的技術,如關於分類學習方面的技術已相當成熟。
缺點是要求內容能容易抽取成有意義的特徵,要求特徵內容有良好的結構性,並且用戶的口味必須能夠用內容特徵形式來表達,不能顯式地得到其它用戶的判斷情況。 協同過濾推薦 (Collaborative Filtering Recommendation)技術是推薦系統中應用最早和最為成功的技術之一。它一般採用最近鄰技術,利用用戶的歷史喜好信息計算用戶之間的距離,然後 利用目標用戶的最近鄰居用戶對商品評價的加權評價值來預測目標用戶對特定商品的喜好程度,系統從而根據這一喜好程度來對目標用戶進行推薦。協同過濾最大優 點是對推薦對象沒有特殊的要求,能處理非結構化的復雜對象,如音樂、電影。
協同過濾是基於這樣的假設:為一用戶找到他真正感興趣的內容的好方法是首先找到與此用戶有相似興趣的其他用戶,然後將他們感興趣的內容推薦給此用 戶。其基本思想非常易於理解,在日常生活中,我們往往會利用好朋友的推薦來進行一些選擇。協同過濾正是把這一思想運用到電子商務推薦系統中來,基於其他用 戶對某一內容的評價來向目標用戶進行推薦。
基於協同過濾的推薦系統可以說是從用戶的角度來進行相應推薦的,而且是自動的即用戶獲得的推薦是系統從購買模式或瀏覽行為等隱式獲得的,不需要用戶努力地找到適合自己興趣的推薦信息,如填寫一些調查表格等。
和基於內容的過濾方法相比,協同過濾具有如下的優點:1) 能夠過濾難以進行機器自動內容分析的信息,如藝術品,音樂等。2) 共享其他人的經驗,避免了內容分析的不完全和不精確,並且能夠基於一些復雜的,難以表述的概念(如信息質量、個人品味)進行過濾。3) 有推薦新信息的能力。可以發現內容上完全不相似的信息,用戶對推薦信息的內容事先是預料不到的。這也是協同過濾和基於內容的過濾一個較大的差別,基於內容的過濾推薦很多都是用戶本來就熟悉的內容,而協同過濾可以發現用戶潛在的但自己尚未發現的興趣偏好。4) 能夠有效的使用其他相似用戶的反饋信息,較少用戶的反饋量,加快個性化學習的速度。
雖然協同過濾作為一種典型的推薦技術有其相當的應用,但協同過濾仍有許多的問題需要解決。最典型的問題有稀疏問題(Sparsity)和可擴展問題(Scalability)。 基於關聯規則的推薦 (Association Rule-based Recommendation)是以關聯規則為基礎,把已購商品作為規則頭,規則體為推薦對象。關聯規則挖掘可以發現不同商品在銷售過程中的相關性,在零 售業中已經得到了成功的應用。管理規則就是在一個交易資料庫中統計購買了商品集X的交易中有多大比例的交易同時購買了商品集Y,其直觀的意義就是用戶在購 買某些商品的時候有多大傾向去購買另外一些商品。比如購買牛奶的同時很多人會同時購買麵包。
演算法的第一步關聯規則的發現最為關鍵且最耗時,是演算法的瓶頸,但可以離線進行。其次,商品名稱的同義性問題也是關聯規則的一個難點。 由於各種推薦方法都有優缺點,所以在實際中,組合推薦(Hybrid Recommendation)經常被採用。研究和應用最多的是內容推薦和協同過濾推薦的組合。最簡單的做法就是分別用基於內容的方法和協同過濾推薦方法 去產生一個推薦預測結果,然後用某方法組合其結果。盡管從理論上有很多種推薦組合方法,但在某一具體問題中並不見得都有效,組合推薦一個最重要原則就是通 過組合後要能避免或彌補各自推薦技術的弱點。
在組合方式上,有研究人員提出了七種組合思路:1)加權(Weight):加權多種推薦技術結果。2)變換(Switch):根據問題背景和實際情況或要求決定變換採用不同的推薦技術。3)混合(Mixed):同時採用多種推薦技術給出多種推薦結果為用戶提供參考。4)特徵組合(Feature combination):組合來自不同推薦數據源的特徵被另一種推薦演算法所採用。5)層疊(Cascade):先用一種推薦技術產生一種粗糙的推薦結果,第二種推薦技術在此推薦結果的基礎上進一步作出更精確的推薦。6)特徵擴充(Feature augmentation):一種技術產生附加的特徵信息嵌入到另一種推薦技術的特徵輸入中。7)元級別(Meta-level):用一種推薦方法產生的模型作為另一種推薦方法的輸入。
③ 評價推薦系統的幾個標准
前言
推薦系統的評測指標用於評價推薦系統的各方面性能。這些指標(之前推送過一篇文章:《推薦系統的十二大評價指標總結》,可以點擊查看)有的可以離線獲得,有的可以用戶調研獲得,有的只能在線獲得。現在對於不同的指標做下詳細的說明。
1.用戶滿意度
用戶作為推薦系統的重要參與者,其滿意度是評測推薦系統的最重要指標。但是,用戶滿意沒有辦法離線獲得,只能通過童虎調查或者在線實驗獲得。
2.預測精準度
預測精準度是度量一個推薦系統(或者推薦演算法)預測用戶行為的能力。這個指標是最重要的推薦系統離線評測指標,從推薦系統誕生那天起,幾乎99%的於推薦系統相關的論文都在討論這個指標。
在計算該指標時需要一個離線的數據集,這個數據集包含了用戶的 歷史 行為記錄。然後將這個數據集通過時間分成訓練集和測試集。最後,通過在訓練集上面建立用戶的行為和興趣模型預測用戶在測試集上的行為,並計算預測行為和測試集上面的實際行為的重合度作為預測准確度。
3.覆蓋度
它是描述一個推薦系統對長尾商品的發掘能力的。覆蓋度的定義方法有不同。最簡單的定義為推薦系統能夠推薦出來的商品占總商品集合的比例。
從上面的定義可以看到,覆蓋率是一個內容供應商(商家)會關心的指標。這里以圖書為例,出版社可能會關心他們的數有沒有被推薦給用戶。覆蓋率為100%的推薦系統可以將每一本書推薦給至少一個用戶。此外,從上面的定義也可以知道,熱門排行榜(Top 100等等)的覆蓋率就很低。它只會推薦那些熱門的商品,而這些商品占總商品數的比例是很小的。一個好的推薦系統,不僅僅需要比較高的用戶滿意度,也要有較高的覆蓋度。
社會 學領域有一個著名的馬太效應,所謂強者越強,弱者更弱的效應。搜索引擎的PageRank演算法也具有一定的馬太效應,推薦系統的初衷是希望消除馬太效應,讓商品都有被用戶瀏覽的機會,但是現實是主流的推薦演算法(例如協同過濾演算法)也是有馬太效應的。
4. 多樣性
用戶的興趣是廣泛的,在一個視頻網站中,用戶可能既喜歡看《名偵探柯南》,也喜歡看成龍的功夫片,那麼,為了滿足用戶廣泛的興趣,推薦列表需要能夠極可能的覆蓋用戶的不同興趣領域,即推薦結果要有多樣性。
關於推薦系統的多樣性最好要達到什麼程度?可以通過一個例子說明。假設用戶喜歡看動作片和動畫片,且80%時間在看動作片,20%時間在看動畫片。那麼,可以提供4中不同的推薦列表。A中10部動作片,沒有動畫片;B中10部動畫片,沒有動作片;C中8部動作片,2部動畫片;D中5部動作片,5部動畫片。在這個例子中,一般認為C是最好的,它既考慮的多樣性,有符合用戶的 歷史 行為習慣。
5.新穎性
新穎的推薦是指給用戶推薦那些他們之前沒有聽過的物品。在一個網站中實現新穎性的最簡單的辦法是,把那些用戶之前在網站在對其有過行為的物品從推薦列表中過濾掉。評測新穎度的最簡單的辦法是利用推薦結果的平均流行度,因為越不熱門的商品越可能讓用戶覺得新穎。因此,如果推薦結果中物品的平均熱門程度較低,那麼推薦結果就可能有較高的新穎度。
6.驚喜度
驚喜度是最近幾年推薦系統領域熱門的話題。但什麼是驚喜度,驚喜度和新穎度有什麼區別是首先要搞清的問題。
可以舉個例子說明這兩種指標的區別。假設一名用戶喜歡周星馳的電影,然後我們給他推薦一部叫做《臨歧》的電影,二用戶不知道這部電影,那麼這個推薦是有新穎性的。但是,這個推薦並沒有驚喜度,因為用戶一旦了解周星馳的電影,就不會覺得奇怪。但是我們給他推薦一部《活著》,假設用戶沒有看過這部電影,那麼他看完後覺得這部電影還不錯,那麼就可以說這個推薦讓用戶覺得是驚喜的。這個例子的基本意思就是,如果推薦結果和用戶的 歷史 興趣不相似,卻讓用戶覺得滿意,那麼就可以說推薦結果的驚喜度很高,而推薦的新穎性僅僅取決於用戶是否聽過這個推薦結果。
7.可信度
如果你有兩個朋友,一個你很信任,一個滿嘴跑火車,那麼如果你信任的朋友推薦你去A地方 旅遊 ,你很可能聽從他的推薦,但那位滿嘴跑火車的推薦你去A地方去 旅遊 ,相信你多半是不會去的。這兩個人可以看成兩個推薦系統,盡管他們推薦的結果相同,但你卻產生了不同的反應,因為你對他們的信任度是不同的。
提高推薦系統的信任度主要有兩種辦法。一是增加推薦系統的透明度,而增加透明度的主要辦法就是提供推薦解釋。只有讓用戶了解推薦系統的運行機制,讓用戶認可推薦系統的工作機制,用戶才會信任來自推薦系統的推薦。二是考慮用戶社交網路的信息,利用好友的信息給用戶做推薦,並且用好友進行解釋。這是因為用戶對他們的好友計較信任,如果這個物品好友買過,那麼他們對推薦結果就會相對比較信任。
8.實時性
在很多網站中,因為物品(新聞、微博等)具有很強的時效性,所以需要在物品還有時效性的時候推薦給用戶。比如,給用戶推薦昨天的新聞顯然不如推薦剛剛發生的新聞。因此,在這些網站中,推薦系統的時效性就至關重要。
9.健壯性
任何一個能帶來利益演算法系統都會被人攻擊。這方面最典型的例子就是搜索引擎。搜索引擎的作弊和反作弊斗爭異常激烈,這是因為如果自己的商品能成為熱門搜索詞語的第一個搜索結果,會帶來極大的商業利益。推薦系統也面臨這這個問題,而健壯性指標衡量了一個推薦系統的抗擊作弊的能力。
④ Amazon推薦系統是如何做到的
亞馬遜使用了哪些信息進行推薦:
1)當前瀏覽品類
2)與當前商品經常一同購買的商品
3)用戶最近瀏覽記錄
4)用戶瀏覽歷史(長期)中的商品
5)用戶瀏覽歷史(長期)相關的商品
6)購買相同商品的其它用戶購買的物品
7)已購商品的新版本
8)用戶購買歷史(如近期購買商品的互補品)
9)暢銷商品
2、推薦系統模型:U x S → R
1)U是用戶矩陣
2)S是物品矩陣
3)R是用戶對物品的喜愛程度,推薦系統就是基於現有的信息填補R矩陣
3、常用推薦演算法
1)基於內容:易實現,效果好,但是如何獲得一個物品的內容、相似度如何定義等有些情況下會較難把握
2)協同過濾:基於物的協同過濾與基於人的協同過濾
3)矩陣分解(SVD):用戶-物品評分矩陣A很大且稀疏,將A分解為用戶矩陣(用戶潛在因子)和物品矩陣(物品潛在因子),目標是這兩個矩陣的乘積盡可能接近R。缺點是只利用了評分信息,忽略了用戶屬性和物品屬性
4)因子分解機(FM):將SVD推廣到多類潛因子的情況,如分解為 用戶、物品、用戶性別、用戶年齡、物品價格 等多個因子,允許因子之間有相關關系(如下圖,方程前半部分是線性回歸,後半部分加入了兩兩因子間關系)
5)深度學習:訓練深度神經網路,輸入用戶id,輸出層做softmax,得到對每個物品id的權重
6)機器學習排序
7)探索與利用:先對用戶聚類(如分為abcde五類),隨機對a中的用戶1和b中的用戶2推薦電影,如果用戶1沒點擊,2點擊了,說明b類用戶可能對該電影更感興趣。
8)集成:對上述多種方法的ensemble
⑤ 推薦系統論文閱讀(十)-基於圖神經網路的序列推薦演算法
論文:
論文地址: https://arxiv.org/abs/1811.00855
論文題目:《Session-based Recommendation with Graph Neural Networks》SR-GNN
github: https://github.com/CRIPAC-DIG/SR-GNN
基於會話的推薦一般是將序列會話建模,將整個session進行編碼,變成一個隱向量,然後利用這個隱向量進行下一個點擊預測。但是這種方法沒有考慮到item直接復雜的轉換(transitions)關系,也就是item之間在點擊的session中除了時間順序外還有復雜的有向圖內的節點指向關系,所以之前的方法不足以很好的對點擊序列進行建模。
現有基於會話的推薦,方法主要集中於循環神經網路和馬爾可夫鏈,論文提出了現有方法的兩個缺點:
1)當一個session中用戶的行為數量十分有限時,這些方法難以獲取准確的用戶行為表示。如當使用RNN模型時,用戶行為的表示即最後一個單元的輸出,論文認為只有這樣並非十分准確。
2)根據先前的工作發現,物品之間的轉移模式在會話推薦中是十分重要的特徵,但RNN和馬爾可夫過程只對相鄰的兩個物品的 單向轉移關系 進行建模,而忽略了會話中其他的物品。
為了克服上述缺陷,本文提出了用圖神經網路對方法對用戶對session進行建模:
下面具體介紹怎麼進行圖序列推薦
V = {v1,v2...vm}為全部的item,S = { }為一個session裡面按時間順序的點擊物品,論文的目標是預測用戶下一個要點擊的物品vs,n+1,模型的任務是輸出所有item的預測概率,並選擇top-k進行推薦。
我們為每一個Session構建一個子圖,並獲得它對應的出度和入度矩陣。
假設一個點擊序列是v1->v2->v4->v3,那麼它得到的子圖如下圖中紅色部分所示:
另一個例子,一個點擊序列是v1->v2->v3->v2->v4,那麼它得到的子圖如下:
同時,我們會為每一個子圖構建一個出度和入度矩陣,並對出度和入度矩陣的每一行進行歸一化,如我們序列v1->v2->v3->v2->v4對應的矩陣如下:
這個矩陣裡面的值是怎麼計算的呢?下面講一下:
看左邊的出度矩陣,第一行為 0 1 0 0 ,代表著v1->v2,因為v1,只有一個指向的item,所以為1;看第二行,0 0 1/2 1/2,因為v2有指向v3和v4的邊,所以進行歸一化後每一個值都變成了1/2。入度矩陣的計算方法也是一樣的,就不再說了。
本文採用的是GRU單元進行序列建模,將圖信息嵌入到神經網路中,讓GRU充分學習到item之間的關系,傳統的GRU只能學到相鄰的兩個物品之間的關系,加入圖信息後就能學到整個session子圖的信息。
計算公式如下:
為了剛好的理解這個計算過程,我們還是使用之前那個例子:v1->v2->v3->v2->v4來一步步分析輸入到輸出的過程。
(1) 是t時刻,會話s中第i個點擊對應的輸入, 是n✖️2n的矩陣,也就是會話子圖的完整矩陣,而 是其中一行,即物品vi所對應的那行,大小為1✖️2n,n代表序列中不同物品的數量。
如果按照例子來看,如果i取2,那麼 為 [0 0 1/2 1/2 1/2 0 1/2 0]
進一步的,可以把 :拆解為[ , ]
(2) 可以理解為序列中第i個物品,在訓練過程中對應的嵌入向量,這個向量隨著模型的訓練不斷變化,可以理解為隱藏層的狀態,是一個d維向量。
(3) H是d*2d的權重向量,也可以看作是一個分塊的矩陣,可以理解為H=[Hin|Hout],每一塊都是d*d的向量。
那麼我們來看看計算過程:
1)[ ..., ] ,結果是d * n的矩陣,轉置之後是n*d的矩陣,計作
2) : H相當於[ ],即拆開之後相乘再拼接,因此結果是一個1 * 2d的向量。
上面就是完整的第i個點擊的輸入的計算過程,可以看到,在進入GRU計算之前,通過跟As,i矩陣相乘,把圖信息嵌入到了神經網路中取,加深了神經網路學習到的item之間的交互信息。
此外,就是GRU的計算過程了,跟原始的GRU不一樣的地方在於輸入從xt變成了嵌入了圖信息的as,i。
通樣也有更新門和重置門,計算方法跟原始GRU一模一樣。
這里的 其實就是相當於原始gru中的 ,只不過在SR-GNN裡面,進行一輪運算的時候i是沒有變化,相當於每個物品單獨進去GRU進行計算,得到自己的向量,也就是說在GRU的計算過程中, 是不斷變化的,看一下源碼更易於理解:
hidden就是公式裡面的 ,在gru的每一個step計算中都會進行更新,這里我有個疑問,如果所有item的hidden都更新的話,那麼應該是整個序列中所有的item並行進入GRU中進行計算,每一個step都得到自己的vector,當每個item的vector更新後,下一個step就重新根據新的 計算 ,接著計算下一個step。
計算過程大概就是下面這樣:
這里有四個GRU並行計算,沒次更新自己的hidden狀態,輸入則考慮所有的hidden和圖信息。
從上面的圖看來,每一個item都要進行T個step得到自己的item-vec,所以經過T個step後,我們就得到了序列中所有item的向量,即:
圖中用藍色框框畫出來的向量,有了這些向量後,我們怎麼得到預測結果呢?這就引入了下一個問題。
觀察上面的模型結構,我們看到attention,沒錯,我們認為一個session中的這些item-vec並不都對預測結果產生影響,有些item對結果影響很大,有些影響很小,所以我們進行了加權求和。同時,論文認為session對最後一個item-vec,s1=vn是重要的,所以單獨拿出來:
公式(6)就是簡單的attention操作,其實從公式上來看就是計算每個vi跟最後一個向量vn的權值,然後進行加權求和。
在最後的輸出層,使用sh和每個物品的embedding進行內積計算,這里vi應該是item的embedding層出來的向量,而不是後面一直更新的hidden:
最後通過一個softmax得到最終每個物品的點擊概率:
損失函數為交叉熵損失函數:
從數據上來看,SR-GNN超過了經典的GRU4REC,這也說明了圖信息的嵌入能帶來更好的推薦效果。
本論文很巧妙的將圖信息嵌入的神經網路中,更高地讓GRU學習到每個item之間的關系,不再局限於相鄰的物品之間進行學習。近年來,圖神經網路的思想和方法屢屢被用在推薦系統中,學好圖神經網路應該是推薦系統的下一個熱潮。
⑥ 關於YouTube推薦系統的論文學習
本文是2010年發表在RecSys上的文章。本文主要介紹的是YouTube的個性化推薦的相關內容。
用戶使用YouTube一般有三個原因:
--看他們在其他地方找到的單一視頻(直接導航);
--圍繞某個主題(搜索和目標導向瀏覽)查看特定視頻;
--受他們感興趣內容的吸引。
推薦系統主要是針對第三點,目的是幫助用戶發現他們感興趣的高質量視頻,並且推薦結果應該隨時間和用戶最近的行為更新。
在YouTube的推薦應用中,面臨以下挑戰:
--用戶上傳的視頻的元信息非常少;
--視頻時長比較短(一般小於10分鍾);
--用戶行為短暫、多變而且雜訊很多;
--視頻生命周期短。
這是YouTube的推薦和普通視頻網站推薦不同的地方,這些挑戰也是現在很多短視頻公司關注的問題。
推薦系統演算法應該保持時效性和新鮮性,另外,用戶必須了解為什麼向他們推薦視頻,這樣可以幫助用戶根據自己的喜好改善推薦引擎。推薦的視頻是通過用戶的行為來生成的,用戶的行為包括觀看、收藏、喜歡等來作為種子視頻,然後使用各種相關性和多樣性的 signals 對視頻集進行排序。推薦系統的工程設計方面,保持各個模塊的獨立性,並且還需要對故障具有恢復能力,並在出現部分故障時適度降級。
這里有2種數據可以考慮:
1)是內容數據視頻流、視頻元信息(標題,標簽等);
2)用戶行為數據,包括顯性和隱性數據。前者是指用戶評分、明確表示喜歡、不喜歡等行為,後者是瀏覽、觀看等行為。
原始數據中還含有非常多的雜訊,很多不可控因素會影響原始數據的質量。
作者將相關視頻定義為用戶在觀看給定的種子視頻 v 之後可能會觀看的視頻,使用關聯規則挖掘技術來確定視頻間的相關性。視頻i和j的相關性定義為:
將用戶觀看過的視頻、喜歡過的視頻、收藏過的視頻等等作為種子集合,對它們進行N級的級聯擴展,也就是YouTube選擇召回的不是1步相關視頻,而是n-步相關視頻,即種子視頻迭代n次後得到的相關視頻集合,產生廣闊和多樣的候選結果。
在生成一組候選視頻後,需要對這些相關視頻進行排序。
用於排序的數據主要包括:
--視頻質量:包括觀看次數、視頻評分、評論、收視和上傳時間等;
--用戶特徵:考慮用戶觀看歷史記錄中種子視頻的屬性,例如觀看次數和觀看時間等;
--多樣性:要在被推薦的視頻集合的類別中做一個平衡,以保持結果的多樣性。
這些數據最終被線性組合起來,得到ranking的評分。
本文雖然是2010年發表的,近年來有很多內容升級復雜化了,但是作為初學者,本文的知識點和整體思路是非常值得學習的。當時的YouTube推薦系統的核心演算法就是基於Item的協同過濾演算法,也就是對於一個用戶當前場景下和歷史興趣中喜歡的視頻,找出它們相關的視頻,並從這些視頻中過濾掉已經看過的,剩下就是可以用戶極有可能喜歡看的視頻。
本文是Google的YouTube團隊在推薦系統上DNN方面的嘗試,發表在16年9月的RecSys會議。本文第1節介紹了YouTube推薦系統主要面臨的挑戰。第2節介紹了一個簡要的系統概述。第3節更詳細地描述了候選集生成模型,包括如何對其進行訓練並用於提供推薦服務;實驗結果顯示模型添加特徵和DNN深度後可以顯著提升預測效果。第4節詳細說明了排序模型,包括使用加權邏輯回歸技術以訓練預測預期觀察時間的模型;實驗結果表明,增加隱層網路寬度和深度都能提升模型效果。 最後,第5節做了總結。
-規模大:用戶和視頻的數量都很大,傳統適合小規模的演算法無法滿足;
-新鮮度:要求對新視頻作出及時和合適的反饋;
-噪音:YouTube上的歷史用戶行為由於稀疏性和各種不可觀察的外部因素而不可預測。 我們很少能獲得基本真實的用戶滿意度,更多的是隱式反饋雜訊信號。
推薦系統的整體結構如圖所示:
該系統由兩個神經網路組成:一個用於候選集的生成,一個用於排序。候選集生成網路將用戶的Youtube活動歷史記錄作為輸入,然後從海量視頻集中篩選出一小部分(數百個)以高精度與用戶相關的視頻。排序網路負責基於更加精細的特徵對候選集進行排序,最後將最高得分的視頻呈現給用戶(按它們的得分排名)。
該模型把這個推薦問題轉化成極端多分類問題:對於用戶U和上下文C,把語料庫V中的數百萬個視頻(分類)i,在時間t處做准確的分類,如下所示:
其中u為用戶U的embedding表示,vi 代表各個候選視頻的embedding。embedding是指稀疏實體(單個視頻,用戶等)到實數密集向量的映射;DNN的目標就是在用戶信息和上下文信息為輸入條件下學慣用戶的embedding向量u,這對於用softmax分類器來區分視頻是有用的。
整個模型架構是包含三層全連接層,使用relu激活函數。把用戶觀看歷史數據、搜索數據做一個embedding,加上age、gender等特徵作為DNN的輸入;輸出分線上和離線訓練兩個部分。訓練階段使用softmax輸出概率,在服務期間則直接使用接近最近鄰搜索來進行生產候選的N個視頻。
1)把用戶觀看過的視頻id列表做embedding,並對所有歷史觀看視頻ID的embedding做平均,得到觀看embedding向量。
2)同時把用戶搜索過的視頻id列表也做如上的embedding,得到搜索embedding向量。
3)用戶的人口統計學屬性做embedding得到特徵向量。
4)簡單的二值和連續特徵,例如用戶的性別,登錄狀態和年齡作為歸一化為[0,1]的實數值直接輸入到網路中。
5)example age:機器學習系統總是利用歷史的例子去預測未來,所以對過去總會有一個隱含的偏差。為了矯正偏差,YouTube把訓練樣本的年齡當作一個特徵。
1.訓練樣本要用youtube上的所有視頻觀看記錄,而不只是我們的推薦的視頻的觀看記錄。
2.為每個用戶生產固定數量的訓練樣本。
3.丟棄搜索信息的順序,用無序的詞袋錶示搜索查詢。
4.如下圖,圖(a)從歷史觀看記錄中隨機拿出來一個作為正樣本來預測它,其餘的歷史觀看記錄作為上下文;這樣其實泄露了未來的信息,並且忽略了任何非對稱的消費模式。相反,圖(b)是從用戶的歷史視頻觀看記錄中隨機拿出來一個作為正樣本,然後只用這個視頻之前的歷史觀看記錄作為輸入;這樣的預測效果好得多。
– 深度為0:這時網路就是一個把連接起來的輸入層轉換一下,和softmax的256維輸出對應起來
– 深度為1:第一層 256個節點,激活函數 是ReLU (rectified linear units 修正線性單元)
– 深度為2:第一層512個節點,第二層256個節點,激活函數都是ReLU
– 深度為3:第一層1024個節點,第二層512個節點,第三層256個節點,激活函數都是ReLU
– 深度為4:第一層2048個節點,第二層1024個節點,第三層512個節點,第四層256個節點,激活函數都是ReLU
實驗結果如下圖所示:
可以看出,特徵選取較多時,並且模型深度在四層時,可以得到較好的結果。
排序階段最重要的任務就是精準的預估用戶對視頻的喜好程度。在排序階段面對的數據集比較小,因此會採用更多的特徵來計算。
作者在排序階段所設計的DNN和上文的DNN的結構是類似的,但在訓練階段對視頻的打分函數不再是softmax,而是採用的邏輯回歸。如下圖所示:
1)特徵工程
盡管神經網路能夠減輕人工特徵工程的負擔,但是我們依然需要花費精力將用戶及視頻數據轉化為有效的特徵。其主要的挑戰在於如何表示用戶動作的時間序列以及這些動作如何與正被評分的視頻展現相關。但是通過對用戶和物品之間的交互行為,我們能提取出一些有用信息,比如: 用戶從這個頻道里看過多少視頻,用戶上次觀看這個主題的視頻是什麼時候等。
2)embedding 離散特徵
每個維度都有獨立的embedding空間,實際並非為所有的id進行embedding,比如視頻id,只需要按照點擊排序,選擇top N視頻進行embedding,其餘置為0向量;而當多值離散特徵映射成embedding之後,像在候選集生成階段一樣,在輸入網路之前需要做一下加權平均。另外一個值得注意的是,離散特徵對應的ID一樣的時候,他們的底層embedding也是共享的,其優勢在於提升泛化能力、加速訓練、減小內存佔用等。
3)連續特徵歸一化
對連續值類的特徵進行歸一化,作者設計一種積分函數將特徵映射為一個服從[0,1]分布的變數;還可以對某些特徵進行取根號、取對數和取平方的相關操作,使得網路有更強的表達能力。
給定正負樣本,正樣本為有點擊視頻,負樣本為無點擊視頻;用觀看時長對正樣本做了加權,負樣本都用單位權重(即不加權);採用的是基於交叉熵損失函數的邏輯回歸模型訓練的。
上表顯示了在保留數據集上用不同的隱層配置得到的結果,這些結果表明增加隱層的寬度提升了效果,增加深度也是一樣。
本文內容方面,介紹了YouTube基於深度學習的推薦系統,先用視頻和用戶的主要信息通過深度候選生成模型從百萬級視頻中找出數百個相關的視頻,再用視頻和用戶的其他信息通過深度排序模型從數百個視頻中找出幾十個最有可能受用戶歡迎的視頻給用戶。這樣使得推薦系統對用戶喜好的刻畫能力大大增強,刻畫的范圍更加廣泛。
本文結構方面,從推薦系統的整體結構講起,劃分為候選集生成和排序兩個階段,然後對每個階段詳細地展開講解。整體過程條理清晰,邏輯嚴密,值得我們學習。
⑦ 「干貨」YouTube 基於深度神經網路推薦系統剖析
YouTube推薦系統的三大難點:
· 一是規模太大,簡單的推薦演算法在如此大規模數據量上可能是失效的;
· 二是實效性,即新數據不斷產生,需要將其良好的呈現給用戶,以平衡舊有的好內容以及新內容;
· 三是噪音問題,用戶行為與視頻描述均有噪音,並且只能獲得充滿噪音的用戶隱含反饋,而不能直接獲取用戶滿意度。
圖1.YouTube基於深度學習推薦系統架構圖
本文呈現的推薦系統解決方案分為兩個部分:
· 一個是備選生成(Candidate Generation),其目標是初選結果,從海量數據中選擇出符合其個人需求偏好的百級別數據;
· 一個則是排序(Ranking),通過更加豐富的用戶,視頻乃至場景信息,對結果進行精細化排序,得到呈現給用戶的備選。
備選生成階段,將推薦系統定義為一個多分類器,其職責是確定某個用戶,在某個場景與時間下,將從系統的視頻中選擇消費哪一個視頻。具體的方法是,將用戶與視頻全部轉化為Embedding描述,即一個向量,最終用戶消費某個視頻的概率通過如下方式計算得到:
而構建用戶與視頻的Embedding,則是通過訓練而來。將用戶觀看視頻/搜索記錄/其它信息如年齡性別等作為輸入特徵,部分稀疏特徵首先進行Embedding化,中間為數層ReLU,最終一層用SoftMax進行分類。 換句話講,是將用戶與場景信息作為輸入,預估用戶下一個要看的視頻,也就是將用戶分到具體某一個視頻作為其類別。 用戶與視頻的Eembedding,則是神經網路最後一層的對應矩陣。這種方法除了能利用用戶行為信息外,其它信息例如設備,地理位置,性別等也可以作為輸入,這是神經網路相對於普通MF類演算法的優勢之一。
圖2.YouTube推薦備選生成階段架構
備選生成的下一個階段是排序。其網路結構跟備選生成階段類似,將所有排序模型中的信息輸入後,進入多層ReLU,最終進行優化的是一個加權邏輯回歸損失函數,觀看時間作為陽性樣本權重。在這一層,也可以看到其推薦「代理問題」的轉化:由點擊行為預估轉為了以觀看時長為權重的點擊行為預估,這樣更佳貼近Youtube的產品優化方向。與備選生成階段另一個不同在於,排序模塊需要考量的特徵要多得多:
· 「場景」類特徵,例如用戶可能在某個地方某個時間願意觀看某一條視頻,但是在別的地方別的時間則不會;
· 曝光信息:用戶觀看了某界面,但是並未在其上進行操作,那麼隨之應進行已呈現內容降級;
· 備選生成層輸出:排序需要將各種備選結果聯合起來;
· 更豐富的用戶信息:例如用戶最近的一次搜索詞,用戶最近觀看的同一個主題下的視頻數量,用戶上一次觀看同主題視頻的時間,用戶所使用的語言等;
圖3.YouTube推薦排序階段架構
除了整體設計與系統架構以外,本篇論文中陳述了很多「選擇」,這些選擇更多的是「藝術」而不完全屬於技術范疇。這些選擇往往是很多技術人員關注不多的點,但在筆者看來,這些都蘊含著YouTube技術與產品人員深入的思考與判斷。
「Example Age」 特徵
對於YouTube產品層來講,鼓勵內容產生毫無疑問是至關重要的,所以推薦系統也希望對用戶上傳的新內容的有所偏好。然而幸運的是,即使損失一部分相關性,視頻的消費者也偏好新內容。也就是說,新內容的價值可以良好的通過其帶來的吸引力呈現出來,並不需要平台刻意而為之。
由於系統使用一個時間窗口的訓練樣本進行訓練,如果沒有視頻的上傳時間信息,那麼模型會認為這個時間窗口內用戶對視頻的偏好是穩定的,然而事實遠非如此。將視頻的上傳時間加入到特徵集合後,預估更加准確,尤其是視頻剛上傳階段的強烈便好被成功捕捉到。
圖4.無時間特徵預估/有時間特徵預估/真實情況 三者對比
優化目標選擇
圖5.優化對象的選擇
演算法系統的設計首先要明確優化對象,這不僅僅涉及到損失函數的形式,同樣也是評判系統成功與否的標准。YouTube是視頻平台,更是富含「價值」的長視頻平台,其觀看行為比點擊行為意義更大。(當然,筆者認為沒有任何一個簡單指標可以完全代表一個產品)
「正樣本」定義
圖6.何為正樣本的設計選擇
訓練數據來源
圖7.關於訓練數據來源的設計抉擇
訓練數據應該只來源於推薦界面的曝光嗎?YouTube認為不然。如果只考慮推薦界面曝光,則無法對用戶便好進行 探索 ,更加無法捕捉用戶偏好的變化,因為用戶偏好的變化往往首先會對應著搜索與瀏覽行為。所以YouTube將各個界面例如搜索,導航等用戶行為全部納入其中。
訓練數據窗口
圖8. 訓練數據收集方式的設計選擇
Youtube將所有用戶等而視之,每個用戶收集一定量的樣本。而不是慣常可見的直接收集一個時間窗口內的所有用戶行為,作為訓練樣本。這樣的好處是避免系統收到少數行為過多用戶的影響,使得系統更多的為大眾設計。這樣的設計理念與近期阿里Gai Kun的論文中評測方法(用戶AUC)設計有異曲同工之妙。
用戶行為序列處理
圖9.用戶行為序列信息處理的設計選擇
在系統中,用戶往往會順著一個檢索結果頁或者用戶發布者瀏覽頁進行順序觀看,如果系統捕捉到了用戶看了檢索界面的前三個結果,那麼預估用戶將看第四個結果就會很容易。但是這樣真的好嗎?將檢索結果頁面或者用戶發布視頻界面直接作為推薦結果呈現給用戶是並不友好的--搶了別的界面應該乾的活嘛。所以此處YouTube對用戶行為序列做了處理,在模型輸入中選擇放棄用戶行為的序列信息,將其打散成詞袋Embedding,即使這樣的信息有利於模型的離線訓練效果。
預估對象的選擇
圖10.關於預估對象的設計選擇
用戶的行為往往是有順序的,用戶在系統中「熱身」後,在一個頻道下面,往往先看大眾喜歡的熱門,然後逐步找到自己的興趣點,聚焦看一塊內容。那麼,訓練數據則應該收集用戶前段時間行為,預估此後的行為。而不是收集時間前後段的行為,預估中間時間段的用戶行為。這樣模型更加接近用戶習慣。
除此之外,Youtube根據系統設計了對應的實驗,結果非常簡單:深度網路層數越高,效果越好。
YouTube的推薦系統,已經為其貢獻了70%的用戶播放時長,搜索與導航在PC時代的主導地位在移動時代已經完全被顛覆掉。希望大家在其中學到一些東西。筆者水平所限,若有錯誤不當之處,敬請指正。
另外,個人用TensorFlow模擬Youtube的推薦系統,做了一個簡單實現。其實就是一個多分類器外加一個單分類器,遠談不上成熟,可以供大家參考。
https://github.com/wangkobe88/Earth
——END——