自然語(yǔ)言處理和大部分的機(jī)器學(xué)習(xí)或者人工智能領(lǐng)域的技術(shù)一樣,是一個(gè)涉及到多個(gè)技能、技術(shù)和領(lǐng)域的綜合體。
所以自然語(yǔ)言處理工程師會(huì)有各種各樣的背景,大部分都是在工作中自學(xué)或者是跟著項(xiàng)目一起學(xué)習(xí)的,這其中也不乏很多有科班背景的專業(yè)人才,因?yàn)榧夹g(shù)的發(fā)展實(shí)在是日新月異,所以時(shí)刻要保持著一種強(qiáng)烈的學(xué)習(xí)欲望,讓自己跟上時(shí)代和技術(shù)發(fā)展的步伐。本文作者從個(gè)人學(xué)習(xí)經(jīng)歷出發(fā),介紹相關(guān)經(jīng)驗(yàn)。
一些研究者將自然語(yǔ)言處理(NLP,Natural Language Processing)和自然語(yǔ)言理解(NLU,Natural Language Understanding)區(qū)分開(kāi),在文章中我們說(shuō)的NLP是包含兩者的,并沒(méi)有將兩者嚴(yán)格分開(kāi)。
圖1 自然語(yǔ)言處理工程師技能樹(shù)
自然語(yǔ)言處理學(xué)習(xí)路線
數(shù)學(xué)基礎(chǔ)
數(shù)學(xué)對(duì)于自然語(yǔ)言處理的重要性不言而喻。當(dāng)然數(shù)學(xué)的各個(gè)分支在自然語(yǔ)言處理的不同階段也會(huì)扮演不同的角色,這里介紹幾個(gè)重要的分支。
代數(shù)
代數(shù)作為計(jì)算數(shù)學(xué)里面很重要的一個(gè)分支,在自然語(yǔ)言處理中也有舉足輕重的作用。這一部分需要重點(diǎn)關(guān)注矩陣處理相關(guān)的一些知識(shí),比如矩陣的SVD、QR分解,矩陣逆的求解,正定矩陣、稀疏矩陣等特殊矩陣的一些處理方法和性質(zhì)等等。
對(duì)于這一部分的學(xué)習(xí),既可以跟著大學(xué)的代數(shù)書(shū)一起學(xué)習(xí),也可以跟著網(wǎng)上的各種公開(kāi)課一起學(xué)習(xí),這里既可以從國(guó)內(nèi)的一些開(kāi)放學(xué)習(xí)平臺(tái)上學(xué),也可以從國(guó)外的一些開(kāi)放學(xué)習(xí)平臺(tái)上學(xué)。這里放一個(gè)學(xué)習(xí)的鏈接,網(wǎng)易公開(kāi)課的鏈接:https://c.open.163.com/search/search.htm?query=線性代數(shù)#/search/all。(其他的資料或者平臺(tái)也都OK)。
-
概率論
在很多的自然語(yǔ)言處理場(chǎng)景中,我們都是算一個(gè)事件發(fā)生的概率。這其中既有特定場(chǎng)景的原因,比如要推斷一個(gè)拼音可能的漢字,因?yàn)橥糇值拇嬖?,我們能?jì)算的只能是這個(gè)拼音到各個(gè)相同發(fā)音的漢字的條件概率。也有對(duì)問(wèn)題的抽象處理,比如詞性標(biāo)注的問(wèn)題,這個(gè)是因?yàn)槲覀儧](méi)有很好的工具或者說(shuō)能力去精準(zhǔn)地判斷各個(gè)詞的詞性,所以就構(gòu)造了一個(gè)概率解決的辦法。
對(duì)于概率論的學(xué)習(xí),既要學(xué)習(xí)經(jīng)典的概率統(tǒng)計(jì)理論,也要學(xué)習(xí)貝葉斯概率統(tǒng)計(jì)。相對(duì)來(lái)說(shuō),貝葉斯概率統(tǒng)計(jì)可能更重要一些,這個(gè)和貝葉斯統(tǒng)計(jì)的特性是相關(guān)的,因其提供了一種描述先驗(yàn)知識(shí)的方法。使得歷史的經(jīng)驗(yàn)使用成為了可能,而歷史在現(xiàn)實(shí)生活中,也確實(shí)是很有用的。比如樸素貝葉斯模型、隱馬爾卡模型、最大熵模型,這些我們?cè)谧匀徽Z(yǔ)言處理中耳熟能詳?shù)囊恍?a href="http://wenjunhu.com/v/tag/2562/" target="_blank">算法,都是貝葉斯模型的一種延伸和實(shí)例。
這一部分的學(xué)習(xí)資料,也非常豐富,這里也照例對(duì)兩種概率學(xué)習(xí)各放一個(gè)鏈接,統(tǒng)計(jì)學(xué)導(dǎo)論http://open.163.com/movie/2011/5/M/O/M807PLQMF_M80HQQGMO.html,貝葉斯統(tǒng)計(jì):https://www.springboard.com/blog/probability-bayes-theorem-data-science/。
信息論作為一種衡量樣本純凈度的有效方法。對(duì)于刻畫(huà)兩個(gè)元素之間的習(xí)慣搭配程度非常有效。這個(gè)對(duì)于我們預(yù)測(cè)一個(gè)語(yǔ)素可能的成分(詞性標(biāo)注),成分的可能組成(短語(yǔ)搭配)非常有價(jià)值,所以這一部分知識(shí)在自然語(yǔ)言處理中也有非常重要的作用。
同時(shí)這部分知識(shí)也是很多機(jī)器學(xué)習(xí)算法的核心,比如決策樹(shù)、隨機(jī)森林等以信息熵作為決策樁的一些算法。對(duì)于這部分知識(shí)的學(xué)習(xí),更多的是要理解各個(gè)熵的計(jì)算方法和優(yōu)缺點(diǎn),比如信息增益和信息增益率的區(qū)別,以及各自在業(yè)務(wù)場(chǎng)景中的優(yōu)缺點(diǎn)。照例放上一個(gè)鏈接:http://open.163.com/special/opencourse/information.html。
數(shù)據(jù)結(jié)構(gòu)與算法
這部分內(nèi)容的重要性就不做贅述了。學(xué)習(xí)了上面的基礎(chǔ)知識(shí),只是萬(wàn)里長(zhǎng)征開(kāi)始了第一步,要想用機(jī)器實(shí)現(xiàn)對(duì)自然語(yǔ)言的處理,還是需要實(shí)現(xiàn)對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)和算法。這一部分也算是自然語(yǔ)言處理工程師的一個(gè)看家本領(lǐng)。這一部分的內(nèi)容也是比較多的,這里就做一個(gè)簡(jiǎn)單的介紹和說(shuō)明。
首先數(shù)據(jù)結(jié)構(gòu)部分,需要重點(diǎn)關(guān)注鏈表、樹(shù)結(jié)構(gòu)和圖結(jié)構(gòu)(鄰接矩陣)。包括各個(gè)結(jié)構(gòu)的構(gòu)建、操作、優(yōu)化,以及各個(gè)結(jié)構(gòu)在不同場(chǎng)景下的優(yōu)缺點(diǎn)。當(dāng)然大部分情況下,可能使用到的數(shù)據(jù)結(jié)構(gòu)都不是單一的,而是有多種數(shù)據(jù)結(jié)構(gòu)組合。比如在分詞中有非常優(yōu)秀表現(xiàn)的雙數(shù)組有限狀態(tài)機(jī)就使用樹(shù)和鏈表的結(jié)構(gòu),但是實(shí)現(xiàn)上采用的是鏈表形式,提升了數(shù)據(jù)查詢和匹配的速度。在熟練掌握各種數(shù)據(jù)結(jié)構(gòu)之后,就是要設(shè)計(jì)良好的算法了。
伴隨著大數(shù)據(jù)的不斷擴(kuò)張,單機(jī)的算法越來(lái)越難發(fā)揮價(jià)值,所以多數(shù)場(chǎng)景下都要研發(fā)并行的算法。這里面又涉及到一些工具的應(yīng)用,也就是編程技術(shù)的使用。例如基于Hadoop的MapReduce開(kāi)發(fā)和Spark開(kāi)發(fā)都是很好的并行化算法開(kāi)發(fā)工具,但是實(shí)現(xiàn)機(jī)制卻有很大的差別,同時(shí)編程的便利程度也不一樣。
當(dāng)然這里面沒(méi)有絕對(duì)的孰好孰壞,更多的是個(gè)人使用的習(xí)慣和業(yè)務(wù)場(chǎng)景的不同而不同。比如兩個(gè)都有比較成熟的機(jī)器學(xué)習(xí)庫(kù),一些常用的機(jī)器學(xué)習(xí)算法都可以調(diào)用庫(kù)函數(shù)實(shí)現(xiàn),編程語(yǔ)言上也都可以采用Java,不過(guò)Spark場(chǎng)景下使用Scala會(huì)更方便一些。因?yàn)檫@一部分是偏實(shí)操的,所以我的經(jīng)驗(yàn)會(huì)建議實(shí)例學(xué)習(xí)的方法,也就是跟著具體的項(xiàng)目學(xué)習(xí)各種算法和數(shù)據(jù)結(jié)構(gòu)。最好能對(duì)學(xué)習(xí)過(guò)的算法和數(shù)據(jù)結(jié)構(gòu)進(jìn)行總結(jié)回顧,這樣可以更好的得到這種方法的精髓。因?yàn)榛A(chǔ)的元素,包括數(shù)據(jù)結(jié)構(gòu)和計(jì)算規(guī)則都是有限的,所以多樣的算法更多的是在不同的場(chǎng)景下,對(duì)于不同元素的一個(gè)排列組合,如果能夠融會(huì)貫通各個(gè)基礎(chǔ)元素的原理和使用,不管是對(duì)于新知識(shí)的學(xué)習(xí)還是對(duì)于新解決方案的構(gòu)建都是非常有幫助的。
對(duì)于工具的選擇,建議精通一個(gè),對(duì)于其他工具也需要知道,比如精通Java和MapReduce,對(duì)于Spark和Python也需要熟悉,這樣可以在不同的場(chǎng)景下使用不同的工具,提升開(kāi)發(fā)效率。這一部分實(shí)在是太多、太廣,這里不能全面地介紹,大家可以根據(jù)自己的需求,選擇合適的學(xué)習(xí)資料進(jìn)行學(xué)習(xí)。這里給出一個(gè)學(xué)習(xí)基礎(chǔ)算法(包含排序、圖、字符串處理等)的課程鏈接:https://algs4.cs.princeton.edu/home/。
語(yǔ)言學(xué)
這一部分就更多是語(yǔ)文相關(guān)的知識(shí),比如一個(gè)句子的組成成分包括:主、謂、賓、定、狀、補(bǔ)等。對(duì)于各個(gè)成分的組織形式也是多種多樣。比如對(duì)于主、謂、賓,常規(guī)的順序就是:主語(yǔ)→謂語(yǔ)→賓語(yǔ)。當(dāng)然也會(huì)有:賓語(yǔ)→主語(yǔ)→賓語(yǔ)(飯我吃了)。這些知識(shí)的積累有助于我們?cè)谀P蜆?gòu)建或者解決具體業(yè)務(wù)的時(shí)候,能夠事半功倍,因?yàn)檫@些知識(shí)一般情況下,如果要被機(jī)器學(xué)習(xí),都是非常困難的,或者會(huì)需要大量的學(xué)習(xí)素材,或許在現(xiàn)有的框架下,機(jī)器很難學(xué)習(xí)到。如果把這些知識(shí)作為先驗(yàn)知識(shí)融合到模型中,對(duì)于提升模型的準(zhǔn)確度都是非常有價(jià)值的。
在先期的研究中,基于規(guī)則的模型,大部分都是基于語(yǔ)言模型的規(guī)則進(jìn)行研究和處理的。所以這一部分的內(nèi)容對(duì)于自然語(yǔ)言處理也是非常重要的。但是這部分知識(shí)的學(xué)習(xí)就比較雜一些,因?yàn)榇蟛糠值淖匀徽Z(yǔ)言處理工程師都是語(yǔ)言學(xué)專業(yè)出身,所以對(duì)于這部分知識(shí)的學(xué)習(xí),大部分情況都是靠碎片化的積累,當(dāng)然也可以花一些精力,系統(tǒng)性學(xué)習(xí)。對(duì)于這部分知識(shí)的學(xué)習(xí),個(gè)人建議可以根據(jù)具體的業(yè)務(wù)場(chǎng)景進(jìn)行學(xué)習(xí),比如在項(xiàng)目處理中要進(jìn)行同義詞挖掘,那么就可以跟著“百科”或者“搜索引擎”學(xué)習(xí)同義詞的定義,同義詞一般會(huì)有什么樣的形式,怎么根據(jù)句子結(jié)構(gòu)或者語(yǔ)法結(jié)構(gòu)判斷兩個(gè)詞是不是同義詞等等。
隨著深度學(xué)習(xí)在視覺(jué)和自然語(yǔ)言處理領(lǐng)域大獲成功,特別是隨著AlphaGo的成功,深度學(xué)習(xí)在自然語(yǔ)言處理中的應(yīng)用也越來(lái)越廣泛,大家對(duì)于它的期望也越來(lái)越高。所以對(duì)于這部分知識(shí)的學(xué)習(xí)也幾乎成為了一個(gè)必備的環(huán)節(jié)(實(shí)際上可能是大部分情況,不用深度學(xué)習(xí)的模型,也可以解決很多業(yè)務(wù))。
對(duì)于這部分知識(shí),現(xiàn)在流行的幾種神經(jīng)網(wǎng)絡(luò)都是需要學(xué)習(xí)和關(guān)注的,特別是循環(huán)神經(jīng)網(wǎng)絡(luò),因?yàn)槠湓谔幚頃r(shí)序數(shù)據(jù)上的優(yōu)勢(shì),在自然語(yǔ)言處理領(lǐng)域尤為收到追捧,這里包括單項(xiàng)RNN、雙向RNN、LSTM等形式。同時(shí)新的學(xué)習(xí)框架,比如對(duì)抗學(xué)習(xí)、增強(qiáng)學(xué)習(xí)、對(duì)偶學(xué)習(xí),也是需要關(guān)注的。其中對(duì)抗學(xué)習(xí)和對(duì)偶學(xué)習(xí)都可以顯著降低對(duì)樣本的需求,這個(gè)對(duì)于自然語(yǔ)言處理的價(jià)值是非常大的,因?yàn)樵谧匀徽Z(yǔ)言處理中,很重要的一個(gè)環(huán)節(jié)就是樣本的標(biāo)注,很多模型都是嚴(yán)重依賴于樣本的好壞,而隨著人工成本的上升,數(shù)據(jù)標(biāo)注的成本越來(lái)越高,所以如果能顯著降低標(biāo)注數(shù)據(jù)需求,同時(shí)提升效果,那將是非常有價(jià)值的。
現(xiàn)在還有一個(gè)事物正在如火如荼地進(jìn)行著,就是知識(shí)圖譜,知識(shí)圖譜的強(qiáng)大這里就不再贅述,對(duì)于這部分的學(xué)習(xí)可能更多的是要關(guān)注信息的鏈接、整合和推理的技術(shù)。不過(guò)這里的每一項(xiàng)技術(shù)都是非常大的一個(gè)領(lǐng)域,所以還是建議從業(yè)務(wù)實(shí)際需求出發(fā)去學(xué)習(xí)相應(yīng)的環(huán)節(jié)和知識(shí),滿足自己的需求,鏈接http://www.chinahadoop.cn/course/918。
自然語(yǔ)言處理現(xiàn)狀
隨著知識(shí)圖譜在搜索領(lǐng)域的大獲成功,以及知識(shí)圖譜的推廣如火如荼地進(jìn)行中,現(xiàn)在的自然語(yǔ)言處理有明顯和知識(shí)圖譜結(jié)合的趨勢(shì)。特別是在特定領(lǐng)域的客服系統(tǒng)構(gòu)建中,這種趨勢(shì)就更明顯,因?yàn)檫@些系統(tǒng)往往要關(guān)聯(lián)很多領(lǐng)域的知識(shí),而這種知識(shí)的整合和表示,很適合用知識(shí)圖譜來(lái)解決。隨著知識(shí)圖譜基礎(chǔ)工程技術(shù)的完善和進(jìn)步,對(duì)于圖譜構(gòu)建的容易程度也大大提高,所以自然語(yǔ)言處理和知識(shí)圖譜的結(jié)合就越來(lái)越成為趨勢(shì)。
語(yǔ)義理解仍然是自然語(yǔ)言處理中一個(gè)難過(guò)的坎。目前各項(xiàng)自然語(yǔ)言處理技術(shù)基本已經(jīng)比較成熟,但是很多技術(shù)的效果還達(dá)不到商用的水平。特別是在語(yǔ)義理解方面,和商用還有比較大的差距。比如聊天機(jī)器人現(xiàn)在還很難做到正常的聊天水平。不過(guò)隨著各個(gè)研究機(jī)構(gòu)和企業(yè)的不斷努力,進(jìn)步也是飛速的,比如微軟小冰一直在不斷的進(jìn)步。
對(duì)于新的深度學(xué)習(xí)框架,目前在自然語(yǔ)言處理中的應(yīng)用還有待進(jìn)一步加深和提高。比如對(duì)抗學(xué)習(xí)、對(duì)偶學(xué)習(xí)等雖然在圖像處理領(lǐng)域得到了比較好的效果,但是在自然語(yǔ)言處理領(lǐng)域的效果就稍微差一些,這里面的原因是多樣的,因?yàn)闆](méi)有深入研究,就不敢妄言。
目前人機(jī)對(duì)話、問(wèn)答系統(tǒng)、語(yǔ)言翻譯是自然語(yǔ)言處理中的熱門(mén)領(lǐng)域,各大公司都有了自己的語(yǔ)音助手,這一塊也都在投入大量的精力在做。當(dāng)然這些上層的應(yīng)用,也都依賴于底層技術(shù)和模型的進(jìn)步,所以對(duì)于底層技術(shù)的研究應(yīng)該說(shuō)一直是熱門(mén),在未來(lái)一段時(shí)間應(yīng)該也都還是熱門(mén)。之前聽(tīng)一個(gè)教授講過(guò)一個(gè)故事,他是做parser的,開(kāi)始的時(shí)候很火,后來(lái)一段時(shí)間因?yàn)檎麄€(gè)自然語(yǔ)言處理的效果差強(qiáng)人意,所以作為其中一個(gè)基礎(chǔ)工作的parser就隨之受到冷落,曾經(jīng)有段時(shí)間相關(guān)的期刊會(huì)議會(huì)員銳減,但是最近整個(gè)行業(yè)的升溫,這部分工作也隨之而受到重視。不過(guò)因?yàn)樗恢眻?jiān)持在這個(gè)領(lǐng)域,所以建樹(shù)頗豐,最近也成為熱門(mén)領(lǐng)域和人物。
所以在最后引用一位大牛曾經(jīng)說(shuō)過(guò)的話:“任何行業(yè)或者領(lǐng)域做到頭部都是非常有前途的,即使是打球,玩游戲?!保ù笠猓?/p>
個(gè)人經(jīng)驗(yàn)
筆者是跟著項(xiàng)目學(xué)習(xí)自然語(yǔ)言處理的,非科班出身,所以的經(jīng)驗(yàn)難免會(huì)有偏頗,說(shuō)出來(lái)僅供大家參考, 有不足和紕漏的地方敬請(qǐng)指正。
知識(shí)結(jié)構(gòu)
要做算法研究,肯定需要一定的知識(shí)積累,對(duì)于知識(shí)積累這部分,我的經(jīng)驗(yàn)是先學(xué)數(shù)學(xué)理論基礎(chǔ),學(xué)的順序可以是代數(shù)→概率論→隨機(jī)過(guò)程。當(dāng)然這里面每一科都是很大的一個(gè)方向,學(xué)的時(shí)候不必面面俱到,所有都深入理解,但是相對(duì)基礎(chǔ)的一些概念和這門(mén)學(xué)科主要講的是什么問(wèn)題一定要記住。
在學(xué)習(xí)了一些基礎(chǔ)數(shù)學(xué)知識(shí)之后,就開(kāi)始實(shí)現(xiàn)——編寫(xiě)算法。這里的算法模型,建議跟著具體的業(yè)務(wù)來(lái)學(xué)習(xí)和實(shí)踐,比如可以先從識(shí)別垃圾郵件這樣的demo進(jìn)行學(xué)習(xí)實(shí)驗(yàn),這樣的例子在網(wǎng)上很容易找到,但是找到以后,一定不要看看就過(guò)去,要一步一步改寫(xiě)拿到的demo,同時(shí)可以改進(jìn)里面的參數(shù)或者實(shí)現(xiàn)方法,看看能不能達(dá)到更好的效果。個(gè)人覺(jué)得學(xué)習(xí)還是需要下苦功夫一步一步模仿,然后改進(jìn),才能深入的掌握相應(yīng)的內(nèi)容。對(duì)于學(xué)習(xí)的資料,上學(xué)時(shí)期的各個(gè)教程即可。
工具
工欲善其事必先利其器,所以好的工具往往能事半功倍。在工具的選擇上,個(gè)人建議,最高優(yōu)先級(jí)的是Python,畢竟其的宣傳口語(yǔ)是:人生苦短,請(qǐng)用Python。第二優(yōu)先級(jí)的是Java,基于Java可以和現(xiàn)有的很多框架進(jìn)行直接交互,比如Hadoop、Spark等等。對(duì)于工具的學(xué)習(xí)兩者還是有很大的差別的,Python是一個(gè)腳本語(yǔ)言,所以更多的是跟著“命令”學(xué),也就是要掌握你要實(shí)現(xiàn)什么目的來(lái)找具體的執(zhí)行語(yǔ)句或者命令,同時(shí)因?yàn)镻ython不同版本、不同包對(duì)于同一個(gè)功能的函數(shù)實(shí)現(xiàn)差別也比較大,所以在學(xué)習(xí)的時(shí)候,要多試驗(yàn),求同存異。
對(duì)于Java就要學(xué)習(xí)一些基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu),然后一步一步的去編寫(xiě)自己的邏輯。對(duì)于Python當(dāng)然也可以按照這個(gè)思路,Python本身也是一個(gè)高級(jí)編程語(yǔ)言,所以掌握了基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)之后,也可以一步一步的實(shí)現(xiàn)具體的功能,但是那樣好像就失去了slogan的意義。
緊跟時(shí)代
自然語(yǔ)言處理領(lǐng)域也算是一個(gè)知識(shí)密集型的行業(yè),所以知識(shí)的更新迭代非常的快,要時(shí)刻關(guān)注行業(yè)、領(lǐng)域的最新進(jìn)展。這個(gè)方面主要就是看一些論文和關(guān)注一些重要的會(huì)議,對(duì)于論文的獲取,Google Scholar、arxiv都是很好的工具和資源(請(qǐng)注意維護(hù)知識(shí)產(chǎn)權(quán))。會(huì)議就更多了KDD、JIST、CCKS等等。
-
人工智能
+關(guān)注
關(guān)注
1791文章
47282瀏覽量
238534 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5503瀏覽量
121175 -
nlp
+關(guān)注
關(guān)注
1文章
488瀏覽量
22038
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論