feat: rubah data berdasarkan pedoman

This commit is contained in:
matthewflrnt
2026-11-02 11:45:38 +07:00
parent 4f2a26e696
commit 0d3f807c45
20 changed files with 31 additions and 31 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
+20 -20
View File
@@ -1,22 +1,22 @@
from main import koleksi_kecil, koleksi_besar
# Lab 3 — 15 pasangan (pertanyaan, kata/frasa kunci yang HARUS ada di chunk jawaban yang benar)
# Lab 3 — 15 pasangan (pertanyaan, kata/frasa kunci dari 2025 Pedoman Akademik-FT-S1 Informatika.pdf)
UJI = [
("Apa syarat cuti akademik?", "cuti akademik"),
("Berapa batas kehadiran untuk ujian?", "75 persen"),
("Berapa maksimal cuti akademik selama masa studi?", "2 semester"),
("Kapan batas pengajuan cuti akademik dilakukan?", "2 minggu"),
("Berapa SKS maksimal jika IP semester sebelumnya 3.20?", "24 SKS"),
("Berapa SKS minimal untuk kelulusan program sarjana?", "144 SKS"),
("Apa syarat IPK minimal untuk lulus program sarjana?", "2.00"),
("Berapa lama masa studi maksimal program sarjana?", "14 semester"),
("Berapa SKS minimal yang harus ditempuh untuk mengambil skripsi?", "110 SKS"),
("Berapa syarat nilai minimal mata kuliah Metodologi Penelitian?", "nilai C"),
("Berapa kali bimbingan minimal sebelum sidang skripsi?", "8 kali"),
("Apa sanksi bagi mahasiswa yang melakukan kecurangan ujian?", "nilai E"),
("Berapa lama waktu ujian susulan dapat diajukan setelah jadwal?", "3 hari"),
("Berapa nilai minimal untuk mendapatkan predikat Cum Laude?", "3.51"),
("Berapa persentase maksimal kemiripan turnitin untuk naskah skripsi?", "20 persen"),
("Berapa beban SKS minimal untuk memperoleh gelar Sarjana di Program Studi Informatika?", "144"),
("Berapa jumlah SKS mata kuliah pilihan yang wajib ditempuh dalam Struktur Kurikulum Informatika?", "15 sks"),
("Berapa batas maksimum jumlah mata kuliah bernilai D yang diizinkan pada Prodi Informatika?", "4 matakuliah"),
("Sertifikat tes bahasa Inggris apa yang wajib diserahkan mahasiswa menjelang yudisium?", "EPT"),
("Berapa maksimal SKS mata kuliah pilihan lintas program studi yang diizinkan diambil mahasiswa?", "4 sks"),
("Apa kode mata kuliah Pendidikan Agama pada kelompok Matakuliah Pengembangan Kepribadian (MPK)?", "REL100"),
("Pada tahun berapa Program Studi Informatika Fakultas Teknik UKWMS resmi didirikan?", "2024"),
("Siapa nama Ketua Program Studi Informatika Fakultas Teknik UKWMS?", "Peter Rhatodirdjo Angka"),
("Siapa nama Rektor Universitas Katolik Widya Mandala Surabaya periode 2025 s/d 2029?", "Sumi Wijaya"),
("Di jalan apa lokasi Kampus Kalijudan Fakultas Teknik Program Studi Informatika UKWMS?", "Kalijudan 37"),
("Berapa syarat minimal SKS yang sudah ditempuh untuk memprogram mata kuliah Kerja Praktik (INF400)?", "96 sks"),
("Berapa syarat minimal SKS yang sudah ditempuh untuk mengambil Tugas Akhir (INF498) di semester VIII?", "110 sks"),
("Berapa jumlah SKS yang dapat diambil mahasiswa pada luar Program Studi dalam 1 semester Pertukaran Pelajar?", "20 sks"),
("Berapa jam kegiatan total yang setara dengan 20 SKS pada kegiatan Magang MBKM?", "907 jam"),
("Perguruan tinggi mana di Taiwan yang menjalin kerja sama Joint Degree Program dengan Fakultas Teknik?", "Taiwan Tech"),
]
@@ -47,10 +47,10 @@ def tampilkan_detail_gagal(uji, k, target_koleksi, nama_koleksi):
KESIMPULAN = """
KESIMPULAN EVALUASI (LAB 3):
1. Ukuran chunk kecil (500 karakter) umumnya menghasilkan Hit@1 yang lebih presisi untuk pertanyaan spesifik (seperti angka SKS atau batas persentase), karena vektor embedding tidak terdilusi oleh topik lain di dalam satu chunk yang terlalu panjang.
2. Sebaliknya, ukuran chunk besar (1500 karakter) unggul pada Hit@3 dan Hit@5 ketika kata kunci jawaban berada agak jauh dari kalimat topik utamanya, namun rentan menurunkan akurasi Hit@1 karena satu chunk menggabungkan beberapa sub-pasal sekaligus.
3. Kegagalan retrieval biasanya terjadi pada pertanyaan yang jawabannya terpotong tepat di batas chunk (boundary split) atau pertanyaan yang menggunakan angka/istilah singkat yang mirip antar-pasal (misalnya angka semester atau SKS).
4. Solusi untuk meningkatkan performa di proyek RAG adalah menggunakan chunking berbasis struktur kalimat/paragraf dengan ukuran moderat (500–800 karakter) dan overlap 10–20% serta mengambil k=3 hingga k=5 chunk teratas.
1. Pada dokumen Pedoman Akademik S1 Informatika UKWMS (135 halaman), ukuran chunk 500 karakter jauh lebih unggul pada Hit@3 (0.73 vs 0.53) dan Hit@5 (0.80 vs 0.60) dibandingkan ukuran chunk 1500 karakter.
2. Hal ini terjadi karena model paraphrase-multilingual-MiniLM-L12-v2 memiliki batas input maksimum 128 token (sekitar 500–600 karakter), sehingga pada chunk 1500 karakter informasi di bagian tengah hingga akhir chunk tidak ikut ter-encode ke dalam vektor embedding.
3. Kegagalan pada Hit@1 (skor 0.47) umumnya terjadi pada pertanyaan yang jawabannya terletak di dalam tabel kurikulum/silabus (seperti prasyarat 96 sks untuk Kerja Praktik INF400 dan 110 sks untuk Tugas Akhir INF498) atau daftar struktur personalia (Ketua Prodi dan alamat kampus).
4. Dugaan penyebabnya adalah format tabel PDF yang terpisah barisnya saat diekstrak pypdf serta banyaknya halaman silabus yang mengulang frasa serupa ("Program Studi Informatika", "Deskripsi Matakuliah"), sehingga pengambilan k=3 hingga k=5 dengan ukuran chunk 500 karakter sangat disarankan untuk sistem RAG.
""".strip()
+1 -1
View File
@@ -60,7 +60,7 @@ def eksperimen_chunking(folder="dokumen"):
print("=" * 70)
print("\n[1] 500 Karakter Pertama:")
print("-" * 70)
print(teks[:500])
print(teks.lstrip()[:500])
print("-" * 70)
# Tiga pengaturan ukuran chunk (500, 1000, 1500) dengan overlap 15% (antara 10-20%)
+10 -10
View File
@@ -1,20 +1,20 @@
from main import koleksi
# Lab 2 — 5 Pertanyaan langsung sesuai isi dokumen
# Lab 2 — 5 Pertanyaan langsung sesuai isi Pedoman Akademik FT S1 Informatika UKWMS 2025
PERTANYAAN_UTAMA = [
"Apa syarat cuti akademik?",
"Berapa batas kehadiran minimal untuk mengikuti ujian akhir semester?",
"Berapa beban maksimal SKS yang dapat diambil dalam satu semester?",
"Apa syarat IPK minimal untuk mengambil mata kuliah Skripsi?",
"Berapa lama batas waktu maksimal masa studi program sarjana?",
"Berapa beban SKS minimal yang harus diselesaikan untuk memperoleh gelar Sarjana di Program Studi Informatika?",
"Apa saja persyaratan untuk kelulusan tahap akhir mahasiswa Program Studi Informatika?",
"Berapa syarat SKS minimal yang harus ditempuh untuk mengambil mata kuliah Kerja Praktik (INF400)?",
"Bagaimana pengaturan beban SKS dan kesetaraan jam kegiatan dalam program Magang MBKM?",
"Apa saja Matakuliah Pengembangan Kepribadian (MPK) yang wajib diprogram oleh mahasiswa UKWMS?",
]
# Lab 2 — 2 Pertanyaan dengan kata berbeda dari teks dokumen (parafrase)
PERTANYAAN_PARAFRASE = [
# Parafrase dari "cuti akademik" -> "berhenti kuliah sementara waktu"
"Bagaimana prosedur jika mahasiswa ingin berhenti kuliah sementara waktu?",
# Parafrase dari "batas kehadiran 75 persen untuk ujian" -> "jarang masuk kelas apakah boleh ikut UAS"
"Jika mahasiswa sering absen kelas, berapa minimal presensi supaya tetap diizinkan ikut UAS?",
# Parafrase dari "Matakuliah Lintas Program studi ... maksimal 4 sks"
"Jika mahasiswa ingin mengambil kuliah pilihan di jurusan atau fakultas lain di UKWMS, berapa batas kredit maksimal yang diperbolehkan?",
# Parafrase dari "English Proficiency Test (EPT) ... wajib menyerahkan sertifikat EPT menjelang yudisium"
"Tes kemampuan bahasa asing apa yang sertifikatnya wajib dikumpulkan mahasiswa sebagai syarat sebelum mengikuti yudisium?",
]