iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0
自我挑戰組

NLP 新手的 30 天入門養成計畫系列 第 18

[Day 18] - 文字向量化的前世今生:簡介

  • 分享至 

  • xImage
  •  

在過去的幾天,我們陸續介紹了各種前處理的技術,並實際應用在資訊檢索的主題裡面。接下來,我們要嘗試把非結構化的文字轉成數值型態的向量,讓電腦學會每一個單詞代表的意思,朝著語言模型的方向前進。

我們人類在日常生活中所使用的自然語言長這樣:

我喜歡看電影。

而電腦可以處理的資料長這樣:

[[0.453, 0.815, 0.655, …], [0.894, 0.286, 0.546, …], …]

因此,如果要讓電腦看懂人類語言的話,最直觀的想法就是向量化 ( Vectorization ),接下來會簡單聊聊幾種將文字向量化的方式,並在接下來的篇章詳細介紹。

One-hot Encoding

單熱編碼 ( One-hot Encoding ) 可以說是把文字轉換成向量最簡單最無腦的方式,它的概念是把文本中所有相異的單詞整理成一個詞彙表 ( Volcabulary ),然後對於每個單詞,把它在詞彙表中的位置設為 1,其他位置設為 0。

我們舉一個例子來說:

I like to watch movies on the weekend.

這個句子如果按照 One-hot Encoding 的方式編碼,會像這個方式呈現:
https://ithelp.ithome.com.tw/upload/images/20240823/20159088tHeyDR1Yxo.png
當我們把整個詞彙表建立好的時候,假設有一個新的句子要被編碼,那麼就可以很快速的從詞彙表中把對應的單詞提出來做轉換。

然而 One Hot Encoding 的缺點也不少,比方說它的儲存方式太浪費空間而且不必要,隨著詞彙表規模的成長,這個缺點會更明顯。

此外,它也無法捕捉單詞之間語意的關係。One Hot Encoding 僅僅是完成了將文字轉化為向量的任務而已,電腦其實並不理解這個單詞代表的含意,比方說它不能判斷出 [’cat’, ‘dog’] 和 [’cat’, ‘tree’] 哪一組單詞的語意更接近。

Bag of Word

詞袋 ( Bag of Word, BoW ) 的概念和 One hot encoding 概念有點像,都是通過建立詞彙表的方式來編碼。但兩者不一樣的地方在於,前者是將文本編碼成向量,而後者是把單詞編碼成向量。

舉例來說,我們會將編碼出來的結果像這樣表示:
https://ithelp.ithome.com.tw/upload/images/20240823/20159088QXitNEOAp9.png
至於中間的轉換過程就是明天要討論的主題了,我們會一併介紹如何實作 Bow of Word。

BoW 的缺陷和 One hot encoding 一樣,它也有稀疏向量造成空間浪費的問題,也同樣無法捕捉單詞之間的關係。

TF-IDF

TF-IDF 前幾天在聊資訊檢索的內容中提到過了,有興趣可以回去翻翻哦!

它的做法是利用計算單詞在文檔中的出現頻率 ( Term Frequency ) 以及這個單詞有出現的文檔數 ( Document Frequency ),來決定這個單詞對這篇文檔的重要程度,所以也算是將文本轉化為數值表達的方式,不過它的應用更偏向於資訊檢索,在這裡就沒有更多的討論。

好的,在介紹完這三種把文字轉換為數值型態的方式後,我們可以發現,他們共同的問題幾乎都是一樣的,那麼要如何解決呢?

Word Embedding

詞嵌入 ( Word Embedding ) 就是一個很好的解決辦法,它的概念是將單詞映射到一個連續的向量空間中,讓語意相似的單詞在向量空間中的分布更靠近。

最一開始,我們提出了一個想法:在一篇文章中,是不是越常出現在一起,用法越相似的兩個單詞,他們的關係越緊密?

舉個例子來說:

我喜歡吃陽春麵
我喜歡吃炒飯
我喜歡吃水餃

這裡的 陽春麵炒飯水餃 都是食物,比較常出現在一起,而根據上下文,他們前面通常會接 這個動詞,因此,語意上會比 我喜歡看電影電影 來的更相近。

這個就是分布假說 ( Distributional Hypothesis ) 想要表達的意思,而後又演變出了許多根據上下文來決定單詞語意的作法,這就是 Word Embedding 的由來。

我們可以從這張圖來理解 Word Embedding 的做法:
https://ithelp.ithome.com.tw/upload/images/20240823/20159088QlJwbzyIhc.png
其中,比較具有代表性的就是在 2013 年提出來的 Word2Vec, 它包含了 CBOW 和 Skip-Gram 兩種訓練詞向量 ( Word Vector ) 的方法,這也是我們之後要介紹的主題。

關於詞嵌入的研究到這裡還遠遠沒有結束,像 Word2Vec 這種編碼方式我們把它叫做 Static Embedding,因為它僅僅是將單詞轉換為固定的詞向量,但無法更加複雜的語意表達,舉個例子來說:

  • 「因為他壓力很大,所以睡眠品質不好」VS「因為他睡眠品質不好,所以壓力很大」
  • 這家店關門了:「關門」可以代表「停業」也可以代表「打烊」

為了解決順序或一字多義造成語意不同的問題,因此後來又發展出 Contextualized Embedding 的做法,比方說應用 RNN 和 LSTM 技術的 ELMo,或是應用了 Self-Attention 技術而在 NLP 領域中鼎鼎大名的 Transformer 架構。

就是在這些基礎之下,大型語言模型 ( Large Language Model, LLM ) 的雛形逐漸顯露出來,變成像今天這樣的盛況。

今天這一篇算是把之後想要介紹的主題都先確定了下來,可以的話我就把它慢慢補完吧!

推薦文章


上一篇
[Day 17] - 簡單介紹貝式分類器在 NLP 的應用
下一篇
[Day 19] - 文字向量化的前世今生:詞袋
系列文
NLP 新手的 30 天入門養成計畫30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言