AI Engineering Academy · Pelajaran

Mengapa Pembahagian Naif Menjejaskan Pengambilan

Analisis kegagalan pengambilan sebenar yang disebabkan oleh pembahagian yang lemah, termasuk jawapan yang terbelah merentasi sempadan bahagian serta konteks daripada pengepala dan tajuk seksyen yang hilang.

Pelajaran 1 daripada 413 langkah

Mengapa Pembahagian Naif Menjejaskan Pengambilan ialah pelajaran AI Engineering Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran AI Engineering Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus AI Engineering Academy merangkumi sejumlah 4 pelajaran.

Kos Pembahagian Segmen yang Lemah

Pembahagian segmen ialah proses membahagikan dokumen kepada bahagian yang lebih kecil sebelum membenamkannya ke dalam stor vektor. Cara anda membahagikan dokumen menentukan konteks yang tersedia semasa pengambilan semula. Pembahagian yang lemah ialah antara punca kegagalan sistem RAG yang paling biasa dan paling besar kesannya.

Jawapan Terbahagi pada Sempadan

Bayangkan sebuah dokumen yang menyatakan: 'Dasar bayaran balik ialah 30 hari dari tarikh pembelian. Pelanggan mesti menyertakan resit asal.' Jika pembahagi bersaiz tetap memotong selepas perkataan 'pembelian.', kedua-dua ayat ini akan berada dalam segmen yang berbeza. Pertanyaan tentang dasar bayaran balik mungkin hanya mendapatkan separuh pertama — menyebabkan model tidak dapat menyebut keperluan resit.

Konteks Hilang daripada Pengepala

Dokumen sering menggunakan pengepala bahagian untuk memberikan makna. Pertimbangkan jadual bertajuk 'Harga untuk Pelan Perusahaan' yang diikuti oleh baris nombor. Jika pengepala dan jadual berada dalam segmen yang berbeza, segmen jadual yang diambil mengandungi nombor tanpa label — model tidak dapat menjawab 'Berapakah harga Perusahaan?' dengan betul.

Perangkap Pembahagian Segmen Bersaiz Tetap

Pembahagian segmen bersaiz tetap membahagikan teks setiap N aksara atau token tanpa mengira sempadan ayat. Kaedah ini pantas dan mudah, tetapi kerap memutuskan ayat di tengah-tengah. Segmen yang berakhir dengan 'Model itu dilatih menggunakan' dan segmen berikutnya yang bermula dengan 'set data sebanyak 500 bilion token' masing-masing tidak bermakna tanpa satu sama lain.

from langchain.text_splitter import CharacterTextSplitter

# Naive fixed-size: may break mid-sentence
splitter = CharacterTextSplitter(chunk_size=200, chunk_overlap=0)
chunks = splitter.split_text(document_text)
print(f'Created {len(chunks)} chunks')
print('First chunk:', chunks[0])

Pertindihan Tidak Sentiasa Membantu

Penyelesaian biasa ialah menambah pertindihan segmen — mengulangi N token terakhir suatu segmen pada permulaan segmen seterusnya. Ini membantu menangani ayat yang terpisah, tetapi memperkenalkan lebihan dan boleh mengelirukan alat pengambil semula apabila dua segmen yang sangat serupa kedua-duanya diambil. Pertindihan hanyalah penyelesaian sementara, bukan penawar kepada masalah struktur pembahagian segmen.

# Overlap helps partially but adds redundancy
splitter = CharacterTextSplitter(
    chunk_size=500,
    chunk_overlap=50  # last 50 chars repeated in next chunk
)
chunks = splitter.split_text(document_text)

Mengukur Kadar Kegagalan Pengambilan Semula

Anda boleh mengukur kekerapan pembahagian segmen menjejaskan pengambilan semula dengan membina set penilaian rujukan yang kecil: senarai soalan dengan petikan sumber yang betul dan diketahui. Kemudian, semak kekerapan petikan yang betul berada dalam k segmen teratas yang diambil. hit rate yang rendah sering mendedahkan masalah pembahagian segmen sebelum anda menilai kualiti penjanaan.

def hit_rate(queries_and_answers, retriever, k=5):
    hits = 0
    for query, expected_text in queries_and_answers:
        results = retriever.retrieve(query, k=k)
        retrieved_texts = [r.page_content for r in results]
        if any(expected_text in text for text in retrieved_texts):
            hits += 1
    return hits / len(queries_and_answers)

Masalah Kod dan Data Berstruktur

Fail kod, JSON dan jadual mempunyai unit logik — fungsi, objek dan baris jadual — yang tidak sepatutnya dipisahkan. Memisahkan takrif fungsi Python kepada dua segmen bermakna tiada satu pun segmen dapat difahami secara bersendirian. Alat pengambil semula yang menemukan segmen kedua akan melihat kod tanpa argumen dan tanpa konteks.

