Menanamkan Terlebih Dahulu, Lalu Memotong: Pengambilan RAG yang lebih cerdas dengan Max-Min Semantic Chunking
Retrieval Augmented Generation (RAG) telah menjadi pendekatan standar untuk menyediakan konteks dan memori untuk aplikasi AI - agen AI, asisten dukungan pelanggan, basis pengetahuan, dan sistem pencarian semuanya mengandalkannya.
Di hampir setiap pipeline RAG, proses standarnya sama: mengambil dokumen, membaginya menjadi potongan-potongan, dan kemudian menyematkan potongan-potongan itu untuk pencarian kesamaan dalam database vektor seperti Milvus. Karena chunking terjadi di awal, kualitas potongan-potongan itu secara langsung memengaruhi seberapa baik sistem mengambil informasi dan seberapa akurat jawaban akhirnya.
Masalahnya adalah bahwa strategi chunking tradisional biasanya membagi teks tanpa pemahaman semantik. Chunking dengan panjang tetap memotong berdasarkan jumlah token, dan chunking rekursif menggunakan struktur tingkat permukaan, tetapi keduanya masih mengabaikan makna teks yang sebenarnya. Akibatnya, ide-ide yang terkait sering kali terpisah, baris yang tidak terkait dikelompokkan bersama, dan konteks yang penting terfragmentasi.
Dalam blog ini, saya ingin berbagi strategi chunking yang berbeda: Max-Min Semantic Chunking. Alih-alih memotong terlebih dahulu, strategi ini menyematkan teks di awal dan menggunakan kesamaan semantik untuk memutuskan di mana batas-batas harus dibentuk. Dengan menyematkan sebelum memotong, pipeline dapat melacak pergeseran makna secara alami daripada mengandalkan batas panjang yang sewenang-wenang.
Cara Kerja Pipa RAG pada Umumnya
Sebagian besar pipeline RAG, apa pun kerangkanya, mengikuti jalur perakitan empat tahap yang sama. Anda mungkin telah menulis beberapa versi dari ini sendiri:
1. Pembersihan dan Pemotongan Data
Pipeline dimulai dengan membersihkan dokumen mentah: menghapus header, footer, teks navigasi, dan apa pun yang bukan merupakan konten asli. Setelah noise dihilangkan, teks akan dipecah menjadi bagian-bagian yang lebih kecil. Sebagian besar tim menggunakan potongan ukuran tetap - biasanya 300-800 token - karena ini membuat model penyematan tetap dapat dikelola. Kelemahannya adalah pemisahannya didasarkan pada panjang, bukan makna, sehingga batas-batasnya bisa berubah-ubah.
2. Penyematan dan Penyimpanan
Setiap potongan kemudian disematkan menggunakan model penyematan seperti OpenAI text-embedding-3-small OpenAI atau encoder BAAI. Vektor yang dihasilkan disimpan dalam basis data vektor seperti Milvus atau Zilliz Cloud. Basis data menangani pengindeksan dan pencarian kemiripan sehingga Anda dapat dengan cepat membandingkan kueri baru dengan semua potongan yang tersimpan.
3. Pengajuan pertanyaan
Ketika seorang pengguna mengajukan pertanyaan - misalnya, "Bagaimana RAG mengurangi halusinasi?" - sistem menyematkan kueri dan mengirimkannya ke database. Basis data mengembalikan potongan K teratas yang vektornya paling dekat dengan kueri. Ini adalah potongan-potongan teks yang akan diandalkan oleh model untuk menjawab pertanyaan.
4. Pembuatan Jawaban
Potongan-potongan yang diambil digabungkan bersama dengan kueri pengguna dan dimasukkan ke dalam LLM. Model menghasilkan jawaban dengan menggunakan konteks yang disediakan sebagai landasan.
Chunking berada di awal dari keseluruhan pipeline ini, tetapi memiliki dampak yang sangat besar. Jika potongan-potongan tersebut selaras dengan makna alami teks, pencarian akan terasa akurat dan konsisten. Jika potongan-potongan tersebut dipotong di tempat yang tidak tepat, sistem akan lebih sulit menemukan informasi yang tepat, bahkan dengan penyematan yang kuat dan basis data vektor yang cepat.
Tantangan dalam Melakukan Pemotongan dengan Benar
Sebagian besar sistem RAG saat ini menggunakan salah satu dari dua metode chunking dasar, yang keduanya memiliki keterbatasan.
1. Pemotongan ukuran tetap
Ini adalah pendekatan yang paling sederhana: membagi teks dengan token atau jumlah karakter yang tetap. Metode ini cepat dan dapat diprediksi, tetapi sama sekali tidak memperhatikan tata bahasa, topik, atau transisi. Kalimat dapat dipotong menjadi dua. Kadang-kadang bahkan kata-kata. Penyematan yang Anda dapatkan dari potongan-potongan ini cenderung berisik karena batas-batasnya tidak mencerminkan bagaimana teks sebenarnya terstruktur.
2. Pemisahan karakter rekursif
Metode ini sedikit lebih cerdas. Metode ini memisahkan teks secara hierarkis berdasarkan isyarat seperti paragraf, jeda baris, atau kalimat. Jika suatu bagian terlalu panjang, maka secara rekursif akan membaginya lebih lanjut. Hasilnya umumnya lebih koheren, tetapi masih tidak konsisten. Beberapa dokumen tidak memiliki struktur yang jelas atau memiliki panjang bagian yang tidak merata, yang merusak akurasi pengambilan. Dan dalam beberapa kasus, pendekatan ini masih menghasilkan potongan yang melebihi jendela konteks model.
Kedua metode ini menghadapi tradeoff yang sama: ketepatan vs konteks. Potongan yang lebih kecil meningkatkan akurasi pengambilan tetapi kehilangan konteks di sekitarnya; potongan yang lebih besar mempertahankan makna tetapi berisiko menambah noise yang tidak relevan. Mencapai keseimbangan yang tepat adalah hal yang membuat chunking menjadi hal yang mendasar-dan membuat frustrasi-dalam desain sistem RAG.
Pemenggalan Semantik Maks-Min: Sematkan Dulu, Pisahkan Kemudian
Pada tahun 2025, SR Bhat dkk. menerbitkan Memikirkan Kembali Ukuran Potongan untuk Pengambilan Dokumen Panjang: Sebuah Analisis Multi-Dataset. Salah satu temuan utama mereka adalah bahwa tidak ada satu ukuran chunk "terbaik" untuk RAG. Potongan kecil (64-128 token) cenderung bekerja lebih baik untuk pertanyaan faktual atau gaya pencarian, sementara potongan yang lebih besar (512-1024 token) membantu dengan tugas-tugas naratif atau penalaran tingkat tinggi. Dengan kata lain, chunking dengan ukuran tetap selalu merupakan sebuah kompromi.
Hal ini menimbulkan pertanyaan yang wajar: alih-alih memilih satu ukuran panjang dan berharap yang terbaik, bisakah kita memenggal berdasarkan makna, bukan ukuran? Max-Min Semantic Chunking adalah salah satu pendekatan yang saya temukan yang mencoba melakukan hal tersebut.
Idenya sederhana: sematkan terlebih dahulu, potong kedua. Alih-alih memecah teks dan kemudian menyematkan bagian mana pun yang terpotong, algoritme ini menyematkan semua kalimat di depan. Algoritme ini kemudian menggunakan hubungan semantik antara penyematan kalimat-kalimat tersebut untuk menentukan di mana batas-batasnya.
Diagram yang menunjukkan alur kerja embed-first chunk-second di Max-Min Semantic Chunking
Secara konseptual, metode ini memperlakukan chunking sebagai masalah pengelompokan terbatas dalam ruang penyematan. Anda menelusuri dokumen secara berurutan, satu kalimat pada satu waktu. Untuk setiap kalimat, algoritme membandingkan penyematannya dengan kalimat-kalimat yang ada di dalam potongan saat ini. Jika kalimat baru secara semantik cukup dekat, maka kalimat tersebut akan bergabung dengan potongan tersebut. Jika terlalu jauh, algoritme akan memulai potongan baru. Batasan utamanya adalah bahwa potongan harus mengikuti urutan kalimat asli - tidak ada pengurutan ulang, tidak ada pengelompokan global.
Hasilnya adalah sekumpulan potongan dengan panjang variabel yang mencerminkan di mana makna dokumen benar-benar berubah, bukan di mana penghitung karakter mencapai angka nol.
Cara Kerja Strategi Max-Min Semantic Chunking
Max-Min Semantic Chunking menentukan batas-batas potongan dengan membandingkan bagaimana kalimat-kalimat berhubungan satu sama lain dalam ruang vektor berdimensi tinggi. Alih-alih bergantung pada panjang yang tetap, proses ini melihat bagaimana makna bergeser di seluruh dokumen. Prosesnya dapat dibagi menjadi enam langkah:
1. Sematkan semua kalimat dan mulai sebuah potongan
Model penyematan mengubah setiap kalimat dalam dokumen menjadi penyematan vektor. Model ini memproses kalimat secara berurutan. Jika n-k kalimat pertama membentuk potongan C saat ini, kalimat berikut (sₙ₋ₖ₊₁) perlu dievaluasi: apakah kalimat tersebut harus bergabung dengan C, atau memulai potongan baru?
2. Mengukur seberapa konsisten potongan saat ini
Di dalam potongan C, hitung kemiripan kosinus berpasangan minimum di antara semua sematan kalimat. Nilai ini mencerminkan seberapa dekat hubungan antara kalimat-kalimat di dalam potongan tersebut. Kemiripan minimum yang lebih rendah menunjukkan bahwa kalimat-kalimat tersebut kurang berhubungan, yang menunjukkan bahwa potongan tersebut mungkin perlu dipecah.
3. Bandingkan kalimat baru dengan potongan
Selanjutnya, hitung kemiripan kosinus maksimum antara kalimat baru dan kalimat apa pun yang sudah ada di C. Ini mencerminkan seberapa baik kalimat baru selaras secara semantik dengan potongan yang ada.
4. Tentukan apakah akan memperpanjang potongan atau memulai yang baru
Ini adalah aturan intinya:
Jika kemiripan maksimum kalimat baru dengan potongan C lebih besar atau sama dengan kemiripan minimum di dalam C, → Kalimat baru cocok dan tetap berada di dalam potongan tersebut.
Jika tidak, → memulai potongan baru.
Hal ini memastikan bahwa setiap potongan mempertahankan konsistensi semantik internalnya.
5. Menyesuaikan ambang batas saat dokumen berubah
Untuk mengoptimalkan kualitas potongan, parameter seperti ukuran potongan dan ambang batas kemiripan dapat disesuaikan secara dinamis. Hal ini memungkinkan algoritme untuk beradaptasi dengan berbagai struktur dokumen dan kepadatan semantik.
6. Menangani beberapa kalimat pertama
Ketika sebuah potongan hanya berisi satu kalimat, algoritme menangani perbandingan pertama dengan menggunakan ambang batas kemiripan yang tetap. Jika kemiripan antara kalimat 1 dan kalimat 2 berada di atas ambang batas tersebut, maka keduanya akan membentuk sebuah potongan. Jika tidak, mereka akan segera berpisah.
Kekuatan dan Keterbatasan Max-Min Semantic Chunking
Max-Min Semantic Chunking meningkatkan cara sistem RAG membagi teks dengan menggunakan makna, bukan panjangnya, tetapi ini bukan solusi yang tepat. Berikut ini adalah pandangan praktis tentang apa yang dilakukannya dengan baik dan di mana kekurangannya.
Apa yang Dilakukannya dengan Baik
Max-Min Semantic Chunking meningkatkan chunking tradisional dalam tiga cara penting:
1. Batas-batas potongan yang dinamis dan digerakkan oleh makna
Tidak seperti pendekatan ukuran tetap atau berbasis struktur, metode ini mengandalkan kesamaan semantik untuk memandu chunking. Metode ini membandingkan kemiripan minimum dalam potongan saat ini (seberapa kohesifnya) dengan kemiripan maksimum antara kalimat baru dan potongan tersebut (seberapa cocok). Jika yang terakhir lebih tinggi, kalimat tersebut bergabung dengan potongan; jika tidak, potongan baru akan dimulai.
2. Penyetelan parameter yang sederhana dan praktis
Algoritme ini hanya bergantung pada tiga hiperparameter inti:
ukuran potongan maksimum,
kemiripan minimum antara dua kalimat pertama, dan
ambang batas kemiripan untuk menambahkan kalimat baru.
Parameter ini menyesuaikan secara otomatis dengan konteks-potongan yang lebih besar membutuhkan ambang batas kemiripan yang lebih ketat untuk mempertahankan koherensi.
3. Biaya pemrosesan yang rendah
Karena pipeline RAG sudah menghitung penyematan kalimat, Max-Min Semantic Chunking tidak menambahkan komputasi yang berat. Yang dibutuhkan hanyalah satu set pemeriksaan kemiripan kosinus saat memindai kalimat. Hal ini membuatnya lebih murah daripada banyak teknik semantic chunking yang membutuhkan model tambahan atau pengelompokan multi-tahap.
Apa yang Masih Belum Bisa Dipecahkan
Max-Min Semantic Chunking meningkatkan batas-batas potongan, tetapi tidak menghilangkan semua tantangan segmentasi dokumen. Karena algoritme ini memproses kalimat secara berurutan dan hanya mengelompokkan secara lokal, algoritme ini masih dapat melewatkan hubungan jarak jauh dalam dokumen yang lebih panjang atau lebih kompleks.
Salah satu masalah umum adalah fragmentasi konteks. Ketika informasi penting tersebar di berbagai bagian dokumen, algoritme dapat menempatkan bagian-bagian tersebut ke dalam potongan-potongan terpisah. Setiap potongan kemudian hanya membawa sebagian dari makna.
Sebagai contoh, dalam Catatan Rilis Milvus 2.4.13, seperti yang ditunjukkan di bawah ini, satu bagian mungkin berisi pengenal versi sementara bagian lainnya berisi daftar fitur. Pertanyaan seperti "Fitur baru apa saja yang diperkenalkan pada Milvus 2.4.13?" bergantung pada keduanya. Jika detail-detail tersebut dipecah menjadi beberapa bagian, model penyematan mungkin tidak dapat menghubungkannya, yang menyebabkan pengambilan yang lebih lemah.
-
Contoh yang menunjukkan fragmentasi konteks di Catatan Rilis Milvus 2.4.13 dengan pengenal versi dan daftar fitur dalam potongan terpisah
Fragmentasi ini juga mempengaruhi tahap pembuatan LLM. Jika referensi versi ada di satu bagian dan deskripsi fitur ada di bagian lain, model menerima konteks yang tidak lengkap dan tidak dapat menalar dengan jelas tentang hubungan di antara keduanya.
Untuk mengurangi kasus ini, sistem sering kali menggunakan teknik seperti jendela geser, batas chunk yang tumpang tindih, atau pemindaian multi-pass. Pendekatan-pendekatan ini memperkenalkan kembali beberapa konteks yang hilang, mengurangi fragmentasi, dan membantu langkah pengambilan mempertahankan informasi terkait.
Kesimpulan
Max-Min Semantic Chunking bukanlah solusi ajaib untuk setiap masalah RAG, tetapi memberikan kita cara yang lebih masuk akal untuk memikirkan batas-batas potongan. Alih-alih membiarkan batas token memutuskan di mana ide akan dipotong, Max-Min Semantic Chunking menggunakan penyematan untuk mendeteksi di mana makna sebenarnya bergeser. Untuk banyak dokumen dunia nyata - API, spesifikasi, log, catatan rilis, panduan pemecahan masalah - hal ini saja dapat mendorong kualitas pencarian menjadi lebih tinggi.
Yang saya sukai dari pendekatan ini adalah pendekatan ini cocok secara alami dengan pipeline RAG yang sudah ada. Jika Anda sudah menyematkan kalimat atau paragraf, biaya tambahan pada dasarnya adalah beberapa pemeriksaan kemiripan kosinus. Anda tidak memerlukan model tambahan, pengelompokan yang rumit, atau prapemrosesan kelas berat. Dan ketika berhasil, potongan-potongan yang dihasilkannya terasa lebih "manusiawi"-lebih dekat dengan cara kita mengelompokkan informasi secara mental saat membaca.
Tetapi metode ini masih memiliki titik buta. Metode ini hanya melihat makna secara lokal, dan tidak dapat menghubungkan kembali informasi yang sengaja dipisah-pisahkan. Jendela yang tumpang tindih, pemindaian multi-pass, dan trik mempertahankan konteks lainnya masih diperlukan, terutama untuk dokumen yang referensi dan penjelasannya saling berjauhan.
Namun, Max-Min Semantic Chunking menggerakkan kita ke arah yang benar: menjauh dari pemotongan teks yang sewenang-wenang dan menuju jalur pengambilan yang benar-benar menghormati semantik. Jika Anda sedang mengeksplorasi cara-cara untuk membuat RAG lebih dapat diandalkan, ada baiknya Anda bereksperimen.
Ada pertanyaan atau ingin menggali lebih dalam tentang peningkatan kinerja RAG? Bergabunglah dengan Discord kami dan terhubung dengan para insinyur yang membangun dan menyetel sistem pengambilan yang sesungguhnya setiap hari.
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word



