Lompat ke konten
dokumentasi.id
Commit ce728f6
v1
Star659

2

Arsitektur Repository

Repository ini adalah harness finetuning yang tipis. Dua skrip di akar repository menjadi entry point — main.py untuk training dan evaluasi, predict.py untuk prediksi ulang — dan keduanya mengimpor fungsi dari utils/ secara langsung tanpa lapisan paket perantara (main.py:14-15, predict.py:13-15). Halaman ini memetakan siapa bergantung pada siapa; rincian tiap tahap dibahas di halaman masing-masing.

Peta ketergantungan antar modul

Arah impor konsisten: entry point bergantung pada utils/, dan hanya utils/functions.py yang mengimpor modules/ (utils/functions.py:6-7). utils/args_helper.py menjadi tempat ketiga lapisan bertemu karena ia mengimpor kelas dataset, fungsi metrik, dan forward function sekaligus (utils/args_helper.py:1-14).

graph TD
  m_main["main.py<br/>training + evaluation"]
  p_pred["predict.py<br/>prediction"]
  a_helper["utils/args_helper.py<br/>parser + dataset dispatch"]
  f_utils["utils/functions.py<br/>model loading"]
  d_utils["utils/data_utils.py<br/>Dataset + DataLoader"]
  fwd["utils/forward_fn.py"]
  mets["utils/metrics.py"]
  w_cls["modules/word_classification.py"]
  m_cls["modules/multi_label_classification.py"]
  dset[("dataset/")]
  saved[("save/ artefacts")]
  m_main --> a_helper
  m_main --> f_utils
  m_main -.-> d_utils
  m_main -.-> fwd
  p_pred --> a_helper
  p_pred --> f_utils
  p_pred --> mets
  p_pred -.-> fwd
  a_helper --> d_utils
  a_helper --> fwd
  a_helper --> mets
  f_utils --> w_cls
  f_utils --> m_cls
  d_utils -.-> dset
  f_utils -.-> saved
  style m_main fill:#2d7d46,color:#fff
  style p_pred fill:#2d7d46,color:#fff
  style a_helper fill:#f59e0b,color:#000
  style dset fill:#336791,color:#fff
  style saved fill:#8b5cf6,color:#fff
%% fig: Peta ketergantungan modul IndoNLU
%% desc: Dua entry point memakai utils/, args_helper menyatukan data, forward dan metrik, sementara functions memuat bobot dari save/ dan memilih kepala di modules/.
Fig. 1: Peta ketergantungan modul IndoNLUDua entry point memakai utils/, args_helper menyatukan data, forward dan metrik, sementara functions memuat bobot dari save/ dan memilih kepala di modules/.

Garis putus-putus menandai pemanggilan saat runtime, bukan impor. main.py tidak mengimpor utils/forward_fn.py; ia memakai fungsi yang sudah diisi append_dataset_args lewat args['forward_fn'] saat memanggil train(...) (main.py:185). Pola yang sama berlaku untuk bobot: berkasnya dibaca dari model_dir yang disusun dari args['model_dir'], args['dataset'], dan args['experiment_name'] (utils/functions.py:222-225).

Dua entry point dan pembagian tugas

Keduanya memakai parser dan pemuat model yang berbeda, tetapi berbagi append_dataset_args dan model_dir yang sama.

Aspekmain.pypredict.py
Parserget_parser (utils/args_helper.py:33-60)get_eval_parser (utils/args_helper.py:62-80)
Urutan pemanggilanget_parser() lalu append_dataset_args (main.py:141-142)get_eval_parser() lalu append_dataset_args (predict.py:68-69)
Pemuat modelload_model(args) (main.py:160)load_eval_model(args) (predict.py:79-81)
Sumber bobotcheckpoint Hugging Face atau embedding fasttext/word2vec (utils/functions.py:286-305)best_model_0.th di model_dir (utils/functions.py:222-225)
Fase yang dicetak=========== TRAINING PHASE =========== lalu =========== EVALUATION PHASE =========== (main.py:170-198)=========== PREDICTION =========== (predict.py:91-97)
Artefakbest_model_0.th, vocab.txt, config.json (main.py:188-194)prediction_result.csv (predict.py:99-107)

⚠️ main.py membuat folder model_dir sendiri dan menolak menimpanya kecuali diberi --force (main.py:144-151), sedangkan predict.py hanya membaca folder itu dan mencetak Model doesn't exist in {model_dir} bila best_model_0.th tidak ada (predict.py:99-107). Menjalankan prediksi sebelum training selesai hanya menghasilkan pesan itu, bukan berkas submission.

Alur training lengkap ada di Alur Training dan Evaluasi, dan pemilihan model_checkpoint di Konfigurasi Argumen dan Pemilihan Model.

append_dataset_args sebagai titik sambung

Setiap nama dataset punya satu cabang di append_dataset_args yang mengisi set kunci yang sama: task, num_labels, dataset_class, dataloader_class, forward_fn, metrics_fn, valid_criterion, jalur berkas, dan word_tokenizer_class (utils/args_helper.py:85-90).

