iT邦幫忙

2025 iThome 鐵人賽

DAY 20
0
AI & Data

ㄧ個八卦的時間也能了解AI最新趨勢系列 第 20

Day 20 讓電腦了解字詞語意 -- word2vec 介紹

  • 分享至 

  • xImage
  •  

嗨嚕~
前幾篇的內容中,我們很常提到,電腦其實看不懂文字,所以我們必須把文字轉成數值向量,才能進行後續的分析或建模。而這種「文字轉向量」的方法有很多,早期常見的有三種,我們在前幾篇的內容上面也加減有提到一些,像是One-hot Encoding、Bag of Words 以及TF-IDF,然而他們在作法上面都還是存在一些限制還有問題,這邊小小幫大家快速看過一下

1. one-hot encoding
把文本中所有種類的字都變成一個詞表,把她在這個詞表中的位置設為1,其他都是0。
舉例:
I am happy puppy 這句話用One-hot Encoding 的方式轉換,就會像這樣:

I = [1,0,0,0]
am = [0,1,0,0]
happy = [0,0,1,0]
puppy = [0,0,0,1]

缺點:儲存方式很浪費空間,也無法捕捉單詞之間語意的關係,就只有單純的把文字轉化為向量而已
2. Bag of word

跟one-hot encoding 很像,只是one-hot-encoding 是每個字詞都有一個向量,Bag of word 則是將整篇文本轉換為一個向量,向量的每個元素是文檔中每個單詞是否出現。
舉例:
詞彙表:["I", "love", "dogs", "cats", "are", "great"]
I love dogs 這個句子就會以這樣的方式表示:
I love dogs[1, 1, 1, 0, 0, 0]

  • 缺點:one-hot encoding 一樣,會有向量稀疏性導致浪費不必要空間的問題

3. Tf-idf
利用計算單詞在文檔中的出現頻率 ( Term Frequency ) 和單詞有出現的文檔數 ( Document Frequency ),決定這個單詞對這篇文檔的重要程度,每個詞也都會算出一個值,但這樣轉換的方式也是會有上述Bag of Word 以及one-hot encoding 的問題。

上述三種轉換文字至向量的方式本質上都是屬於 Sparse Vector(稀疏向量),所以有共同很明顯的問題就是有維度高、空間浪費、無法捕捉語意的問題,因此,後來出現了 Word Embedding的技術,來解決這個問題維度爆炸以及無法捕捉詞的語意的問題

詞嵌入(word embeddings)?
word embeddings 的概念其實很簡單,就是如果兩個詞在語言中語意相近,那麼它們在向量空間中的距離也應該很接近。舉例來說:「國王」跟「皇后」應該比「國王」和「香蕉」更接近,「貓」跟「狗」應該比「貓」和「桌子」更接近,就是當在把文字向量化時後,同時也能捕捉到詞的語意。這樣的表示方式是以低維度、連續值的 稠密向量 (dense vector)來表示。

https://ithelp.ithome.com.tw/upload/images/20251004/20178745cdLLonVtO3.png

而今天要說的這word2vec 就是一個可以用來表示詞嵌入的的一種技術!

word2vec

核心概念是透過上下文,讓模型了解詞的語意
模型訓練方式有兩種:skip-gram 和Continuous Bag-of-Words(CBOW)

  • **Skip-gram **
    模型的目標是給定一個詞後,能預測它周圍的「上下文」詞是哪些。
    上下文指的就是目標詞周圍的詞,我們以下面的句子舉例:
句子:我是快樂小狗 
目標詞=快樂 
上下文就是「我」,「是」,「小狗」

在訓練的時候模型會透過觀察很多的詞與上下文的配對,然後去調整參數,最後就可以得出一個向量,而這個向量保留了許多的語意資訊(ex.很常跟哪些詞彙一起出現、一般會出現在哪些上下文中)

在訓練的時候會設定一個 window size,設定模型觀察上下文的範圍大小

  • CBOW
    CBOW模型跟skip-gram 不同的地方是,CBOW 是由「鄰近」的上下文(context)推測目標對象(target word),就像是給機器做填空題,上下文的範圍也是靠window size來決定。
    舉剛剛的例子,如果我給模型「我」「是」「小狗」,模型要猜出缺的詞是「快樂」。

我們用一張圖了解一下兩者訓練上差異:
https://ithelp.ithome.com.tw/upload/images/20251004/20178745PGeYRHDoLq.png

透過上述的方式就能解決傳統文字轉向量遇到的問題了!不過 Word2Vec 還是有一些小小的不足,因為在 Word2Vec 中,每個詞最後都會被轉換成一個固定的向量表示,所以同一個詞在不同情境下語意其實是一樣的,舉例來說,有兩個句子分別是1.我吃飯2. 這個遊戲很吃網速
這兩個句子中的吃明顯是不同意思,但是在 Word2Vec 的向量空間裡,這兩個「吃」都會被表示成一模一樣的向量,因此無法區分語境差異。所以後續就有其他改進方式,能根據上下文動態調整詞的表示方式。也就是說,模型在不同語境中會給同一個詞不同的向量,讓語意能夠更精準。這之後我們有機會再跟大家科普!

今天的分享就到這裡囉~大家掰掰!

參考網址


上一篇
Day 19 N-gram介紹 (下)
下一篇
Day 21 Contextual Embedding 基本概念介紹(含簡易實作)
系列文
ㄧ個八卦的時間也能了解AI最新趨勢21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言