Transformer 中的輸入嵌入



Transformer 的兩個主要元件,即編碼器和解碼器,包含各種機制和子層。在 Transformer 架構中,第一個子層是輸入嵌入。

輸入嵌入是一個至關重要的元件,它作為輸入資料的初始表示。在將文字饋送到模型進行處理之前,這些嵌入首先將原始文字資料(如單詞或子詞)轉換為模型可以處理的格式。

閱讀本章以瞭解什麼是輸入嵌入,它們為什麼重要以及如何在 Transformer 中實現它們,並提供 Python 示例來說明這些概念。

什麼是輸入嵌入?

輸入嵌入基本上是離散標記(如單詞、子詞或字元)的向量表示。這些向量捕獲標記的語義含義,使模型能夠有效地理解和操作文字資料。

輸入嵌入子層在 Transformer 中的作用是將輸入標記轉換為高維空間 $\mathrm{d_{model} \: = \: 512}$,其中相似的標記具有相似的向量表示。

輸入嵌入在 Transformer 中的重要性

現在讓我們瞭解為什麼輸入嵌入在 Transformer 中很重要 -

語義表示

輸入嵌入捕獲輸入文字中單詞之間的語義相似性。例如,“國王”和“女王”或“貓”和“狗”等詞在嵌入空間中將具有彼此接近的向量。

降維

傳統的獨熱編碼將每個標記表示為具有單個高值的二進位制向量,這需要較大的空間。另一方面,輸入嵌入透過提供緊湊且密集的表示來降低這種計算複雜性。

增強學習

嵌入還捕獲上下文關係,因此它們提高了模型學習資料中模式和關係的能力。這種能力導致機器學習模型在自然語言處理任務上的效能得到改善。

輸入嵌入子層的運作

輸入嵌入子層的運作方式類似於其他標準的轉錄模型,包括以下步驟 -

步驟 1:分詞

在將輸入標記嵌入之前,應先對原始文字資料進行分詞。分詞是將文字拆分為較小單元(如單詞或子詞)的過程。

讓我們看看兩種分詞 -

  • 詞級分詞 -顧名思義,它將文字拆分為單個單詞。
  • 子詞級分詞 -顧名思義,它將文字拆分為更小的單元,這些單元可以是單詞的一部分。這種分詞在 BERT 和 GPT 等模型中用於處理拼寫錯誤。例如,應用於文字 =" Transformers revolutionized the field of NLP" 的子詞級分詞器將生成標記 = "["Transformers", " revolutionized ", " the ", "field", "of", "NLP"]

步驟 2:嵌入層

第二步是嵌入層,它基本上是一個查詢表,將每個標記對映到固定維度的密集向量。此過程涉及以下兩個步驟 -

  • 詞彙表 -它是模型識別的唯一標記集。
  • 嵌入維度 -它表示表示標記的向量空間的大小,例如大小為 512。

當將標記傳遞到嵌入層時,它會從嵌入矩陣中返回相應的密集向量。

如何在 Transformer 中實現輸入嵌入?

下面是一個 Python 示例,說明如何在 Transformer 中實現輸入嵌入 -

示例

import numpy as np

# Example text and tokenization
text = "Transformers revolutionized the field of NLP"
tokens = text.split()

# Creating a vocabulary
Vocab = {word: idx for idx, word in enumerate(tokens)}

# Example input (sequence of token indices)
input_indices = np.array([vocab[word] for word in tokens])

print("Vocabulary:", vocab)
print("Input Indices:", input_indices)

# Parameters
vocab_size = len(vocab)
embed_dim = 512  # Dimension of the embeddings

# Initialize the embedding matrix with random values
embedding_matrix = np.random.rand(vocab_size, embed_dim)

# Get the embeddings for the input indices
input_embeddings = embedding_matrix[input_indices]

print("Embedding Matrix:\n", embedding_matrix)
print("Input Embeddings:\n", input_embeddings)

輸出

上面的 Python 指令碼首先將文字拆分為標記並建立一個詞彙表,將每個單詞對映到唯一的索引。之後,它使用隨機值初始化一個嵌入矩陣,其中每一行對應於一個單詞的嵌入。我們使用嵌入維度 = 512。

Vocabulary: {'Transformers': 0, 'revolutionized': 1, 'the': 2, 'field': 3, 'of': 4, 'NLP': 5}
Input Indices: [0 1 2 3 4 5]
Embedding Matrix:
 [[0.29083668 0.70830247 0.22773598 ... 0.62831348 0.90910366 0.46552784]
 [0.01269533 0.47420163 0.96242738 ... 0.38781376 0.33485277 0.53721033]
 [0.62287977 0.09313765 0.54043664 ... 0.7766359  0.83653342 0.75300144]
 [0.32937143 0.51701913 0.39535506 ... 0.60957358 0.22620172 0.60341522]
 [0.65193484 0.25431826 0.55643452 ... 0.76561879 0.24922971 0.96247851]
 [0.78385765 0.58940282 0.71930539 ... 0.61332926 0.24710099 0.5445185 ]]
Input Embeddings:
 [[0.29083668 0.70830247 0.22773598 ... 0.62831348 0.90910366 0.46552784]
 [0.01269533 0.47420163 0.96242738 ... 0.38781376 0.33485277 0.53721033]
 [0.62287977 0.09313765 0.54043664 ... 0.7766359  0.83653342 0.75300144]
 [0.32937143 0.51701913 0.39535506 ... 0.60957358 0.22620172 0.60341522]
 [0.65193484 0.25431826 0.55643452 ... 0.76561879 0.24922971 0.96247851]
 [0.78385765 0.58940282 0.71930539 ... 0.61332926 0.24710099 0.5445185 ]]

結論

輸入嵌入子層將原始文字資料(如單詞或子詞)轉換為模型可以處理的格式。我們還解釋了為什麼輸入嵌入對於 Transformer 的成功執行至關重要。

透過捕獲單詞之間的語義相似性並透過提供其緊湊且密集的表示來降低計算複雜性,此子層確保模型能夠有效地學習資料中的模式和關係。

我們還提供了一個 Python 實現示例,以實現將原始文字資料轉換為適合在 Transformer 模型中進一步處理的格式所需的步驟。

瞭解和實現輸入嵌入子層對於有效地使用 Transformer 模型執行自然語言處理任務至關重要。

廣告

© . All rights reserved.