кочан Силата на Rerankers и двуетапно извличане за разширено генериране на извличане - Unite.AI
Свържете се с нас

Изкуствен общ интелект

Мощност на Rerankers и двуетапно извличане за разширено генериране на извличане

mm
Обновено on
Разширено генериране на извличане

Когато става въпрос за обработка на естествен език (NLP) и извличане на информация, способността за ефективно и точно извличане на подходяща информация е от първостепенно значение. Тъй като полето продължава да се развива, се разработват нови техники и методологии за подобряване на ефективността на системите за извличане, особено в контекста на Разширено генериране на извличане (РАГ). Една такава техника, известна като двуетапно извличане с преранжиране, се очертава като мощно решение за справяне с присъщите ограничения на традиционните методи за извличане.

В тази статия обсъждаме тънкостите на двуетапното извличане и прекласиране, като изследваме техните основни принципи, стратегии за внедряване и ползите, които предлагат за подобряване на точността и ефективността на RAG системите. Ние също така ще предоставим практически примери и кодови фрагменти, за да илюстрираме концепциите и да улесним по-задълбочено разбиране на тази авангардна техника.

Разбиране на Retrieval Augmented Generation (RAG)

шведски агент LLM

Преди да се потопим в спецификата на двуетапното извличане и повторно класиране, нека преразгледаме накратко концепцията за Retrieval Augmented Generation (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: Ефикасно и ефективно търсене на пасажи чрез контекстуализирано късно взаимодействие през BERT

Механизмът за късно взаимодействие в ColBERT позволява ефективно и прецизно извличане чрез обработка на заявки и документи отделно до финалните етапи на процеса на извличане. По-конкретно, ColBERT независимо кодира заявката и документа с помощта на BERT и след това използва лека, но мощна стъпка на взаимодействие, която моделира тяхното фино сходство. Чрез забавяне, но запазване на това фино взаимодействие, ColBERT може да използва изразителността на дълбоките езикови модели, като същевременно придобива способността за предварително изчисляване на представяния на документи офлайн, което значително ускорява обработката на заявките.

Архитектурата за късно взаимодействие на ColBERT предлага няколко предимства, включително подобрена изчислителна ефективност, мащабируемост с размера на колекцията от документи и практическа приложимост за сценарии от реалния свят. Освен това ColBERT е допълнително подобрен с техники като обезшумяване на наблюдение и остатъчна компресия (в ColBERTv2), които прецизират процеса на обучение и намаляват пространството на модела, като същевременно поддържат висока ефективност на извличане.

Този кодов фрагмент демонстрира как да конфигурирате и използвате модела jina-colbert-v1-en за индексиране на колекция от документи, използвайки способността му да обработва ефективно дълги контексти.

Внедряване на двуетапно извличане с повторно класиране

Сега, след като разбираме принципите зад двуетапно извличане и прекласиране, нека проучим тяхното практическо прилагане в контекста на 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 Datasets, който съдържа над 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)
За началния етап на извличане ще използваме модел на преобразувател на изречения, за да кодираме нашите документи и заявки в плътни векторни представяния и след това ще извършим приблизително търсене на най-близки съседи, използвайки векторна база данни като 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 reranker, бърз и точен модел, базиран на трансформатор, специално проектиран за класиране на документи.

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

- reranked_docs списъкът вече съдържа документите, пренаредени въз основа на тяхната релевантност към заявката, както е определено от ColBERT reranker.

Увеличаване и генериране

С пренаредените и съответните документи в ръка, можем да продължим към етапите на увеличаване и генериране на 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. След това предаваме тази разширена заявка на езиков модел T5, който генерира отговор въз основа на предоставения контекст.

- response променливата ще съдържа крайния изход, като използва външната информация от извлечените и прекласирани документи, за да предостави по-точен и изчерпателен отговор на оригиналната заявка.

Усъвършенствани техники и съображения

Докато изпълнението, което разгледахме, осигурява солидна основа за интегриране на двуетапно извличане и прекласиране в RAG система, има няколко усъвършенствани техники и съображения, които могат допълнително да подобрят производителността и устойчивостта на подхода.

  1. Разширяване на заявката: За да подобрите началния етап на извличане, можете да използвате техники за разширяване на заявката, които включват разширяване на оригиналната заявка със свързани термини или фрази. Това може да помогне за извличането на по-разнообразен набор от потенциално подходящи документи.
  2. Прекласиране на ансамбъла: Вместо да разчитате на един модел за прекласиране, можете да комбинирате множество прекласатори в ансамбъл, използвайки силните страни на различни модели, за да подобрите цялостното представяне.
  3. Фина настройка на Rerankers: Докато предварително обучените модели за прекласиране могат да бъдат ефективни, фината им настройка върху специфични за домейн данни може допълнително да подобри способността им да улавят специфична за домейна семантика и сигнали за уместност.
  4. Итеративно извличане и прекласиране: В някои случаи едно повторение на извличане и прекласиране може да не е достатъчно. Можете да изследвате итеративни подходи, при които изходът от езиковия модел се използва за прецизиране на процеса на заявка и извличане, което води до по-интерактивна и динамична система.
  5. Балансиране на уместност и разнообразие: Въпреки че прекласаторите имат за цел да популяризират най-подходящите документи, важно е да се постигне баланс между уместност и разнообразие. Включването на техники за насърчаване на разнообразието може да помогне за предотвратяване на системата да бъде прекалено тясна или пристрастна по отношение на източниците на информация.
  6. Метрики за оценка: За да оцените ефективността на вашия двуетапен подход за извличане и прекласиране, ще трябва да дефинирате подходящи показатели за оценка. Те могат да включват традиционни показатели за извличане на информация като прецизност, припомняне и среден реципрочен ранг (MRR), както и специфични за задачата показатели, съобразени с вашия случай на употреба.

Заключение

Retrieval Augmented Generation (RAG) се появи като мощна техника за подобряване на възможностите на големи езикови модели чрез използване на външни източници на информация. Традиционните методи за извличане обаче често се затрудняват да идентифицират най-подходящите документи, което води до неоптимална производителност.

Двуетапното извличане с прекласатори предлага убедително решение на това предизвикателство. Чрез комбиниране на начален етап на бързо извличане с по-сложен модел на прекласиране, този подход може значително да подобри точността и уместността на извлечените документи, което в крайна сметка води до по-висококачествени генерирани отговори от езиковия модел.

Прекарах последните пет години, потапяйки се в завладяващия свят на машинното обучение и дълбокото обучение. Моята страст и опит ме накараха да допринеса за над 50 различни проекта за софтуерно инженерство, със специален фокус върху AI/ML. Продължаващото ми любопитство също ме насочи към обработката на естествен език, област, която нямам търпение да проуча по-нататък.