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 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 = [ UJI = [
("Apa syarat cuti akademik?", "cuti akademik"), ("Berapa beban SKS minimal untuk memperoleh gelar Sarjana di Program Studi Informatika?", "144"),
("Berapa batas kehadiran untuk ujian?", "75 persen"), ("Berapa jumlah SKS mata kuliah pilihan yang wajib ditempuh dalam Struktur Kurikulum Informatika?", "15 sks"),
("Berapa maksimal cuti akademik selama masa studi?", "2 semester"), ("Berapa batas maksimum jumlah mata kuliah bernilai D yang diizinkan pada Prodi Informatika?", "4 matakuliah"),
("Kapan batas pengajuan cuti akademik dilakukan?", "2 minggu"), ("Sertifikat tes bahasa Inggris apa yang wajib diserahkan mahasiswa menjelang yudisium?", "EPT"),
("Berapa SKS maksimal jika IP semester sebelumnya 3.20?", "24 SKS"), ("Berapa maksimal SKS mata kuliah pilihan lintas program studi yang diizinkan diambil mahasiswa?", "4 sks"),
("Berapa SKS minimal untuk kelulusan program sarjana?", "144 SKS"), ("Apa kode mata kuliah Pendidikan Agama pada kelompok Matakuliah Pengembangan Kepribadian (MPK)?", "REL100"),
("Apa syarat IPK minimal untuk lulus program sarjana?", "2.00"), ("Pada tahun berapa Program Studi Informatika Fakultas Teknik UKWMS resmi didirikan?", "2024"),
("Berapa lama masa studi maksimal program sarjana?", "14 semester"), ("Siapa nama Ketua Program Studi Informatika Fakultas Teknik UKWMS?", "Peter Rhatodirdjo Angka"),
("Berapa SKS minimal yang harus ditempuh untuk mengambil skripsi?", "110 SKS"), ("Siapa nama Rektor Universitas Katolik Widya Mandala Surabaya periode 2025 s/d 2029?", "Sumi Wijaya"),
("Berapa syarat nilai minimal mata kuliah Metodologi Penelitian?", "nilai C"), ("Di jalan apa lokasi Kampus Kalijudan Fakultas Teknik Program Studi Informatika UKWMS?", "Kalijudan 37"),
("Berapa kali bimbingan minimal sebelum sidang skripsi?", "8 kali"), ("Berapa syarat minimal SKS yang sudah ditempuh untuk memprogram mata kuliah Kerja Praktik (INF400)?", "96 sks"),
("Apa sanksi bagi mahasiswa yang melakukan kecurangan ujian?", "nilai E"), ("Berapa syarat minimal SKS yang sudah ditempuh untuk mengambil Tugas Akhir (INF498) di semester VIII?", "110 sks"),
("Berapa lama waktu ujian susulan dapat diajukan setelah jadwal?", "3 hari"), ("Berapa jumlah SKS yang dapat diambil mahasiswa pada luar Program Studi dalam 1 semester Pertukaran Pelajar?", "20 sks"),
("Berapa nilai minimal untuk mendapatkan predikat Cum Laude?", "3.51"), ("Berapa jam kegiatan total yang setara dengan 20 SKS pada kegiatan Magang MBKM?", "907 jam"),
("Berapa persentase maksimal kemiripan turnitin untuk naskah skripsi?", "20 persen"), ("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 = """
KESIMPULAN EVALUASI (LAB 3): 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. 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. 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. 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 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). 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. 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. 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() """.strip()
+1 -1
View File
@@ -60,7 +60,7 @@ def eksperimen_chunking(folder="dokumen"):
print("=" * 70) print("=" * 70)
print("\n[1] 500 Karakter Pertama:") print("\n[1] 500 Karakter Pertama:")
print("-" * 70) print("-" * 70)
print(teks[:500]) print(teks.lstrip()[:500])
print("-" * 70) print("-" * 70)
# Tiga pengaturan ukuran chunk (500, 1000, 1500) dengan overlap 15% (antara 10-20%) # 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 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 = [ PERTANYAAN_UTAMA = [
"Apa syarat cuti akademik?", "Berapa beban SKS minimal yang harus diselesaikan untuk memperoleh gelar Sarjana di Program Studi Informatika?",
"Berapa batas kehadiran minimal untuk mengikuti ujian akhir semester?", "Apa saja persyaratan untuk kelulusan tahap akhir mahasiswa Program Studi Informatika?",
"Berapa beban maksimal SKS yang dapat diambil dalam satu semester?", "Berapa syarat SKS minimal yang harus ditempuh untuk mengambil mata kuliah Kerja Praktik (INF400)?",
"Apa syarat IPK minimal untuk mengambil mata kuliah Skripsi?", "Bagaimana pengaturan beban SKS dan kesetaraan jam kegiatan dalam program Magang MBKM?",
"Berapa lama batas waktu maksimal masa studi program sarjana?", "Apa saja Matakuliah Pengembangan Kepribadian (MPK) yang wajib diprogram oleh mahasiswa UKWMS?",
] ]
# Lab 2 — 2 Pertanyaan dengan kata berbeda dari teks dokumen (parafrase) # Lab 2 — 2 Pertanyaan dengan kata berbeda dari teks dokumen (parafrase)
PERTANYAAN_PARAFRASE = [ PERTANYAAN_PARAFRASE = [
# Parafrase dari "cuti akademik" -> "berhenti kuliah sementara waktu" # Parafrase dari "Matakuliah Lintas Program studi ... maksimal 4 sks"
"Bagaimana prosedur jika mahasiswa ingin berhenti kuliah sementara waktu?", "Jika mahasiswa ingin mengambil kuliah pilihan di jurusan atau fakultas lain di UKWMS, berapa batas kredit maksimal yang diperbolehkan?",
# Parafrase dari "batas kehadiran 75 persen untuk ujian" -> "jarang masuk kelas apakah boleh ikut UAS" # Parafrase dari "English Proficiency Test (EPT) ... wajib menyerahkan sertifikat EPT menjelang yudisium"
"Jika mahasiswa sering absen kelas, berapa minimal presensi supaya tetap diizinkan ikut UAS?", "Tes kemampuan bahasa asing apa yang sertifikatnya wajib dikumpulkan mahasiswa sebagai syarat sebelum mengikuti yudisium?",
] ]