打造工業級推薦系統(九):從零開始入門推薦算法工程師

作者在《推薦算法工程師的成長之道》這篇文章中講到推薦算法工程師是一個好的職業選擇,並且講解了職業發展路徑及定位、怎麼成長等話題(還沒看的可以看起來)。

如果大家認可我講的並且也願意將來從事推薦算法的工作,但是不知道需要學什麼纔可以更好地入門,那麼你一定要讀讀這篇文章。

在本篇文章中,作者基於自己近10年的大數據與推薦系統項目經驗來講講我們該怎麼入門推薦算法工程師,怎樣更容易找一個推薦算法的職位,以及找到相關職位後怎麼更快的融入工作。

希望本文對於畢業後想從事推薦算法的學生以及有工作經驗但是準備轉行推薦算法的讀者提供一些指導。讓大家可以輕鬆應對面試,入職時快速上手。

本文從我自己的學習成長經歷、如何判斷自己是否適合從事推薦算法、推薦算法工程師需要的知識儲備、怎麼找一份合適的推薦算法工作、怎麼可以更快的適應工作5個部分來講解。

在作者正式介紹怎麼入門推薦算法工程師時,先講講自己入門推薦算法工程師的經歷,可以給大家一些啓發和思考。

Part 1 作者從零開始學習推薦系統的心路歷程

作者算是從零開始學習推薦系統的。2010年到2011年之間在一家公司做了一年算法工程師,其中有大半年研究了Netflix Prize相關的推薦算法(2006年Netflix公司發起了一次推薦算法競賽,希望參賽團隊可以將Netflix的推薦預測算法的RMSE提升10%,第一個做到的團隊將獲得100w美元大獎,最終這個獎在3年後的2009年被三個團隊的混合算法拿到了),當時用matlab的分佈式計算實現了幾個推薦算法。算是對推薦系統的初步入門。

然後2012年9月份加入現在的公司,從零開始搭建大數據平臺和推薦系統,一直到現在。雖然之前做過半年的推薦算法研究,但是作者當時對Java編程是零基礎,也從未學習過大數據相關技術,對機器學習也不太瞭解,所有這些都需要從零開始學習。當時公司沒有一個人懂大數據與推薦系統,學習難度可想而知。

好在作者學的是數學專業,自認爲數學學得不錯,自學能力強。經過自己多年的努力學習和實踐,看過大量相關的書和材料,參加過很多線下的分享,通過無數次的掉坑與填坑,邊學習、邊實踐、邊總結,最終對大數據與推薦系統有了比較全面深入的瞭解。

我自己的整個學習過程是比較曲折的,寫作本文及這一系列公衆號文章的目的也是想通過自己的經驗幫助更多有志於從事推薦系統的讀者可以少走彎路,儘快成長起來。

經過近10年的學習成長,我發現自己還是非常喜歡這個職業的,並且自認爲做得還可以。那麼是不是推薦算法就沒有門檻,所有人都適合從事推薦算法呢?其實是不一定的,要想在這個方向上做得好,是有一定前提條件的。

Part 2 如何判斷自己是否適合從事推薦算法

推薦算法工程師對數學、機器學習、編程等技能都有一定的要求,在這些方面是需要有一定基礎的。如果想做好推薦算法,還是有一定難度的。如果你這些方面基礎還不錯,並且對推薦算法也非常感興趣,那麼你將推薦算法作爲自己的職業是比較好的選擇。

但是如果你不具備上面這些基礎(比如數學基礎太差、非常討厭數學等),但是覺得推薦算法工資高,現在是人工智能時代,推薦算法職位很火,完全憑工資和追熱點去選擇推薦算法,那麼你很難在這個職位上做的好。

作者強烈建議數學基礎需要足夠好才更適合做推薦系統,否則很難在這個領域做到足夠深,後面肯定會遇到瓶頸的。如果數學基礎太差或者非常不喜歡數學,就不要選擇推薦算法作爲自己的終生職業了。

推薦系統是一門實用的綜合性學科,構建一套完善的、對業務產生價值的推薦系統需要了解很多知識、掌握大量相關技術,並且需要不斷思考、不斷總結,結合產品的發展和用戶的訴求,逐步完善,好的推薦系統不是一天建成的,是一個持續優化和迭代的過程。下面對構建推薦系統需要的知識儲備做一個比較全面的說明,方便立志從事推薦系統研發並將推薦系統作爲自己事業的讀者有一個大致瞭解,初步指明學習的方向。

Part 3 推薦系統推薦算法工程師需要的知識儲備

