先簡單自我介紹一下,我是DASOU,任職在一家社交公司,做NLP算法工程師,主要做文本分類,序列標註,問答匹配方向的工作,也做過搜索/推薦方向的需求。
工作快有一年半的時間了,在這一年半的時間裡,我在工作的同時,一直都在思索,究竟什麼才是算法工程師的核心競爭力,怎樣才能避免剛入行就不停被灌輸的那個35歲中年危機。
我看過很多別人的經驗總結,結合我自己的工作經歷,慢慢有了一點自己的感悟,想要分享出來,希望對大家能有幫助。
我用一句大白話說一下我自己對核心競爭力的總結就是:不同的場景,挑選合適的方法,獲得最大的效果。
這句話很淺顯,但是想要做到絕非沒那麼簡單!!這需要我們長年累月的經驗積累和總結。
接下來,我會模擬一個工作場景,講講究竟核心競爭力體現在哪些方面,以及怎麼才能不斷提升自己!!
0. 背景
假如現在接到了一個新的業務方的需求,你第一步要做什麼?
打開冰箱,把大象...啊,不對
1. 需求定性
首先第一步,我們需要對這個需求定性,定方向,它是屬於文本分類任務?命名體識別?還是機器翻譯?不同的方向我們使用的方法和側重點就會不一樣。當然,很多時候一個需求不僅僅是一個任務,多數情況下是多個任務的結合,這個暫且不論。
2. 調研
好的,現在定好了方向,比如是關於一個文本分類的任務,接下來是要做調研。
調研主要是分為兩個部分:數據和模型。
調研數據:對於一個算法工程師,處理數據絕對是佔據一天絕大部分時間,很多人調侃自己是 SQL BOY 。但是我想要說的,數據決定模型的上限,這句話絕對是真理。只有真正的了解我們的數據,才能在接下裡的任務中作出好的結果。
你需要知道你的數據量級大概是多少;不規範的數據多不多;需不需要做數據增強,針對當前這份數據哪種數據增強技術可能效果會不錯;有哪些特徵可能組合起來會有用等等,這些都需要在調研數據的時候值得我們仔細思考。
這裡插一句,如果數據很不規範,在這個時候你就要思考是從模型下手還是從數據本身下手,各自有什麼合適的方法。比如你可以看看這些不規範的數據究竟有什麼特點可以利用。比如是不是可以不分詞,而只是使用基於字的模型,等等吧。
在數據處理這個過程中,因為現在很多公司數據都存在 Hive 中,所以會用到 MapReduce,Hive,Spark 等等大數據開發工具,掌握這些工具絕對可以讓你輕鬆搞定數據處理。
調研模型:宗旨就是根據不同的要求,使用合適的模型。你需要綜合各方面的條件作出決策。如果業務方需要高準確度,選擇什麼模型能滿足要求。如果業務方需要高響應速度,選擇哪種模型合適。針對當前這種數據,哪種模型可能效果會不錯。
還是以我們這個文本分類這個需求為例,如果看中速度,FastText會不會更好一點,或者TextCNN怎麼樣?如果要求精度,那麼Bert可以嗎?或者寬鬆一點 Albert怎麼樣,FastBert怎麼樣?
在這個過程中,你需要去讀大量的論文和博客,看看別人的經驗和總結,幫助自己作出最終的決定。
3. 訓練/優化模型
模型的訓練和優化,一般來說不會佔據的太多的時間。有句話忘了在哪裡看到的了,說是處理數據花了兩周的時間,訓練模型花了兩個小時。聽起來可能有點誇張,但是是這麼個意思。在這個過程中,你的主要工作就是需要使用代碼實現模型,去思考怎麼樣才能更高效的運行這個模型,需要去思考怎樣才能獲取更好結果?
比如說,使用 GPU 進行訓練模型,你需要熟悉模型/數據並行化的知識。比如說,針對特定任務,修改損失函數,修改優化函數,等等吧。
4. 部署上線
我們需要為開發人員提供接口,從而可以處理數據返回結果。這個時候,你就要思考你的接口響應速度怎麼樣?做多可以多少並發?針對這種情況,自己做一個簡單的壓測就可以。一般來說,你需要掌握 grpc,kafka,flask,nginx 等常用工具。當然,這些你不需要精通,如果需求方對接口要求很高的話,你可以使用一些成熟的開源框架就可以,所以,不用太慌。
好了,大概就是這樣,整個流程我們有著極強的耐心,而且要不停的從過程中積累經驗。
5. 總結
總結來說,要想提高自己的核心競爭力,做到兩個方面:算法+工程 。
對於算法,要深入底層,把手弄髒。算法模型重點在質量,而不是數量。既然要搞一個模型,就要徹底把它搞清楚,要把它掰開了揉碎了琢磨,不要似是而非。
對於工程,你需要有大數據開發能力和模型訓練部署能力。
兩個都要抓,兩手都要硬,才能無往不利。其實,在這方面,我做的也很不好,人都是有惰性的,大道理說起來一套套的,做起來就是個行動的矮子...
然後我痛定思痛,想逼自己一把,於是幾天前就建了兩個倉庫。
一個是關於NLP各種面試題的倉庫(更新,現在1.3Kstar了):
https://github.com/DA-southampton/NLP_ability
一個倉庫是關於各種模型是如何在各大公司實戰落地的(更新,現在700star)。地址在這裡:
https://github.com/DA-southampton/Tech_Aarticle
所以感興趣的朋友可以去看看,如果能給大家帶來一點幫助,就很開心了,我會持續更新,爭取每篇文章都帶有新的思考,而不是新瓶裝舊酒。
打完收工!點個再看!這樣我在天堂超市可以開心的多喝幾瓶!鞠躬感謝!
由於微信平臺算法改版,公號內容將不再以時間排序展示,如果大家想第一時間看到我們的推送,強烈建議星標我們和給我們多點點【在看】。星標具體步驟為:
(1)點擊頁面最上方"AINLP",進入公眾號主頁。
(2)點擊右上角的小點點,在彈出頁面點擊「設為星標」,就可以啦。
感謝支持,比心。
進群請添加AINLP小助手微信 AINLPer(id: ainlper),備註NLP技術交流推薦閱讀
這個NLP工具,玩得根本停不下來
徵稿啟示| 200元稿費+5000DBC(價值20個小時GPU算力)
完結撒花!李宏毅老師深度學習與人類語言處理課程視頻及課件(附下載)
從數據到模型,你可能需要1篇詳實的pytorch踩坑指南
如何讓Bert在finetune小數據集時更「穩」一點
模型壓縮實踐系列之——bert-of-theseus,一個非常親民的bert壓縮方法
文本自動摘要任務的「不完全」心得總結番外篇——submodular函數優化
Node2Vec 論文+代碼筆記
模型壓縮實踐收尾篇——模型蒸餾以及其他一些技巧實踐小結
中文命名實體識別工具(NER)哪家強?
學自然語言處理,其實更應該學好英語
史丹福大學NLP組Python深度學習自然語言處理工具Stanza試用
關於AINLP
AINLP 是一個有趣有AI的自然語言處理社區,專注於 AI、NLP、機器學習、深度學習、推薦算法等相關技術的分享,主題包括文本摘要、智能問答、聊天機器人、機器翻譯、自動生成、知識圖譜、預訓練模型、推薦系統、計算廣告、招聘信息、求職經驗分享等,歡迎關注!加技術交流群請添加AINLPer(id:ainlper),備註工作/研究方向+加群目的。
閱讀至此了,分享、點讚、在看三選一吧🙏