天天看點

推薦系列02,每個職場中的你都有必要了解的推薦系統常識

接上一篇《推薦系列01:人工智能與推薦系統》,上一篇文章主要解決的什麼是推薦系統以及為什麼要有推薦系統的問題。這一篇我們關注的是,更細節的一些東西,把推薦系統的一些基礎常識分享給大家。

01 推薦系統概述

在上個章節,我們也大緻的提到過,需要先明确的一點就是推薦算法或者推薦機制并不嚴格等同推薦系統,推薦系統是一個相對複雜的業務系統,裡頭涉及到資料的處理、架構的構成、推薦的邏輯機制,回報資料的回收、效果的跟蹤、AB測試等等。

并且,很多我們耳熟能詳的推薦算法,他隻是解決的某種特定情況下的推薦機制問題,而整個系統很多時候是複合了多種算法結果,綜合呈現的一種結果。但可以肯定的是,各種理論邏輯、算法機制是建構推薦系統的核心支撐,是以,學習推薦系統,首先學習各種推薦算法并沒有毛病。

推薦算法概述-基于内容屬性相似的推薦

從原始資料依賴的層面來說,常見的有基于内容屬性的推薦機制,這種推薦邏輯很簡單,隻是單純的依賴物品之間的屬性相似來建構推薦關系,容易了解,有時間還是有一定效果的,但實際上很多時候會存在這幾種情況,導緻了這種原始推薦失效。

如果使用者浏覽目前的物品本身就不是使用者的菜,甚至是一個非優質資訊(目前主體不可控),再基于目前物品進行推薦就是個僞命題。

基于上面這條,即使目前主體是使用者的目标,但再推類似主體會造成資訊備援,即目前主體資訊已經解決了使用者的問題。

是以,由于使用者行為的不可控,基于内容屬性相似的推薦,風險還是挺高的,這是導緻了這種原始直接的機制并不會得到廣泛的推廣。但與亂推薦相比,還是有一定正向作用的,畢竟使用者浏覽的主體是自身選擇的結果,本身使用者對于其選擇的資訊主體是有一定偏好性的。

推薦算法概述-基于使用者畫像的推薦

基于物品本身屬性的推薦,其實與個性化是沒有半毛錢的關系的,畢竟推薦候選集隻跟物品主體有關,與使用者無關,就談不上什麼個性化了。

而基于使用者畫像(更多人喜歡用基于使用者标簽)的推薦,則更大程度上依賴于使用者的畫像屬性來推薦,這就展現了使用者偏好資訊,根據偏好資訊來選擇候選集。

這是一種很通用的做法,并且在大規模資料集情況下,很多實際的産生過程中喜歡使用這種機制。而使用者的畫像,或者更具體點使用者的興趣标簽如何建構呢?其實就是依賴使用者累積的行為資料了,通過行為資料生成使用者的興趣标簽。

這看似是一種相對靠譜的做法,畢竟如果把使用者的愛好都分析清楚了,主動給使用者做推薦不就顯得很個性化了嗎?在實際的場景中,首先,并不是所有使用者的行為都足夠用來表征其興趣偏好的,即我們會高估使用者的行為集合,進而産生有偏差的畫像屬性,更甚者,如果使用者完全沒有行為怎麼辦呢?

其次,通常來說,使用者的興趣愛好是會随時間遷移而改變的,是以,把我使用者的興趣程度以及其變化并不是一個容易的事情,更何況使用者實際的選擇還會受很多因素影響,比如,我目前查找的一個資訊并不是我之前掌握的資訊,那意味着這些資訊偏好在我的曆史軌迹中都展現不出來,那單純的通過我的興趣去推薦就顯得不靠譜了。

但不管怎麼說,根據使用者的偏好來做推薦,大方向肯定是沒有問題的。

推薦算法概述-基于協同過濾的推薦

協同過濾,或許了解過推薦系統的的朋友,多多少少都能聽過一些,并且協同推薦可是作為推薦領域典型案例的存在。

協同過濾同樣不會去研究物品的本身屬性,甚至也沒有空去建構使用者的畫像标簽,正如他的名字描述的一樣,他嚴重依靠于使用者的行為以及其周邊使用者的協同行為。舉個例子,為一個使用者推薦資訊,那麼我隻需要參考其周邊使用者在看什麼資訊,就給他推薦什麼資訊就好了。

重點在于,如何限定周邊這個範圍,比如根據兩個使用者的行為,去建構相關關系,進而判斷使用者之間的相似程度,把相似使用者的行為推薦給目前使用者,這就是協同中典型的基于使用者推薦。

