【NLP】Day 1: 前往NLP的偉大航道!一起成為我的夥伴吧!

擁有財富、名聲、勢力,擁有整個世界的海賊王,哥爾・D・羅傑,他在臨刑前的一句話讓人們趨之若鶩,奔向大海。
「想要我的財寶嗎?想要的話可以全部給你,去找吧,我把所有財寶都放在這裡」
於是所有男子漢航向偉大的航道追逐夢想,世界開始迎接大海賊時代的來臨。
《海賊王》第一話〈Romance Dawn 冒險的黎明〉

NLP?那是什麼?可以吃嗎

筆者自從就讀語言所這一年多以來,很多人都會問我:「咦?Milan,你讀語言所,啊你是唸什麼的呀?」,我都會說:「喔!我是唸計算語言學,做自然語言處理的。NLP啦!」只是往往這麼回答朋友還是親戚們,他們臉上都還是會掛著大大的問號。好啦,有些人可能會知道NLP是什麼,他們會說:「喔喔喔!我知道!就是神經語言處理啦!欸,我覺得那個很有用耶,可以幫助我們用另一個角度來看待事情。」


事實上,自然語言處理(Natural Language Processing)跟神經語言處理(Neural Language Processing)是兩件完全不同的領域。


自然語言處理,根據維基百科的定義,是人工智慧語言學的跨領域學科,藉由讓電腦將輸入語言轉換成有意義的符號和關係,或是將語言轉換成電腦可以理解的數據,並透過機器學習模型來解決各種問題,例如文本分類文本生成情感分析以及自然語言理解聊天機器人等等族繁不及備載的應用方式,其中的技術包含認知、理解、生成等三大部分。討論到人工智慧,大家可能也會想到先前Google所開發,聲稱已具有「人格意識」的語言人工智慧LaMDA,其實這也是自然語言處理的一環,但至於其是否真的有「自我意識」,可能就還有待商榷。


嗯?你問說那神經語言處理是什麼,我覺得這部分對我來說有點玄,可能要問一下洪蘭教授,或者是問天了。


說了這麼多冠冕堂皇的定義解釋,大家可能也還不是很理解自然語言處理到底是在做什麼。想問一下各位是否曾經被「祖」過?臉書的演算法都會藉由偵測人們分享在社群中的貼文是否包含仇恨言論,並且決定後續的動作,如果貼文被刪除並被禁文三十天,就是被「祖」了。YouTube也會透過演算法判斷影片內容是否適合廣告商投放,YouTube也會判斷題材內容是否適合提供大眾觀賞等等,若不適合則投以黃標;另外,像是最近很紅的假新聞議題,如何透過程式語言去偵測,藉此去預防假新聞的過度氾濫。以上種種,都是需要運用自然語言處理的技術來解決的。


可是這項技術到目前為止的發展足夠成熟嗎?目前的人工智慧真的有這麼厲害嗎?想先問問大家是否曾經有過、或是看過別人有過被演算法耽誤的類似經驗,比如說明明只是想跟朋友分享某部動漫給了很多「殺必死」,但卻因為「殺」跟「死」被臉書判斷成帶有仇恨言論,莫名其妙地被禁言三十天,何其無辜?或者是作為影音創作者,在影片中可能也不太知道說了或做了什麼事,就被黃標。類似的演算法錯誤判斷的案例層出不窮。這也是為什麼到最後其實Meta跟YouTube到後來也逐漸改回用人工的方式進行審查,畢竟就現有的技術來說,人工審查的正確比例還是比機器高的許多。只是人工審查又可能有標準不一的問題,不同的人判斷事情有不同的標準;對於演算法來說,也同樣會有不同標準的議題需要討論,但這又是另一個層面的問題了。


綜上所述,其實我們可以發現,計算語言學、自然語言處理、人工智慧還有非常非常大進步的空間。誇張一點,在我們開發出像哆啦A夢或是《銀翼殺手 Blade Runner》裡面的仿生人、《西部世界 Westworld》裡面的接待員之前,永遠都還有非常大的發展餘地。就像是《Bleach》裡面,涅繭利對上第八十刃・薩爾阿波羅所說:「我討厭完美,一旦完美就再沒有進步的餘地,也沒有創造的空間。這代表智慧與才能都將無用武之地了,對我們科學家來說,完美就是絕望。」(這比喻也太宅…)這也是人類逐漸走向進步與未來所必備的進程之一,而我們都只是這巨大的洪流中的一隻隻小蝦米而已。


