AI 也懂人話?機器學習在 NLP 的基礎概念

「自然語言處理」又稱為 NLP(Natural Language Processing),是近年來十分熱門且挑戰性十足的研究領域,這篇文章將介紹 NLP 的基礎知識,並說明 NLP 在深度學習的理論及解法,帶大家了解在使用自然語言處理時會遇到的困難。

電腦如何理解「今天我大哭了一場」這句話?

當我們對著電腦說:「幫我導航到最近的麥當勞。」這個時候,我們希望電腦執行的動作是導航,並且回覆:「正在為您導航至最近的麥當勞。」當下電腦其實要做的事情非常多,首先要做詞性標註,並區分出動詞、形容詞及專有名詞等,除此之外,還必須要能辨識出「麥當勞」是一家餐廳的名字,才有辦法知道要導航的地點。此外,電腦還必須解析這一句話的句法結構,才能真的理解這句話的涵義,並且才能回覆對話。

而自然語言處理(NLP)就是讓電腦能理解人類使用的語言,這個領域又可分成「自然語言理解(NLU)」、「自然語言生成(NLG)」兩大類別,也就是電腦要理解人類所講的話,接著再生成出人類認為合理的一段話或是一段文章。

例如當某人說:「今天我大哭了一場」,聽到這句話的人可能會猜想對方現在應該覺得傷心或難過;但是,人類要如何讓電腦理解這句話呢?一開始,人類試著將這些句子寫成規則,例如當句子中出現「哭」這個字時,就讓電腦輸出「傷心」,但人類的情緒非常複雜,有些句子的組成也不只是字面上的意思,例如「笑哭」這個單字,電腦便無法判斷說話者的情緒。實際上的對話中,有許多語句無法被羅列進規則中,而這也是自然語言理解可能會遇到的問題。

生活中還有哪些NLP應用?

生活中還有許多自然語言處理應用的例子,例如「嘿,Siri!幫我訂12點的鬧鐘」,又或者是文章翻譯、新聞摘要等。機器必須要先理解所接收到的文章內容,才能輸出對應的內容。另外,還有一種常見任務是「情緒分析」,就是輸入一句評論的句子,請機器分析出這則評論是正面或負面情緒。

在自然語言處理領域中,有些對人類很簡單但對電腦卻很難的挑戰。第一個就是單詞界定與句法結構,舉例來說,「我家門前有條水溝很難過」跟後面的「老師心情很難過」,這兩個句子中都有「難過」這兩個字,電腦必須要能區別出前後兩句中難過分別指涉的是不同的意思。另一個難題則是「詞義消岐」,例如「我的手機是蘋果」跟「我今天吃了1顆蘋果」,兩句中的蘋果都是名詞,但是意思完全不一樣。

最後一個常見的挑戰為「指代消解」,例如「老王昨晚喝了酒,難怪他會宿醉。」這句話中,我們知道喝酒後會宿醉這個因果關係,所以可以理解句中的「老王」跟「他」指的都是同一個人。

這些都是人類很想解決的問題,解法大致可以分成兩種類別,一個是人工訂定的規則,另一個就是深度學習方法。

人工訂定的規則像是什麼?舉例來說,今天當我們要去分析一篇文章或是一段文字是屬於正面還是負面情緒,有個方法是去計算裡面的詞,以及語句的數量。例如看到喜歡這個字時,分數就加1;看到不這個字時就減1。而一段文字中,如果有一個否定句的話,就減2;有相反的連接詞就減1,最後將這些分數計算出來,如果是負數就是負面情緒。

但是,現在有一些更精確的分析方式。(可以參考卓騰語言科技所使用的方法:實事求是,做能落地的NLP應用

透過大量資料讓機器自己學習

另一種深度學習的做法則不太一樣,首先會有一個語言模型,還有許多自然語言的資料。首先會有一個語言模型,還有許多自然語言的資料。假設今天要執行法文翻成英文的翻譯任務,我們會將所有的資料丟進去模型中,並且會給模型一組題目跟答案,讓模型自己去學習產生出答案,而我們會需要針對這些答案進行訂正,並進一步調整當中的權重以及其他部分,讓誤差越來越小。

深度學習有點像是讓機器學習語言的特性,且越來越理解我們的自然語言,所以機器是自己從input和output間去找到中間的關係。但深度學習方法的缺點就是需要很大量的資料,透過這些大量資料的學習才有辦法找到中間的規律,也沒有明確告訴你輸出結果的理由。

而深度學習的模型又是怎麼做出來的呢?

在NLP領域裡所使用的類神經網路模型中,「詞向量」是一個非常重要的概念。因為我們沒有辦法直接將文字字串丟到模型中計算,所以我們會先做一個處理,就是將它們轉成一個個的向量,在經過訓練以後,每個詞在高維空間中都佔有了一個位置,而模型也會學到詞跟詞的關係,例如Male相對於Woman;King相對於Queen。

常見的神經網路架構介紹

當我們在執行翻譯任務時,常會使用一種神經網路架構,叫做「Encoder-Decoder」,或是有一個另外名字叫「Seq2Seq」。Seq就是序列(Sequence)的意思,輸入文字是一個Seq,輸出的還是一個Seq,因為輸入跟輸出都是Seq,所以叫Seq to Seq。

Encoder跟Decoder指的是什麼呢?Encoder是一個神經網路;而Decoder也是一個神經網路,所以這是由兩個神經網路組成的架構。Encoder做的事情就是依序將要翻譯句子中的詞一個一個丟進去,當Encoder對這個句子有一定的理解後,再把重要的資訊傳給Decoder,並依序翻譯出句子。而在Encode-Decoder這個架構中,當我們加入某一個「Attention」的機制,則會讓這個模型翻譯得更好。

由於模型在翻譯時,會依序尋找最有關聯單字,當我們在翻譯模型中加入Attention這個機制時,就可以讓模型學習到翻譯句子不一定要依照順序翻,而是尋找關係最接近的單詞,因此就會知道翻成另一個語言的順序會是什麼。

Sequence-to-Sequence後來演化成一個很強的模型,叫做Transformer,現在NLP領域的深度學習模型幾乎都是由Transformer所組成。

Transformer一樣有一個Encoder,一個Decoder。Encoder是接Input,將要翻的句子丟進去;而Decoder會一個個依序翻出來。Transformer和Sequence-to-Sequence最大的差別就是,Transformer是同時輸入所有的文字向量並非依序輸入,這樣就省下很多的時間。利用Transformer所做出的其中一個知名模型就是GPT。透過GPT3甚至可以自動回覆商業合作信件,不過,這是因為GPT3已經看過成千上萬的信件,所以才有辦法在只得到一點點資訊的狀況下,回覆一封完整的信件。

除了GPT外,其他還有一些不是生成模型而是分類任務的模型,例如Bert。根據使用者所提出任務,模型的選擇以及解法也會有所不同。

想知道更詳細的NLP基礎概念,請參考【AI CAFÉ 線上聽】AI 也懂人話?機器學習在 NLP 的基礎概念。