Biz bilan ulang

Sun'iy umumiy intellekt

Qayta o'tkazuvchilarning kuchi va qayta tiklash uchun ikki bosqichli qidirish

mm
yangilangan on
Qidiruv kengaytirilgan avlod

Tabiiy tilni qayta ishlash (NLP) va ma'lumotni qidirish haqida gap ketganda, tegishli ma'lumotlarni samarali va aniq olish qobiliyati birinchi o'rinda turadi. Soha rivojlanishda davom etar ekan, qidiruv tizimlarining samaradorligini oshirish uchun yangi texnika va metodologiyalar ishlab chiqilmoqda, ayniqsa Qidiruv kengaytirilgan avlod (RAG). Rerankerlar bilan ikki bosqichli qidirish deb nomlanuvchi bunday usullardan biri an'anaviy qidirish usullarining o'ziga xos cheklovlarini hal qilish uchun kuchli yechim sifatida paydo bo'ldi.

Ushbu maqolada biz RAG tizimlarining aniqligi va samaradorligini oshirishda ularning asosiy tamoyillari, amalga oshirish strategiyalari va afzalliklarini o'rganib, ikki bosqichli qidirish va qayta tartiblashning nozik tomonlarini muhokama qilamiz. Shuningdek, biz kontseptsiyalarni tasvirlash va ushbu zamonaviy texnikani chuqurroq tushunish uchun amaliy misollar va kod parchalarini taqdim etamiz.

Qidiruvning kengaytirilgan avlodini (RAG) tushunish

Swe agent LLM

Ikki bosqichli qidiruv va rerankerlarning o'ziga xos xususiyatlariga sho'ng'ishdan oldin, keling, Retrieval Augmented Generation (RAG) tushunchasini qisqacha ko'rib chiqaylik. RAG - bu katta til modellari (LLM) ma'lumotlar bazalari yoki hujjatlar to'plami kabi tashqi ma'lumot manbalariga kirishni ta'minlash orqali bilim va imkoniyatlarini kengaytiruvchi usul. Batafsil maqoladan qarang "LLMda qidirishning kengaytirilgan avlodiga chuqur sho'ng'ish".

Oddiy RAG jarayoni quyidagi bosqichlarni o'z ichiga oladi:

  1. So'rov: Foydalanuvchi savol beradi yoki tizimga ko'rsatma beradi.
  2. Qabul qilish: Tizim foydalanuvchi so'roviga tegishli ma'lumotlarni topish uchun vektor ma'lumotlar bazasi yoki hujjatlar to'plamini so'raydi.
  3. O'rnatish: Qabul qilingan ma'lumot foydalanuvchining asl so'rovi yoki ko'rsatmasi bilan birlashtiriladi.
  4. Generatsiya: Til modeli kengaytirilgan kiritishni qayta ishlaydi va uning chiqishining aniqligi va keng qamrovliligini oshirish uchun tashqi ma'lumotlardan foydalangan holda javob hosil qiladi.

RAG kuchli texnika ekanligini isbotlagan bo'lsa-da, uning qiyinchiliklari yo'q emas. Asosiy muammolardan biri qidiruv bosqichida bo'lib, an'anaviy izlash usullari eng tegishli hujjatlarni aniqlay olmasligi, til modelidan suboptimal yoki noto'g'ri javoblarga olib kelishi mumkin.

Ikki bosqichli qidirish va qayta reytingga bo'lgan ehtiyoj

Kalit so'zlarni moslashtirish yoki vektor fazo modellariga asoslangan an'anaviy qidirish usullari ko'pincha so'rovlar va hujjatlar o'rtasidagi nuansli semantik munosabatlarni qo'lga kiritish uchun kurashadi. Ushbu cheklov faqat yuzaki ahamiyatga ega bo'lgan hujjatlarni olish yoki yaratilgan javob sifatini sezilarli darajada yaxshilashi mumkin bo'lgan muhim ma'lumotlarni o'tkazib yuborishga olib kelishi mumkin.

