本文約8000字,建議閱讀10分鐘 本文作者整理出了這份萬字入門推薦系統(tǒng),涵蓋了推薦系統(tǒng)基礎(chǔ)、進階、實戰(zhàn)的全部知識點, 最近一周作者跟朋友三人,根據(jù)自身如何入門推薦系統(tǒng),再結(jié)合三人分別在騰訊做廣告推薦、字節(jié)做視頻推薦、百度做信息流推薦的經(jīng)歷,整理出了這份萬字入門推薦系統(tǒng)。內(nèi)容十分詳細,涵蓋了推薦系統(tǒng)基礎(chǔ)、進階、實戰(zhàn)的全部知識點,并且每一塊都給出了我們自己看過且覺得高質(zhì)量的參考資料,所以不管你是科班還是非科班,按照這條路線走下去,找到推薦系統(tǒng)相關(guān)工作是完全沒問題的。因為內(nèi)容過于全面詳細,即便你不從事推薦系統(tǒng)方向,只要是從事程序員,看完這篇文章也能有所收獲。不過要先強調(diào)一下,如果是沒有基礎(chǔ)且時間充足的同學(xué),可以按部就班的學(xué),如果有一定基礎(chǔ)或時間緊張,那就直接看核心知識。其中『 機器學(xué)習(xí)、深度學(xué)習(xí)、推薦算法理論知識、推薦系統(tǒng)實戰(zhàn)項目 』這四塊是核心知識,像數(shù)學(xué)、計算機基礎(chǔ)可以等到你需要的時候再反過頭來學(xué)習(xí)。在核心知識中也有次重點,要學(xué)會有的放矢,哪些知識是次重點,我都會在后面一一說明。數(shù)學(xué)主要是微積分、線性代數(shù)、概率論這三門課。微積分通常情況下,機器學(xué)習(xí)需要得到一個函數(shù)(模型,或者說假設(shè))來預(yù)測未來的數(shù)據(jù)。既然是函數(shù),那自然就離不開微積分了。微積分為我們研究函數(shù)的性質(zhì)提供了理論依據(jù),同時它也是學(xué)習(xí)概率論、最優(yōu)化方法等后續(xù)課程的基礎(chǔ),是整個高等數(shù)學(xué)的基石。重點掌握函數(shù)的求導(dǎo)法則(特別是鏈式法則),以及泰勒公式。這對后續(xù)的梯度下降法,牛頓法,擬牛頓法等優(yōu)化算法的推導(dǎo)至關(guān)重要!線性代數(shù)機器學(xué)習(xí)算法的輸入、輸出、中間結(jié)果通常為向量、矩陣、張量。這些都屬于線性代數(shù)里的知識。重點掌握向量、矩陣含義及其數(shù)學(xué)運算公式。概率論對于機器學(xué)習(xí)來說,概率論是一種重要的工具。如果將機器學(xué)習(xí)算法的輸入、輸出看作隨機變量/向量,則可以用概率論的觀點對問題進行建模。使用概率論的一個好處是可以對不確定性進行建模,這對于某些問題是非常有必要的。另外,它還可以挖掘變量之間的概率依賴關(guān)系,實現(xiàn)因果推理。總結(jié)數(shù)學(xué)好是入門機器學(xué)習(xí)的優(yōu)勢,但并非關(guān)鍵。因為數(shù)學(xué)知識量太龐大了,花太多時間在其上,容易打擊學(xué)習(xí)積極性。另外做算法一般分兩種:理論模型和實際應(yīng)用,前者的行業(yè)title是算法研究員,主要發(fā)paper、提出新的模型或者優(yōu)化方法,所以對于數(shù)學(xué)能力要求很高。后者的行業(yè)title是算法工程師,致力于把模型應(yīng)用于數(shù)據(jù)上,攫取商業(yè)價值,對于數(shù)學(xué)能力要求并不高。往往大部分人都屬于后者,我個人也是后者。熟悉不同算法的應(yīng)用場景、掌握模型落地工程技術(shù),才是我們更應(yīng)該投入精力的地方。- 《DeepLearning》,又名「花書」,被譽為深度學(xué)習(xí)領(lǐng)域圣經(jīng)。它前面有必備數(shù)學(xué)知識的介紹,講得挺不錯的。
- B站搜索微積分、線性代數(shù)、概率論關(guān)鍵詞,會有很多教學(xué)視頻,隨便選取時長較短的看看即可。
計算機基礎(chǔ)計算機基礎(chǔ)包含數(shù)據(jù)結(jié)構(gòu)與算法、計算機組成原理、操作系統(tǒng)、計算機網(wǎng)絡(luò)、數(shù)據(jù)庫、五大課程。其中數(shù)據(jù)結(jié)構(gòu)與算法是面試必考內(nèi)容,大家都會花時間好好學(xué)。但是另外4門課,開發(fā)崗面試中一定會問,算法崗卻很少會問,再加上很多做算法的人是轉(zhuǎn)行過來,非計算機科班出身,大學(xué)期間沒有上過此類專業(yè)課。所以很多做算法的人計算機基礎(chǔ)比較薄弱。但是在我看來計算機基礎(chǔ)是很重要的。一是能提高我們計算機素養(yǎng),二是增加工程代碼理解能力。所以后面我會針對這四門課程,出一個面向算法工程師的系列文章,做到讓大家對這些課程重點知識有個了解,同時又不會陷入細枝末節(jié)。這里先給大家做個大概講解:數(shù)據(jù)結(jié)構(gòu)與算法數(shù)據(jù)結(jié)構(gòu)包含:數(shù)組、鏈表、棧、隊列、樹、散列表、圖。數(shù)據(jù)結(jié)構(gòu)本質(zhì)是描述數(shù)據(jù)與數(shù)據(jù)之間的關(guān)系。算法包含:排序、查找、五大經(jīng)典算法(動態(tài)規(guī)劃、回溯、分支界限、分治、貪心)。計算機解決問題其實沒有任何奇技淫巧,它唯一的解決辦法就是窮舉。算法設(shè)計的本質(zhì)無非就是先思考「如何窮舉」,然后再追求「如何聰明地窮舉」?!嘎斆鞯母F舉」分為兩部分:「去掉重復(fù)的窮舉」、「去掉不必要的窮舉」。比如,備忘錄法,用數(shù)組保存求過的結(jié)果,用空間換時間,這就是去掉重復(fù)的窮舉;動態(tài)規(guī)劃根據(jù)最優(yōu)子結(jié)構(gòu),使當(dāng)前問題只與某幾個子問題有關(guān),從而大大減少問題分解次數(shù),這就是去掉不必要窮舉。- 《劍指offer》,準備過面試的人應(yīng)該都知道這本書。
- 《大話數(shù)據(jù)結(jié)構(gòu)》通俗易懂。剩下的就是多刷LeetCode,多看別人的題解。
計算機組成原理講解計算機組成結(jié)構(gòu)。主要由CPU(運算器、控制器),存儲器(內(nèi)存、外存),IO設(shè)備(輸入、輸出設(shè)備),總線這幾部分構(gòu)成。如果把計算機比作人,那么CPU是人的大腦,負責(zé)控制全身和運算;內(nèi)存是人的記憶,負責(zé)臨時存儲;外存是人的筆記本,負責(zé)永久存儲;輸入設(shè)備是耳朵或眼睛或嘴巴,負責(zé)接收外部的信息存入內(nèi)存;輸出設(shè)備是你的臉部(表情)或者屁股,負責(zé)輸出處理后的結(jié)果;以上所有的設(shè)備都通過總線連接,總線相當(dāng)于人的神經(jīng)。操作系統(tǒng)是應(yīng)用程序與硬件之間的管家:對下管理計算機硬件資源(CPU、存儲器、IO設(shè)備)、對上管理應(yīng)用程序。內(nèi)核(kernel)是直接控制硬件的。比如:內(nèi)核控制硬件有1000種方式,導(dǎo)致直接調(diào)內(nèi)核去操作硬件很麻煩,于是就封裝內(nèi)核,向外提供了易于調(diào)用的接口,比如:桌面系統(tǒng)、shell等。這些接口對非編程人員用戶還是不友好,于是編程人員用編程語言再對這些接口在進行封裝,就產(chǎn)生了應(yīng)用程序。本質(zhì)是封裝的思想。我們學(xué)的編程語言到最后都是在調(diào)用操作系統(tǒng)內(nèi)核API。所以這也是為什么所有的語言都有不同操作系統(tǒng)版本,因為每個操作系統(tǒng)的內(nèi)核API是不同的。《深入理解計算機系統(tǒng)》,配套視頻:https://www.bilibili.com/video/BV1cD4y1D7uR《鳥哥的Linux私房菜》,Linux是最常用的服務(wù)器系統(tǒng),也是我們工作中最常接觸的。熟悉Linux常用命令很有必要。計算機網(wǎng)絡(luò)很多教材都是從五層模型(物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、應(yīng)用層)講解。其實這樣講是比較晦澀難懂的,因為很多東西我們都沒接觸過,很陌生。好的辦法是通過人類的語言系統(tǒng)進行類比。計算機網(wǎng)絡(luò)是計算機的語言系統(tǒng),與人類語言系統(tǒng)的本質(zhì)是一樣的。
- 數(shù)據(jù):計算機之間傳輸?shù)男畔?/span>
- 通信協(xié)議:決定數(shù)據(jù)的排列方式
- 網(wǎng)卡:數(shù)據(jù)發(fā)射器與接收器
- 傳播介質(zhì):光纖、網(wǎng)線、WIFI
此外還有人的身份證相當(dāng)于Mac地址,家庭地址相當(dāng)于IP地址等等。計算機網(wǎng)絡(luò)中的許多概念都可以用生活中人類是如何通信的進行類比。人類通信我們是非常熟悉的,所以非常有助于我們理解。- 《計算機網(wǎng)絡(luò)自頂向下方法》這本書相比于其他計算機網(wǎng)絡(luò)書籍較通俗易懂,學(xué)習(xí)起來應(yīng)該不太費勁。這本書重點章節(jié)是第2、3、4、5、6章,其他章節(jié)可以跳過。配套視頻:https://www.bilibili.com/video/BV1mb4y1d7K7
- 謝希仁的《計算機網(wǎng)絡(luò)》,是國內(nèi)很有名的教材。
數(shù)據(jù)庫數(shù)據(jù)庫就是我們存儲數(shù)據(jù)的工具。數(shù)據(jù)如何存儲與讀取,直接決定了整個系統(tǒng)的效率。常用的關(guān)系型數(shù)據(jù)庫是MySQL,非關(guān)系型數(shù)據(jù)庫是Redis。- 一天學(xué)會 MySQL 數(shù)據(jù)庫:https://www.bilibili.com/video/BV1Vt411z7wy
機器學(xué)習(xí)人工智能、機器學(xué)習(xí)、深度學(xué)習(xí)關(guān)系如下:我們一般說機器學(xué)習(xí)都是指除了深度學(xué)習(xí)以外的機器學(xué)習(xí),也稱為傳統(tǒng)機器學(xué)習(xí)。雖然近幾年深度學(xué)習(xí)越來越火,但是很多領(lǐng)域還是在使用機器學(xué)習(xí),并且學(xué)好機器學(xué)習(xí),對于AI算法基礎(chǔ)和知識廣度都有很大提高。這里可以先給大家羅列一些必備的基礎(chǔ)知識:首先要知道一些基礎(chǔ)的術(shù)語和概念,比如有監(jiān)督與無監(jiān)督,訓(xùn)練集,驗證集與測試集,經(jīng)驗誤差與泛化誤差,方差與偏差,過擬合與欠擬合等,再比如比較重要的一些模型性能度量方法(混淆矩陣,精確率,召回率,auc,roc等), 再比如經(jīng)典的評估方法(留出,交叉驗證,自助等)其次是經(jīng)典的模型。機器學(xué)習(xí)模型非常多,全部掌握不現(xiàn)實,我給大家羅列幾個經(jīng)典,也是面試中常考的模型:邏輯回歸、SVM、樹模型、集成學(xué)習(xí)、樸素貝葉斯、K-Means聚類、PCA。(EM、最大熵、概率圖這些考的少,能了解是加分項)。在學(xué)習(xí)過程中,各個模型是相互聯(lián)系的,不要孤立去分析單個模型。比如:邏輯回歸,我認為是最基礎(chǔ)、也最重要的模型:- 邏輯回歸=線性回歸+sigmoid激活函數(shù),從而將回歸問題轉(zhuǎn)換為分類問題
- 邏輯回歸+矩陣分解,構(gòu)成了推薦算法中常用的FM模型
- 邏輯回歸+softmax,從而將二分類問題轉(zhuǎn)化為多分類問題
- 邏輯回歸還可以看做單層神經(jīng)網(wǎng)絡(luò),相當(dāng)于最簡單的深度學(xué)習(xí)模型
通過邏輯回歸由點及面,就能演化出如此多模型。再比如樹模型。我們把以決策樹為基礎(chǔ)的一系列模型統(tǒng)稱為樹模型,也是AI比賽中最常用的模型。- 決策樹經(jīng)歷了三次改進,ID3、C4.5、CART,主要區(qū)別在于一個根據(jù)信息增益劃分特征、一個根據(jù)信息增益率、一個根據(jù)基尼指數(shù)。
- 隨機森林=決策樹+Bagging集成學(xué)習(xí)
- GBDT=決策樹+AdaBoost集成學(xué)習(xí)
- XGB是陳天奇2014年提出,相當(dāng)于GBDT的工程改進版,在實用性和準確度上有很大提升。比如:使用泰勒二階展開近似損失函數(shù),支持處理缺失值、在特性粒度上并行計算等等特性。
- LGB是微軟2016年提出,對XGB進行了改進,使用單邊梯度采樣算法減少不必要的樣本;在尋找最優(yōu)分割點時采用直方圖算法使計算代價更??;支持類別特征...
- CGB是Yandex2017年提出,對類別特征進行了更完美的支持。
所以學(xué)習(xí)模型,要由點及面,層層遞進。這樣不僅方便理解,也有利于歸納總結(jié),同時還能鍛煉搭建知識體系的能力。關(guān)于上面這些知識,整理一個系列幫助大家由點及面打通這塊知識,文章已寫了五篇,后面會陸續(xù)放出來。實戰(zhàn)我認為最好的實戰(zhàn)方式就是參加AI比賽。這個過程中不僅能與高手同臺競技,如果獲獎還能拿到不菲的獎金(很多比賽獎金都是10萬以上)與榮譽。我之前參加了很多比賽,拿過冠軍和多個top 10。對于我個人能力提升與找工作都有很大幫助。這里推薦三個公眾號:kaggle競賽寶典、Coggle數(shù)據(jù)科學(xué)、第一次打比賽。他們會發(fā)布新比賽的通知與過往比賽的解決方案,非常值得學(xué)習(xí)。再就是書籍:《機器學(xué)習(xí)算法競賽實戰(zhàn)》這本書是Datawhale成員,top級競賽選手魚佬寫的。- 如果是一個機器學(xué)習(xí)小白,那么推薦兩個入門視頻, 吳恩達或者李宏毅的ML視頻(B站上都有),先快速過一遍,了解機器學(xué)習(xí)是什么。
- 如果有了一定的機器學(xué)習(xí)基礎(chǔ),就需要去進階。建議是看書與高質(zhì)量文章。推薦兩本書:周志華的《機器學(xué)習(xí)》、李航的《統(tǒng)計學(xué)習(xí)方法》這兩本書,可以好好先研究一本,注意這里是研究,一本通了,另一本也就差不多。如果發(fā)現(xiàn)看一遍很難看懂,這是正?,F(xiàn)象,隨著后面實踐經(jīng)歷慢慢變多,再看一遍,會有很多新的感悟。再就是公眾號:Datawhale,里面有很多高質(zhì)量文章。
注意:學(xué)習(xí)過程中一定要跟著實戰(zhàn),否則知識很難真正理解。深度學(xué)習(xí)前面也提到了,深度學(xué)習(xí)本屬于機器學(xué)習(xí),但是鑒于其發(fā)展迅速、應(yīng)用越來越廣泛,所以單獨拿出來說。深度學(xué)習(xí)每年新模型、新技術(shù)層出不窮,一味追求新技術(shù)不可取,要先打好基礎(chǔ)。比如:對于一個簡單的全連接神經(jīng)網(wǎng)絡(luò),包含訓(xùn)練算法(正向傳播、反向傳播),激活函數(shù)(sigmoid、ReLU、Maxout、softmax等),正則化(L1和L2、Dropout、提前早停等),優(yōu)化算法(隨機梯度下降、Momentum、Adagrad、Adam等)掌握了基礎(chǔ)后,再根據(jù)自身領(lǐng)域?qū)W習(xí)相關(guān)的模型。大部分人找工作屬于這三個領(lǐng)域:- 計算機視覺(CV):卷積神經(jīng)網(wǎng)絡(luò)(CNN)及其改進。
- 自然語言處理(NLP):循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)及其改進,Transformer、Bert等。
- 推薦算法:Embeding、Wide & Deep及其改進。
實戰(zhàn)熟練使用TensorFlow或pytorch去實現(xiàn)訓(xùn)練模型。通過官網(wǎng)的一些demo就可以快速的掌握一個深度學(xué)習(xí)框架的基本用法,然后在實際的應(yīng)用中再去了解一些框架的高級用法,這個不需要花太多的時間單獨學(xué)習(xí),應(yīng)該邊用邊學(xué)習(xí)。積累模型調(diào)參經(jīng)驗,比如學(xué)習(xí)率,batchsize, 優(yōu)化器對模型的影響,使用tensorboard可視化訓(xùn)練過程的曲線,通過曲線分析訓(xùn)練過程的相關(guān)問題,然后再調(diào)參或者調(diào)解網(wǎng)絡(luò)結(jié)構(gòu),在實踐的過程中要有意識的去總結(jié)一些經(jīng)驗。- 李沐《動手學(xué)深度學(xué)習(xí)》https://zh-v2./
- 邱錫鵬《神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)》https://nndl./
- 吳恩達《深度學(xué)習(xí)》https://www.bilibili.com/video/BV1FT4y1E74V
- 《DeepLearning》,又名「花書」,被譽為深度學(xué)習(xí)領(lǐng)域圣經(jīng)。
- TensorFlow、pytorch官網(wǎng)是最好的參考資料。如果英語不好,那么可以看看下面的資料:
- Pytorch學(xué)習(xí)筆記:https://blog.csdn.net/wuzhongqiang/category_10024538.html
- 《30天吃掉那只TensorFlow2》:https://github.com/lyhue1991/eat_tensorflow2_in_30_days
- 《20天吃掉那只Pytorch》:https://github.com/lyhue1991/eat_pytorch_in_20_days
- PyTorch深度學(xué)習(xí)快速入門教程:https://www.bilibili.com/video/BV1hE411t7RN
數(shù)據(jù)挖掘與分析熟練使用相關(guān)工具包:numpy、pandas、matplotlib(seabron是matplotlib的簡化版)、Scikit-Learn。完成數(shù)據(jù)的可視化、分析以及特征工程。工具包的學(xué)習(xí)建議邊用邊學(xué),可以先看一些中文教程整體了解一下工具包的使用。在具體使用的時候,如果忘記了可以去對應(yīng)工具包的官網(wǎng)查看詳細的文檔。除了熟悉數(shù)據(jù)分析工具以外,其實更需要的是數(shù)據(jù)分析的方法,我覺得最好的學(xué)習(xí)方式就是看開源競賽的方案,因為在開源方案中,作者會寫很多他們分析問題的思路,以及對可視化結(jié)果給出的他們認為的正確觀點。英文教程首推官網(wǎng),中文教程推薦Datawhale的開源項目- numpy中文教程:https://github.com/datawhalechina/powerful-numpy
- pandas中文教程(這份文檔可能比官方文檔還適合學(xué)習(xí)):https://github.com/datawhalechina/joyful-pandas
- https://github.com/datawhalechina/fantastic-matplotlib
- 《Hands-on-Machine-Learning-with-Scikit-Learn》用sklearn工具實現(xiàn)各種機器學(xué)習(xí)模型
大數(shù)據(jù)在實際工業(yè)場景中,我們面臨的都是海量數(shù)據(jù),也就是所謂的大數(shù)據(jù)。再用上面提到的MySQL數(shù)據(jù)庫、numpy、pandas等工具是不行的。這個時候就需要專業(yè)的大數(shù)據(jù)處理工具:Hadoop、Spark生態(tài)。有的同學(xué)想從這些生態(tài)的基本原理學(xué)起, 如果有時間,知其所以然是好的,但往往我們需要兼顧算法和大數(shù)據(jù),時間并不是很充足,所以建議大數(shù)據(jù)這塊可以先掌握到會用的層次,當(dāng)做工具即可。常用的:首先是Hive查詢,也就是用HQL進行一些表數(shù)據(jù)的基礎(chǔ)查詢,這個和SQL有些類似,另外一個,就是sparkSQL以及spark的DataFrame, 這些相關(guān)操作常用來做數(shù)據(jù)分析和處理,處理完畢之后,寫回到Hive表里面。其次,遇到復(fù)雜的處理邏輯,就需要寫原生spark腳本去跑數(shù)據(jù)了。關(guān)于這塊知識,后面也會整理一篇文章。這一塊實操性特別強,所以建議先看視頻,跟著視頻一步步來:- 尚硅谷大數(shù)據(jù)Hadoop 3.x:https://www.bilibili.com/video/BV1Qp4y1n7EN
- 尚硅谷大數(shù)據(jù)Spark教程從入門到精通:https://www.bilibili.com/video/BV11A411L7CK
- 推薦系統(tǒng)算法基礎(chǔ)+綜合項目實戰(zhàn):https://www.bilibili.com/video/BV1qK4y1479r
推薦算法理論知識終于到了核心部分。再次強調(diào)一下,上面的知識不要求全掌握,既不需要,也不現(xiàn)實。如果為了快速入門,掌握機器學(xué)習(xí)、深度學(xué)習(xí)基礎(chǔ)后就可以直接進入這一節(jié)了。在實際的工業(yè)推薦系統(tǒng)中,一般會有四個環(huán)節(jié):我梳理了這四個環(huán)節(jié)中用到的主流技術(shù),整理成了如下導(dǎo)圖:上圖就是整個推薦算法的核心內(nèi)容。這里先放出這個導(dǎo)圖,一是讓大家對推薦算法有個整體框架,二是告訴大家后續(xù)文章的內(nèi)容:打算通過解讀論文的形式,結(jié)合自身在工作中接觸的工業(yè)場景,把里面的模型和知識點一一為大家解讀。這個系列我取名:'熱追'推薦算法。主要包括以下四個部分:召回粗排召回的目的是根據(jù)用戶部分特征,從海量物品庫快速找到小部分用戶感興趣的物品交給精排,重點是強調(diào)快。主要有兩大類召回方式,一類是策略規(guī)則,一類是監(jiān)督模型+embedding。其中策略規(guī)則,往往和業(yè)務(wù)場景是強相關(guān),不同的場景會有不同的召回方式,對于這種'特異性'較強的知識,會放到后期講。目前打算先講解普適的方法,就是模型+embedding。上圖梳理出了目前給用戶和物品打embedding的主流方法, 比如FM系列(FM,FFM等), 用戶行為序列,基于圖和知識圖譜系列,經(jīng)典雙塔系列等。這些方法看似很多很復(fù)雜,其實本質(zhì)上還是給用戶和物品打embedding而已,只不過考慮的角度方式不同。這一塊的內(nèi)容,幾乎每個模型都對應(yīng)著經(jīng)典paper,所以會采用解讀論文的方式給大家分享。在解讀的過程中,對于一些重要模型,會進行代碼復(fù)現(xiàn),并應(yīng)用到一些真實的實踐任務(wù)中。至于粗排,有時候召回環(huán)節(jié)返回的物品數(shù)量還是太多,怕精排速度跟不上,所以可以在召回和精排之間加一個粗排環(huán)節(jié),通過少量用戶和物品特征,簡單模型,來對召回的結(jié)果進行個粗略的排序,在保證一定精準的前提下,進一步減少往后傳送的物品數(shù)量,粗排往往是可選的。因此粗排用到的很多技術(shù)與召回重合,所以先暫且歸并到召回里,等后面把整體的基礎(chǔ)知識都補充完畢了,再看情況要不要展開這塊。精排精排階段使用你能想到的任何特征,可以上你能承受速度極限的復(fù)雜模型,盡可能精準地對物品進行個性化排序,強調(diào)準確性。這一塊關(guān)鍵技術(shù)主要分為三大塊:- CTR預(yù)估:LR、FM家族、自動特征交叉的DNN家族。
- 多任務(wù)學(xué)習(xí)(Multi-Task Learning,也稱為多目標學(xué)習(xí))。多任務(wù)是很常見的,比如視頻推薦中,用戶喜歡、收藏、評論。而不同的任務(wù)可能會互相沖突,互相影響,造成模型學(xué)習(xí)起來十分困難。所以這一塊是重難點,也是很多大公司的研究重點,更是未來的一大發(fā)展趨勢。但好在這里每個模型或者技術(shù)有對應(yīng)paper,所以和召回一樣,這里依然可以利用解讀paper的方式,把這些模型和技術(shù)娓娓道來。
重排考慮到上面的兩塊是核心,這塊沒有詳細的展開整理,并且這塊和業(yè)務(wù)場景策略強相關(guān),很依賴工作經(jīng)驗,目前了解的也不是很多。后續(xù)先解讀幾篇重排模型的經(jīng)典論文,等學(xué)習(xí)了相關(guān)技術(shù),再來不斷完善這塊。冷啟動冷啟動問題是指對于新用戶和新商品,他們沒有歷史交互數(shù)據(jù),無法分析歷史喜好,這個時候我們應(yīng)該如何做推薦。冷啟動技術(shù)會穿插到召回或者重排中,有時也會和上面推薦系統(tǒng)做成并行的兩路,專門應(yīng)對冷啟動場景。- 首先當(dāng)然是后續(xù)自己寫的文章啦哈哈哈。主要是因為搞算法的人學(xué)習(xí)模型都是參考論文,這也是為什么我后面分享這一塊內(nèi)容都是以解讀論文的形式。
- 一定要推薦一本書籍的話,我選王喆的《深度學(xué)習(xí)推薦系統(tǒng)》。這本書高屋建瓴的介紹了推薦系統(tǒng)整體架構(gòu),發(fā)展歷史以及未來趨勢,還有各種推薦模型的演化之路,很適合前期用來當(dāng)做科普。但是具體的模型并沒有深入講解,還是得自己去看論文解讀。
- https://github.com/zhongqiangwu960812/AI-RecommenderSystem
- 我的另一個好友潛心整理,star已過千 https://github.com/ZiyaoGeng/Recommender-System-with-TF2.0
推薦系統(tǒng)實戰(zhàn)項目理論一定要與實踐結(jié)合,否則就是空中樓閣。為此我們打造了一個新聞推薦項目:基于我們之前的開源項目(fun-rec:https://github.com/datawhalechina/fun-rec)做了一個完整升級。實現(xiàn)了從前端、后端、數(shù)據(jù)庫、推薦模型等整個流程。項目規(guī)劃圖如下:階段一- Mysql基礎(chǔ)及python調(diào)用(簡介、安裝、簡單的命令行基礎(chǔ)、python如何調(diào)用mysql數(shù)據(jù)(增刪改查,排序))
- MongoDB基礎(chǔ)及python調(diào)用
- Redis基礎(chǔ)及python調(diào)用
- Vue簡介及基本使用(對于我們做推薦算法的,了解一些前后端交互之類的就夠了)
- 新聞?wù)故荆▋?nèi)容、時間、點贊次數(shù),收藏次數(shù))
- 可以保留用戶的行為(user_id, news_id, action(點贊、收藏、閱讀),time)
階段二有了前端及物料池后,就需要設(shè)計簡單的冷啟動規(guī)則來收集用戶的行為數(shù)據(jù)以及用戶的基本屬性特征。這一部分數(shù)據(jù)可能需要參加開源學(xué)習(xí)的同學(xué)來一起幫忙完善這個數(shù)據(jù)集,這樣數(shù)據(jù)才是有意義的。- 在服務(wù)器上部署數(shù)據(jù)收集的系統(tǒng)(新聞數(shù)據(jù)+用戶行為數(shù)據(jù))
階段三這個階段就是推薦算法大展身手的地方啦。我們可以把上一節(jié)學(xué)到的推薦算法,在這里盡情嘗試,吹拉彈唱任你挑選。
階段四最后就是一些運營類知識,保證系統(tǒng)的高可用性
結(jié)束語本文作為推薦系統(tǒng)的開篇,不僅講解了入門推薦系統(tǒng)所需前置知識、基礎(chǔ)、進階、實戰(zhàn)等全部知識點,還為后續(xù)推薦算法理論知識與實戰(zhàn)項目定下計劃。希望大家多多關(guān)注交流,我會按時更新后續(xù)系列文章。
|