Language Modeling dengan Transformer

Tirana Fatyanosa
6 min readDec 22, 2020

--

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.

Source: https://medium.com/analytics-vidhya/a-comprehensive-guide-to-build-your-own-language-model-in-python-5141b3917d6d

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.

Source: http://jalammar.github.io/illustrated-transformer/

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.

Sumber: https://jalammar.github.io/illustrated-gpt2/

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.

Decoder blok dari GPT. Sumber:http://jalammar.github.io/illustrated-gpt2/
Decoder blok dari transformers. Sumber: http://jalammar.github.io/illustrated-gpt2/

BERT

Definisi

BERT adalah singkatan dari for Bidirectional Encoder Representations from Transformers. Dari kepanjangannya ada dua hal yang dapat digaris bawahi.

  1. BERT menggunakan salah satu bagian dari transformer, yaitu encoder.
  2. 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).

Sumber: http://jalammar.github.io/illustrated-bert/

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:

  1. Masked Language Model (MLM): memprediksi kata yang ditutupi (masked).
  2. 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.

Sumber: https://www.youtube.com/watch?v=-QH8fRhqFHM

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.

Sumber: https://github.com/openai/gpt-2/issues/157

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.

Sumber: http://jalammar.github.io/illustrated-gpt2/

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.

Sumber: https://www.youtube.com/watch?v=Fs8Zb4T-_CE

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.

--

--

No responses yet