下面圖1是一種可行的推薦系統業務流圖,用戶通過終端(如手機)訪問推薦業務,終端調用推薦系統web服務接口(可能會用CDN加速,同時通過Nginx等web服務做反向代理),推薦接口從推薦結果庫中將用戶的推薦結果取出來,組裝成合適的數據格式再返回用戶。從另外一側,用戶在終端上的行爲會通過日誌收集系統收集到大數據平臺,通過ETL處理進入數據倉庫,我們構建推薦算法模型爲用戶生成推薦結果,將推薦結果通過kafka管道存入推薦庫中。

我會結合該圖來說明學習推薦系統需要用到哪些技術,需要學習哪些相關知識點。當然,你去一個公司做推薦算法並非一定會接觸到下圖的所有方面(如果是創業公司,很有可能都會接觸,因爲創業公司沒有這麼多資源招聘各個模塊的人,一般一個人要頂幾個人,所以覆蓋的面也會更廣,在大公司可能只會接觸其中某一個小點)。但是如果你對所有模塊有更好的認識和了解,對幫助你形成推薦系統全局認識是大有裨益的。

圖1:推薦系統的業務流

我們可以將上圖中涉及到的知識點分爲基本技能、核心技能、補充技能三大塊。推薦算法工程師一般也分爲偏算法類與偏工程類,偏算法類主要是根據產品特性、已有的數據資源設計一個高效可行的算法,也可能會涉及到實現相關算法,而偏工程類主要是推薦算法相關模塊編碼及推薦支撐模塊開發等。

偏算法類的工程師需要數學基礎好,機器學習理論紮實,最好有相關學術經驗。偏工程類的需要編程能力強,熟悉軟件架構設計、向對象思想、設計模式等,最好有開發較大工程項目的經驗。

推薦算法工程師的核心技能主要是機器學習相關技術、推薦算法理論、推薦算法工程實現等。數學知識、編程知識、數據結構與算法、數據庫、大數據相關知識、英文閱讀能力等是基礎技能。而產品UI交互、網絡協議、web服務、CDN、數據交互協議等屬於補充技能。

入門推薦算法工程師,基礎技能和核心技能是需要學習的,如算法基礎、機器學習相關技術、推薦系統相關常用算法是需要掌握的。但是爲了完整性,我將推薦系統涉及到的所有知識點都羅列出來了,其他非必須掌握的知識點讀者可以分階段選擇性學習。

下面我們對推薦系統涉及到的技術和知識點做一個較全面的整理說明,作爲大家學習的參考指南。你可以根據剛剛提到的基本技能、核心技能、補充技能等選擇性學習。

01 數學基礎

數學是一切自然科學的基礎,任何自然科學(甚至人文科學)的發展離不開數學的貢獻,甚至有人說過一個學科發展的成熟程度與它使用數學知識的深度正相關。

要想學好推薦算法,是需要具備一定數學基礎的,具體需要對如下幾個領域的數學知識有所瞭解。

我認爲只要學好大學的高等數學、線性代數、概率與統計這三門課就足夠了,是完全可以應付推薦系統需要的數學儲備的。

離散數學作爲計算機系的必修課程,對理解計算機體系結構、更好地理解很多機器學習算法是非常有幫助的。如果你想在推薦上有更深的造詣是需要學習瞭解的,初學者前期可以不必花很多時間在這門課上。

a.高等數學

微積分是整個高等數學的核心,現代科技的發展得益於微積分的發明,它讓整個高等數學知識在工程科技領域得到非常廣泛的運用,大大促進了自然科學和工程學科的發展壯大。機器學習是計算機與數學的交叉學科,當然也離不開高等數學。

推薦模型(甚至絕大多數機器學習算法模型)其實最終可以歸結爲一個最優化問題。簡單來說,最優化問題就是求函數極值的問題,需要利用各種數學技術來求解模型的最優參數,常用的有極大似然估計,梯度下降算法等。

深度學習的激活函數、機器學習模型的目標函數的性質我們需要了解,需要計算梯度來逐步迭代求解最優解,這些都涉及到微積分相關知識。

另外,關於算法的時間空間複雜度(比如歸併排序的時間複雜度是O(nlogn))等都需要用高等數學無窮小的形式來描述。

我們需要掌握的高等數學知識主要有初等函數的基本性質、極限、積分、微分、求極值、無窮小量等。

b 線性代數

矩陣運算是非常簡潔高效的一種數學運算。如果用矩陣來描述線性方程組是非常簡單的(Ax=b,A是係數矩陣,b是數值向量,x是未知向量),有很多機器學習算法都利用了矩陣相關知識,如奇異值分解、降維方法等。矩陣運算非常適合在GPU等現代芯片架構上做並行處理。

推薦系統中比較出名的利用矩陣運算的算法是矩陣分解算法,深度學習中從一層到下一層的信息傳遞本質上就是矩陣乘法。計算相似度的餘弦相似計算也需要利用向量的內積運算。

我們需要掌握基、矩陣及向量相關運算、解線性方程、正交性、特徵值、特徵向量等基本知識點。