Ushbu muammoni hal qilish uchun tadqiqotchilar va amaliyotchilar rerankerlar bilan ikki bosqichli qidirishga murojaat qilishdi. Ushbu yondashuv ikki bosqichli jarayonni o'z ichiga oladi:

  1. Dastlabki qidiruv: Birinchi bosqichda vektor fazo modeli yoki kalit soʻz asosida qidiruv kabi tez va samarali qidirish usuli yordamida potentsial tegishli hujjatlarning nisbatan katta toʻplami olinadi.
  2. Qayta tartiblash: Ikkinchi bosqichda dastlab olingan hujjatlarni soʻrovga aloqadorligiga qarab qayta tartiblash uchun yanada murakkab qayta tartiblash modeli qoʻllaniladi, bu esa eng mos hujjatlarni roʻyxatning yuqori qismiga samarali olib keladi.

Qayta tartiblash modeli, ko'pincha neyron tarmoq yoki transformatorga asoslangan arxitektura, hujjatning berilgan so'rovga mosligini baholash uchun maxsus o'qitiladi. Tabiiy tilni tushunishning ilg'or imkoniyatlaridan foydalangan holda, reranker so'rov va hujjatlar o'rtasidagi semantik nuanslarni va kontekstual munosabatlarni qo'lga kiritishi mumkin, bu esa aniqroq va tegishli reytingga olib keladi.

Ikki bosqichli Qidiruv va Rerankerlarning afzalliklari

Rerankerlar bilan ikki bosqichli qidiruvni qabul qilish RAG tizimlari kontekstida bir qator muhim afzalliklarni beradi:

  1. Kengaytirilgan takomillashtirish: Dastlab olingan hujjatlarni qayta tartiblash va eng moslarini yuqoriga koʻtarish orqali tizim til modeliga aniqroq va aniqroq maʼlumotlarni taqdim etishi mumkin, bu esa yuqori sifatli yaratilgan javoblarga olib keladi.
  2. Yengillashtirilgan domendan tashqari muammolar: An'anaviy qidirish uchun ishlatiladigan o'rnatish modellari ko'pincha umumiy maqsadli matn korpusida o'qitiladi, ular domenga xos til va semantikani yetarli darajada qamrab ololmasligi mumkin. Boshqa tomondan, modellarni qayta tartiblash, domenga xos ma'lumotlarga o'rgatish, "domendan tashqari" muammoni yumshatish va ixtisoslashtirilgan domenlar ichida olingan hujjatlarning dolzarbligini oshirish mumkin.
  3. Ölçeklenebilirlik: Ikki bosqichli yondashuv dastlabki bosqichda tezkor va engil qidirish usullaridan foydalangan holda samarali masshtablash imkonini beradi, shu bilan birga kichikroq hujjatlar to'plami uchun ko'proq hisoblash intensiv qayta tartiblash jarayonini saqlab qoladi.
  4. Tadbirkorlik: Qayta tartiblash modellari dastlabki qidirish usulidan mustaqil ravishda almashtirilishi yoki yangilanishi mumkin, bu tizimning o'zgaruvchan ehtiyojlariga moslashuvchanlik va moslashishni ta'minlaydi.

ColBERT: Samarali va samarali kech o'zaro ta'sir

Qayta tartiblash sohasidagi eng mashhur modellardan biri bu ColBERT (BERT orqali kontekstli kech o'zaro ta'sir). ColBERT hujjatni qayta tartiblash modeli boʻlib, BERT tilini chuqur tushunish imkoniyatlaridan foydalanadi va “kech oʻzaro taʼsir” deb nomlanuvchi yangi oʻzaro taʼsir mexanizmini joriy qiladi.

ColBERT: BERT orqali kontekstuallashtirilgan kech o'zaro ta'sir orqali samarali va samarali o'tish qidiruvi

ColBERT: BERT orqali kontekstuallashtirilgan kech o'zaro ta'sir orqali samarali va samarali o'tish qidiruvi

