NLP新手入門指南 – 入門自然語言處理所需的五大領域知識與學習資源

NLP 自然語言處理,新手入門指南

自然語言處理 (NLP) 在現今環境下高速發展,各大企業紛紛設立相關職缺。本文為筆者自身的經驗,筆者透過下列公開資源與方法,在一個月內快速上手 NLP 領域知識,並投身相關工作中。希望能將經驗分享給其他同樣想入門的朋友。

本篇文章記載筆者剛踏入 NLP 領域時,如何在一個月內從零開始自學 NLP 領域,並銜接至 NLP 工程開發的工作。

一、自然語言處理是什麼? 有關 NLP 的基本介紹

NLP (Natural Language Processing) 可以簡單解釋成讓電腦理解人類語言的一門學問。如果更深入探究這個詞,可進一步拆解為自然語言 (Natural Language) 與處理 (Processing) 兩部分來理解 :

自然語言

自然語言指的是從人類的文明社會中自然發展出來的語言,我們日常中所接觸到的中文、英文、德語、法文等皆屬於自然語言。概念相對於自然語言,為了某特定使用族群,由人為創造出來的便是人工語言,由於是為滿足特定目的所創造出來的語言,人工語言相比於自然語言更為單調,結構也有嚴謹的規範,且並不向自然語言一樣會隨著人類的文化而發展。工程師所使用的程式語言即為最常見的人工語言,其次你可能聽過的世界語也是人工語言的一種。(有趣的是,數學被歸類在自然語言的範疇)

處理

NLP 中的處理,指得是讓機器理解人類的語言,並能生成人類語言。

由於人工語言更為單調且結構嚴謹,機器理解起來會更為容易許多。也因此,NLP 這門領域結合了人工智慧與語言學,著重在如何讓機器理解現實環境下自然語言的複雜之處,並能進而生成文字。

至於自然語言到底有多複雜,我們可以來看看下面這個簡單的例子:

夏天時,小明的媽媽對小明說 : 衣服能穿多少,就穿多少 冬天時,小明的媽媽對小明說 : 衣服能穿多少,就穿多少

身為中文使用者,我們能熟練地分辨出這兩種情境中的”多少",有著不同的詞性與詞意,幼稚園或國小的孩童也能簡單判斷出兩句涵義的不同。然而,這對機器來說卻是一大難題,因為一模一樣的兩句話卻有著截然相反的涵義。像這樣同字不同義的現象是人工語言會極力避免的,然而在真實的自然語言世界中,這確是再自然不過的事了。

其他機器難以處理的還有文法、文字順序與代名詞解析等,自然語言處理正是基於這些難題上所發展出來的學問。

二 、 自然語言處理的日常五大應用

NLP 的應用如今已被應用在許多領域上,舉幾個生活中常見的例子來說 :

  1. 垃圾郵件 在我們經常使用的電子信箱功能裡,系統會為我們自動阻擋廣告或者是惡意郵件至促銷分類,甚至是垃圾郵件中,這些我們習以為常的分類其實正是 NLP 技術的一種。電腦程式會學習我們過去對郵件的分類方式,並在未來收到內文相似的郵件時,自動做出判斷並分類。
  2. 搜尋引擎 當我們在搜尋引擎中輸入簡單幾個字,系統便會自動預測我們想搜尋的內容並顯示出數種選項工我們選擇,這也是 NLP 的應用。搜尋網站每日蒐集用戶搜尋輸入的結果,並加以學習,成為我們看到的搜尋提示。
  3. 打字輔助 在手機上打字時的所產生的錯別字糾正與自動提字功能也是 NLP 的應用之一。手機透過字典等閱讀學習分辨錯別字,同時自動記錄每個用戶的打字習慣,給出合適的文字提示。
  4. 翻譯 在 NLP 技術尚未成熟時,過去的翻譯功能僅能將對應位置的英文單字直接翻譯成中文作為結果,也因此,我們時常得到的是順序混亂且詞不及義的翻譯結果。而如今的翻譯功能已能做到先行理解輸入的內容涵義,再轉而生成另一種語言的翻譯結果,讓翻譯出來的句子更加流暢。
  5. 聊天機器人/語音助理 NLP 除了能用在文字處理上,也被應用於語音功能中。現在流行的聊天機器人與像是 Siri/Alexa 等語音助理,也是透過 NLP 技術將聲音轉換為文字語言,再進一步理解並生成文字或語音的回覆內容。

