Lompat ke konten
dokumentasi.id
Commit ce728f6
v1
Star659

Kamu membaca versi lama. Halaman ini hanya bisa dibaca.

7

Struktur Berkas Dataset dan Submission

append_dataset_args menetapkan seluruh path berkas untuk satu task. Setiap cabang elif mengisi train_set_path, valid_set_path, test_set_path, dan vocab_path dengan pola nama yang sama, dan hanya direktori task yang berbeda (utils/args_helper.py:92-95, utils/args_helper.py:110-113). Path ini tidak datang dari argumen command line, sehingga konvensi penamaan di bawah direktori dataset/ yang mengikat data ke kode.

Empat berkas tetap per direktori task

emotion-twitter memakai train_preprocess.csv, valid_preprocess.csv, dan test_preprocess_masked_label.csv dari ./dataset/emot_emotion-twitter/, dengan vocab_path menunjuk vocab_uncased.txt di direktori yang sama (utils/args_helper.py:92-95). Pola itu berulang pada absa-airy (utils/args_helper.py:110-113) dan pada doc-sentiment-prosa, yang memakai ekstensi .tsv untuk seluruh berkasnya (utils/args_helper.py:200-203).

erDiagram
    TASK_DIRECTORY ||--|| TRAIN_FILE : "train_preprocess"
    TASK_DIRECTORY ||--|| VALID_FILE : "valid_preprocess"
    TASK_DIRECTORY ||--|| TEST_FILE : "test_preprocess_masked_label"
    TASK_DIRECTORY ||--|| VOCAB_FILE : "vocab_uncased.txt"
    TEST_FILE ||--|| SUBMISSION_FILE : "urutan index"
    SUBMISSION_FILE {
        int index
        varchar label
    }
    VOCAB_FILE {
        int line_number
        varchar token
    }
%% fig: Relasi berkas dataset dan berkas submission
%% desc: Satu direktori task menampung train, valid, test berlabel tersamar, dan vocab; berkas submission mengikuti urutan index dari test set.
Fig. 1: Relasi berkas dataset dan berkas submissionSatu direktori task menampung train, valid, test berlabel tersamar, dan vocab; berkas submission mengikuti urutan index dari test set.

Entitas SUBMISSION_FILE di atas memakai bentuk emotion-twitter, satu kolom label. Pada task multi-label, label dipecah menjadi satu kolom per aspek.

args['dataset']direktori taskekstensirujukan
emotion-twitterdataset/emot_emotion-twitter/.csvutils/args_helper.py:92-95
absa-airydataset/hoasa_absa-airy/.csvutils/args_helper.py:110-113
term-extraction-airydataset/terma_term-extraction-airy/.txtutils/args_helper.py:128-131
ner-gritdataset/nergrit_ner-grit/.txtutils/args_helper.py:146-149
pos-idndataset/bapos_pos-idn/.txtutils/args_helper.py:164-167
entailment-uidataset/wrete_entailment-ui/.csvutils/args_helper.py:182-185
doc-sentiment-prosadataset/smsa_doc-sentiment-prosa/.tsvutils/args_helper.py:200-203
keyword-extraction-prosadataset/keps_keyword-extraction-prosa/.txtutils/args_helper.py:218-221
qa-factoid-itbdataset/facqa_qa-factoid-itb/.csvutils/args_helper.py:236-239
ner-prosadataset/nerp_ner-prosa/.txtutils/args_helper.py:254-257
pos-prosadataset/posp_pos-prosa/.txtutils/args_helper.py:272-275
absa-prosadataset/casa_absa-prosa/.csvutils/args_helper.py:290-293

Nama dataset di luar daftar itu tidak punya cabang, dan append_dataset_args langsung berhenti dengan ValueError(f'Unknown dataset name {args["dataset"]}') (utils/args_helper.py:300-301).

Bentuk isi berkas dataset

Task klasifikasi sequence dan multi-label dibaca sebagai CSV. EmotionDetectionDataset.load_dataset memanggil pd.read_csv(path) lalu memetakan kolom label lewat LABEL2INDEX, sedangkan __getitem__ mengambil kolom tweet dan label per baris (utils/data_utils.py:395-399, utils/data_utils.py:406-409). DocumentSentimentDataset membaca TSV tanpa header dengan sep='\t' dan menamai kolomnya text serta sentiment (utils/data_utils.py:510-514).

