<p>「自然語言處理」是什麼</p>
<p>讓電腦擁有理解人類語言的能力，就是自然語言處理 (Natural Language Processing，縮寫 NLP)。然而，人和人之間就會誤會彼此的語言了，電腦要如何理解語義？中研院資訊科學研究所的馬偉雲助研究員說明：以中文來說，最基本的，要先教電腦學會「斷詞」和「理解詞的意思」。</p>
<h2 class="writingsH2"><strong>如何理解一種語言？</strong></h2>
<p>小時候學習中文，會背誦課文詞彙的注釋，在作業簿練習這個詞的寫法。到了國中時期學英文，面對像天書般的英文文章，會把不懂的單字圈起來，拿出字典查這個字的意思。為什麼這樣做？</p>



<blockquote><p>因為，詞彙是語言的最小單位。</p></blockquote>



<p>然而，中文有一個特殊現象，就是「詞」和「詞」之間沒有邊界，整句串起來像條鎖鏈，不像英文有空格將每個字斷開。所以，若要理解一篇中文文章，必須先學會斷詞，而要學會斷詞，必須先知道這是一個詞、以及這個詞的意思。否則可能會產生這種令人「難過」的情況：</p>
<img src="/wp-content/uploads/2020/01/ma-natural-language-processing-10.jpg" alt="" width="4167" height="1243" class="alignnone size-full wp-image-10515" />
<p>中文的詞沒有邊界，若誤解「詞的意思」與「句法結構」，會寫出這般造句練習。</p>
<p>資料來源│網路趣聞</p>

<p>那麼，問題來了，如果聰明的人類都會誤解複雜的語言，那麼只懂 011000110 的電腦有可能學會斷詞、甚至理解同一個詞在不同上下文的意思嗎？其實，這就是<a href="https://zh.wikipedia.org/wiki/%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86">自然語言處理</a> (Natural Language Processing) 的研究目標。本文專訪中研院中文詞知識庫小組計畫主持人馬偉雲，聊聊自然語言處理究竟是什麼。</p>

<img src="/wp-content/uploads/2020/01/ma-natural-language-processing-11.jpg" alt="" width="4901" height="3267" class="alignnone size-full wp-image-10519" />
<p>(馬偉雲，是一名對於「讓機器擁有理解語言的能力」深感著迷的計算機科學家。攝影│張語辰)</p>

<h2 class="writingsH2"><strong>問「自然語言」有多自然？</strong></h2>
<p>我們先來了解「自然語言」的定義，與「程式語言」有什麼差別。</p>
<img src="/wp-content/uploads/2020/01/ma-natural-language-processing-02.jpg" alt="" width="4167" height="2296" class="alignnone size-full wp-image-10522" />
<p>(程式語言 vs. 自然語言 / 圖說設計│林婷嫻、張語辰)</p>

<p>簡要來說，程式語言是人類為了與計算機溝通，而設計的人工語言；而自然語言的自然，是相對於「人工」語言的「自然」，換句話說，自然語言是人們溝通時自然地發展出來的語言。「自然語言處理」的目標，就在於讓電腦理解、或是運用人類語言。</p>

<h2 class="writingsH2"><strong>如何教電腦學會一種語言？</strong></h2>
<p>若要讓電腦理解人類的語言，以中文來說，分成兩步驟：</p>



<blockquote><p>第一步是斷詞、理解詞；第二步則是分析句子，包含語法及語義的自動解析。</p></blockquote>



<p>自然語言處理透過這兩個步驟，將複雜的語言轉化為電腦容易處理、計算的形式。早期是人工訂定規則，現在則是讓機器自己學習。</p>

<p>早期的方式是基於一套詞彙資料庫，用程式語言寫好人工訂定的規則，讓電腦依指令做出反應。但這種人工方式不可能包含所有語言的歧異性，例如，當同樣的詞在不同上下文產生不同意思，就會和原本的人工規則相互牴觸。</p>