ColBERT-dagi kech o'zaro ta'sir mexanizmi qidiruv jarayonining yakuniy bosqichlarigacha so'rovlar va hujjatlarni alohida qayta ishlash orqali samarali va aniq qidirish imkonini beradi. Xususan, ColBERT BERT yordamida so'rov va hujjatni mustaqil ravishda kodlaydi va keyin ularning nozik o'xshashligini modellashtiradigan engil, ammo kuchli o'zaro ta'sir bosqichidan foydalanadi. Ushbu nozik o'zaro ta'sirni kechiktirish, lekin saqlab qolish orqali ColBERT chuqur til modellarining ekspressivligidan foydalanishi mumkin va bir vaqtning o'zida hujjatlar taqdimotlarini oflayn rejimda oldindan hisoblash qobiliyatiga ega bo'lib, so'rovlarni qayta ishlashni sezilarli darajada tezlashtiradi.

ColBERT-ning kech o'zaro ta'sir arxitekturasi bir qator afzalliklarni taklif etadi, jumladan, yaxshilangan hisoblash samaradorligi, hujjatlar to'plami hajmi bilan miqyoslash va real dunyo stsenariylari uchun amaliy qo'llanilishi. Bundan tashqari, ColBERT o'quv jarayonini takomillashtirish va yuqori qidirish samaradorligini saqlab qolgan holda modelning kosmik izini kamaytiradigan noaniq nazorat va qoldiq siqish (ColBERTv2 da) kabi usullar bilan yanada takomillashtirildi.

Ushbu kod parchasi hujjatlar to'plamini indekslash uchun jina-colbert-v1-en modelini qanday sozlash va undan foydalanishni ko'rsatadi, bu uning uzoq kontekstlarni samarali boshqarish qobiliyatidan foydalanadi.

Rerankers bilan ikki bosqichli qidirishni amalga oshirish

Endi biz ikki bosqichli qidirish va rerankerlar ortidagi tamoyillarni tushunganimizdan so'ng, keling, ularni RAG tizimi kontekstida amaliy amalga oshirishni o'rganamiz. Ushbu usullarning integratsiyasini namoyish qilish uchun biz mashhur kutubxonalar va ramkalardan foydalanamiz.

Atrof muhitni sozlash

Kodga kirishdan oldin, ishlab chiqish muhitimizni sozlaylik. Biz Python va bir nechta mashhur NLP kutubxonalaridan foydalanamiz, jumladan Hugging Face Transformers, Sentence Transformers va LanceDB.

# Install required libraries
!pip install datasets huggingface_hub sentence_transformers lancedb

Ma'lumotlarni tayyorlash

Namoyish maqsadida biz Hugging Face maʼlumotlar toʻplamidagi “ai-arxiv-chunked” maʼlumotlar toʻplamidan foydalanamiz, unda mashina oʻrganish, tabiiy tillarni qayta ishlash va katta til modellari boʻyicha 400 dan ortiq ArXiv hujjatlari mavjud.

from datasets import load_dataset
dataset = load_dataset("jamescalam/ai-arxiv-chunked", split="train")
<pre>

Keyinchalik, samarali qidirish va qayta ishlashni osonlashtirish uchun ma'lumotlarni oldindan qayta ishlaymiz va ularni kichikroq bo'laklarga ajratamiz.