Task token classification dibaca baris per baris. AspectExtractionDataset.load_dataset memecah setiap baris pada karakter \t menjadi token dan label, lalu menutup satu kalimat pada baris yang tidak memuat \t (utils/data_utils.py:26-38). Karena itu test_preprocess_masked_label.txt untuk task NER, POS, dan ekstraksi tetap memakai format token-label bertab, bukan CSV.

⚠️ Berkas yang dipakai test_set_path selalu versi berlabel tersamar, misalnya test_preprocess_masked_label.csv (utils/args_helper.py:92-95). README menyatakan label test set di-mask untuk menjaga integritas evaluasi dan prediksinya dikirim ke portal submission (README.md:27). Penilaian resmi terjadi di portal, bukan dari berkas lokal.

Format berkas submission

Setiap berkas submission selalu diawali kolom index, yaitu id sampel uji yang mengikuti urutan test set berlabel tersamar, dan tiap task punya format berbeda (README.md:33-36). Untuk emotion-twitter, berkas hanya memuat index dan label berisi nama kelas seperti anger, fear, happy, dan love (submission_examples/emotion-twitter_test.csv:1-5).

absa-airy memakai bentuk lain: setelah index, setiap aspek menjadi kolom sendiri, yaitu ac, air_panas, bau, general, kebersihan, linen, service, sunrise_meal, tv, dan wifi, dengan nilai pos, neg, atau neut (submission_examples/absa-airy_test.csv:1-2). Jumlah kolom submission karena itu mengikuti jumlah aspek pada task tersebut, bukan satu kolom label.

TaskKolom setelah indexNilaiRujukan
emotion-twittersatu kolom labelanger, fear, happy, lovesubmission_examples/emotion-twitter_test.csv:1-5
absa-airy10 kolom aspekpos, neg, neutsubmission_examples/absa-airy_test.csv:1-2

README juga menyebut langkah pengumpulan: prediksi diganti nama menjadi pred.txt, lalu di-zip, lalu sistem menghitung hasilnya dan progresnya terlihat pada tab results (README.md:33-36).

⚠️ predict.py tidak menulis berkas dalam format submission. Hasil inferensi disimpan ke prediction_result.csv dengan kolom seq, hyp, dan label (predict.py:99-105), sehingga kolom index dan nama berkas pred.txt harus disusun terpisah sebelum dikirim. Alur inferensi lengkapnya ada di Inferensi dan Prediksi.

Dari vocab_uncased.txt ke vocab.txt

vocab_path di append_dataset_args menunjuk vocab_uncased.txt di direktori task (utils/args_helper.py:92-95). Berkas itu dipakai saat training, lalu disalin menjadi vocab.txt di dalam direktori eksperimen (main.py:189). Saat evaluasi, load_eval_model membangun path vocab.txt, config.json, dan best_model_0.th dari model_dir, dataset, dan experiment_name (utils/functions.py:222-225). Nama berkas di direktori task dan di direktori eksperimen karena itu berbeda, dan vocab_uncased.txt tidak dibaca langsung pada tahap evaluasi.

graph LR
    ARG["args['dataset']"] --> CSV["berkas .csv dan .tsv"]
    ARG --> TXT["berkas .txt token tab"]
    CSV --> TEST["test_set_path berlabel tersamar"]
    TXT --> TEST
    TEST --> PRED["predict.py menulis prediction_result.csv"]
    PRED --> SUB["pred.txt di-zip ke portal submission"]
    ARG --> UNKNOWN["ValueError Unknown dataset name"]
    style ARG fill:#f59e0b,color:#000
    style TEST fill:#2d7d46,color:#fff
    style PRED fill:#8b5cf6,color:#fff
    style SUB fill:#336791,color:#fff
    style UNKNOWN fill:#dc2626,color:#fff
%% fig: Pemilihan berkas sampai submission
%% desc: Nama dataset menentukan ekstensi dan path test set, keluarannya berupa prediction_result.csv yang harus diubah menjadi pred.txt sebelum dikirim.
Fig. 2: Pemilihan berkas sampai submissionNama dataset menentukan ekstensi dan path test set, keluarannya berupa prediction_result.csv yang harus diubah menjadi pred.txt sebelum dikirim.

Warna pada diagram menandai peran: kuning untuk pemilihan konfigurasi, hijau untuk test set yang dipakai evaluasi, ungu untuk data turunan hasil prediksi, biru untuk berkas yang dikirim, dan merah untuk nama dataset yang ditolak. Hubungan antar kelas dataset dan dataloader yang membaca berkas-berkas ini dibahas di Data Utils dan Dataloader.