7.8 KiB
Penjelasan Output Praktikum RAG (Lab 1 – Lab 3)
Dokumen ini menjelaskan hasil eksekusi lab1_chunking.py, lab2_indeks_cari.py, dan lab3_hit_at_k.py. Alurnya berurutan: memotong dokumen (Lab 1) → membangun indeks dan mencari (Lab 2) → mengukur kualitas pencarian (Lab 3).
Lab 1 – Eksperimen Chunking
Tujuan
Memahami bagaimana dokumen PDF dipotong menjadi potongan kecil (chunk), dan bagaimana ukuran chunk serta overlap memengaruhi jumlah dan isi chunk.
Langkah 1 – Membaca 500 karakter pertama
Output menampilkan awal teks pengantar_rag.pdf (judul "Pengantar Retrieval-Augmented Generation (RAG)" dan definisi RAG). Baris ringkasan kualitas teks:
{'File': 'pengantar_rag.pdf', 'Total karakter': 4061,
'Karakter rusak (U+FFFD)': 0, 'Persentase huruf': '83%'}
| Metrik | Nilai | Arti |
|---|---|---|
| Total karakter | 4061 | Panjang seluruh teks hasil ekstraksi PDF |
| Karakter rusak (U+FFFD) | 0 | Tidak ada karakter korup, jadi ekstraksi PDF berhasil bersih |
| Persentase huruf | 83% | Sebagian besar isi adalah huruf; sisanya spasi, angka, tanda baca. Ini wajar untuk teks normal |
Kesimpulan: PDF dapat dibaca dengan baik sehingga aman dipakai sebagai bahan chunking.
Langkah 2 – Jumlah chunk untuk setiap kombinasi ukuran dan overlap
| Ukuran | Overlap 10% | Overlap 15% | Overlap 20% |
|---|---|---|---|
| 500 | 9 chunk | 10 chunk | 10 chunk |
| 1000 | 5 chunk | 5 chunk | 5 chunk |
| 1500 | 3 chunk | 4 chunk | 4 chunk |
Pola yang terlihat:
- Ukuran chunk makin besar → jumlah chunk makin sedikit. Pada ukuran 500 ada 9–10 chunk, pada 1500 hanya 3–4 chunk.
- Overlap makin besar → jumlah chunk cenderung naik atau tetap. Overlap membuat jarak geser antar chunk lebih pendek sehingga dibutuhkan lebih banyak chunk untuk menutup teks yang sama. Pada ukuran 1000 jumlahnya tetap 5 karena teks hanya 4061 karakter, jadi perubahan overlap kecil belum menambah chunk.
- Ukuran chunk lebih berpengaruh daripada overlap terhadap jumlah chunk.
Langkah 3 – Memeriksa 3 chunk acak (ukuran 500)
Untuk tiap chunk ditampilkan penanda seperti:
chunk #1 [0:500] awal_tengah=False akhir_tengah=True potong_tabel=False
| Penanda | Arti |
|---|---|
[0:500] |
Chunk mengambil karakter ke-0 sampai ke-500 dari teks |
awal_tengah |
True jika chunk dimulai di tengah kata/kalimat |
akhir_tengah |
True jika chunk berakhir di tengah kata/kalimat |
potong_tabel |
True jika chunk memotong tabel |
Pada chunk #1, akhir_tengah=True terlihat dari teks yang berhenti di "...memungkinkan j" (kata terpotong). Ini menunjukkan kelemahan chunking berbasis jumlah karakter: batas chunk tidak mempedulikan batas kata atau kalimat, sehingga makna bisa terpotong. Overlap berguna untuk mengurangi dampak ini karena potongan yang terpotong muncul lagi di awal chunk berikutnya.
Lab 2 – Membangun Indeks dan Mencari
Tujuan
Membangun indeks dari seluruh dokumen, lalu menguji apakah pertanyaan menemukan chunk yang benar.
Langkah 1 – Membangun indeks
etika_keamanan_ai.pdf: 4 chunk
machine_learning_dasar.pdf: 4 chunk
pengantar_rag.pdf: 5 chunk
Total 13 chunk | ukuran=1000 overlap=15% | backend=lsa
- Ada 3 dokumen, total 13 chunk, dengan konfigurasi ukuran 1000, overlap 15%.
backend=lsaberarti pencarian memakai LSA (Latent Semantic Analysis), yaitu representasi vektor berbasis statistik kata. Ini bukan model embedding neural seperti MiniLM.
Langkah 2 – 5 pertanyaan uji
Setiap pertanyaan menampilkan 3 hasil teratas dengan format skor, dokumen#nomor_chunk, dan relevan.
- skor adalah kemiripan (cosine similarity) antara pertanyaan dan chunk. Makin dekat ke 1, makin mirip.
- relevan=True berarti chunk tersebut memuat kata kunci jawaban yang sudah ditentukan.
| Pertanyaan | Kata kunci | Hasil peringkat 1 | Penilaian |
|---|---|---|---|
| Siapa yang memperkenalkan RAG dan tahun berapa? | Lewis, 2020 |
pengantar_rag.pdf#0, skor 0.741, relevan |
Benar. Chunk berisi info Lewis dan 2020 |
| Berapa dimensi embedding yang dihasilkan model MiniLM? | 384 |
pengantar_rag.pdf#1, skor 0.969, relevan |
Benar dan skornya sangat tinggi |
| Apa itu overfitting dan apa cirinya? | overfitting, data latih |
machine_learning_dasar.pdf#0, skor 0.939, relevan |
Benar. Peringkat 2 juga relevan |
| Undang-undang apa yang mengatur pelindungan data pribadi di Indonesia? | 27 Tahun 2022 |
(terpotong di screenshot) | Cek hasilnya di terminal |
Hal yang bisa dibaca dari hasil:
- Jawaban yang benar umumnya berada di peringkat 1 dengan selisih skor yang jelas dari hasil lainnya. Contoh: pertanyaan MiniLM, 0.969 dibanding 0.351.
- Pada pertanyaan pertama, peringkat 2 (0.736, dokumen etika AI) skornya hampir sama dengan peringkat 1 (0.741) walaupun tidak relevan. Ini tanda LSA kadang bingung pada pertanyaan yang kosakatanya umum.
- Hasil yang
relevan=Falsedi peringkat bawah itu normal. Yang penting jawaban benar ada di posisi atas.
Lab 3 – Mengukur Kualitas dengan Hit@k
Tujuan
Mengukur secara kuantitatif apakah chunk jawaban benar muncul di k hasil teratas, lalu membandingkan dua ukuran chunk.
Definisi
Hit@k = proporsi pertanyaan yang chunk jawabannya muncul dalam k peringkat teratas.
Hit@k = (jumlah pertanyaan yang jawabannya ada di top-k) / (total pertanyaan)
Contoh: Hit@5 = 0.933 berarti 93,3% pertanyaan berhasil. Karena nilainya kelipatan 1/15, kemungkinan ada 15 pertanyaan uji, dan 14 di antaranya berhasil, sedangkan 1 gagal.
Hasil perbandingan
| Koleksi | Total chunk | Hit@1 | Hit@3 | Hit@5 |
|---|---|---|---|---|
| Ukuran 500, overlap 15% | 25 | 0.933 | 0.933 | 0.933 |
| Ukuran 1000, overlap 15% | 13 | 1.0 | 1.0 | 1.0 |
Diagnosis kegagalan (k=5)
ukuran 500, no. 7 (Bagaimana menyatukan ketepatan dan kelengkapan menjadi satu angka?):
chunk jawaban ada tetapi baru muncul di peringkat 18 (> 5)
- Pertanyaan no. 7 gagal pada ukuran 500. Chunk jawabannya ada di indeks, tetapi berada di peringkat 18, jauh di luar top-5.
- Pada ukuran 1000, tidak ada pertanyaan yang gagal.
- Perhatikan bahwa Hit@1, Hit@3, dan Hit@5 pada ukuran 500 sama-sama 0.933. Artinya pertanyaan yang gagal tidak sekadar "hampir masuk", tetapi benar-benar jauh dari top-5. Memperbesar k tidak menolong.
Dugaan penyebab (sesuai kesimpulan program)
- Ketidakcocokan kosakata. Pertanyaan memakai istilah berbeda dari dokumen. Contoh: pertanyaan memakai "ketepatan dan kelengkapan", sedangkan dokumen memakai istilah Inggris seperti precision dan recall atau F1. LSA berbasis kata sehingga sulit menjembatani parafrase ini.
- Chunk kecil memuat sedikit konteks. Chunk 500 karakter hanya memuat sedikit kata konteks, sehingga skor kemiripannya kalah dari chunk lain yang topiknya lebih umum.
Kesimpulan dan catatan penting
- Ukuran 1000 karakter lebih baik daripada 500 karakter pada eksperimen ini (Hit@k 1.00 dibanding 0.93).
- Skor sempurna jangan dianggap bukti sistem sudah sangat baik. Korpusnya hanya 3 dokumen kecil (13–25 chunk) dengan topik yang jelas berbeda, sehingga pencarian relatif mudah. Pada PDF yang lebih besar dan topiknya lebih mirip antar dokumen, Hit@k diperkirakan turun dan perbedaan antar ukuran chunk akan lebih terlihat.
- Laporan akhir tersimpan ke
Lab3_Hit_at_k.pdf.
Ringkasan Keseluruhan
| Lab | Pertanyaan yang dijawab | Temuan utama |
|---|---|---|
| Lab 1 | Bagaimana ukuran dan overlap memengaruhi chunk? | Ukuran besar menghasilkan chunk lebih sedikit. Chunking karakter bisa memotong kata atau kalimat |
| Lab 2 | Apakah pertanyaan menemukan chunk yang tepat? | Umumnya ya, jawaban benar di peringkat teratas dengan skor tinggi (backend LSA) |
| Lab 3 | Ukuran chunk mana yang lebih baik? | Ukuran 1000 lebih baik (Hit@k = 1.0) daripada 500 (0.933), tetapi korpus kecil sehingga hasil perlu ditafsirkan hati-hati |