Talim

Indexatsiya bosqichi

Hujjatlarni yuklash, ilg'or chunking va embedding vektorlarini yaratish jarayoni.

15 daqiqa o‘qish · O‘rta → Ilg‘or

Indexatsiya bosqichlari

RAG Indexatsiya nima?

RAG (Retrieval-Augmented Generation) tizimining offlayn poydevori uning indexatsiya bosqichi hisoblanadi. Bu bosqichda tizim foydalanuvchining shaxsiy yoki korporativ ma’lumotlarini qabul qilib, ularni LLM tushunadigan ko’rinishga keltiradi. Mazkur tizimli jarayon to’rtta asosiy qismdan iborat:

  1. Hujjatlarni yuklash (Data Ingestion): PDF, Markdown, DOCX yoki YouTube transkriptlaridan matn formatida ma’lumotlarni o’qib olish.
  2. Ilg’or bo’laklash (Advanced Chunking): Matnni boshqariladigan kichik qismlarga (chunk) ajratish. Oddiy xarakterga asoslangan bo’lishdan tashqari, gaplar va abzaslar yaxlitligini saqlaydigan RecursiveCharacterTextSplitter kabi usullardan yoki Chonkie kabi semantik bo’laklash kutubxonalaridan foydalaniladi. Xarakterli bo’lish so’zlarni o’rtasidan bo’lib qo’yishi mumkin, shu bois zamonaviy tizimlarda model lug’atiga tayanadigan Token-based bo’laklash va semantik mantiqni saqlovchi algoritmlar ishlatiladi.
  3. Vektorli vakillik (Embedding Generation): Har bir chunkni semantik ma’nosini 1536 yoki 768 o’lchamli ko’p o’lchamli fazoda ifodalovchi zich raqamli vektorga aylantirish.
  4. Vektorlarni saqlash (Vector Storage): Vektorlarni va ularning asl matnlarini tezkor indekslovchi ma’lumotlar bazalarida (Chroma, Qdrant, SQLite-vec, Pinecone) saqlash.

Ilg’or arxitekturalarda hujjatlarni indekslashda Multi-representation Indexing va Raptor kabi ierarxik usullar ham qo’llaniladi. Bu usullar katta hajmdagi hujjatlarni klasterlab, ularning qisqacha mazmunini (summary) vektorlashtiradi va qidiruv samaradorligini keskin oshiradi.

Sparse va Dense Embeddings solishtiruvi

Qidiruv tizimlarida an’anaviy kalit so’z chastotasiga asoslangan usullar hamda neyron tarmoqli zich vektorlar bir-biridan farq qiladi:

Xususiyat Sparse Embeddings (BM25) Dense Embeddings (Neural)
Yaratilish usuli Kalit so’zlar chastotasi va statistik TF-IDF formulalari Transformer arxitekturasidagi chuqur neyron tarmoqlar
Vektor o’lchami Juda katta (lug’at hajmi bo’yicha), ko’p nollardan iborat Ruxsat etilgan, ixcham o’lchamli zich float massivi (masalan, 768 yoki 1536)
Qidiruv tabiati Kalit so’zlarning harfma-harf mosligini tekshiradi Matnning semantik ma’nosi va kontekstual o’xshashligini topadi

Amaliy kod: Bo’laklash va Persistent Vector Database o’rnatish

Quyidagi amaliy Python kodida biz matnni bo’laklash va Ollama embedderi yordamida vektor bazasiga persistence qoidasi bilan yozishni amalga oshiramiz:

import ollama

EMBEDDING_MODEL = 'hf.co/CompendiumLabs/bge-base-en-v1.5-gguf'
VECTOR_DB = []  # Sodda in-memory vektor bazasi

def create_embeddings(text: str) -> list[float]:
    # Ollama embedding API orqali matnning zich vektorini olish
    response = ollama.embed(model=EMBEDDING_MODEL, input=text)
    return response['embeddings'][0]

def add_to_index(chunk_text: str, metadata: dict):
    vector = create_embeddings(chunk_text)
    VECTOR_DB.append({
        "chunk": chunk_text,
        "vector": vector,
        "metadata": metadata
    })

# Ilg'or chunking (qoplama bilan bo'lish) simulyatsiyasi
raw_text = "Mushuklar qisqa masofada 49 km/soat tezlikda yugura oladi. Toj Mahal marmardan qurilgan."
chunks = [raw_text[i:i+40] for i in range(0, len(raw_text), 30)] # Overlap=10

for idx, chunk in enumerate(chunks):
    add_to_index(chunk, {"chunk_id": idx})
    print(f"Chunk {idx+1} vektor bazasiga saqlandi. Vektor o'lchami: {len(VECTOR_DB[-1]['vector'])}")

Muhim

Chunk hajmi (Chunk Size) va qoplash (Overlap) mutanosibligi RAG samaradorligini belgilaydi. Juda katta o'lcham matndagi o'ziga xos detallarni yashirsa, o'ta kichik o'lcham jumlalarning mantiqiy aloqasini uzadi va javoblarda noaniqliklarga olib keladi.

Amaliy maslahat

O'zbek tilidagi lotin yoki kirill alifbosidagi matnlar bilan ishlashda encoding muammolari yuzaga kelmasligi uchun fayllarni har doim `open('fayl.txt', 'r', encoding='utf8')` shaklida oching. Aks holda `charmap` yoki Windows-1252 dekoder xatolari yuz beradi.

Diagramma tavsifi

Yuqoridagi frontmatter’da ta’riflangan diagramma offlayn indexatsiya bosqichlarini qat’iy ketma-ketlikda ko’rsatadi. Dastlab, tashqi “Hujjat yuklash” amalga oshiriladi. Keyingi bosqichda “Chunking” algoritmi uzun matnlarni qoplama (overlap) saqlagan holda bo’laklaydi. “Embeddings” bosqichida barcha matnlar ko’p o’lchamli zich vektorlarga o’giriladi va nihoyat, ular tezkor onlayn qidiruv uchun “Vektor bazasi” tizimida saqlanadi.

Bu dars foydali bo‘ldimi?