<p>1980 年代末期，自然語言處理引進機器學習 (Machine Learning) 的演算法，不再用程式語言命令電腦所有規則，而是建立演算法模型，讓電腦學會從訓練的資料中，尋找資料所含的特定模式和趨勢。我們實驗室——中研院的「中文詞知識庫小組」團隊——就是利用機器學習的演算法，讓電腦學會從訓練的資料中，自動歸納出語言的特性。</p>
<img src="/wp-content/uploads/2020/01/ma-natural-language-processing-03.jpg" alt="" width="4167" height="2659" class="alignnone size-full wp-image-10566" />
<p>自然語言處理的演變。 圖說設計│林婷嫻、張語辰</p>

<h2 class="writingsH2"><strong>訓練電腦處理自然語言，需要什麼樣的資料？</strong></h2>
<p>我們團隊成員涵蓋中研院語言所、資訊所的研究人員，所以我們也充分利用這兩個領域的專長。</p>

<p>首先，語言學家為九萬多個中文詞彙定義了完整的語法、以及語義表達方式，並且也標明詞彙之間的關係，例如：「蝴蝶」和「昆蟲」具備「前者是後者的一種」這樣的詞彙關係；「醫生」和「病人」具備「前者醫治後者」這樣的詞彙關係。這樣的表達構建了中文的知識圖譜，我們稱為「廣義知網」。</p>

<p>詞彙的語法、語義定義完畢後，接下來我們就依這些規則，大量分析文章中的每個句子、每個詞彙的語法和語義，並將分析的結果記錄下來 ，這就是「語料標注」的工作。這些標注的語料，提供給電腦系統進行機器學習，讓電腦學會自動歸納、找出語言的語法以及語義。</p>



<blockquote><p>我們的想法是，既然語言學家已分析了某些語言結構的邏輯，那麼基於這些存在的語言學知識來教電腦歸納出語言的特性，是一種相當自然合理的方式。</p></blockquote>


<p>只是我們大多數情況下，不會直接教電腦學會語言學上的規則，給它一條魚，不如給它一支釣竿。我們是給電腦看語言學家分析完成的大量結果，由電腦利用機器學習而自動歸納得到 「規則」， 並以參數的方式(請別擔心，一定是人們看得懂的形態)，儲存在資訊學家所設計的模型當中。這種電腦自動學出來的模型，能夠很好地解決語言歧異性，也不會有人工寫死規則的問題。</p>

<h2 class="writingsH2"><strong>電腦可以認識所有「詞」嗎？</strong></h2>
<p>語言的詞彙組合無窮無盡，不可能將所有詞都收進資料庫中訓練電腦。當電腦面對與時俱進的新詞，例如「郭書瑤」、「班奈狄克·康柏拜區」、「漫撕男」、「非典」，電腦就無法辨識、理解這個詞。</p>



<blockquote><p>通常未知詞可分為幾種類型：可能是人名、可能是複合詞、或可能是專有名詞。</p></blockquote>



<p>我們團隊將「中文斷詞」這個工作，切分成下圖 7 個步驟，每個步驟都是一種演算法模組，處理一種特別的問題。</p>
<img src="/wp-content/uploads/2020/01/ma-natural-language-processing-05.jpg" alt="" width="4167" height="1697" class="alignnone size-full wp-image-10567" />
<p>(中文斷詞系統的處理步驟。 資料來源│〈未知詞擷取作法〉，作者：馬偉雲)</p>

<p>教電腦擷取人名，是相對單純的工作，因為人名的結構有跡可循。</p>

<p>中文人名通常是三個字、或兩個字，甚至能參考百家姓、某一年考生的所有名字來建立資料庫，例如「慧」、「婷」常出現在女性人名中，而「雄」這個字常用在男性人名中。從統計機率來看，有些字則是不可能作為人名使用。人名的前後文也會有一些暗示訊息，例如「XXX 表示…」、「 XXX 做了…」、「執行長 XXX」。當電腦分析訓練用的文章資料，自己找出這些規律，電腦就能學會判斷某些未知詞是否為人名。</p>

<p>此外，「複合詞」也是舉不勝舉的未知詞來源。</p>

<p>中文的複合詞，由相當隨性的詞性結構組成，例如「趣味性」，隨意置換字尾，就變成「趣味感」或是「趣味化」。複合詞的字差一點點，就能延伸許多詞意，這讓電腦需辨識的詞彙量變得無比龐大。這部分透過前輩們的研究，漸漸找出複合詞的組成邏輯，整理在中央研究院漢語平衡語料庫(標記了一千多萬個詞彙)，也整理出常用詞首、詞尾字資料庫。</p>