c 概率統計

用於模型訓練的樣本可以看成是從滿足某個概率分佈中的一次抽樣,基於該觀點,任何一個推薦算法可以看成是一個概率估計問題。很多機器學習問題可以採用概率的思想來解釋,最後通過極大似然估計相關參數。

很多推薦算法可以利用概率的思想來建模,推薦系統的navie bayes方法就是一種簡單的利用概率方法來做推薦的算法。我們也可以將推薦系統看成是二分類問題,可以將用戶是否喜歡某個標的物看成一個概率,概率值的大小代表用戶喜歡的程度,從而可以用logistic迴歸來做推薦。貝葉斯估計也是常用的概率估計方法,在推薦系統中得到了大量的使用,比如主題模型。

我們需要掌握什麼是概率、概率的計算、頻率與概率的關係、常用分佈、貝葉斯公式、極大似然估計、先驗估計、概率密度函數、均值、方差、樣本、抽樣、置信度、置信區間等相關概率統計知識。

d 離散數學

學計算機專業的同學本科時必學的一門課程是離散數學,包括的內容有集合論、圖論、代數結構、組合數學、數理邏輯等部分。

計算機運算本質上就是布爾代數,通過二進制數來解決所有計算問題。深度學習的神經網絡模型其實就是一種有向圖的結構,像滴滴打車爲司機尋找最短路徑到達目的地其實是圖的最短路徑問題。機器學習的維度災難就是一種組合爆炸。

對於這部分的理解有助於大家更好的理解計算機體系結構及相關算法原理。

02 機器學習

推薦系統是機器學習的一個分支,主要是解決爲海量用戶推薦標的物的問題,可以將推薦系統看成是一個監督學習問題。機器學習中的各種算法都可以用於推薦系統中,比如迴歸、聚類、奇異值分解、深度學習、強化學習、遷移學習等。

對傳統機器學習算法有深入的瞭解和掌握,對學好推薦系統,對推薦系統算法的深刻理解非常有幫助。常用的聚類、分類、迴歸、集成學習需要有較好的掌握。

另外,對於機器學習的一些基本概念和相關知識點,如訓練集、測試集、驗證集、模型訓練、模型推斷、特徵工程、模型效果評估等要有所瞭解和掌握。這些是構建推薦算法模型過程中一定會涉及到的概念和知識點。

03 推薦系統

既然是入門推薦算法工程師,當然需要對推薦算法有所瞭解了。首先,需要知道推薦系統是一種解決信息過載的技術手段,知道在什麼場景下需要推薦算法、什麼場景不需要推薦算法、推薦算法會面臨哪些挑戰、推薦算法在工業界的應用場景等。

推薦系統常用的算法有基於內容的推薦和協同過濾推薦(包括基於用戶的協同過濾和基於物品的協同過濾)。對這兩類算法要有比較好的理解,能夠說清楚算法原理,能夠大致推導這些算法的實現方案。同時,也需要知道怎麼評估推薦算法的好壞,有哪些衡量推薦算法質量的指標,這些指標是怎麼計算的,怎麼解決推薦系統冷啓動問題等。

最好可以基於一些開源的數據集,採用第三方開源機器學習框架,自己能夠獨立實現這些算法,這樣你會理解比較深刻。

04 編程能力

推薦算法工程師除了設計算法外,可能需要將算法付諸實踐,自己實現算法,即使是利用現有的算法框架做推薦,在處理數據、模型訓練、模型推斷等階段也需要動手編程。所以,推薦算法工程師一定需要有一定的編程基礎。

在工業界最常用的編程語言是Java語言,Java有非常成熟的生態系統,並且推薦系統前期數據處理是需要依賴大數據技術的,而大數據技術基本是基於Java(或者基於JVM的Scala語言)生態系統的。所以掌握Java/Scala開發是可以幫助你快速熟悉掌握各類大數據開源技術的。

隨着深度學習驅動的第三次人工智能浪潮的到來,出現了越來越多的深度學習框架,如Tensorflow、Pytorch、MxNet等等,這些框架基本是採用python語言來跟用戶交互的(底層是用C++寫的),間接促使Python語言火爆起來。Python作爲一個較古老的編程語言,生態相對豐富,易於學習,並且Python有非常成熟的數據處理分析庫及流行的機器學習框架scikit-learn。

作爲推薦算法工程師,熟悉Java/Scala、Python兩類編程語言基本就夠了。

05 數據結構與算法

上面一節提到了做推薦算法需要掌握編程技能,任何類型的編程都或多或少會涉及到一些數據結構與算法。我們需要了解常用的數據結構,比如集合、列表、哈希、鏈表等。常用的排序算法等肯定是需要掌握的。同時要對算法的時間複雜度和空間複雜度要有一定的瞭解。布隆過濾器,壓縮算法,加密算法等更高深的算法也需要有所瞭解,知道他們可以解決哪些問題,在需要的時候可以通過搜索相關材料快速學習。

