Language Modeling dengan Transformer
Prerequisite
Pembaca diharapkan sudah mengetahui dasar-dasar terminologi NLP dan arsitektur transformer.
Language Model (LM)
Language model adalah model machine learning (ML) yang dapat memprediksi kata selanjutnya berdasarkan kata-kata yang telah dilihat. Language model standar ini disebut juga causal language model (CLM).
Cara kerja dari CLM ini adalah dengan memprediksi probabilitas kata tertentu dalam suatu urutan kata.
Pre-training Language Model
Agar model ML bisa memprediksi kata secara benar dan digunakan pada task lain, maka model perlu dilatih berulang-ulang dengan data yang besar. Untuk dapat melakukan training language model, diperlukan suatu task tertentu. Pada ML biasanya task yang digunakan adalah task untuk memprediksi kata selanjutnya.
Proses training dari LM dimulai dengan input suatu kalimat. Setelah itu model akan dibangun berdasarkan input kalimat tersebut. Model selanjutnya akan menghasilkan output tertentu. Lalu, model akan diperbaharui berdasarkan output yang dihasilkan.
Contoh dari input dan output adalah sebagai berikut.
Biasanya hanya perusahaan besar yang memiliki resource memadai yang dapat melatih language model.
Transformer-based Language Model (TLM)
Saat ini di Natural Language Processing (NLP) sedang booming model Transformer. Transformer awalnya digunakan untuk task machine translation. Namun, model ini telah terbukti mumpuni untuk digunakan di berbagai macam task lain, seperti sequence classification, question-answering, dan language modeling. Secara umum transformer terdiri atas dua bagian utama, yaitu encoder dan decoder.
Beberapa TLM yang saat ini tren, yaitu OpenAI GPT, BERT dan XL-NET. Story ini hanya akan membahas GPT dan BERT. GPT dan BERT tidak menggunakan keseluruhan bagian transformer, tetapi hanya bagian encoder saja atau decoder saja.
Masalah dari language model standar adalah jika menggunakan transformer sebagai language model, maka dengan adanya self-attention mechanism, model bisa curang dengan melihat semua kata di dalam kalimat input. Artinya, supaya bisa digunakan di dalam language model, maka self-attention perlu dibatasi dengan hanya belajar dari kata-kata sebelumnya.
OpenAI GPT
Definisi
GPT adalah singkatan dari Generative Pre-Training. Model GPT hanya menggunakan decoder block dari transformer.
GPT-2 dan GPT-3 adalah pengembangan lanjutan dari GPT. Pengembangan yang dimaksud adalah training dengan dataset yang lebih besar dan parameter yang lebih banyak.
Perbedaan dengan transformer
GPT tidak memiliki encoder, dan hanya menggunakan bagian decoder yang ditumpuk lebih banyak. Ukurannya bermacam-macam mulai dari 12–48 block decoder.
Decoder block dari GPT hampir sama dengan transformer, namun GPT hanya menggunakan masked self-attention dan feed forward neural network. GPT tidak menggunakan self-attention layer yang kedua (encoder-decoder attention). Hal ini disesuaikan dengan task yang digunakan untuk melatih LM pada GPT yaitu CLM.
BERT
Definisi
BERT adalah singkatan dari for Bidirectional Encoder Representations from Transformers. Dari kepanjangannya ada dua hal yang dapat digaris bawahi.
- BERT menggunakan salah satu bagian dari transformer, yaitu encoder.
- BERT itu bidirectional, artinya dilatih dari dua arah (kiri-kanan dan kanan-kiri).
Perbedaan dengan transformer
BERT tidak memiliki decoder, tetapi hanya menggunakan encoder dengan jumlah yang lebih banyak.
Transformer encoder memiliki 8 heads dengan panjang embedding 64 (dimensi input 512). Sedangkan BERT memiliki 12 head dengan masing-masing panjang embedding 64 (dimensi input 768).
Perbedaan GPT dan BERT
Learning objective
Perbedaan selanjutnya adalah learning objective yang digunakan saat pre-training language model. Sama seperti model ML lain, GPT menggunakan language model standar (CLM), yaitu memprediksi kalimat yang muncul selanjutnya. Sedangkan BERT menggunakan language modeling dua arah atau ‘masked’ language model.
Lebih detail BERT menggunakan task yang lebih spesifik, yaitu:
- Masked Language Model (MLM): memprediksi kata yang ditutupi (masked).
- Next sentence prediction (NSP): mengecek apakah dua kalimat input muncul secara berurutan dalam teks atau tidak ada hubungan sama sekali.
Model architecture
Perbedaan mendasar diantara keduanya adalah penggunaan bagian transformer untuk language modeling. OpenAI GPT menggunakan bagian decoder, sedangkan BERT menggunakan bagian encoder.
Motivasi mengapa TLM hanya menggunakan salah satu bagian dari transformer dapat dilihat pada paper ini. Sebelum muncul GPT, paper tersebut merupakan paper yang pertama kali mengajukan decoder-only model. Paper tersebut menyatakan bahwa:
We also suspect that for monolingual text-to-text tasks redundant information is re-learned about language in the encoder and decoder. We believe this allows for easier optimization and empirically observe this with longer sequences.
Mengapa bisa redundant untuk monolingual? Hal ini disebabkan karena encoder dan decoder memiliki input yang sama. Sehingga keduanya belajar hal yang sama. Dengan hanya menggunakan encoder atau decoder saja, maka model dapat lebih fokus dan bisa dibuat lebih kompleks dengan penambahan jumlah block encoder atau decoder.
Penggunaan bagian decoder saja atau encoder saja disesuaikan dengan task pada saat pre-training. Karena GPT menggunakan language model standar (CLM), maka decoder sangat cocok digunakan untuk pre-training CLM. Decoder memproses token satu per satu dari kiri ke kanan dan menutupi token yang berada di sebelah kanan (masked self-attention).
Sedangkan BERT menggunakan encoder karena adanya mekanisme bidirectional. Sehingga untuk melatih LM dari dua arah (token sebelum dan token selanjutnya), tidak bisa dilakukan di decoder karena adanya masked self-attention.
Auto-regressive?
Auto-regressive artinya setiap token yang dilatih memiliki konteks dari kata-kata sebelumnya. Karena token pada GPT dilatih satu persatu, maka GPT auto-regressive. Sedangkan BERT tidak auto-regressive karena memiliki konteks dari kata-kata sebelum dan setelah kata yang ditutupi (masked).
Dataset
Selanjutnya, GPT dilatih dengan dataset BookCorpus, sedangkan BERT dilatih dengan dataset BookCorpus dan Wikipedia.
Tokenizer
GPT menggunakan byte pair encoding, sedangkan BERT menggunakan WordPiece vocabulary. Pada dasarnya, WordPiece mirip dengan BPE. Pemilihan sub kata baru pada WordPiece dipilih berdasarkan likelihood, sedangkan pada BPE sub kata baru dipilih berdasarkan frekuensi tertinggi.
Embeddings
Embedding pada GPT sama seperti embedding pada transformer encoder, yaitu menggunakan token embedding + positional embedding. Sedangkan BERT, selain menggunakan token embedding dan positional embedding, BERT menggunakan segment embedding. Embedding ini digunakan untuk membedakan sequence pada input yang berpasangan pada task NSP.
Vocabulary size
Vocabulary size untuk GPT adalah 50,257. Sedangkan vocabulary size untuk BERT adalah 30,522.
Sumber:
Acknowledgements
Terima kasih kepada Alham Fikri Aji dan Made Nindyatama karena telah memberikan feedback pada versi sebelumnya dari postingan ini.