我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。
現在我們要讓輸入資料的長度均保持一致,不夠長的會執行 Padding,在資料集中,最長者為 47,為了展示一般性,我們設定長度為 128,程式為:
MAX_LEN = 128
input_ids = [tokenizer.convert_tokens_to_ids(x) for x in tokenized_texts]
input_ids = pad_sequences(input_ids, maxlen = MAX_LEN, dtype = "long", truncating = "post", padding = "post") # pre or post
接著要執行 Mask 動作,然而我們剛剛有把句子執行 Padding,進行補 0 的動作,我們不希望在這些 0 的位置進行 Mask,於是有以下程式:
attention_masks = []
for seq in input_ids:
seq_mask = [float(i > 0) for i in seq]
attention_masks.append(seq_mask)
資料也需要切割成訓練集和驗證集,程式如下:
train_inputs, validation_inputs, train_labels, validation_labels = train_test_split(input_ids, labels, random_state = 2018, test_size = 0.1)
train_masks, validation_masks, _, _ = train_test_split(attention_masks, input_ids, random_state = 2018, test_size = 0.1)