跨專業自學NLP,這個90後擼出了開源類庫HanLP,已在GitHub收穫1.5W星

截止2019 年 10 月底,一款名爲HanLP的自然語言處理類庫在GitHub Star 數達到了 15.5 K,超過了賓夕法尼亞大學的 NLTK、斯坦福大學的 CoreNLP、哈爾濱工業大學的 LTP。這是一款由一系列模型與算法組成的自然語言處理(NLP)開發工具包。 你或許想象不到,這款NLP工具包被開發出來時,它的作者何晗,還是一位日語專業的大二學生。如今,在攻讀博士期間,何晗又創作了一本《自然語言處理入門》,希望解決小白們的NLP入門難題。該書得到了周明、劉羣、王斌等業內頂級NLP專家的推薦。 “理論是根,項目是樹“,如果說HanLP是樹,那麼這本《自然語言處理入門》便是樹的根基。在該書問世之際,AI前線與何晗展開對話,瞭解這位極具天賦的學生“種植樹”,“培育根”的故事。

癡迷遊戲走上編程之路

何晗有兩個愛好:動漫和遊戲。這兩個愛好後來也深深影響了他最爲關鍵的兩次重大人生抉擇。

高中時,何晗就讀於黃岡中學理科“狀元班”,班上學霸雲集,但何晗覺得自己和那些學霸同學比差遠了。“我肯定不是學霸,我屬於那種均值80分,方差特別大的類型”。

他笑稱自小不喜歡聽講,要不就自己看書做題,要不就坐在座位上神遊。有幾次考試,他超常發揮進入了“狀元班”。不過,最爲關鍵的高考,他卻考得並不理想。

這次高考失利讓何晗決定“放飛自我”,選一個自己喜歡的專業。因爲喜歡動漫,在志願填報時他選了日語專業。2011年,何晗成爲上海外國語大學日語系的一名學生。他的業餘時間也幾乎都被追新番、背單詞、宅着打遊戲填滿。

打遊戲是何晗走上編程之路的原始動力,他挺想自己做一個遊戲出來。曾經有一段時間,何晗癡迷打“仙劍四”,他想把劍四的“mod”給做出來。

也是從那時候起,何晗開始嘗試學習各種編程知識:C++、Windows編程、3D編程、彙編逆向、PHP、JavaScript、Linux。對於一個非科班出身的人來說,自學之路免不了遇到困難。何晗坦言,最大的困難是沒有機會系統性學習操作系統、編譯原理等專業課程。他倒是有一個很實用的學習方法 — debug。

何晗的debug能力很強,“不管是什麼算法誰的代碼,我都能一行行debug下來。每次我寫的算法不對的時候,我都會創造相同的輸入數據,開兩個debugger窗口,一個跑我的,一個跑別人的。我的知識大部分來源於調試別人的代碼,可以說是‘偷師’自所有人”。

最令何晗印象深刻的是,他自學編程途中達成的一個小成就。當時上外的校園網僅支持網頁版登陸,打開較慢、登錄時也無法記住密碼,很不方便。爲了解決這個問題,何晗花了一個勞動節假期做出了一個自動登錄軟件。現在回想起來,何晗坦言這個軟件還有很多不足,但同學們用的很開心。

這個小成就還讓何晗收穫了一個意外之喜。學校網絡技術中心的張老師聽說了這事後對他很是讚賞,便贈送給他一個校園網VIP,還給他介紹了一家外包公司——林原科技的兼職。

大二開發出HanLP

也正是這份兼職工作,讓何晗與自然語言處理(NLP)結下了不解之緣,後者也是他目前攻讀博士期間的研究方向。

一日,林原科技立項做一個 “智能檢索系統”。中文搜索引擎的第一步是分詞,老闆分配給何晗一個任務——做一個分詞器,並給了他幾本厚厚的學習資料。

老實說,這是何晗第一次接觸NLP,顯然做出這個分詞器得需要“現學現賣”了。他倒頗有幾分自信,“我應該能拿下”,“要麼不做,要做就要做最好的“。

經過調研,何晗發現,市面上的開源工具Jieba、Ansj、IK等分詞效果都不太理想,很多人名、機構名別稱分不出來,新詞隔三差五就更新卻收錄不進去,分詞速度也很慢…他當即決定,一定要做出一個體驗效果好的分詞器。