06 工程技能

推薦算法的實現也需要考慮很多工程問題,數據處理平臺採用什麼,用什麼編程語言,推薦結果存儲在哪裏,推薦結果怎麼給到用戶,這些問題都需要很好的工程實現。

隨着用戶規模的擴大,數據量越來越大,處理數據和訓練推薦模型花的時間越來越長,怎麼有效的處理大規模數據和併發計算是擺在大家面前的棘手問題。

用戶訪問推薦頁面是否有延遲,是否會開天窗,怎麼應對開天窗,怎麼縮短訪問時長,怎麼提升推薦服務的併發能力,這些問題都需要結合工程的知識和行業經驗來改善和優化。

怎麼設計一套高效的推薦算法組件,讓整個團隊開發效率更高,更容易將推薦算法落地到實際產品中,怎麼在算法精準度、效率、計算複雜度上做平衡是一種工程實現的哲學。

總之,你需要有足夠多的工程實踐經驗,纔可以設計一套高效易用的、有業務價值的推薦算法體系。

07 大數據相關開源技術

推薦系統是一個系統性工程,從上面圖1可以知道,要搭建一個穩定有效的推薦系統還是相當複雜的,涉及到很多知識。toC互聯網產品是構建在規模用戶基礎上的生意,好的toC互聯網產品一定是服務於大量用戶的,大量用戶的行爲會產生海量數據,這時大數據相關技術就有了用武之地。

幸好隨着互聯網和信息技術的發展,隨着開源技術的流行和開源社區的壯大,出現了很多優秀的開源框架,如Hadoop、Spark、Flink、Tensorflow、Pytorch等,這些框架是我們構建工業級推薦系統的基石,下面我對推薦系統需要用到的一些開源技術做一些簡單介紹,方便大家瞭解熟悉,基於這些開源技術是非常容易構建一套推薦系統的。

a 數據收集系統

構建推薦算法模型需要依賴用戶行爲數據等各類數據,而這些數據來源於用戶在客戶端的操作,所以我們需要將這些操作日誌“運輸”到數據中心,這個過程就是數據收集。

大數據生態系統中常用的收集轉運數據的組件有flume、kafka等。當我們將所有需要的數據收集到數據中心存下來後就可以進行處理、訓練、構建推薦算法模型了。

b 數據存儲系統

通過上面收集到的數據後,我們需要將數據存下來。由於互聯網公司數據量很大,單臺服務器一般存不下,這時就需要利用分佈式數據存儲技術,因此Hadoop的HDFS分佈式文件系統就派上用場了。HDFS可以橫向擴容,具備數據讀取等常用文件操作,並且每個數據塊可以保留多份副本,即使一臺服務器壞了也不會丟失數據,安全可靠性極高。

在做數據分析時,我們需要更好的存儲、獲取、處理數據,我們一般將數據採用Parquet的數據格式存儲,Parquet是基於Hadoop生態之上的一種列式數據存儲格式,不管採用Hadoop生態上的什麼分析組件,不管什麼數據模型及編程語言,Parquet格式都可以輕鬆應對。Parquet對數據有比較好的壓縮,可以極大減少存儲資源的消耗。

另外,隨着公司數據的增大,業務規模的擴大,我們會從更多的維度對數據進行分析處理,這時就有必要構建一套完善的數據倉庫了,大數據社區構建數倉的組件主要有Hive和HBase。Hive是基於關係型數據庫查詢語言SQL的結構化數據存儲組件,Hive採用表的形式存儲結構化數據,利用SQL查詢,非常適合批處理的數據分析形式。如果你需要對數據進行實時的分析處理,可以將數據存到HBase上,它是一種列式數據存儲組件。

c 數據分析系統

隨着Google在2003發表了3篇劃時代意思的論文(見參考文獻1,2,3),大數據逐步從萌芽到繁榮壯大,這其中最重要的大數據技術當屬2006年啓動的Hadoop工程,Hadoop包含HDFS和MapReduce兩個組件,HDFS用於存儲海量數據,可以利用廉價的服務器構建分佈式集羣,方便存儲大量數據,並且數據有很好的容錯性。而MapReduce是一個基於HDFS之上的數據分析組件。經常十幾年的發展,圍繞Hadoop形成了一套完善的大數據生態系統,正式Hadoop生態系統引爆了大數據浪潮。

後續陸續出現的Spark、Flink等基於Hadoop之上的數據分析軟件,拓展了大數據分析的能力,這些軟件的發展也壯大了整個大數據生態系統。Spark、Flink上有非常多的算子操作,同時也有相關機器學習庫(Spark的mllib機器學習庫包括ALS推薦算法),這些算法和庫方便我們構建各種推薦模型。