而如果以物品為次元,以使用者的購買或者觀看記錄為向量,則可以建構物品的相似度量,針對于每一個待推薦選項,使用者的曆史軌迹就是其向量構成,就可以判斷該使用者曆史的軌迹資訊與目前的待選物品的向量相關度了,進而判斷是否要推薦,這就是基于物品的協同邏輯。

與基于使用者畫像的推薦對比,這種推薦有一定幾率可以發現新物品,即并不嚴格依賴使用者的興趣。舉個例子,假設幾個資訊的層級是ABC,并且ABC是層級遞進關系,并不是同一個東西,對于一個使用者來說,他掌握的是A,則意味着他的興趣偏好大多偏向于A,根據興趣标簽,其實是很難推薦這種遞進相關的資訊。

但是,如果其他使用者的學習軌迹都是A->B->C這種軌迹,這意味着ABC三者之間本身就有前後潛在邏輯關系存在的,基于協同,即可為該使用者在掌握A的基礎上,推薦BC的内容,這也是基于興趣所做不到的地方。

目前,基于協同行為的推薦,除了基于物品還有基于使用者,還有其他諸如基于模型的協同,典型如最近鄰模型、基于矩陣分解、以及基于圖關系模型的建構的推薦機制。

推薦算法概述-其他

其實在我們實際的操作過程中,并不會嚴格的依賴于這種條條框框、隻要合理即可行,比如我們完全可以把推薦問題轉化為分類問題,針對于每個待選項,他都是YES OR NO的問題,即一個二值分類。

又比如在上一篇我們學習的一個場景,即閱文網站的小說推薦,還記得他的推薦标題嗎?“喜歡這本書的人還喜歡”,這就是典型的“啤酒與尿布”的解法,即貨架思維,關聯銷售,也是可以作為一種推薦機制而存在的。

在比如微信朋友圈,微信一定是會研究使用者的朋友圈關系的,比如你對哪類朋友點贊、互動行為最多,它是不是會考慮推薦你欣賞的朋友偏好内容給你?畢竟微信是一個典型的熟人社交模型。

是以,推薦算法看似重要,但其實想想又沒有這麼重要,很多時候并不是一成不變的,都要我們根據場景去考慮,最最最重要的是,需要我們用實際效果來選擇機制,也或許是多種機制共同生效的結果。

02 相似度量

在我們上面的推薦算法機制中,有個不得不提的操作處理就是各種相似相關度的計算,我們來簡單分享一下幾種相似或者相關度量的方式。

歐幾裡得距離(Euclidean Distance)

最常見的距離度量方式,衡量多元空間中兩點之間的絕對距離,要求次元的統一。

明可夫斯基距離(Minkowski Distance)

明氏距離是歐氏距離的擴充,是對多個距離度量公式的概括性的表述(可以看到,當p=2時,其實就是歐式距離)。

曼哈頓距離(Manhattan Distance)

曼哈頓距離來源于城市區塊距離,是将多個次元上的距離進行求和後的結果,即當上面的明氏距離中p=1時得到的距離度量。

//還有其他的一些距離度量,但是都不太常用,最常用的依然是歐式距離度量。

向量空間餘弦相似度(Cosine Similarity)

餘弦相似度用向量空間中兩個向量夾角的餘弦值作為衡量兩個個體間差異的大小。相比距離度量,餘弦相似度更加注重兩個向量在方向上的差異,而非距離或長度上。

皮爾森相關系數(Pearson Correlation Coefficient)

即相關分析中的相關系數r,分别對X和Y基于自身總體标準化後計算空間向量的餘弦夾角。基于内容的推薦,還有一點需要注意的就是,對于物品自身屬性,如果屬性值過少,我們需要适當進行擴大次元,如果次元過多,則需要進行降維。

關于降維和升維,都是一個很大的研究方向,大體上可以說一下幾種常見的方式。例如降維,我們可以進行次元聚類、主題抽取,進一步把相關次元進行合并,進一步減少次元;而對于升維,我們可以把次元進行矩陣化,例如假設物品X有A和B兩個次元屬性,那麼我們通過生成A*B矩陣的方式,把次元擴充到A*B個次元。

03 冷啟動問題的解決

所謂冷啟動,即在推薦系統初期時,沒有任何使用者與物品的交集資訊,即無使用者的行為軌迹,無法通過類似協同或者使用者偏好等方式進行推薦,這種時候,我們就稱推薦系統處于冷啟動狀态。

