RAG Qidiruv bosqichi nima?
RAG tizimida qidiruv (retrieval) onlayn tarzda amalga oshiriladi. Foydalanuvchi tizimga savol berishi bilan ushbu so’rov embedding modeli yordamida “Query Embedding” ko’rinishiga keltiriladi. Keyin u saqlangan barcha vektorlar bilan solishtirilib, eng yaqin Top-K hujjat bo’laklari tanlab olinadi. Biroq, oddiy qidiruv foydalanuvchining noaniq so’rovlari tufayli kamchiliklarga ega bo’lishi mumkin. Shuning uchun ilg’or RAG tizimlarida quyidagi Query Translation usullari qo’llaniladi:
- Multi-Query: Savolni bir nechta sintaktik variantlarga o’zgartirib qidirish va barcha natijalarning unikal birlashmasini olish.
- RAG Fusion & Reciprocal Rank Fusion (RRF): Bir nechta so’rovlar bo’yicha olingan natijalarni matematik RRF formulasi yordamida qayta tartiblash va yanada mustahkam tartib o’rnatish.
- Decomposition: Murakkab va ko’p qirrali savolni ketma-ket yechiladigan oson sub-savollarga parchalash.
- Stepback Prompting: Umumiy konseptual bilimlarni jalb qilish maqsadida savolni kengroq ma’noda mavhumlashtirish (abstraction).
- HyDE (Hypothetical Document Embeddings): LLM orqali dastlab soxta javob generatsiya qilib, o’sha faraziy javob vektori orqali haqiqiy hujjatlarni topish.
Cosine Similarity va Boshqa Masofa Metrikalari
Vektorlar orasidagi masofani hisoblash uchun turli metrikalar qo’llaniladi:
| Metrika | Kosinus o’xshashligi (Cosine Similarity) | Evklid masofasi (Euclidean Distance) | Skalyar ko’paytma (Dot Product) |
|---|---|---|---|
| Matematik asosi | Ikki vektor orasidagi burchak kosinusini o’lchaydi | Nuqtalar orasidagi to’g’ri chiziqli geometrik masofa | Vektorlar uzunligi va burchagi ko’paytmasi |
| Qiymat oralig’i | -1 dan 1 gacha (1 - mutloq o’xshashlik) | 0 dan cheksizlikkacha (0 - mos kelish) | -cheksizlikdan +cheksizlikkacha |
| Qo’llanilishi | Matnlar ma’nosi va semantik o’xshashlik uchun | Qiymatlarning umumiy kattaligi ham muhim bo’lganda | Normalizatsiya qilingan vektorlar bilan ishlashda |
Amaliy kod: Cosine Similarity va Retrieval tizimi
Quyidagi kod yordamida kosinus o’xshashligi va uning yordamida vektor bazasidan Top-N natijalarni saralash funksiyasini dasturlaymiz:
def cosine_similarity(vector_a, vector_b):
# Ikki vektor orasidagi burchak kosinusini hisoblash
dot_product = sum([i * j for i, j in zip(vector_a, vector_b)])
norm_a = sum([i ** 2 for i in vector_a]) ** 0.5
norm_b = sum([i ** 2 for i in vector_b]) ** 0.5
if norm_a == 0 or norm_b == 0:
return 0.0
return dot_product / (norm_a * norm_b)
def retrieve_top_n(query_vector, vector_database, top_n=3):
results = []
for chunk, db_vector in vector_database:
score = cosine_similarity(query_vector, db_vector)
results.append((chunk, score))
# Ballarni kamayib borish tartibida saralash
results.sort(key=lambda x: x[1], reverse=True)
return results[:top_n]
Muhim
K (Top-K) parametridan noto'g'ri foydalanish qidiruv sifatini pasaytiradi. Juda kichik K muhim kontekstning qolib ketishiga, o'ta katta K esa til modelining kontekst oynasi (Context Window) keraksiz shovqin bilan to'lishiga olib keladi.
Amaliy maslahat
Qidiruvni tezlashtirish va kosinus formulasini soddalashtirish uchun bazaga saqlashdan oldin barcha zich vektorlarni L2-normalizatsiya qiling (vektor uzunligini 1 ga keltiring). Bu holatda kosinus o'xshashligi oddiy va juda tez skalyar ko'paytmaga aylanadi.
Diagramma tavsifi
Diagrammadagi qidiruv oqimi foydalanuvchi so’rovini qabul qilish bilan boshlanadi. Tizim so’rovni embedding modeliga uzatadi va “Query Embedding” hosil qiladi. Keyin “Similarity Search” yordamida vektorlar bazasidagi eng yaqin nuqtalar hisoblanadi. Yakuniy bosqichda esa faqatgina eng yuqori matematik ball to’plagan “Top-K Chunks” qat’iy ajratib olinib, generatsiya uchun uzatiladi.