隨著人工智能技術的發(fā)展,我們生活中的許多應用已經都與AI技術產生了關聯(lián),例如通過手機翻譯軟件實時給自己的語言進行翻譯,利用圖像識別技術對面容進行認證等等。其中,在語言處理這塊,自然語言處理則是使其智能化的重要方式,是人工智能領域的一個重要分支。其利用計算機技術來分析、理解和處理自然語言, 建立起可供人與計算機之間能相互聯(lián)系方式,下面就讓我們一起來揭開它的面紗吧!
1.何為NLP?
NLP即natural language processing,中文也就是自然語言處理。顧名思義就是對自然界存在的人類能理解的語言進行處理。那么處理是為了什么,當然就是為了使得計算機能夠理解人類使用的語言,并且能夠和人類進行一些交互,也就是使得計算機具備人類語言的能力,從而實現(xiàn)人工智能化。對于人工智能領域的技術或者知識,我更傾向于使用通俗、易理解的方式去表達,我覺得這樣更加有利于去學習這些知識的受眾,使得受眾更為廣泛。所以,自然語言處理反過來就是該領域所作的事情——處理自然語言。
2.NLP領域與處理過程
NLP目前所用領域主要有語音助手、機器翻譯、命名實體識別、情感識別、文本檢索等,本人從事的NLP相關工作主要是情感識別和文本檢索這兩塊。對于NLP的具體處理過程普遍較為一致,即三步走:文本預處理(表示、數(shù)據(jù)分析、文本增強)——處理模型——輸出所需結果(目標語言、情感極性、檢索結果等)。不難看出,這三個步驟中,最為核心的就是處理模型的選取,隨著深度學習技術的不管發(fā)展與完善,每一年都會有新的處理技術被使用,這也是眾多NLP研究者所關注并加以創(chuàng)新的關鍵。其次,較為重要的一步就是文本預處理,對于任何一種自然語言,使其更為規(guī)范化、更具備豐富語義、更為計算機所理解的目的出發(fā),對于文本進行預處理的方法也是不斷完善的過程。至于最后一步的輸出結果則是沒那么重要的一環(huán),它的不同是基于不同的任務而改變,選定好研究的應用領域,最后一步的輸出結果也就定了下來,所以很少的研究者會對這一塊加以重視。當然,對于這一塊也是不至于去重視的。因此,對于NLP重點需要理解掌握的就是處理模型的相關技術,而這些技術我也會在后續(xù)內容進行闡述,并且對于每一技術提出自己的想法與理解,來有助于相關工作者對于這些技術的提升與創(chuàng)新。不過在這之前,首先得提下文本預處理這塊,因為它是整個處理過程的基礎,俗話說:“巧婦難為無米之炊”,而這文本預處理就是去產生“米”的過程,下面我們一起來看下“米”所產生的過程。
3.文本預處理
文本預處理,是文本語料在輸送給模型前一般需要做的一系列預處理工作,畢竟計算機不是人類,需要將自然語言處理成計算機能夠識別、能夠處理的數(shù)據(jù),才能輸入到計算機相關模型中去。因此,對于文本語料,需要進行預處理工作,才可以符合計算機模型輸入的要求。例如:將自然語言文本轉化為模型能夠處理的張量(即多為數(shù)據(jù)向量),來規(guī)范張量的尺寸和維度等,對文本預料進行科學的預處理環(huán)節(jié)可以有效地指導后續(xù)計算模型的參數(shù)調整,從而更好的提升計算模型的評估指標。文本預處理包括文本處理的基本方法、文本張量的表示、文本語料的分析和文本數(shù)據(jù)的增強四個方面。
3.1.文本處理方法——分詞、詞性標注、命名實體識別
對于需要處理的文本語料,目前我們最為常見的是短文本和長文本,也就是一句話、一段話或者一篇文章。對于這些短文本和長文本的處理就需要去其進行分詞處理,將短文本和長文本切分為一個個可以理解的單詞、漢字或者詞語。而如果基本的文本語料已經是某一單詞、漢字或者詞語的情況,那么也就沒有必要進行分詞處理的這一步了。其中對于分詞的技術,目前最為常用的工具為jieba和hanlp,至于如何去用這兩個工具就不去具體說明了,因為這是最為基本的分詞工具,去IDE軟件庫中都有下載并且有使用教程。其實在后續(xù)開發(fā)中,對于這塊的處理并不會去使用這些基本的工具,因為在后續(xù)的計算模型所用到的深度學習技術中基本都包含了這塊,也就是用一個具體的方法就可以實現(xiàn)分詞,沒有必要再去分別下載相關的分析工具了。對于文本進行分詞后,得到的是一個個詞語或者單詞,因此對于這些詞語或者單詞的屬性就需要具體進行具體的分析,包括命名實體識別和詞性標注。
命名實體識別也就是對分詞后的詞語進行名詞實體的標注,找到里面的人名、地名、機構名等專業(yè)名詞。因為除了常見的詞語以外,對于這些專有名詞的識別,會使得計算機對于這些特殊的專有名詞有個基礎的識別,從而不會干擾到對于后續(xù)其他詞語詞性的識別,這也是解決NLP高階任務的重要基礎環(huán)節(jié)。再對文本詞語進行命名實體識別,使得計算機掌握對于專有名詞的識別后,就要對于最為常見的其他詞語進行分析了,其中就包括了詞性的標注,而這些詞性就包括:名詞、動詞、形容詞等等。通過標注每一段文本中的每一詞匯的詞性,使得計算機對于完整的文本語言有了一個基本的認識,在此基礎上再進行處理,處理成計算機能夠處理的張量形式了。
3.2.文本張量表示——one-hot\word2vec\ word Embedding
經過以上的分詞和詞性標注相關處理后,由于詞語依舊是自然語言的形式,即中文或者英文(NLP實際的應用領域最為常見的語言是中文和英文,因此,本文對于文本語料的選取也是基于中文和英文兩種。),而這種類型計算機依舊是無法處理的,所以需要對這些自然語言的形式進行類似數(shù)字向量的表示,也就是詞向量(向量也就是張量的一種),使得文本中的每一個詞語都對應向量矩陣中的一個向量。這也就是文本張量的表示。通過將文本表示為張量(矩陣)形式,從而使得語言文本可以作為計算機處理模型的輸入,來進行接下來一系列的解析工作。目前文本張量的表示有三種:
(1) One-hot編碼:即獨熱編碼,這也是最為簡單的詞向量表示方法,具體就是根據(jù)詞語的位置關系,將每個詞語表示為具有n個元素的向量(n為詞語的個數(shù),也稱維度),這個向量中只有一個元素為1,其他元素都是0。而1的位置也就是詞語在所有詞語中的順序。如下所示:
[“我”,“喜歡”,“看”,“51”,“CTO”],“我”為第一個位置,以此類推,經過One-hot編碼為:[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]
(2) word2vec:基于One-hot方法,但是比One-hot方法更利于學習文本詞語之間的相互關系,是一種將詞匯表示成向量大的無監(jiān)督的訓練方式(即自主訓練),通過構建神經網(wǎng)絡模型,將網(wǎng)絡參數(shù)來作為詞匯的向量表示,包括CBOW和skipgram兩種,這兩種方法訓練起來過程類似,知識文本詞語的選取有所不同。對于CBOW方法,是通過對于訓練的文本語料,選定某一長度(窗口)作為對象,扣除其中的某一個詞匯,通過該單詞的上下詞匯來預測扣除的詞匯。當然,這些詞匯得先基于One-hot編碼表示為能處理的向量的形式才行。而skipgram和CBOW正好相反,不是扣除某一個單詞,而是扣除某一個單詞的上下文,通過該單詞來預測該單詞的上下文。這兩種方法所學習到的文本詞語之間的關系大致相同,對于模型的最終指標和性能也基本一樣,所以兩種方法都可供選擇,沒有優(yōu)劣之分。這兩個方法的全過程如下圖所示:
(3) word Embedding:與word2vec類似,都是基于神經網(wǎng)絡模型的方法,都是在對神經網(wǎng)絡模型進行訓練的過程中來提取到文本的詞向量,在這稱為Embedding。不過該方法訓練的Embedding比word2vec方法得到的詞向量的維度會更高,特征會豐富。其中廣義的word embedding是包括word2vec方法,即word2vec可認為是word embedding的一種;狹義的word embedding是指在神經網(wǎng)絡中加入的embedding層,對整個網(wǎng)絡進行訓練的同時產生的embedding矩陣(embedding層的參數(shù)),這個embedding矩陣就是訓練過程中所有輸入詞匯的向量表示組成的矩陣。由于不同的神經網(wǎng)絡訓練的模型不同,加入的embedding層的訓練也會有所不同,學習到的word Embedding也會有好壞之分。因此這個word Embedding就是不同神經網(wǎng)絡模型中的訓練參數(shù),網(wǎng)絡模型選取的好壞也就影響了word Embedding的質量,我會在后續(xù)的不同訓練網(wǎng)絡模型中再對這塊進行補充。
3.3. 文本語料的數(shù)據(jù)分析和特征處理
文本語料的數(shù)據(jù)分析是對計算機理解文本內容起到輔助的作用,在實際應用中其實很少會使用到。對文本數(shù)據(jù)進行分析可以有效的幫助理解數(shù)據(jù)語料,找到語料中可能純在的問題,從而來輔助指導后續(xù)模型訓練中的超參數(shù)的選擇。其中數(shù)據(jù)分析方法都是以統(tǒng)計為主,例如統(tǒng)計文本中詞語的標簽數(shù)量、句子的長度、某一詞匯出現(xiàn)的頻率等等。由于這塊是以基本的統(tǒng)計計數(shù)功能為主,并且使用不多,就不再贅敘。
而對于特征的處理,也是對于詞向量提取方法的一個補充或者延申,通過添加n-gram特征或者限定文本長度來規(guī)范和豐富語料信息。其中n-gram的n是可以選擇的,目前大多取2和3,也就是除了對單一的詞語進行分析以外,還考慮了兩個詞語甚至三個詞語合并為一個詞語進行分析的情況,從而使得學習到的特征更為廣泛、豐富。而文本長度限制就是對輸入模型的向量長度進行了一個規(guī)范化處理,對句子的長度分布選取一個能夠覆蓋絕大數(shù)多數(shù)文本的合理長度,對超長的文本進行一個截取,對不足的文本進行補齊(一般采用補0操作),經過向量長度規(guī)范化處理以后,有利于后續(xù)模型訓練的性能。
3.4數(shù)據(jù)增強處理
數(shù)據(jù)增強其實就是對文本數(shù)據(jù)加入一些其他的語義特征,使得基本的語料攜帶的特征更為豐富。這類增強方法在計算機視覺領域應用更為廣發(fā),在NLP領域使用較少,但是具有一定的輔助功能。目前采用的增強辦法是回譯數(shù)據(jù)增強法,通俗來講就是講基本的語料的語言不斷轉化為替他國家的語言,從而也就得到對于其他國家語言的內部特征信息。操作起來比較簡便,學習到的輔助信息質量也較高。但是在這也存在一個問題,就是對于語言的轉換不能進行過多的操作,太多的轉換操作會造成原有語義的丟失,造成語義失真,并且使得最終數(shù)據(jù)的產生效率低下。所以需要謹慎選取轉換的次數(shù),根據(jù)以往的工作經驗,一般建議最多進行3次的語言轉換操作。具體次數(shù)依據(jù)具體模型以及最終的參數(shù)提高為準。
4.總結
在這篇文章中,主要對自然語言處理的預備技術——即文本語料的預處理進行了闡述與分析,其中最為核心的是其中的文本張量的表示,通過上述的技術框架可以對基本的文本張量表示技術流程有個更為清晰的認知。除此之外,對于文本數(shù)據(jù)增強技術的了解也將有利于今后對自然語料進行分析,從而提取更為豐富而潛在的語義特征。當然,這只是自然語言處理的預備技術,同時對于文本張量的表示也會有其他更為優(yōu)越的網(wǎng)絡模型,由于篇幅緣故,這些我會在后續(xù)文稿中一一闡述。
作者介紹
稀飯,51CTO社區(qū)編輯,曾任職某電商人工智能研發(fā)中心大數(shù)據(jù)技術部門,做推薦算法。目前攻讀智能網(wǎng)絡與大數(shù)據(jù)方向的研究生,主要擅長領域有推薦算法、NLP、CV,使用代碼語言有Java、Python、Scala。