Fine-tune Model Machine Translation Inggris-Indonesia (en-id)

Sebelumnya saya telah mencoba fine tune Llama2 dengan instruksi Bahasa Indonesia dan mendapat hasil yang kurang memuaskan. Jadi terpikir bagaimana kalau kita menggunakan translasi Bahasa Inggris ke Bahasa Indonesia? Awalnya saya berpikir urutannya akan seperti ini: prompt Bahasa Indonesia –> Terjemahkan ke Bahasa Inggris –> Llama -> hasil Bahasa Inggris –> Terjemahkan ke Bahasa Indonesia. Tapi ternyata Llama2 dapat memahami instruksi Bahasa Indonesia walaupun outputnya Bahasa Inggris. Jadi kita hanya perlu translasi en-id untuk output dari Llama2. Tentu kelemahannya akan ada tambahan waktu dan resources.

Saya menggunakan tutorial di: https://huggingface.co/learn/nlp-course/chapter7/4?fw=tf Ganti “fr” pada tutorial tersebut menjadi “id”. Tutorial ini melakukan fine tune model marian (marian adalah neural machine translation https://marian-nmt.github.io/). Model ini dibentuk dari dataset Opus dan ada di https://huggingface.co/Helsinki-NLP/opus-mt-en-id. Model ini akan di fine tune dengan dataset KDE (https://huggingface.co/datasets/kde4). Dataset KDE berisi kalimat-kalimat yang terkait dengan pengoperasian komputer.

Proses fine tune dengan Google Colab GPU T4 memerlukan waktu kira-kira 30 menit (kalau TPU sangat lama, saya batalkan) Nilai BLEU untuk dataset KDE naik dari 49 ke 65 setelah finetune. Contoh kalimat: “Default to expanded threads” yang tadinya “‘Baku ke thread yang diperluas’ (sebelum finetune) menjadi “Standar untuk thread yang diperluas” (setelah finetune). Jadi membaik hasilnya. Untuk proses penterjemahannya memerlukan waktu sekitar 4 detik untuk 4 kata tersebut (T4). Lumayan lama juga berarti sekitar 1 token per detik. Penggunaan A100 bisa mempercepat sekitar 30% (tapi mahal). Berikut cara penggunaan model yang sudah di finetune

#Cara penggunaan finetuned model:

!pip install transformers[sentencepiece]
!pip install datasets
!pip install sacremoses

from transformers import pipeline
model_checkpoint = "yudiwbs/marian-finetuned-kde4-en-to-id"
translator = pipeline("translation", model=model_checkpoint)
translator("Default to expanded threads")

Selanjutnya saya penasaran apakan model ini bisa difinetune lagi dengan dataset yang berbeda?

Saya akan coba menggunakan dataset vtrans (https://huggingface.co/datasets/vhtran/en-id) untuk finetune. Sempat error, ternyata hasil dari finetune menggunakan tutorial ini adalah tensorflow jadi untuk finetune yang kedua ini, perlu ada perubahan sedikit:

#ini akan error
model = TFAutoModelForSeq2SeqLM.from_pretrained(model_checkpoint, from_pt=True)

#harus diganti spt ini karena bukan pytorch
model = TFAutoModelForSeq2SeqLM.from_pretrained(model_checkpoint, from_pt=False)

Sayangnya saya lupa mengukur kinerja dataset vtrans ini (keburu saya matikan runtime-nya karena takut habis hehe). Model saya letakkan di: https://huggingface.co/yudiwbs/marian-finetuned-kde4-en-to-id_vtrans

Untuk kalimat “Default to expanded threads”, maka hasilnya:
model awal (Helsinki): Baku ke thread yang diperluas
model finetuned KDE: Standar untuk thread yang diperluas
model finetuned KDE,vtrans: Standar untuk memperluas benang.

Menarik finetune dengan vtrans mengubah “Thread” menjadi “benang” yang merupakan terjemahan yang salah. Mungkin sebaiknya KDE dijadikan satu dengan vtrans ini baru sekaligus di finetune?

Untuk kalimat “Joko Widodo is the current President of Indonesia, serving since 2014.”

model awal (Helsinki): Joko Widodo adalah Presiden Indonesia saat ini, melayani sejak 2014.
model finetuned KDE: Joko Widodo adalah Presiden Indonesia saat ini, yang melayani sejak 2014.
model finetuned KDE,vtrans: Joko Widodo adalah Presiden Indonesia saat ini, yang bertugas sejak tahun 2014.

Dapat dilihat finetuned vtrans memperbaiki kualitas terjemahan, walaupun masih lebih tepat menjabat daripada bertugas, tapi lebih baik daripada kata melayani.

Tinggalkan komentar