Strategi Pemotongan Teks Panjang
Pelajari pendekatan pemotongan berukuran tetap, berdasarkan batas kalimat, dan semantik.
Strategi Pemotongan Teks Panjang adalah pelajaran AI Prompt Engineering gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Prompt Engineering, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Prompt Engineering mencakup 4 pelajaran total.
Mengapa Dokumen Panjang Menjadi Tantangan
LLM memiliki jendela konteks — jumlah maksimum token yang dapat diproses sekaligus. GPT-4 mendukung 128 ribu token, Claude mendukung 200 ribu, tetapi banyak dokumen melampaui batas tersebut. Yang lebih penting, penelitian menunjukkan bahwa akurasi model sering menurun pada konteks yang sangat panjang. Pemotongan adalah praktik membagi dokumen menjadi bagian-bagian yang lebih kecil sebelum diproses.
Pemotongan Ukuran Tetap
Pemotongan ukuran tetap membagi teks setiap N token (atau karakter), tanpa memperhatikan batasan isi. Ini merupakan strategi paling sederhana dan tidak memerlukan pemahaman semantik.
Ukuran bagian yang umum: 500–1000 token. Bagian-bagian ini mudah diindeks dan diambil, tetapi dapat memotong kalimat di tengah, sehingga makna pada batas bagian hilang.
import tiktoken
def fixed_chunk(text, max_tokens=1000):
enc = tiktoken.get_encoding('cl100k_base')
tokens = enc.encode(text)
chunks = []
for i in range(0, len(tokens), max_tokens):
chunk_tokens = tokens[i:i + max_tokens]
chunks.append(enc.decode(chunk_tokens))
return chunks
chunks = fixed_chunk(long_document)
print(f'Total chunks: {len(chunks)}')Kelebihan dan Kekurangan Pemotongan Ukuran Tetap
Kelebihan:
- Sederhana untuk diterapkan — tidak memerlukan NLP
- Ukuran bagian dapat diprediksi — biaya API lebih mudah dikelola
- Pemrosesan cepat
Kekurangan:
- Memotong batas kalimat dan paragraf
- Kalimat yang terbagi di antara beberapa bagian kehilangan konteks saat pengambilan
- Kurang baik untuk peringkasan — bagian dapat berakhir di tengah argumen
Pemotongan pada Batas Kalimat
Pemotongan pada batas kalimat membagi teks pada jeda kalimat atau paragraf alami. Setiap bagian berakhir pada titik akhir kalimat, sehingga tidak ada kalimat yang terpotong menjadi dua. Hasilnya adalah bagian-bagian yang lebih mudah dibaca dan koheren.
Gunakan pemecah kalimat (spaCy atau NLTK) untuk mendeteksi batas, lalu kelompokkan kalimat hingga bagian mencapai ukuran target.
import spacy
nlp = spacy.load('en_core_web_sm')
def sentence_chunk(text, max_tokens=1000):
doc = nlp(text)
sentences = [sent.text.strip() for sent in doc.sents]
chunks, current, count = [], [], 0
for sent in sentences:
word_count = len(sent.split())
if count + word_count > max_tokens and current:
chunks.append(' '.join(current))
current, count = [], 0
current.append(sent)
count += word_count
if current:
chunks.append(' '.join(current))
return chunksPemotongan Semantik
Pemotongan semantik melangkah lebih jauh — teks dibagi ketika topik berubah. Dengan menyematkan kalimat yang berdekatan dan mengukur cosine_similarity, kita dapat mendeteksi perpindahan pembahasan ke subjek baru.
Ketika kemiripan turun di bawah ambang batas, sisipkan batas bagian. Hasilnya adalah bagian-bagian yang padu secara topik, ideal untuk pembuatan yang diperkaya pengambilan (RAG).
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
model = SentenceTransformer('all-MiniLM-L6-v2')
def semantic_chunk(sentences, threshold=0.75):
embeddings = model.encode(sentences)
chunks, current = [], [sentences[0]]
for i in range(1, len(sentences)):
sim = cosine_similarity(
[embeddings[i-1]], [embeddings[i]]
)[0][0]
if sim < threshold:
chunks.append(' '.join(current))
current = []
current.append(sentences[i])
if current:
chunks.append(' '.join(current))
return chunksMembandingkan Tiga Strategi
Berikut perbandingan berdampingan untuk membantu Anda memilih:
- Ukuran tetap: paling cepat, batas paling kurang akurat — gunakan untuk pipeline sederhana
- Batas kalimat: mempertahankan keutuhan kalimat — gunakan saat koherensi penting
- Semantik: kepaduan topik terbaik — gunakan untuk RAG saat ketepatan pengambilan sangat penting
Dalam praktiknya, pemotongan semantik menambah latensi karena perhitungan penyematan. Pilih berdasarkan kebutuhan akurasi pengambilan.
Pemotongan untuk Tugas Pengambilan
Untuk pembuatan yang diperkaya pengambilan (RAG), bagian menjadi unit pencarian. Kueri pengguna disematkan, lalu bagian yang paling mirip diambil dan dimasukkan ke dalam prompt.
Bagian yang lebih kecil (200–400 token) meningkatkan ketepatan pengambilan — setiap bagian memuat satu gagasan terfokus. Bagian yang lebih besar (800–1000 token) memberikan lebih banyak konteks, tetapi dapat menyertakan konten yang tidak relevan bersama bagian yang relevan.
import openai
import numpy as np
client = openai.OpenAI(api_key='sk-...')
def embed(text):
resp = client.embeddings.create(
model='text-embedding-3-small',
input=text
)
return np.array(resp.data[0].embedding)
def retrieve(query, chunks, top_k=3):
q_emb = embed(query)
scores = [(i, np.dot(q_emb, embed(c))) for i, c in enumerate(chunks)]
scores.sort(key=lambda x: x[1], reverse=True)
return [chunks[i] for i, _ in scores[:top_k]]Pemotongan untuk Tugas Peringkasan
Untuk peringkasan, bagian harus cukup besar untuk memuat argumen atau bagian yang lengkap. Bagian berbatas kalimat berukuran 600–800 token berfungsi dengan baik.
Setiap bagian diringkas secara terpisah (langkah map), lalu ringkasan tersebut digabungkan menjadi ringkasan akhir (langkah reduce). Ini adalah pola map-reduce klasik, yang dibahas dalam pelajaran berikutnya.
Tumpang Tindih: Menjembatani Batas Bagian
Salah satu teknik praktis untuk mengurangi kesalahan pada batas bagian adalah menambahkan tumpang tindih di antara bagian. 100–200 token terakhir dari bagian N diulangi pada awal bagian N+1.
Tumpang tindih memastikan bahwa kalimat yang melintasi batas muncul secara utuh setidaknya di satu bagian. Hal ini sangat penting untuk pengambilan — kueri tentang topik yang melintasi batas akan cocok dengan bagian yang tumpang tindih.
def fixed_chunk_with_overlap(text, max_tokens=1000, overlap=200):
enc = tiktoken.get_encoding('cl100k_base')
tokens = enc.encode(text)
chunks = []
step = max_tokens - overlap
for i in range(0, len(tokens), step):
chunk_tokens = tokens[i:i + max_tokens]
chunks.append(enc.decode(chunk_tokens))
if i + max_tokens >= len(tokens):
break
return chunksPengayaan Metadata per Bagian
Setiap bagian harus membawa metadata agar langkah lanjutan dapat merujuk ke asalnya:
source: nama file atau URLpage: nomor halamanchunk_index: posisi dalam dokumensection: bab atau judul
Metadata ini disimpan bersama penyematan dalam basis data vektor (Pinecone, Chroma, Weaviate) dan dikembalikan bersama bagian yang diambil agar LLM dapat mencantumkan sumber.
def chunk_with_metadata(text, source='doc.pdf', page=1):
chunks = fixed_chunk_with_overlap(text)
return [
{
'text': chunk,
'metadata': {
'source': source,
'page': page,
'chunk_index': i
}
}
for i, chunk in enumerate(chunks)
]Memilih Strategi yang Tepat
Panduan keputusan singkat:
- Kecepatan adalah prioritas, konten berupa prosa: pemotongan pada batas kalimat
- Akurasi pengambilan sangat penting: pemotongan semantik dengan bagian kecil (300 token)
- Merangkum buku atau laporan: batas kalimat, bagian lebih besar (800 token), map-reduce
- Dokumen hukum/teknis: pemotongan semantik untuk menjaga klausa tetap bersama
Selalu ukur perolehan kembali pengambilan pada sekumpulan kueri yang representatif sebelum menetapkan strategi.
Uji Pengetahuan
Strategi pembagian potongan mana yang membagi teks ketika kemiripan kosinus antara penyematan kalimat yang berdekatan turun di bawah ambang batas?
Rekap: Strategi Pembagian Potongan
Anda telah mempelajari tiga strategi utama untuk membagi potongan:
- Ukuran tetap: membagi setiap N token — cepat, sederhana, tidak memperhatikan batas
- Batas kalimat: membagi pada jeda kalimat alami — koheren, kompleksitas sedang
- Semantik: membagi berdasarkan perubahan topik melalui kemiripan penyematan — paling akurat, biaya tertinggi
Tambahkan tumpang tindih antar-potongan untuk mengurangi kesalahan pada batas, dan selalu sertakan metadata (sumber, halaman, indeks) agar kutipan dan keterlacakan dapat dilakukan. Pelajaran berikutnya membahas pola peringkasan map-reduce.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Strategi Pemotongan Teks Panjang” gratis?
Ya — teks lengkap “Strategi Pemotongan Teks Panjang” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Prompt Engineering, upgrade ke CoddyKit PRO. Kursus AI Prompt Engineering mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Strategi Pemotongan Teks Panjang”?
Pelajari pendekatan pemotongan berukuran tetap, berdasarkan batas kalimat, dan semantik. Kamu berlatih AI Prompt Engineering dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai AI Prompt Engineering?
Tidak diperlukan pengalaman sebelumnya. AI Prompt Engineering di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Strategi Pemotongan Teks Panjang” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Prompt Engineering ini?
Ya. Setiap pelajaran AI Prompt Engineering menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Strategi Pemotongan Teks Panjang
- Pola Perangkuman Map-Reduce
- Perangkuman Hierarkis
- Mempertahankan Konteks Antar-Potongan