GPT2

Galih Setiawan Nurohim
4 min readFeb 25, 2025

--

GPT-2 (Generative Pre-trained Transformer 2) adalah model deep learning yang dibangun berdasarkan arsitektur Transformer. Mari kita bahas konsep-konsep matematis yang ada di balik GPT-2.

1.1. Mekanisme Attention

Arsitektur Transformer mengandalkan self-attention untuk memproses input secara efisien. Mekanisme self-attention memungkinkan model untuk memperhatikan hubungan antar kata (atau token) dalam kalimat, memungkinkan model untuk menangkap ketergantungan jangka panjang.

Operasi matematika utama dalam self-attention adalah dot-product attention, yang dapat dijelaskan dengan rumus berikut:

Di mana:

Proses ini memungkinkan model untuk memutuskan seberapa besar perhatian yang harus diberikan pada setiap kata berdasarkan konteks kalimat.

1.2. Positional Encoding

Karena Transformer tidak memproses data secara berurutan seperti halnya RNN (Recurrent Neural Networks), positional encoding ditambahkan untuk memberi tahu model tentang urutan token dalam kalimat. Positional encoding ini umumnya menggunakan fungsi sinusoidal.

1.3. Tujuan Pemodelan Bahasa

GPT-2 dilatih menggunakan tujuan pemodelan bahasa kausal, yaitu model ini belajar memprediksi token berikutnya dalam urutan teks berdasarkan token sebelumnya. Proses pelatihan ini menggunakan cross-entropy loss, yang dinyatakan dengan rumus:

Di mana:

1.4. Layer Transformer

GPT-2 terdiri dari beberapa blok Transformer, masing-masing mengandung:

  • Multi-head self-attention: Memungkinkan model untuk memberi perhatian pada bagian-bagian berbeda dari input.
  • Feed-forward layers: Ini adalah lapisan fully connected yang memproses output dari attention.
  • Layer normalization: Digunakan untuk menormalkan aktivasi dan meningkatkan stabilitas pelatihan.

Output dari model ini digunakan untuk memprediksi token berikutnya berdasarkan input yang ada.

2. Implementasi Praktis: Langkah-langkah Pelatihan GPT-2

Sekarang mari kita bahas implementasi praktis dari kode yang kamu tulis, dari mempersiapkan dataset hingga melatih model GPT-2.

2.1. Memuat Dataset

Kamu menggunakan library datasets dari Hugging Face untuk memuat dataset Reuters articles. Dataset ini berisi artikel berita yang akan digunakan untuk melatih model GPT-2.

from datasets import load_dataset

dataset = load_dataset("ingeniumacademy/reuters_articles")

Setelah memuat dataset, kamu membuat kolom baru yang berisi artikel lengkap, dengan menggabungkan title dan body dari setiap artikel.

def create_full_article_col(example):
return {
'full article': f"TITLE: {example['title']}\n\nBody: {example['body']}"
}
dataset = dataset.map(create_full_article_col)

2.2. Tokenisasi

Sebelum memberi data ke GPT-2, kamu perlu mengonversi teks menjadi token yang dapat dipahami oleh model. Di sini, kamu menggunakan AutoTokenizer dari Hugging Face untuk memuat tokenizer yang sudah dilatih khusus untuk dataset Reuters.

tokenizer = AutoTokenizer.from_pretrained("ingeniumacademy/gpt2-reuters-tokenizer")

CONTEXT_LENGTH = 512 # panjang maksimal input
def tokenize(element):
outputs = tokenizer(
element["full article"],
truncation=True,
max_length=CONTEXT_LENGTH,
return_overflowing_tokens=False)
return outputs

tokenize_datasets = dataset.map(
tokenize, batched=True, remove_columns=dataset['train'].column_names
)

Langkah ini melakukan tokenisasi setiap artikel dan memangkas artikel yang lebih panjang dari panjang maksimum yang ditentukan (CONTEXT_LENGTH), memastikan bahwa model menerima urutan yang konsisten dengan panjang yang sama.

2.3. Konfigurasi Model

Sekarang kamu membuat konfigurasi untuk GPT-2 dengan mendefinisikan beberapa parameter, seperti ukuran kosakata dan panjang konteks.

from transformers import AutoConfig

config = AutoConfig.from_pretrained(
"gpt2",
vocab_size=len(tokenizer), # Ukuran kosakata sesuai tokenizer
n_ctx=CONTEXT_LENGTH, # Panjang konteks untuk GPT-2
bos_token_id=tokenizer.bos_token_id,
eos_token_id=tokenizer.eos_token_id,
)

Konfigurasi ini mengatur parameter-parameter penting seperti ukuran kosakata dan panjang konteks (maksimal token yang diterima oleh model).

2.4. Membuat Model

Setelah konfigurasi siap, kamu membuat model GPT-2 berdasarkan konfigurasi tersebut.

from transformers import GPT2LMHeadModel

model = GPT2LMHeadModel(config)

Model ini menggunakan kepala Language Modeling untuk memprediksi token berikutnya, yang merupakan tujuan dari pelatihan ini.

2.5. Pengumpulan Data (Data Collator)

Untuk menangani batching dan tokenisasi selama pelatihan, kamu menggunakan DataCollatorForLanguageModeling:

from transformers import DataCollatorForLanguageModeling

tokenizer.pad_token = tokenizer.eos_token # Menetapkan token padding sebagai token EOS
data_collator = DataCollatorForLanguageModeling(tokenizer, mlm=False)

Kamu menetapkan pad token menjadi EOS token dan mengatur mlm=False karena model ini menggunakan causal language modeling (bukan masked language modeling seperti BERT).

2.6. Melatih Model

Sekarang, kamu mengonfigurasi Trainer untuk melatih model GPT-2 pada dataset yang sudah diproses.

from transformers import Trainer, TrainingArguments

training_args = TrainingArguments(
output_dir="./reuters-gpt2-text-gen", # Direktori untuk menyimpan checkpoint model
hub_model_id="ingeniumacademy/reuters-gpt2-text-gen", # Model akan dipush ke Hugging Face Hub
evaluation_strategy="epoch", # Evaluasi setiap epoch
num_train_epochs=2, # Melatih selama 2 epoch
learning_rate=5e-5, # Learning rate
fp16=True, # Menggunakan mixed precision untuk pelatihan lebih cepat di GPU
)

trainer = Trainer(
model=model,
tokenizer=tokenizer,
args=training_args,
data_collator=data_collator,
train_dataset=tokenize_datasets["train"],
eval_dataset=tokenize_datasets["test"],
)

trainer.train() # Melatih model

Dalam bagian ini:

  • TrainingArguments mengonfigurasi parameter pelatihan, seperti jumlah epoch, learning rate, dan penyimpanan model.
  • Trainer adalah kelas yang menangani pelatihan, batching, dan logging.

2.7. Push Model ke Hub

Setelah pelatihan selesai, kamu dapat mempush model yang sudah dilatih ke Hugging Face Hub untuk berbagi atau digunakan kembali.

trainer.push_to_hub()

2.8. Inferensi dengan Model yang Dilatih

Setelah melatih model, kamu dapat menggunakannya untuk menghasilkan teks. Kamu memuat model dan tokenizer, lalu menggunakan pipeline untuk generasi teks.

from transformers import pipeline

pipe = pipeline(
"text-generation", model="ingeniumacademy/reuters-gpt2-text-gen"
)

Sekarang, kamu bisa menghasilkan teks dengan memberi prompt:

output = pipe("Breaking news: ")
print(output)

--

--

Galih Setiawan Nurohim
Galih Setiawan Nurohim

No responses yet