from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
def chunk_text(text, chunk_size=512, overlap=64):
tokens = tokenizer.encode(text, return_tensors="pt", truncation=True)
chunks = tokens.split(chunk_size - overlap)
texts = [tokenizer.decode(chunk) for chunk in chunks]
return texts
chunked_data = []
for doc in dataset:
text = doc["chunk"]
chunked_texts = chunk_text(text)
chunked_data.extend(chunked_texts)
Qidiruvning dastlabki bosqichida hujjatlar va so‘rovlarimizni zich vektor ko‘rinishlariga kodlash uchun Sentence Transformer modelidan foydalanamiz, so‘ngra LanceDB kabi vektor ma’lumotlar bazasidan foydalanib, eng yaqin qo‘shnilar bo‘yicha taxminiy qidiruvni amalga oshiramiz.
from sentence_transformers import SentenceTransformer
from lancedb import lancedb
# Load Sentence Transformer model
model = SentenceTransformer('all-MiniLM-L6-v2')
# Create LanceDB vector store
db = lancedb.lancedb('/path/to/store')
db.create_collection('docs', vector_dimension=model.get_sentence_embedding_dimension())
# Index documents
for text in chunked_data:
vector = model.encode(text).tolist()
db.insert_document('docs', vector, text)
from sentence_transformers import SentenceTransformer
from lancedb import lancedb
# Load Sentence Transformer model
model = SentenceTransformer('all-MiniLM-L6-v2')
# Create LanceDB vector store
db = lancedb.lancedb('/path/to/store')
db.create_collection('docs', vector_dimension=model.get_sentence_embedding_dimension())
# Index documents
for text in chunked_data:
vector = model.encode(text).tolist()
db.insert_document('docs', vector, text)

Hujjatlarimiz indekslangan bo'lsa, biz berilgan so'rov vektoriga eng yaqin qo'shnilarni topish orqali dastlabki qidirishni amalga oshirishimiz mumkin.

from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
def chunk_text(text, chunk_size=512, overlap=64):
tokens = tokenizer.encode(text, return_tensors="pt", truncation=True)
chunks = tokens.split(chunk_size - overlap)
texts = [tokenizer.decode(chunk) for chunk in chunks]
return texts
chunked_data = []
for doc in dataset:
text = doc["chunk"]
chunked_texts = chunk_text(text)
chunked_data.extend(chunked_texts)

Qayta tartiblash

Dastlabki izlashdan so'ng, olingan hujjatlarni so'rovga aloqadorligi asosida qayta tartiblash uchun qayta tartiblash modelini qo'llaymiz. Ushbu misolda biz ColBERT reranker-dan foydalanamiz, bu hujjatlarni tartiblash uchun maxsus ishlab chiqilgan tezkor va aniq transformatorga asoslangan model.

from lancedb.rerankers import ColbertReranker
reranker = ColbertReranker()
# Rerank initial documents
reranked_docs = reranker.rerank(query, initial_docs)

The reranked_docs roʻyxat endi ColBERT reranker tomonidan aniqlangan soʻrovga tegishliligi asosida qayta tartiblangan hujjatlarni oʻz ichiga oladi.

Ko'paytirish va yaratish

Qayta tartiblangan va tegishli hujjatlar bilan biz RAG quvurini ko'paytirish va ishlab chiqarish bosqichlariga o'tishimiz mumkin. Yakuniy javobni yaratish uchun Hugging Face Transformers kutubxonasidagi til modelidan foydalanamiz.

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
tokenizer = AutoTokenizer.from_pretrained("t5-base")
model = AutoModelForSeq2SeqLM.from_pretrained("t5-base")
# Augment query with reranked documents
augmented_query = query + " " + " ".join(reranked_docs[:3])
# Generate response from language model
input_ids = tokenizer.encode(augmented_query, return_tensors="pt")
output_ids = model.generate(input_ids, max_length=500)
response = tokenizer.decode(output_ids[0], skip_special_tokens=True)
print(response)

Yuqoridagi kod parchasida biz dastlabki so'rovni eng yaxshi uchta qayta tartiblangan hujjatlar bilan to'ldiramiz va augmented_query. Keyin biz ushbu kengaytirilgan so'rovni taqdim etilgan kontekstga asoslangan javobni yaratadigan T5 tili modeliga o'tkazamiz.

The response o'zgaruvchi dastlabki so'rovga aniqroq va to'liq javob berish uchun olingan va qayta tartiblangan hujjatlardan tashqi ma'lumotlardan foydalangan holda yakuniy natijani o'z ichiga oladi.

Ilg'or texnikalar va mulohazalar