三、學習自然語言處理所需具備的相關知識

若想要充分了解 NLP ,你很可能需要準備下列知識背景 :

  1. 基礎統計
  2. 數據處理程式能力
  3. 機器學習/深度學習 相關知識
  4. 文本處理程式能力
  5. 微積分/線性代數

以下我逐一解釋這些知識如何運用在 NLP 領域的學習上,與它們的在實務上的重要度 :

  1. 基礎統計 (重要度 : 高) 統計為資料科學的基礎,唯有好的統計基礎才能幫助我們評估模型成果的好壞,並進一步知道該如何修正。扎實的統計知識也有助於快速理解並上手資料科學這門學科。
  2. 數據處理程式能力 (重要度 : 高) 在 NLP 實物中,機器實際上是將文字轉換為數字進行理解與處理,也因此像是 numpy、pandas 等數據處理的程式能力十分重要。
  3. 機器學習/深度學習 相關知識 (重要度 : 高) 機器學習與深度學習是 NLP 裡最主要的兩項技術,除了熟悉操作應用外,了解框架與背後的基礎原理除了能加快起步的學習速度,也能大幅降低開發所需試錯時間。
  4. 文本處理程式能力 (重要度 : 中) 很多人可能會覺得 NLP 領域很看重文本處裡的程式能力,但我認為數據處理更為吃重,原因在於大多時候我們需要對所需文字進行基礎的處理即可,這一塊並不難,反倒是數據的處理更為重要且上手難度較高。
  5. 微積分/線性代數 (重要度 : 中) 微積分或線性代數並不會成為進入 NLP 領域的門檻,但卻是決定高度的天花板。若單純只是想套用現有的套件進行 NLP 的簡單應用,這兩項領域知識是有辦法繞開的。然而充足的知識有助於你在學習時快速掌握運作原理,並在開發時有能力根據原理推理,做出更為精準的判斷。

四、如何利用免費資源快速入門NLP

NLP 是一門剛起步且正在快速發展的新興學科,好消息是網路其實有足夠的資源自學。如果缺乏上一段所提到的知識背景,我會建議依照以下的順序逐一獲取 :

  1. OCW 開放式課程 如果你過去沒有學過統計或微積分、線性代數等相關課程,國內外許多大學都有提供免費的教學資源在各自的 OCW 網站上。以下附上相關的課程連結,建議的學習順序為 基礎微積分 → 基礎統計 → 線性代數。
    1. 基礎微積分
    2. 統計學原理
    3. 線性代數
  2. Youtube 有關機器學習與 NLP 的入門推薦台大李弘毅與林軒田兩位教授的 Youtube 頻道,兩位教授的課程都設計得淺顯易懂,能帶領初階與中階的開發者深入淺出的了解機器學習與 NLP 領域的基礎原理與最新應用。 強力推薦想入門 NLP 領域的朋友們完整觀看李弘毅老師的深度學習課程,筆者我在跨入這門領域時將李老師近三年的課程完整看過兩輪以上,每一輪都能有不小的收穫。在接觸 NLP 後想進一步加強機器學習基礎的則可以轉往林教授的課程。
  3. Ggoogle Scholar 在透過上述課程補足相關知識後,如果想要進一步加深技術與知識,我最推薦的做法一是直接進入開發專案或是競賽,二是透過學術搜尋尋找經典或是最新的論文研讀。目前 NLP 主流的模型與應用技術都能在學術搜尋中找到。另外,NLP 由於還算是一個新穎的領域,目前仍以週為單位的速度不斷汰舊換新,因此閱讀期刊的能力也是必須培養的。

以筆者經驗來說,由於過去有統計、線性代數、微積分與機器學習的經驗,因此我在從零上手時花費了約兩個多禮拜的時間上 Youtube 課程與閱讀論文和程式碼,便開始投入基礎開發研究。因此,如果是上述領域有部分基礎的朋友,照著這些免費資源學習,在一個月內上手 NLP 領域絕非難事。