graph LR
  darg["--dataset"] --> br["append_dataset_args"]
  marg["--model_checkpoint / --model_type"] --> gmc["get_model_class"]
  br --> tsk["task: sequence / token / multi_label"]
  br --> dcls["dataset_class + dataloader_class"]
  br --> ffn["forward_fn"]
  br --> mfn["metrics_fn"]
  tsk --> gmc
  gmc --> hcls["pred_cls: Bert / Albert / XLM / XLMRoberta"]
  dcls --> batch["batch tensor + label"]
  ffn --> outp["loss, list_hyp, list_label"]
  mfn --> outp
  style br fill:#f59e0b,color:#000
  style gmc fill:#8b5cf6,color:#fff
  style outp fill:#2d7d46,color:#fff
%% fig: Dispatch argumen ke fungsi dan kelas model
%% desc: append_dataset_args mengisi task, kelas dataset, forward_fn dan metrics_fn, lalu get_model_class memilih pred_cls dari task dan model_checkpoint.
Fig. 2: Dispatch argumen ke fungsi dan kelas modelappend_dataset_args mengisi task, kelas dataset, forward_fn dan metrics_fn, lalu get_model_class memilih pred_cls dari task dan model_checkpoint.
taskContoh datasetforward_fnmetrics_fnpred_cls
sequence_classificationemotion-twitter (utils/args_helper.py:85-90)forward_sequence_classificationemotion_detection_metrics_fnBertForSequenceClassification
multi_label_classificationabsa-airy (utils/args_helper.py:103-108)forward_sequence_multi_classificationabsa_metrics_fnBertForMultiLabelClassification
token_classificationterm-extraction-airy (utils/args_helper.py:121-126)forward_word_classificationaspect_extraction_metrics_fnBertForWordClassification

get_model_class memilih pred_cls dari pasangan model_type dan task (utils/functions.py:145-178), sedangkan load_model memilih kelas Transformers bawaan untuk sequence_classification (utils/functions.py:300-305). Nama dataset di luar daftar cabang berhenti dengan ValueError (utils/args_helper.py:300-301).

Ketiga forward function mengembalikan bentuk yang sama, loss, list_hyp, list_label, tetapi isi list_hyp berbeda: satu label per sekuens (utils/forward_fn.py:8-40), daftar label per kata yang berhenti pada nilai -100 (utils/forward_fn.py:43-85), dan satu daftar per kelas untuk multi-label (utils/forward_fn.py:88-117). Perbedaan itu yang menentukan pilihan metrics_fn: akurasi dan F1 macro untuk klasifikasi sekuens (utils/metrics.py:5-11), conll_evaluation untuk tugas tingkat kata (utils/metrics.py:13-20), dan pemerataan daftar label untuk ABSA (utils/metrics.py:74-84). Rincian tiap fungsi ada di Forward Pass dan Metrik Evaluasi.

Paket modules: dua keluarga kepala klasifikasi

modules/ hanya berisi kepala untuk klasifikasi tingkat kata dan multi-label; untuk sequence_classification kode memakai kelas bawaan transformers (utils/functions.py:300-305).

BerkasKelasKepalaLoss
modules/word_classification.pyBertForWordClassification dengan kembaran Albert, XLM, dan XLMRoberta (modules/word_classification.py:35-44)subword dirata-rata menjadi vektor kata lewat subword_to_word_ids, lalu satu nn.Linear (modules/word_classification.py:90-107)CrossEntropyLoss
modules/multi_label_classification.pyBertForMultiLabelClassification dengan kembaran Albert, XLM, dan XLMRoberta (modules/multi_label_classification.py:34-41)nn.ModuleList berisi satu nn.Linear per label (modules/multi_label_classification.py:34-41)total loss dijumlah per label (modules/multi_label_classification.py:89-103)

Pemilihan kelas di antara kedelapan kelas itu dan perilaku forward masing-masing dibahas di Modul Kepala Klasifikasi.

Direktori pendukung

Direktori dataset/ berisi satu folder per task, dan append_dataset_args menuliskan jalur berkasnya secara eksplisit, misalnya ./dataset/emot_emotion-twitter/train_preprocess.csv (utils/args_helper.py:92-95). Setiap Dataset menyimpan peta label sebagai konstanta kelas — LABEL2INDEX, INDEX2LABEL, NUM_LABELS (utils/data_utils.py:12-16) — dan setiap DataLoader menimpa collate_fn dengan _collate_fn untuk menyusun batch beserta padding (utils/data_utils.py:67-96). Rincian bentuk berkas ada di Struktur Berkas Dataset dan Submission, dan perilaku loader di Data Utils dan Dataloader.

Dua skrip shell menyambungkan entry point ke eksperimen massal. run_single_task.sh menjalankan main.py dengan kombinasi --model_checkpoint, --dataset, dan --num_layers (run_single_task.sh:2), sedangkan predict.sh menyusuri ./save/* dan menurunkan --model_type dari potongan pertama nama eksperimen (predict.sh:1-14).

Direktori examples/ dan tutorial/ berisi notebook finetune, di antaranya finetune_casa.ipynb dan finetune_smsa_tutorial.ipynb, yang dijelaskan di Contoh Finetune dan Tutorial.