iT邦幫忙

2025 iThome 鐵人賽

DAY 11
0
生成式 AI

LLM 學習筆記 - 從 LLM 輸入問題,按下 Enter 後會發生什麼事?系列 第 11

Day 11. Embedding: 從做 LLM 中看怎麼將文字轉向量

  • 分享至 

  • xImage
  •  

繼前一篇將一段句子分成一個個小分詞,接下來要將這些分詞轉換成數學空間裡的向量。

Token Id Embedding 將語意投射進不同維度

前情提要

當拆解為一個個獨立的 Token 單位後,我們會將單位轉為數字,好讓 Model可以讀懂這些文字。所以我們會有一個 Token Embedding 對照表,從中找到對應的向量,並將數字資訊加入。讓 Model 一看就知道:「喔喔!這是某某 Token 且現在 Token 在一個句子中的哪個位置。」

在開始直接將分詞轉為 Embedding 之前,可以將 Embedding 理解為維度轉換的結果,我們可以就希望呈現的細緻程度,來決定要用幾維空間來表現。

先來製作一層 Embedding Layer e.g. 一個只有 6 個字的全單字清單在 3 維空間下,得到一個 6 * 3 的矩陣。並透過 PyTorch 的 Embedding 得到正規化後的隨機值。

vocab_size = 6
output_dim = 3

torch.manual_seed(123)
embedding_layer = torch.nn.Embedding(vocab_size, output_dim)

接著如果我們將任何一個有出現在對照表中的 ID 丟進 Embedding Layer,Embedding Layer 會回傳我們特定列數的向量。

embedding_layer(torch.tensor([3]))

上述案例就雷同於傳入一個字的 token ID 進 Embedding Layer,查詢出 Embedding Layer 中特定列。如果今天要傳入一串 Token ID:

embedding_layer(torch.tensor([2, 3, 5, 1]))

如果將一個四個字的 Tensor 傳入,就會得到一個 4 * 3 的矩陣,複數個特定列會被撈出來。現在文字的順序不會影響到 embedding_layer 取到的陣列。如果今天是 [2, 3, 3, 1] 矩陣中的,那第二個與第三個 3都會是一樣的 Embedding。

加入 Position Embedding

但實際上,位置在文字中也有其意義,所以我們會將所有向量對應的位置加上一個能代表位置的 Embedding,我們改用一個 256 維且有 50257 個 token voabulary 的對照表,並產生一個 embedding_layer。

vocab_size = 50257
output_dim = 256

token_embedding_layer = torch.nn.Embedding(vocab_size, output_dim)

max_length = 4
dataloader = create_dataloader_v1(
    raw_text, batch_size=8, max_length=max_length,
    stride=max_length, shuffle=False
)
data_iter = iter(dataloader)
inputs, targets = next(data_iter)

然後接著我們讀取了一個, 8 段每段 4 個字,stride 也同 4 個字代表沒有任何重疊,共 32 個字的 tensor。接著將其傳入這個 256 維的 Embedding,會得到一個 8 × 4 × 256 的矩陣。

如果要將位置資訊加入,實際上可以很簡單的做矩陣加法

context_length = max_length
pos_embedding_layer = torch.nn.Embedding(context_length, output_dim)
pos_embeddings = pos_embedding_layer(torch.arange(max_length))
input_embeddings = token_embeddings + pos_embeddings

透過產生一個一樣 4 × 256 長度的向量去做加法即可,這樣每一個 Embedding 上都有多了位置的考量。

總結

透過 torch 的 Embedding Class 我們可以很容易的生成一個初始隨機值的 embedding_layer,並透過 token id 嘗試在裡面找到我們想要的列數,並對其做向量的運算,將我們想要加入的其他資訊放入。


上一篇
Day 10. Tokenizer: 從做 LLM 中看怎麼產生訓練資料
下一篇
Day 12. Attention: 從做 LLM 中看注意力機制
系列文
LLM 學習筆記 - 從 LLM 輸入問題,按下 Enter 後會發生什麼事?12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言