我的狀況確實特殊,所以也寫的比較長,比較雜。整文沒有提供任何可參考的技術知識問題,都是記錄了。
適合人群:還沒有或者剛開始入門機器學習的新同學;正在轉行路上準備求職的NLPer。
我是211本科,本科專業是會計,和IT基本不搭邊的專業,雖然看起來是文科專業,但還好我是理科生。
由於自己內心對於技術的熱愛,所以從畢業以來(7年了)一直嘗試尋找機會去逐步轉行,最終要轉到哪裡不知道,總之不斷學習自己感興趣的前沿技術。
我是從2017年底開始準備學習機器學習的,當時我的崗位是ERP運維工程師,你會好奇我怎麼從會計到ERP運維工程師的,這已經是一次轉行了,再之前的工作是會計、審計相關,這裡就不展開講了。
在準備學習機器學習前,我數學應該是忘差不多了,沒有任何coding經驗,就看過幾個python視頻,寫了幾行。
為何直接就上機器學習?因為興趣大,雖然也看不懂。於是買了一整套機器學習的課程,一開始大多都聽不懂,但是機器學習的demo不複雜,基本都是幾行代碼就出結果。
於是就直接上手,先練習再說,從練習中去理解機器學習的邏輯、思路,然後再回過頭來重複看公式推導(雖然很多也看不懂)。
大概是這樣,幾個月後我有了一點基礎,然後一定要找實際的數據去實踐,才能更深入理解,找公司內的可能可以使用的數據,也許這個場景沒有任何業務價值。
再然後就進入深度學習階段了,同樣繼續買課程,demo練習,公司內數據練習。逐漸發現NLP很有意思,於是就在公司內嘗試,NLP比較容易產生價值,如情感分類、關鍵詞提取,哪怕就只用TFIDF + LR做,都能對業務有一定幫助。
深度學習的算法本身存在一定的複雜性,LSTM怎麼搭,seq2seq怎麼弄,我把能找到的各種文本數據都拿來分析、嘗試,搭建簡單的LSTM,複雜點的seq2seq,說實話一開始抄了很多別人的seq2seq都沒有很明白是怎麼回事。
另外我上面的這些看起來沒啥用的瞎實踐也不是完全沒用的,我公司的領導就看到了,我在探索這方面,當公司有這方面可能需求的時候首先會想到我可能可以做,於是就逮住各種機會真實實踐。
我的再前一次會計轉ERP工程師也是一樣的邏輯,在當前的公司表現出你有這方面的探索,那麼就有潛在的機會可能去做一些基礎的。
繼續深入學習,發現很多公式無法深入理解了,也是前面埋下的坑沒有填,數學。於是先找了幾個不錯的大學教學視頻線代、概率論、微積分,為什麼是大學教學視頻,我還找的中文,因為簡單,可以快速過一遍。
我找了個長假期,集中的看,兩倍速,把忘記的東西快速補一些,選擇慢慢的深入看也可以,但是時間有限,需要平衡,對我來說實踐更重要。
到這個階段對於激活函數、損失函數定義等很多基礎的公式及含義有了更深入的理解,之前確實看不懂。
整個機器學習、深度學習知識結構很龐大,一定要有記錄整理,我是用了一個超大的思維導圖來記錄所有的分支。
要看多家的視頻,僅看一家有時會陷入誤區或者有些點久久不得解,推薦比如李弘毅老師的課,白板推導等都很不錯。發博客也是個好方式,但感覺結構化不明顯,思維導圖結構話更清晰。
在這之前,我都是由於興趣而去學習,平時工作加班不多,我絕大多數的夜晚都是給了以上的學習。興趣很重要,如果你不感興趣,只是看著好像這個行業工資高,我覺得你需要再想想你想做什麼。
至此我開始有了一個想法,我有一定了解基礎了,且興趣非常大,我想從事這個行業,而現在的公司環境可能無法讓我更深入了。
於是有了要準備找工作的念頭,於是第一件事就是買了GPU(2080S),從後面來看,這是轉行NLP非常重要的基礎工具,沒有GPU,就沒有大規模練習,更不用談深入理解,課程給的GPU也是不夠用的,暫時的經驗GPU提速20-30倍,也就是平時CPU訓練一天,GPU一小時,時間就是金錢,效率就是生命。我開始了大量的NLP實驗,分本分類、序列標註、機器翻譯等等。
可仍然覺得還達不到找工作的要求,再看看我的現狀,非計算機專業,coding基礎不多,數學不夠紮實,本科,這些都是我的劣勢,那我要用什麼優勢作為敲門磚呢?想來想去,只有實踐能力和學習能力。
於是再後來我報了七月在線的NLP就業班,在之前我就知道這個班,但一直在推遲,沒有馬上報,因為我知道課程時間是不長了,還有很多基礎是無法在課程期間完成的,我需要把很多基礎補充了再報就業課程。
課程的收穫是更深入的理解了到底什麼是語言模型(聽過很多了,但沒有理解到位),這是NLP的大基礎,更深入理解了BERT,transformer,更深入理解了NLP的更多場景,聊天機器人、摘要生成等等。
理解了還是不夠的,我的實踐能力用什麼表示?那就是項目。
課程的要求是畢業時每個同學至少做一個項目。我push自己獨立做了三個,兩個是比賽,一個是練習,兩個比賽都排名相對靠前,好像還有一個,是把公司內做的給優化了一下,也是學習之後才有的思路。
做四個項目痛苦嗎? 不痛苦嗎?熬夜,經常凌晨3-4點?估計是差不多的。還有就是不知道怎麼做,絞盡腦汁,尤其是KBQA,沒做過,流程還挺複雜,總不可能跑通就行吧,需要有較高的分數,查閱大量文檔、歷史比賽分享,老師上課也講過框架,但和自己比賽要做出來還是不一樣的,有些可能看別人寫的挺簡單的,做起來也不容易。
做什麼項目呢?可能會是一個需要考慮的問題,這需要反過來問自己,你想做什麼,你就要會什麼。我想的就是把課程講到的場景最好都實際做一遍,不是跑一遍別人的代碼,自己用一份新的數據新的場景重新做一遍。
以上做的幾個項目,並不只是為了擺在簡歷上看起來挺多,更重要的是深入做過了,理解也更透徹了,以後工作要用到才知道怎麼做。
以上就是主要的轉行學習經歷了,還有些細節就抹去了。當然還有刷題,leetcode算法、數據結構題。
刷題重要嗎?刷題本身是重要的,我刷了100多題,大公司大多數都是要筆試的,但我想說刷題本身也是對Coding基礎的一種加強。非常恰巧,我拿到offer的這家沒有筆試環節。
再講講找工作的過程:
最重要的是耐心,尤其今年大環境不好,崗位相對較少,我把所在城市的對應崗位感覺基本都投了一遍。兩個月來面試機會不多。然後說下渠道,我用了Boss,獵聘,拉鉤。
Boss,獵聘收到的反饋較多,發布出去簡歷後也馬上有不少獵頭聯繫。在這期間,一些時間用來刷題了,其他時間繼續投入項目。
再到面試,主要還是講一講我拿到offer的這個,崗位主要是做聊天機器人研發。
首先我覺得最重要的前面講的耐心,讓我有運氣遇到一個與我較匹配的崗位。面試過程主要都是聊項目、聊學習,前面的實踐經驗都可以拿出來分享了,給面試官的印象是,我確實做過,確實會做,並且前面提到的在公司內一些實踐經驗那都是更實際的東西。產生一定的信任基礎是非常重要的,尤其是轉行。
再然後就是學習能力了,面試官可能會想:就算會做那也是半路出家,你真的能做好嗎?學習意願以及學習能力是自己的強項,需要重點的表達。
學習意願、學習能力再配合已經有的不少項目經驗(即使是比賽,自己深入理解過),終於打動了對方,這家公司不大,從主管、CTO、一直面到了總經理,當我真誠的表達我自己,對方也是能看到。
雖然每家公司都希望自己的員工什麼都會,但他們往往也很難,要麼是剛畢業的對口研究生,要麼是經驗豐富的專家,尤其是中小企業,他們也不一定能承擔得起這個成本。
我對於自己也是需要有一個定位。所以一定要認真思考自己的優勢是什麼(轉行的同學尤其),突出優勢,稍微補一下短板,畢竟時間有限。
如果你第一步就硬要進大廠,除了運氣,那就像其他同學分享的,把機器學習、深度學習的每一個細節知識點都掌握清楚了。
整個轉行下來,我感覺是重新修了一個專業,離熟練還有一定距離,基本可以及格了。轉行之路很漫長,耐心些,兩年是起碼的。
最後一句,追求源於熱愛!
原文連結:
https://ask.julyedu.com/question/93280