08 其他支撐技術

除了上面提到的技能點外,我們還需要對下面的一些知識有所瞭解。這些技能點有些是構建完備的推薦系統必不可少的部分,有些是支撐推薦系統服務更好運轉的基礎能力。

a 數據庫

在推薦系統架構中,需要將爲用戶生成的推薦結果存入數據庫中,方便web服務提取推薦結果返回給用戶,而業界主要有關係型數據庫和NoSQL數據庫兩大類。

關係型數據庫是最早被大量使用的數據庫,在整個互聯網發展史上佔有非常重要的地位,大量用於各類公司作爲最核心的數據存儲(如交易數據、用戶註冊信息等)。關係型數據庫最大的特點是採用行列的形式存儲數據,類似二維的電子表格,現實生活中非常多的數據都可以抽象爲這種表格的形式。從這些表格數據中操作數據(增刪改查)採用SQL語言,它簡單易學,非常高效。目前比較火的開源關係型數據庫有MySQL和ProgreSQL等。

推薦系統雖然不直接利用關係型數據庫作爲最終推薦結果的存儲,但是推薦的標的物相關的信息、用戶相關的信息等基本會存放在關係型數據庫中,推薦算法工程師至少需要了解熟悉一種關係型數據庫,並且需要熟練使用SQL語言。

推薦系統每天(甚至是每分鐘或者每秒)需要爲每個用戶計算推薦結果,如果用戶量大的話,將這些推薦結果插入數據庫是一個非常頻繁的讀寫操作,採用關係型數據庫是非常不合適的,這時

NoSQL就派上用場了。NoSQL採用key-value的形式存儲數據,是非常適合用於存儲用戶的推薦結果的,key就是用戶的id,value就是爲用戶的推薦結果。非常流行的NoSQL如CouchBase, Redis等都適合做推薦的結果存儲,他們讀寫都是非常高效的,並且可以橫向擴容。我們公司的推薦結果存儲就是採用的這兩個NoSQL數據庫。

b 操作系統

除了微軟體系外,整個互聯網行業的基礎架構基本是構建在Linux操作系統之上的,推薦系統的任務調度、任務監控等都是部署在linux服務器上,所以作爲推薦算法工程師是需要熟悉linux操作系統的。常用的磁盤、內存、核、進程、網絡、文件目錄結構、基礎命令等常用操作是必須熟練掌握的。

c 網絡

推薦系統的結果需要存到數據庫,用戶訪問推薦服務時需要從數據庫中將推薦結果取出來,這個過程中都會涉及到數據在網絡上的傳輸,因此需要對網絡延遲、網絡傳輸等過程有所瞭解。同時數據傳輸遵守網絡協議,我們需要對http、https、tcp等網絡協議有所瞭解。爲了加速用戶獲取推薦結果,讓用戶體驗更好,一般互聯網公司都會通過CDN來加速用戶查詢過程,對CDN技術也需要有所瞭解。

d 互聯網上常用的數據交互協議

像 json,xml,protobuf,Avro等常用的數據交互和序列化協議需要大家熟悉。特別是json,可讀性強,很多互聯網公司採用json格式來作爲數據交互的協議,大量用於數據接口中。

e Web服務

從上面圖1可以知道,用戶獲取推薦數據,需要通過web服務模塊,該模塊的作用是通過從推薦結果數據庫中將用戶的推薦結果取出來,組裝成合適的格式返回給用戶。

常用的web服務組件有基於java語言的Tomcat,基於go語言的gin、Beego,以及基於python語言的Flask等等。如果你的工作中涉及到爲推薦業務開發接口,就需要對這塊熟悉,否則只要知道即可。

f AB測試與指標體系

前面講過推薦算法是一個逐步迭代優化的過程,我們需要根據公司業務場景構建一套完善的指標體系,搭建一套好用的AB測試平臺來評估推薦算法的好壞及對業務的價值,通過不斷優化迭代,讓推薦算法朝着驅動公司業務發展的方向前進。

作爲一個推薦算法工程師,在平時工作中是會經常接觸到這兩塊的,因此是有義務也是有必要對這兩塊知識點有所瞭解的。由於這兩塊比較偏業務,初學者提前知道就可以了,未來在需要的時候希望可以針對性地學習。

09 實踐(項目)經驗

在你準備找一個推薦算法工作時,如果你有推薦或者機器學習相關項目經驗,簡歷是更容易被選中,有更多面試機會的。我建議可以參加一些推薦或者機器學習的競賽,比如阿里的天池競賽。通過競賽可以提前接觸工業級的數據,提前熟悉整個算法的流程,對個人學習成長是非常有幫助的。

