本文來自政大蔡炎龍老師的分享的簡報,稍作改寫與理解的新寫
原文連結:
原文相當鼓勵閱讀,但對零基礎的人還是稍微有一點難度,我用比較文科生的口吻翻譯一下。
RNN、Transformer和NLP這三個傢伙是什麼?
首先,RNN、Transformer和NLP,都是人工智慧,也就是AI領域的技術之一。在本篇討論的範疇內,上述三者都是用在「語音辨識」或「機器對話」之類的任務,,也就是AI行內人說的「自然語言處理」任務。
所以這三個傢伙,就是用來實現「自然語言處理」這個任務的技術。
Note:這三個傢伙都是屬於人工智慧裡面的深度學習這個分支。
自然語言處理是在做什麼?
只要是機器學習的任何技術,你都可以當作是把一個輸入值,經過一個函式轉換後,變成我們想要的輸出值。
就像是把pi/3丟進三角函數裡面,就會得到30度這個數值一樣。深度學習就是在創造一個新的函數,讓我們可以把輸入的數值變成期望中的輸出值。
但要記住,深度學習輸入必須是數值。
自然語言處理任務的輸入
自然語言處理就像是把「我好餓」對應到「晚餐」這樣的文字對應,但回想一下剛才提到的,「深度學習的輸入必須是數值」,「我好餓」怎麼看都不是數值,那怎麼辦呢?
這時候我們需要一種名為詞嵌入(Word Embedding)的技術。
詞嵌入就是把文字變換成數值的方法,這個做法是創造一個矩陣,然後把文章中出現的所有種類的字,一個一個放到矩陣之中。
就像是把 「安安你好」四個字變成一個[ 安, 你, 好] 的一維矩陣。重複的我們就不管了。
再舉一個比較形象的比喻,就像今天你去吃餐廳時,他總共有六種自助飲料可以選擇,那我們就會準備六個杯子來盛裝六種飲料,每一種飲料不重複。把這六個杯子排成一直列,就是一個包含不同元素的一維矩陣了。
但一維矩陣只能表示現在這個字的數值化,我們通常會連續說一句話,也就是一串文字。
這時候只要簡單的產生很多個一維矩陣就行了,也就是每一個文字都是一維矩陣,一串文字就有多個一維矩陣,所以輸入會變成一個二維矩陣。
藉著詞嵌入的技術,我們可以把文字數值化,進而把文字變成深度學習可以處理的數值。
Word2Vec ─詞嵌入的延伸
詞嵌入不只可以是存放文字的倉庫,他也可以用來表示哪些字應該連續或同時出現。因為詞嵌入把文字數值化了,既然數值化,我們就可以為他們套上距離的概念。
為了能夠明確字與字之間距離的概念,我們需要用一個深度學習的方法來訓練他,讓相似的字更加靠近,不常同時出現的字彼此相隔更遠。
對Word2Vec來說,我們的訓練的目標有兩種方式
- 給定上下文,然後訓練深度學習模型能夠輸出正確的關鍵字。
- 給定關鍵字,然後訓練深度學習模型能夠輸出正確的上下文。
第一種方法,是訓練模型把關鍵字,移動到上下文(通常是上下文的所有字,當然也可以只看前後幾個字)權重的平均的地方,也就是上下文所有文字在空間中的中心點。
這讓距離藉由中間的錨點,有了前後對應的關係。這種方法我們稱為CBOW model。
第二種方法,是訓練模型先隨便找一個關鍵字作為錨點,然後設定一個窗口(Skip-window)決定要找幾個上下文的字,比如說我們窗口設為2,我們就會從前後文各找兩個字,然後把這兩個字透過深度學習的訓練來對應到關鍵字。
這讓我們可以藉由前後文來找出距離較近的關鍵字,事實上他是用機率的方式來表示當出現前後文後,哪一個關鍵字是更有可能出現的。
那今天的摘錄就到此為止,相信可以讓你稍微了解:
- 自然語言處理的任務是在什麼?
- 詞嵌入式什麼?
- 詞嵌入有哪兩種訓練方法?