никулец Моќта на реранкерите и враќањето во две фази за пронаоѓање зголемена генерација - Unite.AI
Поврзете се со нас

Вештачка општа интелигенција

Моќ на реранкери и враќање во две фази за пронаоѓање зголемена генерација

mm
Ажурирани on
Враќање на зголемена генерација

Кога станува збор за обработка на природен јазик (НЛП) и пронаоѓање информации, способноста за ефикасно и прецизно враќање на релевантните информации е најважна. Како што полето продолжува да се развива, се развиваат нови техники и методологии за подобрување на перформансите на системите за пронаоѓање, особено во контекст на Враќање на зголемена генерација (КРПТАЛ). Една таква техника, позната како двостепено пребарување со реранкери, се појави како моќно решение за решавање на инхерентните ограничувања на традиционалните методи на пронаоѓање.

Во оваа статија разговараме за сложеноста на двостепеното пребарување и реранкерите, истражувајќи ги нивните основни принципи, стратегиите за имплементација и придобивките што ги нудат во подобрувањето на точноста и ефикасноста на RAG системите. Ќе обезбедиме и практични примери и фрагменти од код за да ги илустрираме концептите и да го олесниме подлабокото разбирање на оваа најсовремена техника.

Разбирање на зголемената генерација на пронаоѓање (RAG)

swe агент LLM

Пред да се навлеземе во спецификите на пребарувањето во две фази и реранкерите, ајде накратко да го разгледаме концептот на проширена генерација на пребарување (RAG). RAG е техника која ги проширува знаењата и можностите на големите јазични модели (LLM) обезбедувајќи им пристап до надворешни извори на информации, како што се бази на податоци или збирки документи. Погледнете повеќе од статијата „Длабоко нурне во пронаоѓање зголемена генерација во LLM".

Типичниот RAG процес ги вклучува следните чекори:

  1. Пребарување: Корисникот поставува прашање или дава инструкции до системот.
  2. Враќање: Системот бара векторска база на податоци или колекција на документи за да најде информации релевантни за барањето на корисникот.
  3. Зголемување: Преземените информации се комбинираат со оригиналното барање или инструкција на корисникот.
  4. Генерација: Јазичниот модел го обработува зголемениот влез и генерира одговор, користејќи ги надворешните информации за да ја подобри точноста и сеопфатноста на неговиот излез.

Иако RAG се покажа како моќна техника, таа не е без свои предизвици. Едно од клучните прашања лежи во фазата на пронаоѓање, каде што традиционалните методи на пронаоѓање може да не успеат да ги идентификуваат најрелевантните документи, што ќе доведе до неоптимални или неточни одговори од јазичниот модел.

Потребата за враќање во две фази и реранкери

Традиционалните методи за пронаоѓање, како што се оние засновани на совпаѓање на клучни зборови или модели на векторски простор, честопати се борат да ги доловат нијансираните семантички односи помеѓу прашањата и документите. Ова ограничување може да резултира со пронаоѓање на документи кои се само површно релевантни или пропуштаат клучни информации кои би можеле значително да го подобрат квалитетот на генерираниот одговор.

За да се справат со овој предизвик, истражувачите и практичарите се свртеа кон пронаоѓање во две фази со реранкери. Овој пристап вклучува процес во два чекора:

  1. Почетно преземање: Во првата фаза, релативно голем сет на потенцијално релевантни документи се преземаат со користење на брз и ефикасен метод на пронаоѓање, како што е модел на векторски простор или пребарување базирано на клучни зборови.
  2. Рерангирање: Во втората фаза, се користи пософистициран модел на прерангирање за да се преуреди првично преземените документи врз основа на нивната релевантност за барањето, ефективно доведувајќи ги најрелевантните документи на врвот на листата.

Моделот за прерангирање, честопати невронска мрежа или архитектура базирана на трансформатор, е специјално обучен да ја процени релевантноста на документот за дадено барање. Со искористување на напредните способности за разбирање природен јазик, реранкерот може да ги долови семантичките нијанси и контекстуалните односи помеѓу барањето и документите, што резултира со попрецизно и порелевантно рангирање.

Придобивките од враќањето во две фази и преранкерите

