পাঠ্যক্রম খুলুন
অগ্রসর পর্যায়

RAG Ingestion: chunking, versioning ও retrieval-এর মান

Ingestion, Chunking, and Retrieval Quality

এই পাঠের কুইজ ↓৫ মিনিট পড়াPHP 8.3+ · Laravel 12
এই পাঠের সূচিপত্র

এই পাঠে যা শিখবেন

  • Document ingestion-এর ধাপ আলাদা করুন
  • Chunk boundary ও metadata নির্ধারণ করুন
  • Versioned indexing এবং retrieval quality মাপুন

সমস্যা দিয়ে শুরু

একটি PDF policy vector database-এ আছে, কিন্তু প্রশ্নের উত্তরে heading আসে, আসল শর্ত আসে না। Text extraction-এ table ভেঙেছে এবং chunk মাঝখানে বাক্য কেটেছে। নতুন policy upload করলেও পুরোনো chunks search-এ রয়ে গেছে। Embedding API সফল হওয়া পুরো ingestion সফল নয়।

সহজ করে বুঝি

Ingestion source সংগ্রহ, extraction, normalization, chunking, embedding ও indexing-এর pipeline। Chunk একটি retrievable unit; heading, source version, page ও permissions metadata সঙ্গে থাকা দরকার। Chunk size ছোট হলে context হারায়, বড় হলে অপ্রাসঙ্গিক অংশ budget খায়। Universal সেরা size নেই।

পরিচিত একটি উপমা

বইয়ের পাতাগুলো কেটে আলাদা বাক্সে রাখলে index থাকলেও একটি নিয়মের exception অন্য বাক্সে পড়তে পারে। অধ্যায় ও subsection বুঝে ভাগ করলে খোঁজা সহজ। নতুন edition এলে পুরোনো edition-এর ভুল পৃষ্ঠা সরানোর নিয়মও চাই।

নকশাটি দেখুন

Diagram লোড হচ্ছে…

Document ingestion-এর ধাপ আলাদা করুন
Diagram-এর text flow দেখুন
flowchart LR
 D[Source Document] --> X[Extract Text]
 X --> N[Normalize and Validate]
 N --> C[Semantic Chunks with Metadata]
 C --> E[Embedding Model Version]
 E --> I[New Index Version]
 I --> A[Activate after Quality Check]

Extractor output পরীক্ষা করা হয়, অন্ধভাবে embed নয়। Normalization meaningful table ও headings রক্ষা করে। Chunk metadata source traceability দেয়। New index version build ও quality check শেষে active হয়। Old version cleanup delayed হতে পারে, কিন্তু active query পুরোনো version পড়বে না।

PHP ও Laravel-এ প্রয়োগ

Laravel ingestion job fragment; document version verified এবং extracted paragraphs আগে validate করা হয়েছে। embedding client app-defined এবং dimension checked। এই উদাহরণ paragraph-level chunk দেখায়; production-এ tokenizer budget ও neighboring context দরকার। unique document_id,version,chunk_index constraint রাখুন।

php
use Illuminate\Support\Facades\DB;

foreach ($paragraphs as $index => $text) {
    $normalized = trim($text);
    if ($normalized === '') continue;
    $embedding = $embeddingClient->embed($normalized);
    DB::table('document_chunks')->updateOrInsert(
        [
            'document_id' => $document->id,
            'version' => $document->version,
            'chunk_index' => $index,
        ],
        [
            'tenant_id' => $document->tenant_id,
            'content' => $normalized,
            'content_hash' => hash('sha256', $normalized),
            'embedding' => $embedding->toVectorLiteral(),
        ],
    );
}

এটি PHP 8.3+ ও Laravel 12-এর শিক্ষামূলক fragment; সম্পূর্ণ application নয়। সংশ্লিষ্ট route-এ authentication ও resource authorization প্রয়োগ করতে হবে। নিচের অনুশীলনে failure ইচ্ছা করে তৈরি করুন; শুধু সফল response দেখে correctness ধরে নেবেন না।

সুবিধা, সীমাবদ্ধতা ও trade-off

Overlap boundary information বাঁচায়, কিন্তু index size ও repeated context বাড়ায়। Content hash unchanged chunks re-embed কমায়, তবে model version বদলালে পুরোনো vector reuse ভুল হতে পারে। Batch embedding খরচ ও throughput ভালো করতে পারে, error recovery আলাদা লাগে।

সাধারণ ভুল

  • PDF extraction-এর quality না দেখে vector count দিয়ে success মাপা।
  • ভিন্ন embedding model-এর vectors এক index-এ অর্থ না বুঝে মেশানো।
  • Document delete-এর পরে derived chunks না মুছে privacy leak রাখা।

আরও একটু গভীরে

Embedding model upgrade query এবং corpus compatibility বদলাতে পারে। Dual index ও evaluated cutover ব্যবহার করুন। Bengali punctuation, Unicode normalization এবং OCR errors retrieval-এ প্রভাব ফেলে; aggressive normalization product code বা legal numbering নষ্ট করতে পারে।

এক policy-এর heading, table row ও exception থেকে test question বানান। Chunk size দুইভাবে করে relevant evidence retrieval তুলনা করুন। New document version activate করার সময় old content আর answer-এ না আসা চাই। Failed job restart-এ duplicate chunk count বাড়বে না।

মনে রাখুন

  • Ingestion একটি versioned pipeline।
  • Chunk অর্থ ধরে, শুধু length নয়।
  • Index count-এর বদলে retrieval quality মাপুন।

নিজে চেষ্টা করুন

একটি বাংলা return policy-এর chunk metadata schema লিখুন: source, section, version, permissions, model ও deletion status রাখুন।

নিজের বোঝা যাচাই করুন

1. এক paragraph সবসময় যথেষ্ট?

না। Context বা exception পাশের paragraph-এ থাকতে পারে; source structure অনুযায়ী test করতে হয়।

2. Overlap কেন?

Boundary-তে অর্থ হারানো কমায়, কিন্তু redundancy ও token budget বাড়ায়।

3. Hash কী বাঁচায়?

Unchanged content শনাক্ত করে; embedding model বদলালে hash এক হলেও vector নতুন লাগতে পারে।

4. Version কেন?

Partial rebuild-এর মধ্যে পুরোনো-নতুন content মিশে যাওয়া ঠেকাতে controlled activation দরকার।

5. Success metric কী?

Known প্রশ্নে সঠিক evidence retrieval, freshness ও permission safety; শুধু embedded rows নয়।

আরও পড়ুন

এই পাঠের কুইজ

এই পাঠ থেকে ২টি প্রশ্ন। উত্তর দিয়ে ব্যাখ্যা দেখুন; অধ্যায়ের কুইজ আলাদাভাবে দিতে হবে।

এই পাঠের ২টি প্রশ্নের উত্তর দিন। পাস করতে দুটিই সঠিক হতে হবে।

জমা দেওয়ার পর সঠিক উত্তর ও ব্যাখ্যা দেখবেন। ফলাফল এই ব্রাউজারে সংরক্ষিত থাকবে। অনুশীলনের ফল অধ্যায় সম্পন্নের হিসাবে যোগ হয় না।

সব বিষয় মিলিয়ে অনুশীলন করুন →

অগ্রগতি এই ব্রাউজারে সংরক্ষিত থাকে। শুধু পাঠ খুললে সম্পন্ন হয় না।