自然語(yǔ)言處理怎么最快入門?
非科班出身,自學(xué)擼出中文分詞庫(kù)HanLP,在GitHub標(biāo)星1.5萬(wàn),成為最受歡迎的自然語(yǔ)言處理項(xiàng)目。他將學(xué)習(xí)經(jīng)驗(yàn)總結(jié)成書《自然語(yǔ)言處理入門》,幫助小白快速入門NLP。
針對(duì)題主的提問,HanLP自然語(yǔ)言處理類庫(kù)的開發(fā)者何晗的經(jīng)驗(yàn)很值得借鑒。
截至 2019 年 11月初,HanLP項(xiàng)目在 GitHub Star 數(shù)達(dá)到了 15.6 K,超過了賓夕法尼亞大學(xué)的 NLTK、斯坦福大學(xué)的 CoreNLP。
貼上GitHub地址:https://github.com/hankcs/HanLP
何晗在開發(fā)這款 NLP 工具包時(shí),還是上海外國(guó)語(yǔ)大學(xué)一名日語(yǔ)專業(yè)的大二學(xué)生,HanLP項(xiàng)目脫胎他大學(xué)時(shí)接的一份兼職,何晗也因緣從一個(gè)非科班專業(yè)的小白逐步成長(zhǎng)為NLP領(lǐng)域的專家。如今,正在攻讀CS博士的他(研究方向:句法分析、語(yǔ)義分析與問答系統(tǒng)),結(jié)合自己的學(xué)習(xí)歷程和HanLP的開發(fā)經(jīng)驗(yàn)創(chuàng)作出版了《自然語(yǔ)言處理入門》一書,得到了周明、劉群、王斌等業(yè)內(nèi)頂級(jí) NLP 專家的推薦。
從著手開發(fā)HanLP,到HanLP達(dá)到工業(yè)使用的水準(zhǔn),何晗對(duì)自學(xué)NLP有深刻的見解。如果用一句話來總結(jié),那就是:自頂而下,從工程去切入,由應(yīng)用層往下面的基礎(chǔ)層拓展,遞歸補(bǔ)充理論知識(shí),才能事半功倍。以下入門NLP的建議,皆來自于何晗的經(jīng)驗(yàn),分享給像題主這樣的初學(xué)者,希望能對(duì)大家有所啟發(fā)。
一、初學(xué)者,請(qǐng)避開自學(xué)NLP的常見誤區(qū)有的初學(xué)者排斥基礎(chǔ)理論——認(rèn)為學(xué)校教的都是沒用的,公司里都用不到;有的初學(xué)者對(duì)基礎(chǔ)理論敬而遠(yuǎn)之——認(rèn)為理論太高深了,自己基礎(chǔ)不好,學(xué)了也白學(xué);有的初學(xué)者,特別是已經(jīng)工作的程序員,基本方向正確但學(xué)習(xí)路徑錯(cuò)誤,比較容易走極端:在工作很忙的情況下,只是抱著經(jīng)典書籍苦啃,直到筋疲力盡項(xiàng)目也毫無(wú)進(jìn)展,從而喪失了學(xué)習(xí)NLP的興趣;或者,俗稱調(diào)庫(kù)小能手,跟風(fēng)潮流,缺少理論基礎(chǔ),缺乏獨(dú)立思考能力(比如,認(rèn)為深度學(xué)習(xí)最牛,其他的基礎(chǔ)理論都是垃圾;認(rèn)為CNN/RNN/BERT會(huì)調(diào)參就行了)。而實(shí)際上,自然語(yǔ)言處理是計(jì)算機(jī)科學(xué)、人工智能和語(yǔ)言學(xué)學(xué)科的交集,這三方面的學(xué)科知識(shí)都是需要儲(chǔ)備的,基礎(chǔ)理論的學(xué)習(xí)必不可少。但很多初學(xué)者都是在工作之后才入坑NLP,既難以靜下心來啃書啃課,又缺少很好的老師傳授知識(shí)經(jīng)驗(yàn)。所以,有效可行的入門方式就是從工程切入,遵循這樣的邏輯:延遲加載,只在使用的時(shí)候才去加載必要的資料:
你首先看到的是一個(gè)摸得著的實(shí)際問題,為了解決該問題才去接觸一個(gè)具體的方案;為了理解這個(gè)方案,才會(huì)引入必要的背景知識(shí);為了實(shí)現(xiàn)這個(gè)方案,才會(huì)引入相關(guān)細(xì)節(jié);為了克服這個(gè)方案的問題,才會(huì)過渡到新的方案。二、想快速入門NLP,邊學(xué)邊做療效好何晗入門NLP,讀過的經(jīng)典書有:《統(tǒng)計(jì)自然語(yǔ)言處理》(宗成慶 著)(對(duì)應(yīng)語(yǔ)言學(xué)知識(shí))、《統(tǒng)計(jì)學(xué)習(xí)方法》(李航 著)(對(duì)應(yīng)人工智能知識(shí)),《挑戰(zhàn)程序設(shè)計(jì)競(jìng)賽》(秋葉拓哉、鹽田陽(yáng)一、北川宜稔 著)(對(duì)應(yīng)計(jì)算機(jī)算法知識(shí))。
不過,在看經(jīng)典書籍的過程中,他發(fā)現(xiàn),學(xué)習(xí)自然語(yǔ)言處理并不需要完全把這幾本書看透,最好是可以邊看書邊做項(xiàng)目。這些書都是非常牛的好書,然而可惜的是,看完書中的章節(jié),不知該如何應(yīng)用其中的知識(shí)點(diǎn),即使實(shí)現(xiàn)了文章中提到的模型,也很難直接將其運(yùn)用于工程項(xiàng)目。
想必很多初學(xué)者都面臨類似的學(xué)習(xí)困惑。為了解決這個(gè)問題,何晗動(dòng)手寫了《自然語(yǔ)言處理入門》,目的就是希望學(xué)習(xí)者看完一章后,便可以將知識(shí)點(diǎn)直接用于項(xiàng)目,適合NLP初學(xué)者入門并快速布置到生產(chǎn)環(huán)境中。成效快,痛苦小,疑問少。
何晗在《自然語(yǔ)言處理入門》一書中,以自己的HanLP開源項(xiàng)目為案例,代碼對(duì)照公式講解每一個(gè)算法每一個(gè)模型,讓入門者帶著工程思維理解NLP的知識(shí)要點(diǎn),試圖在目前市面上艱深晦澀的教科書和簡(jiǎn)單的入門書之間作出平衡。
《自然語(yǔ)言處理入門》帶領(lǐng)學(xué)習(xí)者從基本概念入手。逐步介紹中文分詞、詞性標(biāo)注、命名實(shí)體識(shí)別、信息抽取、文本聚類、文本分類、句法分析這幾個(gè)熱門問題的算法原理和工程實(shí)現(xiàn)。通過對(duì)多種算法的講解和實(shí)現(xiàn),比較各自的優(yōu)缺點(diǎn)和適用場(chǎng)景。這些實(shí)現(xiàn)并非教學(xué)專用,而是生產(chǎn)級(jí)別的成熟代碼,可以直接用于實(shí)際項(xiàng)目。
在理解這些熱門問題的算法后,這本書會(huì)引導(dǎo)學(xué)習(xí)者根據(jù)自己的項(xiàng)目需求拓展新功能,最終達(dá)到理論和實(shí)踐上的同步入門。
何晗認(rèn)為,NLP的學(xué)習(xí)路徑,應(yīng)該尊重一般人的認(rèn)知規(guī)律,而不是學(xué)術(shù)上的綱目順序,以此為宗旨來編排圖書的內(nèi)容。因此,面向普通程序員,這本書內(nèi)容分為以下三大部分:
第一部分介紹一些字符串算法,讓普通程序員從算法的角度思考中文信息處理。
第二部分由易到難地講解一些常用的機(jī)器學(xué)習(xí)模型,讓算法工程師晉級(jí)為機(jī)器學(xué)習(xí)工程師。由中文分詞貫穿始終,構(gòu)成一種探索式的遞進(jìn)學(xué)習(xí)。這些模型也并非局限于中文分詞,會(huì)在第三部分應(yīng)用到更多的自然語(yǔ)言處理問題上去。
第三部分新增了許多與文本處理緊密相關(guān)的算法,讓機(jī)器學(xué)習(xí)工程師進(jìn)化到自然語(yǔ)言處理工程師。特別地,最后一章介紹了當(dāng)前流行的深度學(xué)習(xí)方法,起到擴(kuò)展視野、承上啟下的作用。學(xué)習(xí)者可根據(jù)自身情況,靈活跳過部分章節(jié)。
何晗在自學(xué)過程中走過不少?gòu)澛罚钪獢?shù)學(xué)語(yǔ)言的艱深晦澀,并且痛恨羅列公式故作高深的文章,所以他在書中只保留了必不可少的公式和推導(dǎo),并且公式與代碼相互印證。配套代碼由Java和Python雙語(yǔ)言寫成,與GitHub上最新代碼同步更新,所以你只要具備基本的編程經(jīng)驗(yàn),就可以跟隨書本零起點(diǎn)入門。
此外,何晗還總結(jié)出一份最為詳盡的NLP+ML“雙生樹”思維導(dǎo)圖,導(dǎo)圖中的關(guān)聯(lián)知識(shí)點(diǎn)不僅涵蓋NLP領(lǐng)域的核心知識(shí),甚至涉及許多前沿研究和應(yīng)用,印刷尺寸寬60cm,高74cm,隨書附贈(zèng)供學(xué)習(xí)者參考。
三、進(jìn)階NLP的學(xué)習(xí)資料和工具推薦推薦讀這些經(jīng)典書籍:多讀論文,推薦用Google Scholar和Papers檢索:克服語(yǔ)言障礙,推薦用歐路詞典:追蹤前沿動(dòng)態(tài),推薦NLP-progress,在各項(xiàng)NLP任務(wù)上的排行榜網(wǎng)址:https://nlpprogress.com/
一個(gè)中肯的建議:NLP沒有通用的解法,算法不夠,語(yǔ)料來補(bǔ)算法不是萬(wàn)能的。(想想:一兩個(gè)百分點(diǎn)對(duì)實(shí)際業(yè)務(wù)有多少幫助,又增加了多少成本?)不要完全相信論文。(a. 不要相信不公開源代碼的論文; b. 不要相信公開源代碼但數(shù)據(jù)預(yù)處理作假的論文; c. 即使能跑出作者宣稱的分?jǐn)?shù),請(qǐng)考慮:模型是否能泛化到你的行業(yè)領(lǐng)域? 又增加了多少成本?)語(yǔ)料極其重要。(a. 語(yǔ)料幾乎可以把準(zhǔn)確率提升到你期望的任何水準(zhǔn),只要數(shù)量質(zhì)量足夠; b. 目前通用語(yǔ)料幾乎都是新聞,誰(shuí)能標(biāo)注出行業(yè)語(yǔ)料,誰(shuí)就是大王; c. 深度學(xué)習(xí)時(shí)代,無(wú)標(biāo)注的純文本語(yǔ)料也大有用場(chǎng); d. 軟件工程2.0:用數(shù)據(jù)編程。)