Усвојувањето на пронаоѓање во две фази со реранкери нуди неколку значајни придобивки во контекст на RAG системите:

  1. Подобрена точност: Со повторно рангирање на првично преземените документи и промовирање на најрелевантните на врвот, системот може да обезбеди попрецизни и попрецизни информации за јазичниот модел, што ќе доведе до генерирани одговори со повисок квалитет.
  2. Ублажени прашања надвор од доменот: Моделите за вградување што се користат за традиционално пребарување често се обучуваат за текстуални корпуси за општа намена, кои можеби не ги опфаќаат адекватно јазик и семантика специфични за доменот. Моделите за прерангирање, од друга страна, може да се обучат за податоци специфични за домен, ублажувајќи го проблемот „надвор од домен“ и подобрувајќи ја релевантноста на преземените документи во специјализираните домени.
  3. Приспособливост: Пристапот во две фази овозможува ефикасно скалирање со користење на брзи и лесни методи за пронаоѓање во почетната фаза, додека го задржува пресметковно поинтензивниот процес на прерангирање за помала подгрупа документи.
  4. флексибилност: Моделите за прерангирање може да се заменат или ажурираат независно од методот на првично пребарување, обезбедувајќи флексибилност и приспособливост на потребите на системот кои се развиваат.

КолБЕРТ: Ефикасна и ефективна доцна интеракција

Еден од најистакнатите модели во областа на прерангирањето е ColBERT (Контекстуализирана доцна интеракција преку БЕРТ). ColBERT е модел за прерангирање документи што ги користи способностите за длабоко разбирање на јазикот на BERT додека воведува нов механизам за интеракција познат како „доцна интеракција“.

ColBERT: Ефикасно и ефикасно пребарување на премин преку контекстуализирана доцна интеракција преку BERT

ColBERT: Ефикасно и ефикасно пребарување на премин преку контекстуализирана доцна интеракција преку BERT

Механизмот за доцна интеракција во ColBERT овозможува ефикасно и прецизно пребарување преку обработка на барањата и документите одделно до последните фази на процесот на пронаоѓање. Поточно, ColBERT независно ги кодира барањето и документот користејќи BERT, а потоа користи лесен, но моќен чекор на интеракција што ја моделира нивната ситно-грануларна сличност. Со одложување, но задржување на оваа ситно-грануларна интеракција, ColBERT може да ја искористи експресивноста на моделите на длабоки јазици додека истовремено стекнува способност за претходно пресметување на претставите на документите офлајн, значително забрзувајќи ја обработката на барањата.

Архитектурата за доцна интеракција на ColBERT нуди неколку придобивки, вклучувајќи подобрена компјутерска ефикасност, приспособливост со големина на собирање документи и практична применливост за сценарија од реалниот свет. Дополнително, ColBERT е дополнително подобрен со техники како што се отфрлен надзор и преостаната компресија (во ColBERTv2), кои го усовршуваат процесот на обука и го намалуваат просторот на моделот додека одржуваат висока ефективност на пронаоѓање.

Овој фрагмент од код покажува како да се конфигурира и користи моделот jina-colbert-v1-en за индексирање на збирка документи, искористувајќи ја неговата способност ефикасно да се справува со долги контексти.

Спроведување на пребарување во две фази со Rerankers

Сега кога ги разбравме принципите зад двостепеното пребарување и реранкерите, ајде да ја истражиме нивната практична имплементација во контекст на системот RAG. Ќе ги искористиме популарните библиотеки и рамки за да ја демонстрираме интеграцијата на овие техники.

Поставување на животната средина

Пред да се нурнеме во кодот, ајде да ја поставиме нашата развојна околина. Ќе користиме Python и неколку популарни NLP библиотеки, вклучувајќи ги Hugging Face Transformers, Sentence Transformers и LanceDB.

# Install required libraries
!pip install datasets huggingface_hub sentence_transformers lancedb

Подготовка на податоци

За демонстративни цели, ќе ја користиме базата на податоци „ai-arxiv-chunked“ од збирки на податоци Hugging Face, која содржи над 400 трудови ArXiv за машинско учење, обработка на природен јазик и големи јазични модели.

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

Следно, ќе ги преобработиме податоците и ќе ги поделиме на помали парчиња за да го олесниме ефикасното пронаоѓање и обработка.

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)
За почетната фаза на пронаоѓање, ќе користиме модел Transformer на реченици за да ги шифрираме нашите документи и барања во густи векторски претстави, а потоа ќе извршиме приближно пребарување на најблискиот сосед користејќи векторска база на податоци како LanceDB.
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)

Со нашите документи индексирани, можеме да го извршиме почетното пребарување со наоѓање на најблиските соседи на даден вектор за барање.

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)