這種情況,我們需要盡快的累積起第一批使用者行為軌迹。我們可以通過基于内容的推薦,或者做一些其他類似的操作,快速有效的進行物品推薦。一段時間後,累積到一定的使用者行為時,整個系統就能夠正常使用協同過濾等方式進行推薦了。

但是,針對于新加入的使用者,或者新加入的物品,同樣也是出于冷啟動狀态的,這個時候,我們通過需要對這種物品或者使用者做特殊的處理。

除了基于内容屬性的推薦,我們還有其他的一些政策用于彌補這種行為資料不足的情況,比如典型的熱度模型,推薦熱點資訊這種行為雖然low,但是從整體的回報來看,還是有一定效果的,此外,還可以根據一些統計學上的結論,進行基于統計分析結論的推薦。

除此之外,我們也可以通過其他管道收集使用者的資料,比如使用者注冊的時候所填寫的個人資料,這些都是可以作為推薦的原始依賴資料。

04 馬太效應

馬太效應或者說長尾效應,即熱者愈熱,實際舉例來說就是,在實際的購買場景中,由于你推薦的次數越多,部分優質的商品購買或者點選的次數就越多,形成的使用者購買軌迹就越多,是以得到的推薦機會就越多,進而産生的推薦也越多,變得越熱。

随着不斷疊代,子子孫孫無窮盡也,這樣得到推薦的商品就會集中在少部分商品中,而大部分長尾商品是沉寂的,一個推薦系統如果長時間處于長尾效應中,造成推薦疲勞,其推薦效果就會減弱。

是以,一個好的推薦系統,要考慮到适當的挖掘長尾商品,通過真的個性化,把适當的長尾商品送到真正需要他們的人手裡,在實際的操作過程中,我們可以适當的進行熱度降級,進而讓一些中下層的商品得到更多的曝光機會,當然前提是保證點選率的情況下。

另外一個場景會形成馬太效應的是熱度模型,即我們的熱度榜單,長時間的高居榜首,一定會獲得更多的點選,而點選越多其熱度越高,但我們的資訊是需要保持新鮮度的,不然點選率遲早會下架的。

是以,我們使用一些機制讓處于頭部的商品或者資訊降級,時間衰減是一個比較通用的做法,即随着時間的遷移,其整體熱度會不斷的下降,至于說下降的方式,速率就看模型的設計了。

05 AB測試

關于推薦的效果,之前我們說過其核心的考核标準就是點選率,點選的越多說明推薦的越準确,使用者的停留時長也會越長,隻要把使用者留在平台中,機會總是會有的。其實就是一層漏鬥嘛?這一層的基數越大,下一層轉換的量就會越高,這也是推薦系統的核心存在意義。

并且之前也說到過,一個不好的推薦系統有時間反而會形成反向作用,是以,一個推薦系統的疊代更新至關重要。離線的效果評估一定是要做的,最起碼在離線實驗的階段需要保證目前的效果優于線上效果,才能進行疊代。

但是,實際情況是複雜的,對于推薦的模型來說,離線的實驗其實并沒有想象中靠譜,那麼,就丢到線上去真多真槍的實驗一把,就知道效果了。但是,實際的生産環境中,任何一點轉化波動的影響都是極其嚴重的,誰也不敢拿實際生産開玩笑。

于是,就有了AB測試機制的産生,所謂AB測試機制,即将流量分為AB兩類,A流量走原始的舊模型,B流量走新模型,同步測試同步對比,效果一目了然。

當然,在實際的AB測試流程中,首先流量是可以自由配置設定的,一般情況下新模型在最終确認之前流量一定是少量的,随着模型逐漸被驗證,流量比重會逐漸加大,最終确認後流量全部導向新模型,完成新模型的正式上線。

并且,通常,在實際的環境中,或許我們會同時有十多個甚至是幾十個新模型在同時實驗,每個模型調整的因子都不一樣,最終選擇最适合的因素進行調整,達到效果最優,這也就是AB測試機制的魅力所在。

是以,打造一個好的AB測試系統,首先流量是需要可控的,其次模型的疊代上線是需要高度靈活的,最後,肯定是需要有完整的資料回收、資料分析對比機制存在的。

這篇大概就這些了,核心還是一些推薦系統相關知識點,哪怕是非技術人員也是比較容易了解的,并且對于推薦場景,個人認為隻要是從業者都應該或多或少了解一些相關的機制。

在下一篇,我們将正式進入到實操層,并且結合實際的推薦案例來學習推薦算法的流程。

06 相關閱讀

《推薦系列01:人工智能與推薦系統》