米蘭牛角尖

計算語言學的學習紀錄,偶爾可能會出現野生的電影評論?

0%

擁有財富、名聲、勢力,擁有整個世界的海賊王,哥爾・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++: 台灣工程師開發的編輯器,開源好用,且為世界的不公不義做出了許多行動打抱不平。

合歡山上的雨聲,隨著鋼琴聲悄悄地將觀眾帶進健一的世界。一座一座綿延不絕的合歡山山脈,團團白霧彷彿預示著健一、悠宇與阿嬤三人之間不可言說的複雜關係,時不時晃動的鏡頭,代表著三人的未知、不穩定的羈絆,也揭露了內心的種種不安。


沒有撕心裂肺地哭喊,也沒有死心塌地依戀,在電影中的每個人,好像就只能默默地慢慢向前走,突然發覺自己走不了的時候就稍微停下來休息一下,好好沈浸在過去幸福的片刻,覺得自己準備好了,再繼續往前走。


時刻都在處理「分離」的我們,即使內心充滿著疑問,即使知道傷口只是結痂,也只能隨時準備出發,因為不知道心裡那道缺口有沒有被填平的一刻,因為清楚無論如何,時間還是在走,日子還是得過,我們終究得抬起頭,緊緊抓住身邊所有。

就像是被叔叔強帶著去看諮商師的悠宇一樣,心裡明明知道誰才是真正對自己好的人,小小的心靈卻仍充滿著對這位「爸爸二號」的疑問,但又不知道該如何表達內心的情緒,甚至是該如何開口。出來後,在基隆港沿岸,只能默默地向前走,任由這位「爸爸二號」在後面苦苦追著,直到知道自己再也受不了時,抬起頭轉身,問道:


「你到底是誰?」


這位「爸爸二號」也想知道自己為愛能夠跟這個社會對抗到什麼程度吧。為了能夠面對過去的自己,也要坦然面對阿嬤、悠宇跟叔叔的不諒解,同時為過去拆散對方家庭的自己贖罪,所以無怨無悔地為摯愛的母親換藥、為摯愛的兒子扣上釦子,撐起這家庭的一切。蒙上了陰影的愛情,該有多苦?緬懷著與立維的過去,看著扣著制服扣子的悠宇的現在,看向霧茫茫的未來,只能抓住現在身邊所有吧。畢竟在這荒蕪的世界中,我們都是人,我們都會犯錯。


「沒有我,你應該比較輕鬆吧?」
「我有你,我會比較快樂啊!」


這大概是健一活在這世上唯一能抓住的快樂,另一方面也是想把立維的愛留在身邊吧,就好像立維還在身邊一樣;渴望得到立維的愛,也渴望能獲得悠宇的認同。所以當健一聽到悠宇認他做「爸爸二號」時,或許在片刻,內心的缺口多少也暫時被填補了一些,才會忍不住哽咽。

所以無論發生什麼事,他都很清楚自己必須盡其所能保護好悠宇與阿嬤,但他也知道年紀還小的悠宇有權必須知道這一切,至少在被警察逮捕之前,知道他是誰。於是就帶著悠宇前往那座當年失去摯愛的山上,本想著在不被打擾的情況下,跟悠宇、跟那個人、跟這座山一起度過好幾晚,卻因警察的追捕,只能抬起頭,繼續往前走。


內心也早有數的阿嬤,在面對著這位認為自己害死別人兒子的健一,大概也都看在眼裡了。兒子的死很痛,雖然內心深處大概也知道這不是任何人的錯,卻也還是有過不去的坎。最令人痛苦的,並不是過不去,而是明知自己必須過去,卻始終過不去,就像是《我們與惡的距離》宋喬安在電影院外的崩潰哭泣一般,過不去的,無論如何就是過不去。所以對阿嬤而言,也是需要很長一大段時間才有辦法療癒的痛吧,所以當她對健一說:


「你實在也是長得很緣投,難怪我兒子會被你煞到。」
「…」
「我…其實早就已經不怨你了。」


健一對自己跟悠宇的好,阿嬤都看在眼裡。只是要說出這句話,需要多少夜晚的掙扎、心痛?需要多少時間的療傷?需要多寬廣的慈悲?那些必須被放下的,始終放下了;那些說不出的悲戚,也逐漸隨著健一的愛被淡化了。

面對這一切,健一都默默地吞下去了。他知道這些都是為了保護阿嬤、也保護悠宇,所以在帳篷裡,在被警察拘捕之前的片刻,寫了封信給悠宇,並告訴他:


「你長大以後,也許會遇到很多很討厭、很莫名其妙的事。但無論發生什麼事,都不是你的錯。」


短短的一句話,其實是想告訴悠宇:阿嬤的死,不是你的錯;健一被捕,不是你的錯;未來那些種種的不合理,要記得那些都不是你的錯。


最後,讀了那封向自己認罪的坦誠之信,悠宇也決定坦承。因為他也感受到,原來健一把拔的苦,就好像覺得自己害死阿嬤一樣,那既然健一都鼓起勇氣了,所以悠宇才願意說出實話,為彼此承擔一切,一起抬起頭,一起背負著罪過,一起往前走。即使結局始終要面對著分離,只是內心的罪惡感都能稍微減輕一點了,只要有彼此在身邊,面對重重高山,就能蹽溪過嶺,就能有勇氣面對那些很討厭很莫名其妙的事。


電影的結尾讓我想起這學期選修讀的小說,石黑一雄的《別讓我走》(Never Let Me Go)最後Tommy對Kathy說的話:


「我一直在想像著某個畫面:有條河流,水流的非常湍急,有兩個人就站在河中央,死命地緊緊抱住彼此。但最後水流實在太強,這兩個人始終還是得放手,他們只好放開彼此,各自漂流。」





雖然小說講的是愛情,甚至是某種超越愛情的情感,但對健一與悠宇這對毫無血緣關係的父子又何嘗不是呢?即使社會如何亟力拆散兩人,始終還是得學會放手。而現在不再擁有悠宇監護權的健一,眼前所能擁有的,就是極力抓住那些過去珍貴的回憶,使其永不消褪,那也是健一現在唯一剩下的美好了。