<p>目前斷詞系統中的複合詞主要是針對「名詞複合詞」，但其實我們也在「動詞複合詞」上也累積了不少研究。舉一個實例來說明，例如「開聊」和「聊開」：</p>
<img src="/wp-content/uploads/2020/01/ma-natural-language-processing-06.jpg" alt="" width="4167" height="1697" class="alignnone size-full wp-image-10581" />
<p>(「開」的複合動詞結構舉例。 資料來源│〈現代漢語複合動詞之詞首詞尾研究〉，作者：邱智銘、駱季青、陳克健)</p>

<p>從語言學的角度，動詞是句子的核心，也是最重要的中心語。「開」這個字有著動詞中心語的起始功能 (inchoative)，然而放在詞首、詞尾不同位置會產生些微差異。</p>

<p>除了人名、複合詞，新聞或網路文章還會看到許多新創的專有詞，例如：非典( SARS 重症非典型肺炎的簡稱)、河蟹(意指封鎖、掩蓋負面消息)。這類專有詞可以透過 bottom-up merging algorithm (合併字詞演算法)處理。</p>

<p>以「河蟹」為例，透過合併字詞演算法分析新聞、網路文章等資料，電腦會發現：通常「河」後面就是「蟹」，「蟹」前面就是「河」，「河蟹」兩個字一起出現的統計機率蠻高的，而且整組詞意無法單用「河」或「蟹」的各別字意取代。因此，電腦就會判斷「河蟹」最可能是個專有詞、並做出斷詞。</p>

<p>此外，就算是字典當中已經有的詞彙，有時候仍然會有不同斷詞的情況，我們必須根據上下文決定哪一種斷法才是正確的。例如：「努力才能成功」的「才能」應該切分為兩個詞彙：「才」和「能」，語義接近英文的 “to make"；而「他的領導才能很突出」的「才能」是一個詞彙，不可切分，在此表達英文的 “ability" 的意思。</p>
<img src="/wp-content/uploads/2020/01/ma-natural-language-processing-07.jpg" alt="" width="4167" height="1038" class="alignnone size-full wp-image-10590" />
<p>(語言學家會把這樣子的斷詞標注清楚，供電腦進行機器學習。經過不同語句的大量標注，電腦最後會自己學會利用「才能」的上下文做判斷。 資料來源│馬偉雲說明)</p>

<h2 class="writingsH2"><strong>電腦理解「詞」了，那「句子」呢？</strong></h2>
<p>學會斷詞、並理解個別的詞義之後，下一步我們就要使電腦學會理解整個句子的意思。例如「張三打李四」和「李四被張三打」，兩個句子雖然句型不同，但是語義卻是一樣。</p>



<blockquote><p>我們怎麼表達句子的語義呢？答案是透過「結構樹」。</p></blockquote>


<img src="/wp-content/uploads/2020/01/ma-natural-language-processing-08.jpg" alt="" width="4167" height="2351" class="alignnone size-full wp-image-10592" />
<p>(「張三打李四」和「李四被張三打」，兩個句子的結構樹。 資料來源│馬偉雲說明)</p>


<p>我們將每個詞彙集結成片語，再把每個片語標記上它所扮演的語義角色 (semantic role)。「張三」在兩個結構樹中都是「打」的發動者 (agent) 的角色，而「李四」都是「打」的對象 (goal) 的角色。如此一來，透過包含語義角色的結構樹，我們可以得知這兩個句子擁有相同的語義。</p>

<p>先透過人工訂好結構樹的表達，下一步就是要利用機器學習，使電腦能夠自動針對每一句產生出正確的結構樹。歷年來，中文詞知識庫小組從中央研究院漢語平衡語料庫抽取句子，經由電腦初步剖析成結構樹，再加以人工修正檢驗，共整理了六萬多個中文句結構樹圖，標注了各個中文句的語法以及語義角色，這些就形成機器學習的訓練材料，使得電腦剖析結構樹的工作越做越好。</p>

<p>自然語言處理的進展到了這裡，斷詞有解，句子結構及語義有解，但還有另一個難題──曖昧不清的指代詞。</p>