Рерангирање

По првичното пребарување, ќе примениме модел за прерангирање за повторно да ги подредиме преземените документи врз основа на нивната важност за барањето. Во овој пример, ќе го користиме реранкерот ColBERT, брз и прецизен модел базиран на трансформатор специјално дизајниран за рангирање на документи.

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

на reranked_docs списокот сега ги содржи документите кои се пренаредени врз основа на нивната релевантност за барањето, како што е утврдено од страна на реранкерот на ColBERT.

Зголемување и генерирање

Со прерангираните и релевантни документи во рака, можеме да продолжиме до фазите на зголемување и генерирање на гасоводот RAG. Ќе користиме јазичен модел од библиотеката Hugging Face Transformers за да го генерираме конечниот одговор.

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)

Во горенаведениот фрагмент од код, го зголемуваме оригиналното барање со првите три прерангирани документи, создавајќи augmented_query. Потоа го пренесуваме ова зголемено барање на јазичен модел Т5, кој генерира одговор врз основа на дадениот контекст.

на response променливата ќе го содржи конечниот излез, користејќи ги надворешните информации од преземените и прерангираните документи за да обезбеди попрецизен и посеопфатен одговор на оригиналното барање.

Напредни техники и размислувања

Иако имплементацијата што ја опфативме обезбедува солидна основа за интегрирање на двостепено пребарување и преранкери во системот RAG, постојат неколку напредни техники и размислувања кои можат дополнително да ги подобрат перформансите и робусноста на пристапот.

  1. Проширување на барањето: За да ја подобрите почетната фаза на пронаоѓање, можете да употребите техники за проширување на барањето, кои вклучуваат зголемување на оригиналното барање со поврзани термини или фрази. Ова може да помогне да се добие поразновиден сет на потенцијално релевантни документи.
  2. Рерангирање на ансамблот: Наместо да се потпирате на еден модел за прерангирање, можете да комбинирате повеќе реранкери во ансамбл, користејќи ги силните страни на различни модели за да ги подобрите вкупните перформанси.
  3. Фино подесување Реранкери: Додека претходно обучените модели за прерангирање можат да бидат ефективни, нивното прецизно прилагодување на податоци специфични за домен може дополнително да ја подобри нивната способност за снимање на семантика и релевантни сигнали специфични за домен.
  4. Итеративно пребарување и прерангирање: Во некои случаи, едно повторување на пронаоѓање и прерангирање може да не е доволно. Можете да истражувате итеративни пристапи, каде што излезот од јазичниот модел се користи за да се усоврши процесот на барање и пребарување, што доведува до поинтерактивен и динамичен систем.
  5. Балансирање на релевантноста и различноста: Додека реранкерите имаат за цел да ги промовираат најрелевантните документи, од суштинско значење е да се постигне рамнотежа помеѓу релевантноста и различноста. Инкорпорирањето на техники за промовирање на различноста може да помогне да се спречи системот да биде премногу тесен или пристрасен во неговите извори на информации.
  6. Метрика за евалуација: За да ја процените ефективноста на вашиот пристап за пронаоѓање и прерангирање во две фази, ќе треба да дефинирате соодветни метрики за евалуација. Тие може да вклучуваат традиционални показатели за пронаоѓање информации, како што се прецизност, отповикување и среден реципрочен ранг (MRR), како и метрика специфични за задачите приспособени на вашиот случај на употреба.

Заклучок

Retrieval Augmented Generation (RAG) се појави како моќна техника за подобрување на можностите на големите јазични модели преку искористување на надворешни извори на информации. Сепак, традиционалните методи за пронаоѓање често се борат да ги идентификуваат најрелевантните документи, што доведува до неоптимални перформанси.

Враќањето во две фази со реранкери нуди убедливо решение за овој предизвик. Со комбинирање на почетната фаза на брзо пребарување со пософистициран модел на прерангирање, овој пристап може значително да ја подобри точноста и релевантноста на преземените документи, што на крајот ќе доведе до генерирани одговори со повисок квалитет од јазичниот модел.

Изминатите пет години ги поминав потопувајќи се во фасцинантниот свет на машинското учење и длабокото учење. Мојата страст и експертиза ме наведоа да придонесам за над 50 различни проекти за софтверско инженерство, со посебен фокус на AI/ML. Мојата постојана љубопитност, исто така, ме привлече кон Обработка на природни јазици, поле кое јас сум желен да го истражам понатаму.