圖一、《銀翼殺手》中最後羅伊・巴蒂對戴克所說的雨中獨白,探討何謂「意識」、何謂「人」


圖二、《西部世界》中,希望不管是人或是接待員都能擁有真正自由的迪樂芮


扯遠了。是說,雖然計算語言學/自然語言處理可以大至Google的LaMDA模型,小至假新聞、臉書貼文審查。這麼一說,自然語言處理真的離我們這麼遠嗎?在我踏進這艘賊船的這兩三年,我發現好像其實也不是這麼一回事。在迎接人工智慧的時代來臨,有些人會擔心人工智慧是否會取代人類;我是認為,好好地了解這些平常在我們的日常生活中無處不在的人工智慧,還有他們的運作方式,才不會被人工智慧所駕馭,就如同唐鳳所說,AI應該是輔助式智慧,幫助人類相輔相成。更不該因為是AI,就放棄了這個社會所堅持的價值。

踏上偉大航道前的必備:紀錄指針

在踏入這領域的這兩三年,其實學習自然語言處理的路上,就跟魯夫一樣,一路上找尋夥伴,在一座座的島嶼冒險,過程有哭有笑,可能還死哥哥(都過幾年,魯夫都已經move on了,這不算爆雷吧?),最終抵達拉乎德爾,找到魯夫心目中真正的大秘寶。自然語言處理亦然,在偉大航路前半段的樂園,先逐漸了解基礎文本處理、慢慢接觸到模型後,漸漸地體認到這個世界有多大,直到進入偉大航路後半段的新世界,已經可以熟用霸氣後,學會應用各種技能,並開始認識自然語言處理中的巨人等等,一路雖然辛苦,但我想會很值得。


因此,我在這三十天的鐵人賽中,將會介紹一些成為語言資料科學家常會用到的技能,也當作自己學習路上的紀錄。俗話說:「師父領進門,修行在個人。」在接下來的文章中,將會嘗試著用最粗淺的語言來解釋現今文本處理的入門技術及應用,且將會使用Python作為主要的語言,希望可以作為讀者的紀錄指針,將各位引領至計算語言學的偉大航道。內容將包含:

  • 文本處理的東方藍:資料預處理
    • 基礎Python
    • 正規表達式(regular expression):檢查、搜尋、抽取
    • 斷詞(segmentation): Articut、CKIP、Jieba
    • 斷詞層級與處理(segmentation): tokenization、lemmatization、stemming
  • 開始踏上偉大航道:文本計算
    • Bag of Words、TF-IDF、N-Gram
    • Word2Vec
    • 機器學習:貝氏分類器
    • 機器學習:羅吉斯迴歸
  • 這裡就是新世界了!
    • 深度學習!
      • 人工神經網路(Artificial Neural Network, ANN)
      • 遞迴神經網路(Recurrent Neural Network, RNN)
      • 長短期記憶模型(Long Short-Term Memory, LSTM)
      • 長短期記憶模型(Bidirectional Long Short-Term Memory, BiLSTM)
    • 特別篇:Loki
  • 冥王雷利補習班:實戰篇
    • 網路爬蟲
    • 用Flask架出你的第一個網頁
    • 利用Docker在虛擬環境佈署專案
    • 資料存儲:資料庫建置與應用

環境建置

Python

因為在接下來的文章中,將會使用Python作為主要的程式語言。因此在一起踏上旅程前,要請你先把Python的環境建置起來。這部分因為網路上也已經有族繁不及備載的教學文章,甚至影片,所以在這邊也不再贅述。請讀者按照系統到所屬的網頁建置環境:

編譯器

如果你是初學者,你可以使用Jupyter Notebook,或者是Google Colaboratory;但學習到了一定階段,都會需要轉移到原始碼編輯器上運行,才會得到完整的開發體驗。在寫程式時,每個人都會有習慣的原始碼編輯器,各自有各自的優點,你可以選擇自己喜歡的原始碼編輯器做使用。

  • VSCODE: 微軟開發的編輯器,很多外掛跟好用的介面,是我自己常用的原始碼編輯器。
  • WingPro: 專為Python打造的編輯器。之前實習公司前老闆的愛用編輯器。
  • Sublime Text: 簡單好用,畫面介面簡潔不複雜。在學校的現任老闆的愛用編輯器
  • NotePad++: 台灣工程師開發的編輯器,開源好用,且為世界的不公不義做出了許多行動打抱不平。