<p>寫作時為了避免某些詞重複出現，會使用別的指代詞，像是「他」、「某某職稱」等等。用句子舉例，「張三打李四，他很痛」，覺得痛的人究竟是誰？除了考量語句結構，也需基於常識和上下文來理解。</p>

<p>若要教電腦理解指代詞、處理「指代消解」(Coreference Resolution) 的問題，有兩種方式。一種較傳統，用程式語言寫好所有判定的人工規則，好處是較精準，壞處是有其侷限，因為列舉的規則不可能對應至世間所有指代情形。另一種是機器學習的方式，當電腦分析所有訓練文章的上下文發現：幾乎都是被打的李四感到痛，「他 = 李四」這個相關性的機率即為最高，進而做為電腦日後判斷的準則。</p>

<h2 class="writingsH2"><strong>自然語言處理的方法，有因「深度學習」而改變嗎？</strong></h2>
<p>近年來蓬勃發展的深度學習 (Deep Learning)，提出了另一種方法來教電腦表達詞彙。這種方法是將詞彙轉換為「詞向量」，也就是 Word Vector 或稱 Word Embedding，作法是讓電腦閱讀大量文章，利用前後文的統計特性，慢慢學習出每一個詞彙的詞向量，不必利用任何語言學知識。</p>
<img src="/wp-content/uploads/2020/01/ma-natural-language-processing-04.jpg" alt="" width="4167" height="2309" class="alignnone size-full wp-image-10594" />
<p>(詞向量的概念。(其中的向量數字為舉例) 資料來源│馬偉雲 圖說重製│林婷嫻、張語辰)</p>


<p>舉例來說，傳統的符號學中，「蝴蝶」、「瓢蟲」、「爬」是不同的三個詞彙。但改成用向量思考，「蝴蝶」和「瓢蟲」的向量距離就會比較近，「蝴蝶」和「爬」的向量距離就會比較遠，隨著訓練的文本越來越多，電腦可以自動調整各個詞彙的向量，解決訓練資料不足的問題，並提升電腦的抽象化思考。</p>

<p>運用「詞向量」的好處是，很多時候針對特定的自然語言處理任務，訓練資料是不足的。因為許多字詞的語義，在人類語感上明明意思很接近、可以相通，但對機器來說，詞彙符號(也就是字元)不同，就是截然不同的詞彙，造成各個詞彙在訓練資料的統計佔比相當低，無法得到足夠信心水準的分析結果。</p>

<p>然而，訓練過程中，若我們以「詞彙向量」作統計，在向量空間上，有些字詞間的向量很靠近，團結力量大，就會發現相近的詞彙向量在訓練資料的統計佔比大幅提升，解決了訓練資料不足的困境。同時，詞彙向量在深度學習的模型之中，被視為可修改的參數，所以也具備了語義(詞彙向量)自動調整的能力。</p>



<blockquote><p>You shall know a word by the company it keeps.</p></blockquote>



<p><a href="https://en.wikipedia.org/wiki/John_Rupert_Firth">John Rupert Firth</a> 這句古老的語言學名言，恰巧能說明「詞向量」的思維。其實每個詞就像一個人，若想了解這個人，可以觀察他身旁的人是什麼模樣，也就是物以類聚的概念。</p>

<p>我們團隊目前嘗試結合「傳統詞彙符號」與「詞向量」，共同從事自然語言處理的任務、以及教電腦表達知識。傳統詞彙符號的好處，在於提供清晰的解釋與穩定的應用，而詞向量可以解決訓練資料不足的困境，並且提供語義(詞彙向量)自動調整的能力。這兩者的長處互補，結合起來具有很高的學理價值、更多應用突破。</p>

<h2 class="writingsH2"><strong>自然語言處理，有什麼用？</strong></h2>
<p>其實，自然語言處理的用途，已經悄悄在我們身邊幫上許多忙。</p>
<img src="/wp-content/uploads/2020/01/ma-natural-language-processing-09.jpg" alt="" width="4167" height="3334" class="alignnone size-full wp-image-10597" />
<p>自然語言處理，常見的後續應用。 資料來源│李宏毅演講 圖說重製│林婷嫻、張語辰</p>
<p>自然語言處理，常見的後續應用。</p>
<p>資料來源│李宏毅演講 圖說重製│林婷嫻、張語辰</p>

