Token IDs
在自然語言處理任務中,特別是使用預訓練模型如BERT時,文本首先通過一個分詞器(例如 BertTokenizer
)轉換為一系列的token IDs。這些ID是每個詞或子詞單元在詞匯表(包含漢字、英文單詞、標點符號)中的索引位置。例如,假設有一個簡化的詞匯表如下:
{0: '[PAD]',1: 'hello',2: 'world',3: '[UNK]',...
}
如果輸入句子是 "hello world"
,經過分詞器處理后,得到的token IDs可能是 [1, 2]
,這里 1
和 2
分別對應詞匯表中的 'hello'
和 'world'
。
BERT中的應用
在BERT模型中,輸入首先是被轉換成token IDs的形式,然后通過嵌入層(Embedding Layer)將這些token IDs映射到一個高維(768維)的向量空間中。這個過程允許模型基于上下文學習更豐富的表示形式,而不是簡單地依賴于稀疏的獨熱編碼表示。因此,在您的代碼中:
input_text = self.bert_tokenizer(data, return_tensors="pt", truncation=True, padding="max_length", max_length=512)
input_ids = input_text["input_ids"].to(self.device)
這里的 input_ids
就是包含了一系列token IDs的張量,而不是獨熱編碼的表示形式。BERT模型隨后會使用這些token IDs來查找對應的詞嵌入(word embeddings),作為其輸入的一部分進行進一步的處理。這種方法不僅節省了內存和計算資源,還使得模型能夠學習更加緊湊和有效的特征表示。