Lompat ke konten
dokumentasi.id
Commit ce728f6
v1
Star659

1

Ringkasan Proyek IndoNLU

IndoNLU adalah kumpulan resource Natural Language Understanding (NLU) untuk Bahasa Indonesia dengan 12 downstream task. Repository ini menyediakan kode untuk mereproduksi hasil benchmark sekaligus distribusi pre-trained model IndoBERT dan IndoBERT-lite yang dilatih pada korpus Indo4B berisi sekitar 4 miliar kata, lebih dari 20 GB data teks. Proyek ini awalnya dimulai oleh kolaborasi universitas dan industri, antara lain Institut Teknologi Bandung, Universitas Multimedia Nusantara, The Hong Kong University of Science and Technology, Universitas Indonesia, Gojek, dan Prosa.AI. README.md:8

Benchmark-nya sendiri didefinisikan lewat pasangan dataset dan label yang tersebar di 12 downstream task. Label test set disamarkan untuk menjaga integritas evaluasi, dan prediksi dikirim ke portal submission CodaLab. README.md:25-27 Rincian tiap task beserta jenis klasifikasinya dibahas di 12 Task Downstream dan Jenis Klasifikasi dan Struktur Berkas Dataset dan Submission.

Resource yang didistribusikan

Selain kode, repository ini menjadi titik masuk menuju artefak pra-latih yang besar. Tabel berikut merangkum resource tersebut beserta ukuran yang disebutkan README.

ResourceUkuran / jumlahCatatan
Indo4B23 GB uncompressed, 5.6 GB compressedSeluruh tweet Twitter dikeluarkan karena batasan Twitter Developer Policy
IndoBERT4 varian: base dan large, masing-masing phase 1 dan phase 2Bobot dipublikasikan di Hugging Face indobenchmark
IndoBERT-lite4 varian: lite-base dan lite-large, masing-masing phase 1 dan phase 2Arsitektur ALBERT dipakai saat checkpoint memuat string lite
FastText (Indo4B)model 11.9 GB, vector file 3.9 GBModel uncased
FastText per taskFastText-Indo4B dan FastText-CC-IDKosakata lebih kecil untuk 12 downstream task

Baris Indo4B bersumber dari README.md:38-40, baris IndoBERT dari README.md:42-55, dan baris FastText dari README.md:57-64. Pemakaian checkpoint IndoBERT saat training dilakukan lewat opsi --model_checkpoint, misalnya indobenchmark/indobert-base-p1. run_single_task.sh:26-27

Peta komponen repository

Gambar berikut memetakan komponen utama dan arah ketergantungannya: skrip orkestrasi memanggil satu entrypoint training, entrypoint itu memilih dataset, model, forward function, dan metrik lewat satu modul argumen, lalu hasil training di direktori save dibaca oleh jalur prediksi.

graph TD
  allTasks["run_all_tasks.sh"] --> singleTask["run_single_task.sh"]
  singleTask --> mainPy["main.py"]
  mainPy --> argsHelper["utils/args_helper.py: get_parser, append_dataset_args"]
  argsHelper --> datasetDir["dataset/ 12 folder task"]
  argsHelper --> dataUtils["utils/data_utils.py"]
  argsHelper --> forwardFn["utils/forward_fn.py"]
  argsHelper --> metricsPy["utils/metrics.py"]
  mainPy --> loadModel["utils/functions.py: load_model"]
  loadModel --> modulesPy["modules/word_classification.py, modules/multi_label_classification.py"]
  mainPy --> saveDir["save/ per eksperimen"]
  saveDir --> predictSh["predict.sh"]
  predictSh --> predictPy["predict.py"]
  predictPy --> evalModel["utils/functions.py: load_eval_model"]

  style saveDir fill:#336791,color:#fff
  style datasetDir fill:#8b5cf6,color:#fff
  style argsHelper fill:#f59e0b,color:#000
  style loadModel fill:#f59e0b,color:#000
  style modulesPy fill:#2d7d46,color:#fff
%% fig: Peta komponen repository IndoNLU
%% desc: Skrip orkestrasi menuju main.py, yang memilih dataset dan model lewat utils/args_helper.py lalu menyimpan bobot ke save/ untuk dipakai predict.py.
Fig. 1: Peta komponen repository IndoNLUSkrip orkestrasi menuju main.py, yang memilih dataset dan model lewat utils/args_helper.py lalu menyimpan bobot ke save/ untuk dipakai predict.py.