Biz ko'rib chiqqan amalga oshirish ikki bosqichli qidiruv va rerankerlarni RAG tizimiga integratsiya qilish uchun mustahkam asos bo'lsa-da, yondashuvning samaradorligi va mustahkamligini yanada oshirishi mumkin bo'lgan bir qancha ilg'or texnika va fikrlar mavjud.

  1. So'rovni kengaytirish: Qidiruvning dastlabki bosqichini yaxshilash uchun siz so'rovlarni kengaytirish usullaridan foydalanishingiz mumkin, ular asl so'rovni tegishli atamalar yoki iboralar bilan to'ldirishni o'z ichiga oladi. Bu potentsial tegishli hujjatlarning yanada xilma-xil to'plamini olishga yordam beradi.
  2. Ansamblni qayta tartiblash: Yagona qayta tartiblash modeliga tayanmaslik oʻrniga, umumiy samaradorlikni oshirish uchun turli modellarning kuchli tomonlaridan foydalanib, bir nechta rerankerlarni ansamblga birlashtira olasiz.
  3. Rerankerlarni nozik sozlash: Oldindan oʻqitilgan qayta tartiblash modellari samarali boʻlishi mumkin boʻlsa-da, ularni domenga oid maʼlumotlarda nozik sozlash ularning domenga xos semantika va tegishli signallarni olish qobiliyatini yanada oshirishi mumkin.
  4. Takroriy qidirish va qayta tartiblash: Ba'zi hollarda, qidirish va qayta tartiblashning bir iteratsiyasi etarli bo'lmasligi mumkin. Siz iterativ yondashuvlarni o'rganishingiz mumkin, bu erda til modelining chiqishi so'rov va qidirish jarayonini takomillashtirish uchun ishlatiladi, bu esa yanada interaktiv va dinamik tizimga olib keladi.
  5. Muvofiqlik va xilma-xillikni muvozanatlash: Rerankerlar eng mos hujjatlarni targ'ib qilishni maqsad qilgan bo'lsa-da, dolzarblik va xilma-xillik o'rtasidagi muvozanatni saqlash juda muhimdir. Turli xillikni targ'ib qiluvchi usullarni kiritish tizimning axborot manbalarida haddan tashqari tor yoki noxolis bo'lishining oldini olishga yordam beradi.
  6. Baholash ko'rsatkichlari: Ikki bosqichli qidirish va qayta tartiblash yondashuvingiz samaradorligini baholash uchun tegishli baholash ko'rsatkichlarini belgilashingiz kerak bo'ladi. Bularga aniqlik, eslab qolish va o'rtacha o'zaro daraja (MRR) kabi an'anaviy ma'lumot qidirish ko'rsatkichlari, shuningdek, foydalanish holatlaringizga moslashtirilgan vazifaga xos ko'rsatkichlar bo'lishi mumkin.

Xulosa

Retrieval Augmented Generation (RAG) tashqi axborot manbalaridan foydalanish orqali katta til modellarining imkoniyatlarini oshirishning kuchli usuli sifatida paydo bo'ldi. Biroq, an'anaviy qidirish usullari ko'pincha eng mos hujjatlarni aniqlash uchun kurash olib boradi, bu esa suboptimal ishlashga olib keladi.

Rerankerlar bilan ikki bosqichli qidiruv ushbu muammoga jiddiy yechim taklif qiladi. Dastlabki tez qidirish bosqichini yanada murakkab qayta tartiblash modeli bilan birlashtirgan holda, ushbu yondashuv olingan hujjatlarning aniqligi va dolzarbligini sezilarli darajada yaxshilaydi va natijada til modelidan yuqori sifatli javoblar hosil qiladi.

Men so'nggi besh yilni Mashinani o'rganish va chuqur o'rganishning maftunkor dunyosiga sho'ng'ish uchun o'tkazdim. Mening ishtiyoqim va tajribam meni AI/MLga alohida e'tibor qaratgan holda 50 dan ortiq turli xil dasturiy injiniring loyihalariga hissa qo'shishimga olib keldi. Doimiy qiziquvchanligim meni tabiiy tilni qayta ishlashga ham tortdi, bu sohani men ko'proq o'rganishni xohlayman.