<p>例如，運用「摘要文本大綱」的能力，電腦可以擔任助手，幫助連睡覺時間都快沒有的醫生閱讀最新的醫學報告、篩選醫學文獻，找出眼前這位病患的病徵，可能跟哪些疾病相關、或是服用某種藥物可能有哪些副作用。像是 2017 年台北醫學大學，就導入 IBM 的 Watson for Oncology (人工智慧治療輔助系統) ，協助醫師診斷致病機制複雜的癌症。</p>

<p>現在許多人遇到地震、颱風等災害，第一步是上社群媒體發佈消息，例如哪裡的大樓倒了、哪些親友失聯了、各地需要捐助多少物資等等。若運用自然語言處理，讓電腦自動搜集、分析這些社群媒體的文本，就能幫助整合災情、協助救援。</p>

<p>另外，輿情分析、聊天機器人等熱門應用，其基礎也需要先讓電腦理解人類所使用的語言，掌握其中的句法結構、分析字裡行間的情緒，才能統計輿情、或讓機器人做出適當的聊天回應。</p>

<p>自然語言處理，是時間的累積。從民國 75 年到現在，中研院資訊所和語言所合作建立許多語料庫和線上系統，我們很歡迎公家機關和公益團體無償使用，也歡迎有需求的單位來討論合作方式。</p>

<p>問為什麼會對「讓電腦擁有語言能力」感到著迷？</p>
<p>答我很幸運十幾年前有機會進入這個領域，那時候很驚嘆：怎麼會有一種學問，可以把「語言學」和「計算機科學」結合在一起。</p>

<p>語言是很複雜的現象，語言也代表人類的智慧，像是我們的思緒、意識，很多都是透過語言來展現。</p>

<p>1999 年那時候，我在交大電腦科學與資訊工程系碩士班是做語音辨識，那時候我只懂「聲音訊號」的處理，很好奇「語言」這塊怎麼讓電腦了解。當時和中研院接觸，知道中研院做了很多自然語言處理的工作，例如蒐集大量語料，用計算機的方式把語言的統計特性找出來。</p>

<p>後來我來到中研院服國防役，從研究助理做起，跟著陳克健老師研究中文的斷詞切分，也逐漸發現原來理解語言有非常多面向，包含：語音、詞彙本身的學問、語法結構(這句話怎麼說才合理)、語義解讀(這句話是什麼意思)，還有「語用」，也就是什麼時候講這句話、為什麼要這樣講。</p>

<p>2006 年之後，我到美國哥倫比亞大學的電腦科學系讀碩博士，除了博士論文是做機器翻譯，也在那裡的實驗室研究電腦的 Q&A 系統：問電腦問題，讓電腦讀過一堆文獻後回答，這些文獻資料包含中文、英文和阿拉伯文，三種語言混合運用。因為國防上的需求，美國國防部需要透過電腦幫助，了解這些文本在說什麼。</p>

<p>有些對人工智慧發展的疑慮是，在近年電腦深度學習的運算過程中，不知道為什麼會這樣得出結果、難以控制電腦。但現在有一種發展方向，叫做「可解釋人工智慧」(Explainable AI)，明確了解電腦運算過程，藉以優化表現、降低人們擔憂。舉例來說，當 IBM 的 Watson for Oncology 建議醫生要開刀治療病患，醫生也得知道電腦分析文本的過程、為什麼會下這個決策，不是電腦控制人而已。</p>

<p>至於之前曾傳出 Facebook 的 AI 對話失控，其實是過度擔憂。</p>

<p>因為這只是 Facebook 工程師教電腦學會「談判」的過程中，電腦自動將對話內容表達地極簡再極簡、能通就好。</p>

<p>當初唸書時，「自然語言」很冷門，跟別人說也不知道這是什麼東西，因為那時人工智慧在商業上還沒有實際應用，和我們的生活還很遙遠。選擇這個領域並不是因為有遠見，只是基於好奇參與、覺得這很有趣，過程就看到自然語言處理 (NLP) 蓬勃發展至今。</p>

本文經<a href="https://www.facebook.com/research.sinica/">研之有物</a>授權刊登，原文<a href="https://research.sinica.edu.tw/nlp-natural-language-processing-chinese-knowledge-information/">刊載於此</a>