自然語(yǔ)言處理入門(mén)教程
自然語(yǔ)言處理(NLP)是計(jì)算機(jī)科學(xué)領(lǐng)域和人工智能領(lǐng)域中的一個(gè)分支,它與計(jì)算機(jī)和人類之間使用自然語(yǔ)言進(jìn)行互動(dòng)密切相關(guān)。NLP的最終目標(biāo)是使計(jì)算機(jī)能夠像人類一樣理解語(yǔ)言。它是虛擬助手、語(yǔ)音識(shí)別、情感分析、自動(dòng)文本摘要、機(jī)器翻譯等的驅(qū)動(dòng)力。在這篇文章中,你將學(xué)習(xí)到自然語(yǔ)言處理的基礎(chǔ)知識(shí),深入了解到它的一些技術(shù),了解到NLP如何從深度學(xué)習(xí)的最新進(jìn)展。
1.簡(jiǎn)介
自然語(yǔ)言處理(NLP)是計(jì)算機(jī)科學(xué)、語(yǔ)言學(xué)和機(jī)器學(xué)習(xí)的交叉點(diǎn),它關(guān)注計(jì)算機(jī)與人類之間使用自然語(yǔ)言中的溝通交流??傊?,NLP致力于讓計(jì)算機(jī)能夠理解和生成人類語(yǔ)言。NLP技術(shù)應(yīng)用于多個(gè)領(lǐng)域,比如天貓精靈和Siri這樣的語(yǔ)音助手,還有機(jī)器翻譯和文本過(guò)濾等。機(jī)器學(xué)習(xí)是受NLP影響最深遠(yuǎn)的領(lǐng)域之一,尤為突出的是深度學(xué)習(xí)技術(shù)。該領(lǐng)域分為以下三個(gè)部分:
1.語(yǔ)音識(shí)別:將口語(yǔ)翻譯成文本。
2.自然語(yǔ)言理解:計(jì)算機(jī)理解人類的能力。
3.自然語(yǔ)言生成:計(jì)算機(jī)生成自然語(yǔ)言。
2.為什么NLP很難
人類語(yǔ)言有其特殊性。人類語(yǔ)言專門(mén)用于傳達(dá)講話者和寫(xiě)作者的意思,即使小孩子能夠很快學(xué)會(huì),它依然是一個(gè)復(fù)雜的系統(tǒng)。它的另一個(gè)顯著之處在于它完全與符號(hào)有關(guān)。Chris Manning(斯坦福教授)表示,它是一個(gè)離散的、象征性的、絕對(duì)的信號(hào)系統(tǒng),這意味著人們可以通過(guò)使用不同的方式傳達(dá)相同的含義,比如演說(shuō),手勢(shì),信號(hào)等。人類大腦對(duì)這些符號(hào)的編碼是持續(xù)的激活模式,在這個(gè)模式中,符號(hào)通過(guò)聲音和視覺(jué)的連續(xù)信號(hào)實(shí)現(xiàn)傳輸。
由于其復(fù)雜性,理解人類語(yǔ)言被認(rèn)為是一項(xiàng)艱巨的任務(wù)。例如,在句子中排列單詞有無(wú)數(shù)種不同的方法。此外,一個(gè)單詞可以有多種含義,并且正確解釋句子需要恰當(dāng)?shù)恼Z(yǔ)境信息。每種語(yǔ)言或多或少都是獨(dú)特且含糊的。比如:“The Pope’s baby steps on gays”,這句話顯然有兩種截然不同的解釋,這是反映NLP中的困難之處的一個(gè)很好的例子。
隨著計(jì)算機(jī)對(duì)語(yǔ)言的理解愈漸完美,將會(huì)產(chǎn)生可以處理互聯(lián)網(wǎng)上全部信息的人工智能(AI),繼而產(chǎn)生強(qiáng)人工智能(AGI)。
3.句法和語(yǔ)義分析
句法分析和語(yǔ)義分析是理解自然語(yǔ)言的兩種主要方法。語(yǔ)言是一組意義的語(yǔ)句,但是什么使語(yǔ)句有意義呢?實(shí)際上,你可以將有效性分為兩類:句法和語(yǔ)義。術(shù)語(yǔ)“句法”是指文本的語(yǔ)法結(jié)構(gòu),而術(shù)語(yǔ)“語(yǔ)義”是指由它表達(dá)的含義。但是,句法上正確的語(yǔ)句不必在語(yǔ)義上正確。只需看看下面的例子。語(yǔ)句“cow kow supremely”在語(yǔ)法上是有效的(主語(yǔ)-動(dòng)詞-副詞),但沒(méi)有任何意義。
句法分析:
句法分析,也稱為語(yǔ)法分析或解析,是通過(guò)遵循正式語(yǔ)法規(guī)則來(lái)分析自然語(yǔ)言的過(guò)程。語(yǔ)法規(guī)則適用于單詞和詞組,而不是單個(gè)單詞。語(yǔ)法分析主要為文本分配語(yǔ)義結(jié)構(gòu)。
語(yǔ)義分析:
我們理解他人的語(yǔ)言是一種無(wú)意識(shí)的過(guò)程,依賴于直覺(jué)和對(duì)語(yǔ)言本身的認(rèn)識(shí)。因此,我們理解語(yǔ)言的方式很大程度上取決于意義和語(yǔ)境。計(jì)算機(jī)卻不能依賴上述方法,需要采用不同的途徑。 “語(yǔ)義”這個(gè)詞是一個(gè)語(yǔ)言術(shù)語(yǔ),意思與意義或邏輯相近。
因此,語(yǔ)義分析是理解單詞、符號(hào)和語(yǔ)句結(jié)構(gòu)的含義和解釋的過(guò)程,這使計(jì)算機(jī)能夠以人類的方式理解部分涉及意義和語(yǔ)境的自然語(yǔ)言。為什么說(shuō)只能部分理解呢?是因?yàn)檎Z(yǔ)義分析是NLP中最棘手的部分之一,仍未完全解決。例如,語(yǔ)音識(shí)別技術(shù)已非常成熟,并且工作近乎完美,但仍然缺乏在自然語(yǔ)言理解(例如語(yǔ)義)中的熟練程度。手機(jī)基本上可以理解我們所說(shuō)的內(nèi)容,但通常無(wú)法用它做任何事情,因?yàn)樗涣私馄浔澈笠饬x。
4.理解文本的技巧
下面我們將討論多種用于自然語(yǔ)言處理的現(xiàn)行技術(shù)。
什么是解析?首先,讓我們看一下詞典釋義:
解析—“將句子分解為其組成部分,并闡述各部分的句法角色?!?/span>
實(shí)際上解釋的已經(jīng)非常到位,但它可以更全面一些。解析是指計(jì)算機(jī)對(duì)句子的形式分析,其結(jié)果是一個(gè)解析樹(shù),這個(gè)解析樹(shù)可以可視化地顯示句子成分之間的句法關(guān)系,用于進(jìn)一步處理和理解。
在下面你可以看到句子“The thief robbed the apartment”的解析樹(shù),以及由它傳達(dá)的三種不同信息類型的描述。
我先看單個(gè)單詞正上方的字母,它們用于顯示每個(gè)單詞的詞性(名詞-N,動(dòng)詞-V和限定詞-DT)。我們?cè)倏唇馕鰳?shù)中更高的層級(jí),一些單詞進(jìn)行層次分組組成短語(yǔ)。例如,“the thief”是一個(gè)名詞短語(yǔ)(NP),“robbed the apartment”是一個(gè)動(dòng)詞短語(yǔ)(VP),這些短語(yǔ)一起形成一個(gè)句子(S),在樹(shù)中標(biāo)記在更高的層級(jí)。
這些短語(yǔ)以名詞為主體,包含一個(gè)或多個(gè)單詞,可能還包含描述性詞語(yǔ)、動(dòng)詞或副詞,簡(jiǎn)言之,就是把把名詞和與其相關(guān)的單詞組合在一起。
從解析樹(shù)中還能看出,單詞的表述結(jié)構(gòu)影響其在句中的語(yǔ)法關(guān)系。例如,在此結(jié)構(gòu)中,“thief”是“robbed”的主語(yǔ)。
結(jié)合結(jié)構(gòu)來(lái)看,動(dòng)詞“robbed”,上方標(biāo)有“V”,更上一級(jí)標(biāo)有“VP”;主語(yǔ)“thief”,上方標(biāo)有N和“NP”,通過(guò)“S”聯(lián)系在一起。這就像主語(yǔ)—?jiǎng)釉~關(guān)系的模板,同樣還有許多其他類型的關(guān)系。
詞干提?。?/span>
詞干提取是一種來(lái)自形態(tài)學(xué)和信息檢索的技術(shù),在NLP中用于預(yù)處理和效率提升。但是,我們首先看一下詞典中的釋義:詞干 — “起源于或由其引起。”
基本上,“詞干提取”是將單詞進(jìn)行縮減得到詞干的過(guò)程,而“詞干”的實(shí)際意義是是在刪除單詞的所有的前綴后綴之后保留的一部分。例如,“touched”,它的詞干是“touch”,同時(shí)“touch”也是“touching”等詞的詞干。
為什么需要詞干?因?yàn)槲覀儠?huì)遇到不同的詞匯變形,而實(shí)際上它們具有相同的詞干和意義。舉例來(lái)說(shuō):
# I was taking a ride in the car
# I was riding in the car.
這兩個(gè)句子意思是一致的,ride和riding的用法也是相同的。
詞匯表中所有的單詞有不同的注釋,其中還包括大量實(shí)際意義相同的單詞,要存儲(chǔ)它們,需要一個(gè)龐大數(shù)據(jù)庫(kù),但是通過(guò)詞干提取,僅關(guān)注單詞的詞干,可以很好地解決這個(gè)問(wèn)題?,F(xiàn)行的通用算法之一是1979年的“Porter Stemming Algorithm”(波特詞干算法),非常使用便捷。
文字分割:
NLP中的文本分割是將文本轉(zhuǎn)換為有意義的單元的過(guò)程,可以是單詞、句子、也可以是不同的主題或潛在的意圖等。在文本分割中,文本根據(jù)不同語(yǔ)種被分割為成份單詞,由于人類語(yǔ)言的復(fù)雜性,通常比較難。舉個(gè)例子,在英語(yǔ)中利用空格來(lái)分隔單詞,相對(duì)高效實(shí)用,但是也有像“ice box”這類詞語(yǔ)的例外,ice和box這兩個(gè)由空格隔開(kāi)的詞合并一起使用才有原本含義的,所以人們有時(shí)把它寫(xiě)作“ice-box”,那么就給文字分割帶來(lái)了難題。
命名實(shí)體識(shí)別:
命名實(shí)體識(shí)別(NER)用于確定文本中哪些詞條屬于命名實(shí)體,這些詞條可以被定位并歸入預(yù)定義的類別,類別的范圍包括人名,組織,地點(diǎn),還有貨幣價(jià)值和百分比。
看下面的例子:
NER之前:Martin bought 300 shares of SAP in 2016.
NER之后:[Martin]Person bought 300 shares of [SAP]Organization in [2016]Time.
關(guān)系抽?。?/span>
關(guān)系提取采用“命名實(shí)體識(shí)別(NER)”的命名實(shí)體,并識(shí)別它們之間的語(yǔ)義關(guān)系。這可能意味著它能夠發(fā)現(xiàn)文本中詞語(yǔ)之間的關(guān)聯(lián)性,例如誰(shuí)與誰(shuí)結(jié)婚,某人在哪個(gè)公司工作等。這個(gè)問(wèn)題也可以轉(zhuǎn)換為分類問(wèn)題,然后為每種關(guān)系類型訓(xùn)練機(jī)器學(xué)習(xí)模型。
情感分析:
通過(guò)情感分析,我們想要確定例如說(shuō)話者或作者關(guān)于文檔,互動(dòng)或事件的態(tài)度(例如情緒)。因此,需要理解文本以預(yù)測(cè)潛在意圖是一種自然語(yǔ)言處理問(wèn)題。情緒主要分為積極,消極和中性兩類。通過(guò)使用情感分析,我們希望根據(jù)他撰寫(xiě)的關(guān)于產(chǎn)品的評(píng)論來(lái)預(yù)測(cè)客戶對(duì)產(chǎn)品的看法和態(tài)度。因此,情感分析廣泛應(yīng)用于評(píng)論,調(diào)查,文檔等等
如果你對(duì)使用Python中的某些技術(shù)感興趣,可以查看我創(chuàng)建的Python的自然語(yǔ)言工具包(NLTK)的Jupyter Notebook。你還可以查看我的博客文章,了解如何使用Keras構(gòu)建神經(jīng)網(wǎng)絡(luò),我將訓(xùn)練神經(jīng)網(wǎng)絡(luò)進(jìn)行情感分析。
5.深度學(xué)習(xí)和NLP
深度學(xué)習(xí)和自然語(yǔ)言的核心是“詞義”,在這里,單詞用一個(gè)實(shí)數(shù)向量來(lái)表示。因此,通過(guò)向量來(lái)代表單詞單詞,我們可以將單詞置于高維度的空間中,由向量表示的單詞起到語(yǔ)義空間的作用。這僅僅意味著在該高維向量空間中,形近意近的單詞傾向于聚集在一起。下圖中,可以看到單詞含義的直觀展示:
在此空間中,如果想要知道某一組聚集成類的單詞的含義,可以通過(guò)使用主成分分析法(PCA),也可以使用降維法。但這些方法太簡(jiǎn)單并且會(huì)遺漏了周邊的大量信息,因而產(chǎn)生誤差。在研究的初始階段,這些方法很好用,(如數(shù)據(jù)科學(xué)中的邏輯或線性回歸)但并不是前沿技術(shù)。
我們還可以將單詞的一部分當(dāng)作向量,這些向量可以代表單詞的含義。想象一下“undesirability”這個(gè)詞。使用“形態(tài)學(xué)方法”,它涉及一個(gè)詞所具有的不同部分,我們認(rèn)為它由詞素(單詞部分)構(gòu)成:“Un + desire + able + ity”。每個(gè)語(yǔ)素都有自己的向量。這允許我們構(gòu)建一個(gè)神經(jīng)網(wǎng)絡(luò),它可以構(gòu)成一個(gè)更大的單位的意義,而更大的單位又由所有這些語(yǔ)素組成。
深度學(xué)習(xí)還可以通過(guò)創(chuàng)建句法分析器來(lái)理解句子的結(jié)構(gòu),谷歌正在使用這樣的依賴解析技術(shù),在他們的“McParseface”和“SyntaxNet”(兩種語(yǔ)言解析器),不過(guò)更加宏大,更加復(fù)雜。
通過(guò)分析句子結(jié)構(gòu),我們開(kāi)始理解句子的意義,可以從單詞的含義開(kāi)始,也可以從整個(gè)短語(yǔ)和句子開(kāi)始,無(wú)論單詞的意義、短語(yǔ)還是句子,都用向量來(lái)表示。如果想知道句子之間的關(guān)系,我們可以創(chuàng)建神經(jīng)網(wǎng)絡(luò)來(lái)幫助分析。
深度學(xué)習(xí)也適用于情感分析。請(qǐng)看這個(gè)電影評(píng)論:“這部電影不在乎是不是巧妙,也不在乎幽默與否”。傳統(tǒng)的機(jī)器學(xué)習(xí)算法會(huì)認(rèn)為這是一個(gè)積極的評(píng)論,因?yàn)椤奥斆鳌焙汀坝哪笔欠e極的詞匯,但是神經(jīng)網(wǎng)絡(luò)能夠識(shí)別出它的真正含義。
另外,深度學(xué)習(xí)算法實(shí)現(xiàn)的機(jī)器翻譯中,它從句子開(kāi)始翻譯,并生成一個(gè)向量,然后用另外一種語(yǔ)言生成所需要的信息。
總而言之,NLP與深度學(xué)習(xí)相結(jié)合,就是表示單詞、短語(yǔ)的向量,以及它們的含義。