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:81
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-272 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.
| Resource | Ukuran / jumlah | Catatan |
|---|---|---|
| Indo4B | 23 GB uncompressed, 5.6 GB compressed | Seluruh tweet Twitter dikeluarkan karena batasan Twitter Developer Policy |
| IndoBERT | 4 varian: base dan large, masing-masing phase 1 dan phase 2 | Bobot dipublikasikan di Hugging Face indobenchmark |
| IndoBERT-lite | 4 varian: lite-base dan lite-large, masing-masing phase 1 dan phase 2 | Arsitektur ALBERT dipakai saat checkpoint memuat string lite |
| FastText (Indo4B) | model 11.9 GB, vector file 3.9 GB | Model uncased |
| FastText per task | FastText-Indo4B dan FastText-CC-ID | Kosakata lebih kecil untuk 12 downstream task |
Baris Indo4B bersumber dari README.md:38-403, baris IndoBERT dari README.md:42-554, dan baris FastText dari README.md:57-645. Pemakaian checkpoint IndoBERT saat training dilakukan lewat opsi --model_checkpoint, misalnya indobenchmark/indobert-base-p1. run_single_task.sh:26-276
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.Simpul main.py mewakili entrypoint training: blok __main__ memanggil get_parser dan append_dataset_args, lalu membuat direktori eksperimen. main.py:136-1427 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-1018 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-149
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-710 Pemilihan kelas konkret dilakukan get_model_class berdasarkan model_type dan task. utils/functions.py:14511 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
| Perintah | Yang dijalankan | Rujukan |
|---|---|---|
bash run_all_tasks.sh <gpu> <early_stop> <batch_size> | Memanggil run_single_task.sh untuk 12 nama --dataset | run_all_tasks.sh:1-1215 |
bash run_single_task.sh <gpu> <dataset> <early_stop> <batch_size> | Satu rangkaian main.py per kombinasi model dan jumlah layer | run_single_task.sh:1-416 |
bash predict.sh <gpu> | Mengiterasi direktori di ./save/* lalu memanggil predict.py per eksperimen | predict.sh:1-1017 |
predict.py sendiri memuat load_eval_model dan get_eval_parser dari utils.functions dan utils.args_helper. predict.py:13-1418 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-3719 Daftar nilai yang benar-benar dipakai skrip orkestrasi tercantum di Konfigurasi Argumen dan Pemilihan Model.
⚠️ Direktori eksperimen tidak ditimpa diam-diam.
main.pymembuatsave/<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--forceyang membolehkan penimpaan. main.py:148-15120
⚠️ Berkas submission punya nama tetap. Setiap berkas submission diawali kolom
index(id sampel test mengikuti urutan test set yang disamarkan), dan prediksi harus dinamaipred.txtsebelum di-zip. README.md:33-3621
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-3122 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-2323 Interaksi komunitas tunduk pada Contributor Covenant Code of Conduct. CODE_OF_CONDUCT.md:1-224
⚠️ Lisensi tidak konsisten di dua tempat. Badge di README menautkan label MIT. README.md:225 Namun berkas
LICENSEdi 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.