iT邦幫忙

2025 iThome 鐵人賽

DAY 3
0

什麼是文本表示?

  電腦只能處理數字,無法直接理解「文字」,因此 NLP 的第一步,就是要把語言轉換成數字形式,也就是文本表示(Text Representation),NLP 系統的性能會因為受到不同的表示,而影響輸出結果。

  文本表示的發展經歷了幾個重要階段:One-Hot → Bag of Words/TF-IDF → Word2Vec → ELMo → LLM 的 Embedding,每一代方法都是為了讓電腦更好的捕捉語言的語意。

1.向量空間模型 (VSM) — One-Hot & Bag of Words
把「詞」當成詞典中的一個索引,無法理解字詞的順序,如下範例是兩句很接近的句子,但是卻被表示兩句毫無相關。

from sklearn.feature_extraction.text import CountVectorizer

corpus = ["我愛2025iThome鐵人賽", "2025iThome鐵人賽愛我"]
vec = CountVectorizer()
X = vec.fit_transform(corpus)

print("詞彙表:", vec.get_feature_names_out())
print("向量表示:\n", X.toarray())

輸出結果

詞彙表: ['2025ithome鐵人賽愛我' '我愛2025ithome鐵人賽']
向量表示:
 [[0 1]
 [1 0]]

2.TF-IDF:考慮詞的重要性
在 BoW 的基礎上,給常見詞(例如「的」)更低權重,給有區分性的詞更高權重,但仍然無法理解語意或上下文。

import jieba
from sklearn.feature_extraction.text import TfidfVectorizer

corpus = ["我愛自然語言處理", "自然語言處理很有趣", "我愛鐵人賽"]
corpus_cut = [" ".join(jieba.lcut(doc)) for doc in corpus]

vec = TfidfVectorizer()
X = vec.fit_transform(corpus_cut)

print("詞彙表:", vec.get_feature_names_out())
print("TF-IDF 結果:\n", X.toarray())

輸出結果

詞彙表: ['愛鐵人賽' '有趣' '自然' '處理' '語言']
TF-IDF 結果:
 [[0.         0.         0.57735027 0.57735027 0.57735027]
 [0.         0.60465213 0.45985353 0.45985353 0.45985353]
 [1.         0.         0.         0.         0.        ]]

可以看出沒有出現在詞彙表的詞有更高的權重(有區分性)

3.Word2Vec:讓詞有語意關聯
Word2Vec 用神經網路訓練詞向量,從這裡開始能理解語意,但是每個詞只有「一個固定向量」,這個階段還無法處理一詞多義的狀況。

4.ELMo:動態詞向量
ELMo 使用雙向 LSTM,根據上下文生成動態詞向量,例如「bank」這個詞在「river bank」和「bank account」會有不同的表示,從這裡開始能捕捉上下文的關係,也可以處理一詞多義了。

今日總結

  1. 文本表示是 NLP 的核心,電腦若要能看得懂語言,第一步就是要先把文字轉數字。
  2. 詞向量的文本表示方式,再加上 LSTM 等深度學習方法,奠定了現今 LLM 的基礎。

上一篇
[Day2] 從符號到深度學習:NLP 的發展
下一篇
[Day4] 為什麼需要注意力機制?從 RNN 到 Transformer
系列文
從上下文工程到 Agent:30 天生成式 AI 與 LLM 學習紀錄8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言