緊接着,何晗開始了一邊“泡”在專業書和論文裏自學一邊開發的過程。張華平、劉羣等NLP領域專家的論文幾乎都被他翻了個遍,被一些深奧概念繞的雲裏霧裏那自是家常便飯。對何晗影響最大的是呂震宇開源的C#版的ICTCLAS分詞系統,他邊學C#邊對照着呂震宇的博文研讀這才搞懂了ICTCLAS分詞原理。何晗嘗試着在ICTCLAS的基礎上做了一些改進,並且實現了Java版,這個版本運行速度很慢,好在輸出的結果跟ICTCLAS是一致的。

弄懂了ICTCLAS之後,何晗又開始學習單步Ansj,Ansj的數據結構——雙數組字典樹速度之快對他來說像打開了新世界的大門。於是他便饒有興趣地開始研究數據結構,最後他自己創造出了一個“基於雙數組字典樹的AC自動機”的數據結構。

功夫不負有心人,花了半年時間,何晗最終還是將這個分詞器做了出來,並取名“HanLP”。這對於一個大二日語專業學生來說,是極爲難得的。何晗用上了自研的基於雙數組字典樹的AC自動機,這大大提升了HanLP的運行速度。

第一版本的HanLP功能比較簡單,後續經過幾年的迭代,其功能越來越完善,性能更高效。HanLP能提供詞法分析、句法分析、文本分類、情感分析等功能。此外,HanLP還具有精度高、速度快、內存省的特點。

截止目前,HanLP的GitHub Star 數已達 15.5 K,超過了賓夕法尼亞大學的 NLTK、斯坦福大學的 CoreNLP、哈爾濱工業大學的 LTP。

對於這個成績,何晗很開心,他感激廣大用戶的認可。“從開發者的角度講,我肯定是不及教授們的萬分之一,無論是水平上還是人數上”,何晗表示,相對於上述面向教學和學術用途的項目,HanLP是個人項目,主要面向生產環境開發,由於目的用途不同,HanLP取勝的“法寶”在於良好的用戶體驗,在接口設計、代碼風格等“軟實力”方面比較人性化。

博士出書

HanLP的意外成功讓何晗對NLP有了更深入的瞭解,在開發這個項目的過程中,通過對領域內專業知識的學習,他領略到了NLP這門學科的魅力,在隨後的學習生涯中,他便鎖定NLP爲主要的研究方向。目前何晗在埃默裏大學讀計算機博士,主要的研究方向是句法分析、語義分析與問答系統。

