Belajar AI Engineer - Data & Preprocessing untuk AI
Episode 15 of 28

Belajar AI Engineer - Data & Preprocessing untuk AI

Mengelola fondasi data produk AI: data cleaning, strategi chunking yang benar, dan data quality untuk RAG. Kalian membangun pipeline data yang menjaga knowledge base tetap bersih, ter-versioned, dan siap di-retrieve dengan hasil maksimaltype: text

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Setiap sistem yang kalian bangun sejak episode 6 — embeddings, RAG, memory — berdiri di atas satu fondasi: data. Data yang kotor menghasilkan retrieval yang kotor, dan retrieval yang kotor menghasilkan jawaban yang salah. Episode ini membahas lapisan yang paling sering diremehkan namun paling menentukan kualitas: preprocessing.

Mengapa penting? Karena di dunia AI, garbage in, garbage out bukan slogan — ini hukum. Chunking yang asal-asalan membuat RAG tidak pernah akurat meskipun prompt dan model sudah optimal. Menguasai data pipeline adalah pembeda antara demo yang "sepertinya jalan" dan produk yang "benar-benar akurat".

Data Cleaning: Sumber Kotoran Umum

Sebelum dokumen masuk ke vector DB, bersihkan dulu. Sumber kotoran yang paling umum:

KotoranContohDampak
Duplikat & near-duplicateDokumen di-copy 3 kaliRetrieval mengembalikan isi sama, biaya membengkak
Format tidak konsistenTanggal "12/08" vs "2026-08-12"Model salah interpretasi
Noise & boilerplateHeader, footer, navigasi webMenghabiskan konteks, menurunkan skor relevansi
HTML/markup mentahTag dan escaping tidak dibersihkanVektor tercemar teks bukan konten
Bahasa campuranIndonesia dicampur Inggris acakEmbedding terpecah, retrieval bising
PythonPipeline cleaning sederhana
import re
 
def clean_text(text: str) -> str:
    text = re.sub(r"<[^>]+>", "", text)          # hapus HTML tag
    text = re.sub(r"\s+", " ", text).strip()      # normalisasi spasi
    text = re.sub(r"(copyright .*|^#{2,}\s*)", "", text,
                  flags=re.IGNORECASE)            # boilerplate kasar
    return text
 
def dedupe(docs: list[str], threshold: float = 0.95) -> list[str]:
    hasil: list[str] = []
    for d in docs:
        bersih = clean_text(d)
        if not any(similar(bersih, h) > threshold for h in hasil):  # placeholder
            hasil.append(bersih)
    return hasil

Untuk near-duplicate di skala besar, gunakan embedding similarity (episode 6) — dua dokumen dengan kesamaan di atas ambang adalah duplikat.

Strategi Chunking

Chunking adalah seni memecah dokumen menjadi potongan yang di-retrieve. Tidak ada ukuran universal — semuanya trade-off:

PendekatanKelebihanKekurangan
Fixed-size (N token + overlap)Sederhana, seragamMemotong tengah konsep
ParagrafMenjaga unit maknaPanjang tidak seragam
Berbasis struktur (heading/section)Konteks jelas per bagianTergantung struktur dokumen
Berbasis semantik (LLM split)Batas paling bermaknaMahal dan lambat

Aturan praktis yang umum:

  • Target chunk 200-500 token (tergantung model embedding dan konteks).
  • Overlap 10-20% menjaga kalimat terpotong tetap utuh.
  • Dokumen terstruktur → pecah per section (paling akurat).
  • Simpan metadata posisi (judul dokumen, nomor section) agar retrieval tahu konteksnya.
PythonChunking per section untuk Markdown
import re
 
def chunk_markdown(text: str, max_len: int = 800) -> list[dict]:
    """Pecah markdown per heading, lalu lanjutkan ke chunk berikutnya."""
    sections = re.split(r"(?=^## )", text, flags=re.MULTILINE)
    chunks = []
    for i, sec in enumerate(sections):
        heading = sec.splitlines()[0][:60] if sec.strip() else "(awal)"
        parts = [sec[j:j + max_len] for j in range(0, len(sec), max_len)]
        for p in parts:
            chunks.append({"text": p, "section": heading, "pos": i})
    return chunks

Data Quality untuk RAG

Selain kebersihan per dokumen, RAG butuh quality assurance pada level koleksi. Praktek yang wajib:

  1. Eksperimen retrieval test: untuk 20-50 pertanyaan uji, apakah ground-truth ada di top-k? (metrik hit rate episode 9).
  2. Audit metadata: semua chunk punya source dan updated_at — ini fondasi grounding dan compliance.
  3. Refresh berkala: dokumen berubah — buat pipeline update (bukan append terus).
  4. Staleness detection: tandai dokumen yang sudah lama tidak diperbarui.
PythonSimpan metadata sumber di tiap chunk
col.add(
    ids=[f"{doc_id}-{i}" for i in range(len(chunks))],
    documents=[c["text"] for c in chunks],
    metadatas=[{"source": doc_id, "section": c["section"],
                "updated_at": "2026-08-16"} for c in chunks],
)

Pipeline Data yang Benar

Pipeline produksi yang sehat memiliki lima tahap berulang:

  1. Ingest: tarik dokumen dari sumber (CMS, share drive, API).
  2. Clean: hapus noise, normalisasi, dedupe.
  3. Chunk: pecah dengan strategi sesuai struktur.
  4. Embed + store: vektor + metadata ke vector DB.
  5. Validate: hit-rate test, jumlah chunk, audit metadata.

Tip

Otomatisasi pipeline ini (misal dengan cron atau CI schedule) menjadikannya data pipeline yang hidup — bukan skrip sekali jalan. Setiap perubahan sumber dokumen memicu ingest ulang. Kita bangun backend-nya di episode 16.

Common Pitfalls

  • Chunking tanpa struktur: dokumen yang dipecah buta struktur membuat retrieval kehilangan konteks "bagian mana".
  • Overlap berlebihan: overlap terlalu besar = duplikasi dan biaya; terlalu kecil = konteks terpotong.
  • Tanpa versioning data: kalian tidak bisa mendiagnosis "kenapa jawaban berubah?" tanpa tahu data apa yang aktif.
  • Menguji hanya pada dokumen bersih: uji pipeline pada data kotor nyata — di situlah pipeline teruji.

Penutup

Inti yang harus dibawa pulang:

  • Clean dulu, chunk kemudian: noise dan duplikat merusak retrieval.
  • Chunking = trade-off; target 200-500 token dengan overlap dan metadata posisi.
  • RAG butuh data quality: hit-rate test, metadata lengkap, refresh berkala.
  • Pipeline data = ingest → clean → chunk → embed → validate, diotomasi dan ter-versioned.

Di episode 16 selanjutnya kita mengubah sistem menjadi produk: backend & API untuk AI apps — FastAPI, streaming, rate limiting, dan auth untuk API yang dipakai aplikasi nyata. Sampai jumpa di episode 16!

Belajar AI Engineer - Data & Preprocessing untuk AI | Belajar AI Engineer