Simpul main.py mewakili entrypoint training: blok __main__ memanggil get_parser dan append_dataset_args, lalu membuat direktori eksperimen. main.py:136-142 append_dataset_args memetakan satu nama --dataset menjadi task, num_labels, dataset_class, dataloader_class, forward_fn, metrics_fn, dan valid_criterion; contohnya cabang emotion-twitter mengisi forward_sequence_classification dan emotion_detection_metrics_fn. utils/args_helper.py:83-101 Kelas dataset, forward function, dan fungsi metrik yang diisi berasal dari utils.data_utils, utils.forward_fn, dan utils.metrics. utils/args_helper.py:1-14

Simpul model merujuk dua modul kepala klasifikasi milik repository, yaitu modules/word_classification.py dan modules/multi_label_classification.py, yang diimpor oleh utils/functions.py. utils/functions.py:6-7 Pemilihan kelas konkret dilakukan get_model_class berdasarkan model_type dan task. utils/functions.py:145 Setelah model dan tokenizer tersedia, main.py menyalakan tiga dataloader (train, valid, test) dari kelas yang sama dengan max_seq_len dan batch_size dari argumen. main.py:160-174 Training itu sendiri dijalankan fungsi train. main.py:74 main.py:185

Susunan direktori tingkat atas terdiri atas main.py, predict.py, run_all_tasks.sh, run_single_task.sh, predict.sh, utils/, modules/, dataset/, examples/, submission_examples/, dan tutorial/. Struktur itu dirinci di Arsitektur Repository.

Perintah utama

PerintahYang dijalankanRujukan
bash run_all_tasks.sh <gpu> <early_stop> <batch_size>Memanggil run_single_task.sh untuk 12 nama --datasetrun_all_tasks.sh:1-12
bash run_single_task.sh <gpu> <dataset> <early_stop> <batch_size>Satu rangkaian main.py per kombinasi model dan jumlah layerrun_single_task.sh:1-4
bash predict.sh <gpu>Mengiterasi direktori di ./save/* lalu memanggil predict.py per eksperimenpredict.sh:1-10

predict.py sendiri memuat load_eval_model dan get_eval_parser dari utils.functions dan utils.args_helper. predict.py:13-14 Alur training dan alur prediksi dijelaskan lebih jauh di Alur Training dan Evaluasi dan Inferensi dan Prediksi.

Argumen --dataset pada get_parser menerima daftar nama task seperti emotion-twitter, absa-airy, ner-grit, pos-idn, entailment-ui, doc-sentiment-prosa, keyword-extraction-prosa, qa-factoid-itb, dan news-category-prosa. utils/args_helper.py:33-37 Daftar nilai yang benar-benar dipakai skrip orkestrasi tercantum di Konfigurasi Argumen dan Pemilihan Model.

⚠️ Direktori eksperimen tidak ditimpa diam-diam. main.py membuat save/<dataset>/<experiment_name> lalu berhenti bila direktori itu sudah ada. Pesan yang muncul: model directory ... already exists, use --force if you want to overwrite the folder. Opsi --force yang membolehkan penimpaan. main.py:148-151

⚠️ Berkas submission punya nama tetap. Setiap berkas submission diawali kolom index (id sampel test mengikuti urutan test set yang disamarkan), dan prediksi harus dinamai pred.txt sebelum di-zip. README.md:33-36

Contoh, tutorial, dan komunitas

README mengarahkan pembaca ke folder examples untuk panduan memuat IndoBERT dan melakukan finetune pada Sequence Classification dan Sequence Tagging. README.md:29-31 Notebook dan skrip contohnya dibahas di Contoh Finetune dan Tutorial, sedangkan kebutuhan pustaka dan cara menjalankannya ada di Instalasi dan Kebutuhan Lingkungan.

Untuk berkontribusi, alur yang diminta adalah membaca pedoman kontribusi, menghubungi maintainer atau membuka issue untuk mengumpulkan umpan balik, baru kemudian mengirim pull request. README.md:22-23 Interaksi komunitas tunduk pada Contributor Covenant Code of Conduct. CODE_OF_CONDUCT.md:1-2

⚠️ Lisensi tidak konsisten di dua tempat. Badge di README menautkan label MIT. README.md:2 Namun berkas LICENSE di akar repository berisi Apache License Version 2.0. LICENSE:1-2 Pastikan keduanya diperiksa sebelum memakai ulang kode ini.

Urutan membaca dokumentasi

Halaman ini hanya memberi gambaran umum. Peta komponen yang lebih rinci ada di Arsitektur Repository; persiapan lingkungan di Instalasi dan Kebutuhan Lingkungan; siklus training dan evaluasi di Alur Training dan Evaluasi; detail dataset dan berkas submission di Struktur Berkas Dataset dan Submission, Data Utils dan Dataloader, dan Forward Pass dan Metrik Evaluasi; serta bagian model di Modul Kepala Klasifikasi.