從v1.3版本起,HanLP由大快搜索主導開發,並完全開源(GitHub 開源地址:https://github.com/hankcs/HanLP)。2018年11月,HanLP更新到了1.7版本,新增文本聚類,流水線分詞等功能,這時HanLP的中文詞法分析已比較成熟,達到了工業使用的水準。

現在,何晗仍在負責GitHub 上HanLP的維護工作。HanLP令何晗收穫了一衆粉絲,他們常常來找何晗諮詢一些NLP專業相關的問題,時間長了,問題越積越多,何晗試圖幫助一些初級用戶找一些入門資料,卻遺憾找不到特別對口的。適逢出版社的編輯找他約稿,何晗索性決定,乾脆自己寫一本入門資料。

在這樣的背景下,這本《自然語言處理入門》的定位很快明確下來:普通人入門時看的第一本NLP書,小白也能看懂的工具書。何晗還希望該書能爲讀者指明下一步的方向,因此在入門內容的基礎上,他加上了一些挑戰章節。

2019年10月,歷時1年創作、十幾遍校對,《自然語言處理入門》正式出版(瞭解更多書籍信息可點擊閱讀原文),該書還得到了周明、劉羣、王斌等業內頂級NLP專家的推薦。

“理論是根,項目是樹“,如果說HanLP是樹,那麼這本《自然語言處理入門》便是樹的根基。

與創作HanLP時期相比,何晗已經從小白蛻變成了領域專家,不變的地方在於,何晗仍將“工程與理論相結合”作爲創作的核心理念,他試圖在目前市面上艱深晦澀的教科書和簡單的入門書之間作出平衡。何晗以自己的開源項目爲案例,代碼對照公式講解每一個算法每一個模型,希望讓讀者知其然並且知其所以。

NLP現在最大的問題是難以表示世界知識

採訪中,何晗對於NLP及句法分析、語義分析、問答系統目前的發展現狀和發展趨勢分享了自己的精彩觀點。

Transformer大家族狂歡的一年

何晗表示,今年是以BERT爲首的Transformer大家族狂歡的一年,自從發現在大規模無標註語料上訓練的Transformer語言模型可以編碼很多知識後,各項任務包括對話系統都在研究怎麼接入Transformer。這些研究令人振奮,在另一層意義上也有些單調無聊。雖然從結果上來看效果的確提升了許多,但模型的可解釋性還不夠。誰都知道知識肯定編碼進去了,但究竟是如何編碼、爲什麼能編碼、如何精簡參數等等,還在研究當中。

英文句法分析摸到了天花板

句法分析和語義分析都可以歸結爲爲每個單詞找被修飾詞,然後標註它們的關係。針對這種類型的任務,BiAffine是比較前沿的做法。它屬於基於圖的算法家族,天然適合並行化,在GPU下速度很快。此後還涌現了許多“改進”研究,大致朝着高階建模的方向走。不過,何晗認爲,英文句法分析基本摸到了天花板,中文句法分析可能不是差在模型而是差在高質量大規模樹庫上。

至於語義依存分析,與句法分析模型一樣,只不過語料庫的建設比其滯後。同屬語義分析家族的另幾項任務,問句轉SQL、抽象語義表示則稍微平凡一些,基本上都是Seq2Seq的變種。對於上述的所有任務,如何有效地將問題表示爲向量纔是核心問題。這時候,又輪到Transformer霸榜了。

未來機器學習工程師崗位會減少

談到NLP現在發展中的挑戰,何晗表示,NLP現在最大的問題是難以表示世界知識,舉個例子,每個人都有一套對物理世界的認識,但計算機只有一些符號語料。“人們都說百聞不如一見,目前的NLP系統別說見了(機器視覺),連聞都很少聞(語音處理)”。

但就學界的前沿動態而言,在模型結構的探索上AutoML(自動設計神經網絡),以及在知識工程上的自動構建知識圖譜,都是未來可預見的發展趨勢。

就工業界而言,未來機器學習工程師的崗位反而會減少,因爲神經網絡可以自行設計神經網絡,就不需要這麼多工程師手動設計了。到時候,軟件開發將進入2.0時代,不用再寫代碼,而是標註數據。標註數據丟給神經網絡學習模型,模型的結構也是神經網絡自動探索出來的,這個模型用來解決實際問題。軟件工程師不需要寫一行代碼,或者說,他們標註的數據就是他們的代碼。神經網絡是他們的編譯器,訓練出來的神經網絡是他們編譯後的程序。正如編譯器可以編譯編譯器一樣,神經網絡也可以訓練神經網絡。這就是未來最有潛力的技術。

寫在最後

現在讀到博士了,何晗的生活依舊簡單,除了日常學習,他最愛的還是動漫和遊戲。

維護HanLP 之外,何晗還業餘經營着一個名爲“碼農場”的博客,用於自己的課程筆記分享。由於太忙,這幾年“碼農場”的更新頻率已經降到了以“年”爲單位,不過,日常仍有數千粉絲來這裏翻閱資料。

從該博客的一隅,或許可以一窺何晗的另一面。

在“碼農場”的資料介紹處,何晗稱自己是一個算法初心者。大二時兼職開發HanLP,何晗常常一個人坐在教室忙活,同學們完全不知道在幹什麼,“大部分女同學認爲我就是個碼農,修電腦的那種;有的男同學覺得我很low,有的覺得我很酷“,何晗從來不解釋,他覺得做自己就好了。

他亦是一位算法堅守者,從兼職接觸到如今鎖定研究方向,他一直在自己喜歡的領域保持專注。採訪最後,何晗告訴我們,畢業後,他會選擇繼續紮根學術。

嘉賓介紹

作者何晗(@hankcs),曾經是上外一名日語專業的學生,如今是美國埃默裏大學計算機博士生,研究方向是句法分析、語義分析與問答系統。何晗寫的自然語言處理類庫 HanLP,截至 2019 年 10 月初,GitHub Star 數已達 15 K,超過了賓夕法尼亞大學的 NLTK、斯坦福大學的 CoreNLP、哈爾濱工業大學的 LTP。何晗的 “碼農場”播客也是很多 NLP 領域朋友參考的學習資料。何晗寫作的《自然語言處理入門》書籍已經上市 ,感興趣的可以點此鏈接購買。

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