當然,如果你還沒有畢業,在實驗室做過相關項目,或者找一份相關的實習鍛鍊一下,對找到相關的職位也是非常有幫助的。有相關的項目經驗,也會讓你在入職時更容易上手。

10 產品與交互

產品是推薦系統價值呈現的載體。用戶通過使用產品中推薦模塊,獲得推薦結果。所以推薦系統怎麼和用戶交互,操作是否便捷流暢,這些因素都會影響推薦系統的最終效果。往往好的UI及交互方式產生的價值比好的算法還大。

推薦算法工程師對UI展示與交互邏輯需要有一定的瞭解,雖然不必對這塊瞭解太深入,知道一些基本的交互和展示邏輯有助於更好的理解推薦業務,並通過適當的算法邏輯來滿足特定的UI交互。

11 英文文獻閱讀能力

目前關於推薦系統、機器學習等計算機相關書本及學習資料,比較好的還是國外的。遇到複雜的問題,自己搞不定,也需要去google上搜索解決方案的。好的開源項目也基本是國外的,參考學習材料都是英文的。平時學習參考相關專業論文,也基本是英文的。因此爲了讓自己的能力得到更大的提升,需要具備讀懂英文原版材料或者書籍的能力。

英文看起來比較難的就是一些專業的詞彙,我建議可以嘗試先看英文的,遇到不懂的單詞查查,當你看完弄懂3本以上的英文參考書時,基本就具備閱讀計算機行業英文文獻的能力了。

至此,推薦算法工程師需要的知識儲備基本講完了,我們在下表中對相關知識點及比較好的學習資源做了一個歸類整理,方便大家參考。



表1:推薦系統需要具備的知識點彙總

Part 4 怎麼找一份合適的推薦算法工程師的工作

如果你已經對上面介紹的技能有比較好的瞭解和掌握了,就可以嘗試找一份推薦算法工程師的工作了。下面這些點是你在找工作之前及找工作過程中必須要思考關注的。

01 自己的訴求是什麼

如果你剛畢業想找一份推薦算法工程師的工作,我覺得你一定要將是否能夠學習成長作爲自己最重要的訴求,不要太在乎短期薪資,成長性比薪資更重要。我知道很多同學之間是會比較offer的,如果別人成績比你差但是找到的工作薪資比你高,你肯定會有一些不爽的,但是最好還是不要放在心上,不要跟別人做比較。人生是一場長跑,不要太在乎短期的利益,成長性比短期薪資更重要,一定要有這種意識。當你努力幾年後有了真正的成長,往往薪資是有一個非常大的跳躍式增長的。

如果你你已經工作了好幾年,是中途轉推薦算法工程師,也要有一定的心裏預期,可能給你的工資會比原來工資低。如果你能力足夠強,在努力工作兩三年後,工資一定會大幅反彈的。如果你一定要找推薦算法工程師並且還要薪資比原來高,我敢肯定你不容易找到。從用人單位的角度考慮,你工作了幾年工資相對高,之前也沒做過推薦算法,憑什麼要你啊,還不如招聘一個剛畢業的大學生呢。

02 找什麼公司什麼行業

推薦算法工程師一般是互聯網行業纔會有的職位,或者傳統行業的子公司及創新部門也會有相關的職位招聘。所以如果找推薦算法工程師,基本需要在互聯網行業找,下面給出了主流的互聯網行業類別及有代表性的公司,方便大家選擇參考。

互聯網公司種類很多,具體有如下幾大主流類別:

電商類(如阿里,京東,拼多多等),搜索類(如百度、搜狗等),社交類(如微信、脈脈等),視頻類(愛奇藝,騰訊視頻等),廣告類(阿里媽媽、騰訊廣點通等),互聯網金融類(陸金所,螞蟻金服等),生活服務類(攜程、美團、滴滴等),娛樂休閒類(遊戲公司、網易雲音樂等),新聞短視頻類(頭條、快手等),知識社區類(如知乎,豆瓣等),互聯網醫療(如平安好醫生、丁香園等),雲計算(阿里雲,七牛,Ucloud等),互聯網教育(vipkids,英語流利說等),大數據與AI類(科大訊飛,出門問問,第四範式,face++等),招聘類(51job,boss直聘等),硬件類(地平線,小米等)等等。

大家可以結合自己的專業背景及偏好選擇,我個人比較看好雲計算、互聯網教育、大數據與AI類垂直創業公司,未來成長空間大。