# Bad: splits code arbitrarily
bad_chunk_1 = 'def calculate_price(item, qty'  # incomplete!
bad_chunk_2 = ', discount):\n    return item.price * qty * (1 - discount)'

# Good: keep the full function together
good_chunk = 'def calculate_price(item, qty, discount):\n    return item.price * qty * (1 - discount)'

Dokumen Panjang dan Kehilangan Kandungan Tengah

Penyelidikan tentang LLM menunjukkan fenomena 'hilang di tengah-tengah': apabila banyak segmen diambil dan dimasukkan ke dalam gesaan, model memberikan perhatian kepada kandungan berhampiran permulaan dan penghujung, tetapi cenderung mengabaikan bahagian tengah. Pembahagian lemah yang menghasilkan banyak segmen kecil berkualiti rendah memburukkan keadaan ini dengan mencairkan isyarat yang relevan.

Mendiagnosis Segmen Buruk Secara Manual

Diagnosis pantas ialah mencetak sampel rawak segmen anda dan membacanya. Tanya diri anda: Adakah segmen ini bermakna secara bersendirian? Jika pengguna mengemukakan soalan, bolehkah model menjawabnya hanya berdasarkan segmen ini? Segmen yang merujuk kepada kata ganti nama yang tidak jelas ('Dia berkata bahawa...'), kod yang tidak lengkap atau nombor tanpa konteks ialah tanda amaran.

import random

def audit_chunks(chunks, sample_size=10):
    sample = random.sample(chunks, min(sample_size, len(chunks)))
    for i, chunk in enumerate(sample):
        print(f'--- Chunk {i+1} ({len(chunk)} chars) ---')
        print(chunk[:300])
        print()

Apabila Saiz Segmen Terlalu Besar

Segmen yang sangat besar menjejaskan ketepatan pengambilan semula. Segmen 2000 token tentang topik yang luas mungkin sepadan dengan banyak pertanyaan, tetapi memberikan terlalu banyak gangguan kepada LLM. Model perlu mencari jarum dalam timbunan jerami dalam segmen tersebut. Segmen yang lebih kecil dan fokus meningkatkan ketepatan dengan mengorbankan kemungkinan kehilangan konteks sekeliling.

Strategi yang Menyelesaikan Masalah Ini

Alternatif yang lebih baik berbanding pembahagian segmen bersaiz tetap secara naif termasuk: pembahagian pada sempadan ayat yang tidak pernah memutuskan ayat di tengah-tengah, pembahagian semantik yang memotong pada sempadan topik, pembahagian induk-anak yang mengekalkan konteks lebih luas, dan pembahagian yang peka terhadap dokumen yang menghormati fungsi kod, tag HTML dan pengepala Markdown. Setiap pelajaran seterusnya membincangkan salah satu daripadanya.

Semakan Pantas

Uji pemahaman anda tentang mod kegagalan pembahagian segmen daripada pelajaran ini.

Rumusan Pelajaran

Dalam pelajaran ini, anda telah mempelajari bahawa: pembahagian segmen bersaiz tetap secara naif memutuskan sempadan ayat dan bahagian, pertindihan ialah pembaikan separa tetapi menambah lebihan, dan kualiti segmen menentukan hit rate pengambilan semula secara langsung. Seterusnya kita akan meneroka pembahagian semantik, yang memotong teks pada sempadan topik semula jadi menggunakan keserupaan pembenaman.

Percuma untuk bermula

Pelajari Python dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
30
Pelajaran
120

Soalan Lazim

Adakah pelajaran “Mengapa Pembahagian Naif Menjejaskan Pengambilan” percuma?

Ya — teks penuh “Mengapa Pembahagian Naif Menjejaskan Pengambilan” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus AI Engineering Academy, tingkat taraf kepada CoddyKit PRO. Kursus AI Engineering Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Mengapa Pembahagian Naif Menjejaskan Pengambilan”?

Analisis kegagalan pengambilan sebenar yang disebabkan oleh pembahagian yang lemah, termasuk jawapan yang terbelah merentasi sempadan bahagian serta konteks daripada pengepala dan tajuk seksyen yang… Anda berlatih AI Engineering Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan AI Engineering Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran AI Engineering Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “Mengapa Pembahagian Naif Menjejaskan Pengambilan” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran AI Engineering Academy ini?

Ya. Setiap pelajaran AI Engineering Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Mengapa Pembahagian Naif Menjejaskan Pengambilan
  2. Pembahagian Semantik dengan Persamaan Embedding
  3. Pengambilan Induk-Anak dan Kecil-ke-Besar
  4. Strategi Khusus Dokumen untuk Kod dan HTML
← Kembali ke AI Engineering Academy