談談我在自然語言處理進階上的一些個人拙見

閱讀大概需要6分鐘

導讀

自然語言處理這個方向我感覺已經氾濫了,很多方向的人都開始轉向該專業,當然也包括轉向計算機視覺的。之前我寫過一篇文章

談談我在自然語言處理入門的一些個人拙見

對很多人有過幫助,我感到很開心。但是現在已經不同往日了,很多人早已經入門了。當然,如果你已經進階了,就忽略這個文章吧。嘿嘿。很多人通過微信,公衆號等問我:現在已經看完深度學習視頻了,我該怎麼辦?或者我早已經寫完分類器了,接下來怎麼辦?等等。

我就不一一解答了,其實我也很不好意思解答的,因爲我自己現在也沒啥成就,研究生3個多月了,論文還木有idea。。啊。我自己都頭疼。但是,我可以通過自己,和身邊師兄師姐,以及導師的經驗來給大家說說。

放下書,動手實踐

我導師是最不推薦看書的,當然我剛開始還是反對的,但是時間長了,覺得說的確實很對,很多資料網上都會有。而且,看書也有個問題,你雖然可以系統的學,但是有些東西你一般不會用到的,這就導致時間長了,你不用,你就忘了。其實你目前的知識已經可以了,你瞭解了深度學習,早就把CNN,RNN(LSTM等變形)懶熟於心,聽都聽煩了。其實基礎已經可以了。該動手實踐了。咳咳,馬克思說過,實踐是檢驗真理的唯一途徑。是吧。

靈活掌握各種常用模型

那麼怎麼實踐呢?我的建議是從學會玩模型開始。當然你有更好的方法,更好。

簡單的CNN你已經會了,你應該知道咱們通常用的是單通道的CNN,那麼你會寫多通道的嗎?(多通道其實NLP中用了也是最多2通道,一個是隨機化embedding,一個是預訓練embedding)然後多層CNN也可以嘗試呀。

word級別的你是經常用了,那麼char的呢?寫寫CharCNN(Char經過CNN 然後和Word的embedding cat到一起,得到新的embedding然後再經過CNN)

LSTM你會了,那麼和CNN結合怎麼用呢?先CNN在LSTM或者先LSTM再CNN都可以,你試試。

之前用的都是線性的,那麼非線性的,比如句法樹呢?又該怎麼用呢?現在常用的有TreeGRU和TreeLSTM,你都可以試試。

再進階就是seq2seq模型,這個很常用的,別名也可以說是encoder-decoder模型(這裏的attention機制你需要具體瞭解下)。

如果你想挑戰下自己,可以看看去年google剛提出的模型Transformer!地址爲

http://nlp.seas.harvard.edu/2018/04/03/attention.html

當然,上述只是說了一部分,你有自己的模型學習路線更好啦。

基礎的都掌握之後,感覺你就不會定性到最初的CNN,LSTM模型當中了。覺得模型原來可以這麼靈活?就會對自己產生了自信感。

然後就可以看論文,看別人的模型怎麼實現。最之前的時候,我看別人論文的模型的時候,都是,額,這是怎麼搭建的?如果你會了上述的模型,你再看別人論文的時候,心裏起碼比之前更有底氣,更好的情況是論文的模型圖你一看心裏就已經用代碼搭建完畢這個模型!

上面的模型,網上其實很多的,推薦用github搜索,然後選擇自己的編程偏好的代碼即可。

這個時候我得附上我師兄寫的各種模型了,雖然沒有包括上述所有的模型,但是可以借鑑!

當然也可以看我自己最近剛搭建的模型框架(我自己都不好意思放出來,還不完整,每天會抽時間完善下)

歡迎大家star和fork

搭建自己的代碼框架

我之前寫代碼都不怎麼考慮可讀性,別人的可用性。既然是進階階段,就要學會自己搭建自己的框架。看看導師的github的代碼風格,看看你敬佩的師兄的代碼風格,或者看看國外大佬的代碼風格等。多看看,最終形成自己的代碼風格。看看模塊怎麼搭建?代碼怎麼註釋?哪些函數用起來即簡單又方便等。

搭建自己github項目時,記得寫readme!(額,我現在還沒寫,但是馬上就會完善的,咳咳)要把readme寫的越詳細越好,最好能讓別人看到你的readme直接就能靈活運用你的代碼。

對了,這裏說下爲什麼要搭建自己的模型框架:因爲自己的框架搭建好之後,以後無論寫寫什麼模型,都可以直接套過來用,不用再重新實現一些重複的代碼。

其他建議

CRF你需要了解;要實時關注咱們這個方向的國際大牛的動態;慢慢補充自己的概率論,線數的短板(這個目前我剛開始要補,哎,加油加油);每天學點英語吧,爲以後寫論文打基礎(我堅持了很長時間後,現在有點鬆懈,不行不行,繼續堅持)

好了,就到這裏吧,有什麼問題,留言告訴我


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