另外,關於是選擇大公司還是小公司的問題,相信很多讀者都在其他地方看到過對這個問題的解讀,大公司做螺絲釘,但是文化制度相對健全,小公司接觸面廣,可以承擔更大的責任,但是流程制度比較缺失。如果是大公司的核心部門肯定去大公司好,可以接觸到的技術更先進,往往資源也比較多,去大公司的邊緣部門個人覺得沒啥意思。如果選擇小公司,一定要選擇成長型的創業公司,在面試時多跟公司創始人溝通交流,對該公司的行業及創始人的性格特點有較深入的瞭解。理想比較遠大,格局大,有想法的創始人更容易成功。該公司從事的行業也必須是與大衆生活息息相關(衣食住行等)的必須產業,不能太小衆,否則成長性不大。

03 怎麼寫簡歷投簡歷

我見過很多候選人,簡歷寫得毫無特色。寫簡歷一定要突出自己的優勢和核心技能及相關項目經驗。這塊需要寫在比較靠前的地方,並且需要寫的非常清晰細緻。如果自己核心技能比較缺,可以多學習,特別是項目經驗,很多公司是很看重的,如果沒有可以提前找一個相關的實習職位實習一段時間或者參加一些競賽。

對於應屆畢業生,簡歷可以按照“基本信息,學校專業,所獲獎勵,核心技能,項目經驗,個性特長”的順序寫簡歷(學校較好的,可以將學校專業放到前面,學校很一般可以將學校專業放到項目經驗之後),對於已經工作的可以按照“基本信息,核心技能,項目經驗,學校專業,個性特長”的順序來寫簡歷。之所以按照這個順序,是因爲,對於應屆生,用人單位往往比較看重學校專業,而對於已經工作過的候選人,用人單位更在乎的是你的核心技能和項目經驗。這裏再提一下,這些只是一些寫簡歷的技巧,簡歷寫得好雖然可以增加你面試的概率,但是能不能面試得上,還是要靠自己真本事的。

另外,真誠是做人的第一準則,簡歷需要保證真實,不要寫一些假的項目或者經歷。如果簡歷都僞造,那公司怎麼相信你,公司如果知道了,即使入職了,被辭退的可能性也是非常大的。

簡歷投放的渠道有很多,校園招聘,招聘網站,內推等等,拉勾網、boss直聘、51job等是比較出名的網站。

確定了自己喜歡什麼行業什麼類型的公司了,就比較好投簡歷了。具體投哪家公司時,需要仔細看jd(工作描述),瞭解清楚用人單位的需求點是否跟自己匹配,如果有一些能夠匹配上,我覺得就可以投了,完全匹配的上是不可能的。如果一點都不匹配我建議不要投,這是浪費大家時間。我也不建議海投簡歷,海投是對自己和用人單位的不負責。

04 怎麼面試

簡歷準備好後,需要對自己簡歷上的內容非常熟悉,特別是簡歷的中提到的知識點,需要瞭然於心,包括相關的概念,算法,項目等。對於算法,需要了解基本原理,並且最好可以推導相關公式和算法。對於項目的實現方案,優缺點,項目中自己負責哪塊,是怎麼做的,是否遇到了困難,怎麼解決的,最終效果,是否有優化的方案等等都需要知道。

面試前最好自己提前排練幾次,可以讓關係好的朋友當面試官,將排練過程錄下來,讓朋友多提建議,反覆琢磨,回答問題的時間節奏,語氣,語速,邏輯性等需要控制好。

另外,好好琢磨一下自我介紹,基本所有的面試官都會讓你介紹一下自己的,自我介紹要突出自己的優勢特長,簡潔幹練,不要拖泥帶水,最好控制在3-5分鐘之間。很多面試官喜歡問你的優缺點,優點大家可以講一堆,但是缺點,很多人想了很久都答不上來。

有一個理論是說如果你在前幾分鐘沒有給別人留下好的印象,那麼你基本就沒有機會了,營銷學有一個很有名的電梯測驗,說的是在乘電梯的30秒內清晰準確地向客戶解釋清楚解決方案,這也說明了在短時間內給別人留下印象的重要性。

從面試官的角度來說,希望候選人溝通能力較強,在自我介紹階段能夠抓住重點,突出自己的能力特長,給面試官留下好印象。

現場面試時 ,儘量提前規劃好路線,預估時間,儘量提前15分鐘到場,最好不要遲到。衣着得體,禮貌溝通。在面試交談過程中,學會聆聽,不要搶話,理解清楚再作答。在面試過程中思路要開闊,應變能力強,對於任何問題,即使自己不太會,也要給出自己的理解和思考。

面試完成後,可以主動詢問面試結果,有很多公司流程很長,還有絕大部分公司覺得你不合適就不給反饋的。自己主動了解會更好一些,自己掌控節奏。

面試過程可能會遇到挫折,面試不上,不要泄氣,多總結反思,針對自己不足的點,補充學習。一定要保持良好的心態,持續努力,一定會有收穫的。

05 可能遇到的坑

前年李文星遇害案,充分說明了招聘網站上,有很多不法分子利用漏洞來做壞事,所以在去一個不是很知名的公司面試時需要查一下這個公司的背景,對公司的合法性做驗證,看是否有負面新聞,一來保證自己的安全,二來可以側面瞭解這個公司的情況,比如融資情況,股東情況,專利情況等等。這類可以查詢企業情況的APP有“企查查”和“天眼查”,百度和知乎上也可以提前搜索瞭解。

另外,一個可能遇到的坑是公司不按照法律的規定繳納社保、五險一金等,不過由於今年稅制改革這種情況會好些,大家最好選擇規範合法的公司。

還有,公司可能承若給你的職位,真正入職時卻分配的是另外一個職位,這種情況確實無法完全避免。不過入職前需要跟面試官確認一下工作內容,以及目前團隊情況,負責哪些業務,還需要在各種渠道瞭解一下這個部門相關的情況。做一個比較細緻的瞭解,可以幫助你判斷降低這種事情出現的概率。

Part 5 怎麼更快地適應工作

當你通過自己努力找到了一份還算不錯的推薦算法工程師的工作後,就需要儘快熟悉業務,讓自己儘快上手。下面提供一些參考點幫助你更快的適應工作。

平時除了自己自學,完成領導佈置的任務外,遇到實在不懂的問題需要多向同事請教,不要什麼問題都不問,也不要過度依賴別人,在自己解決問題和問別人之間做好平衡。自己搞不定的問題,可以多百度,Google,知乎等搜索解決方案,需要有自己獨立思考獨立解決問題的能力。公司的wiki等文檔系統可以多看看,從中瞭解公司的業務。另外,相關的源代碼自己下去多讀讀,多學習。

平時跟同事保持良好的溝通交流,自己主動點,跟同事一起吃飯,一起聊天,儘快融入氛圍,切記一個人搞自己的,這樣很容易被孤立。

平時多做事,主動問一個組的同事,是否有事情需要幫忙,剛入職時,自己辛苦一下,多承擔一些,可以更多的獲得同事的信任。

養成良好的編碼習慣,多註釋,多總結,利用空餘時間多學習與工作相關的技能,比如你只做推薦模型的特徵提取這塊,需要多學習這方面的技術,在網上搜集其他公司是怎麼做的,學術上是怎麼做的,保持對這塊的持續關注和學習。

認真對待領導交給你的每一件事,不光將每件事做完,更應該做好,做到極致,通過一段時間的磨礪,你的能力一定會得到提升,做出成果了也會受到領導的認可,從而更容易轉正,更容易得到重用。

除了認真完成領導交代的工作,學習相關專業技能外,還需要在工作中有意培養自己的軟實力,比較重要的軟實力有:溝通協調能力、長遠規劃能力、目標導向、是否能夠把握問題的重點、自制力、執行力等等。在剛工作時可能不覺得這些軟實力重要,但是當你工作越久、職位越高,這些能力會越重要,甚至起到決定性的作用。

當你能夠完全應付工作時,走上正軌後,除了在自己做的這塊逐漸深入學習瞭解,同時需要對整個推薦業務流(即上面圖1涉及到的各個方面)做學習瞭解,形成自己整體的認知能力。剩下的時間就是你跟着公司業務發展一起成長了,你可以參考我寫的另外一篇《推薦算法工程師的成長之道》瞭解該怎麼學習成長。

Part 6 寫在最後

至此,作者結合自己的親身經歷及思考寫完了怎麼入門推薦算法工程師,希望這份指南可以幫助你更好地入門,幫助你做好準備,找到一份推薦算法工程師的工作並且快速融入工作中。

參考文獻

1.《The Google File System》

2.《MapReduce: Simplified Data Processing on Large Clusters》

3.《Bigtable: A Distributed Storage System for Structured Data》

相關文章
打造工業級推薦系統(一):推薦算法工程師的成長之道
打造工業級推薦系統(二):無處不在的推薦系統
打造工業級推薦系統(三):推薦系統的工程實現與架構優化
打造工業級推薦系統(四):推薦系統怎麼更好的幫助公司掙錢?
打造工業級推薦系統(五):推薦系統冷啓動全解析
打造工業級推薦系統(六):構建優質的推薦系統服務
打造工業級推薦系統(七):怎麼評估推薦系統的效果?
打造工業級推薦系統(八):AB 測試平臺的工程實現

作者介紹:gongyouliu,有近 10 年大數據與 ai 相關項目經驗,有 9 年推薦系統研究及實踐經驗,目前負責電視貓大數據與人工智能團隊。喜歡讀書,暴走,寫作。業餘維護“大數據與人工智能”公衆號,ID:ai-big-data,持續輸出推薦系統相關文章。個人微信:liuq4360

原文鏈接
https://mp.weixin.qq.com/s/lhP4B6jA0CQpjT1PdlYmQw

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章