стуб Моћ реранкера и двостепеног преузимања за проширену генерацију преузимања - Уните.АИ
Повежите се са нама

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

Моћ реранкера и двостепено преузимање за проширену генерацију преузимања

mm
Ажурирано on
Ретриевал Аугментед Генератион

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

У овом чланку расправљамо о замршеностима двостепеног проналажења и поновног рангирања, истражујући њихове основне принципе, стратегије имплементације и предности које нуде у побољшању тачности и ефикасности РАГ система. Такође ћемо обезбедити практичне примере и исечке кода како бисмо илустровали концепте и олакшали дубље разумевање ове најсавременије технике.

Разумевање проширене генерације преузимања (РАГ)

све агент ЛЛМ

Пре него што уђемо у специфичности двостепеног преузимања и поновног рангирања, хајде да се укратко вратимо на концепт проширене генерације преузимања (РАГ). РАГ је техника која проширује знање и могућности великих језичких модела (ЛЛМ) тако што им омогућава приступ екстерним изворима информација, као што су базе података или збирке докумената. Погледајте више из чланка „Дубоко уроњење у проширену генерацију преузимања у ЛЛМ".

Типичан РАГ процес укључује следеће кораке:

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

Иако се РАГ показао као моћна техника, није без изазова. Једно од кључних питања лежи у фази проналажења, где традиционалне методе проналажења можда неће успети да идентификују најрелевантније документе, што доводи до неоптималних или нетачних одговора из језичког модела.

Потреба за двостепеним проналажењем и поновним рангирањем

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

Да би одговорили на овај изазов, истраживачи и практичари су се окренули двостепеном проналажењу са реранкерима. Овај приступ укључује процес у два корака:

  1. Инитиал Ретриевал: У првој фази, релативно велики скуп потенцијално релевантних докумената се преузима коришћењем брзог и ефикасног метода проналажења, као што је модел векторског простора или претрага заснована на кључним речима.
  2. Поновно рангирање: У другој фази, користи се софистициранији модел поновног рангирања како би се првобитно преузети документи променили на основу њихове релевантности за упит, чиме се најрелевантнији документи ефективно доводе на врх листе.

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

Предности двостепеног преузимања и поновног рангирања

Усвајање двостепеног преузимања са реранкерима нуди неколико значајних предности у контексту РАГ система:

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

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

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

ЦолБЕРТ: Ефикасна и ефективна претрага пролаза преко контекстуализоване касне интеракције преко БЕРТ-а

ЦолБЕРТ: Ефикасна и ефективна претрага пролаза преко контекстуализоване касне интеракције преко БЕРТ-а

Механизам касне интеракције у ЦолБЕРТ-у омогућава ефикасно и прецизно проналажење обрадом упита и докумената одвојено до завршних фаза процеса проналажења. Конкретно, ЦолБЕРТ независно кодира упит и документ користећи БЕРТ, а затим користи лагани, али моћни корак интеракције који моделира њихову фино зрнату сличност. Одлагањем али задржавањем ове фино-зрнасте интеракције, ЦолБЕРТ може да искористи експресивност дубоких језичких модела док истовремено добија могућност да унапред израчуна репрезентације докумената ван мреже, значајно убрзавајући обраду упита.

ЦолБЕРТ-ова касна интеракцијска архитектура нуди неколико предности, укључујући побољшану рачунарску ефикасност, скалабилност са величином збирке докумената и практичну применљивост за сценарије из стварног света. Поред тога, ЦолБЕРТ је додатно побољшан техникама као што су надзор без шума и резидуална компресија (у ЦолБЕРТв2), које побољшавају процес обуке и смањују просторни отисак модела уз одржавање високе ефикасности проналажења.

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

Имплементација двостепеног преузимања са Реранкерс

Сада када имамо разумевање принципа који стоје иза двостепеног проналажења и поновног рангирања, хајде да истражимо њихову практичну примену у контексту РАГ система. Користићемо популарне библиотеке и оквире да демонстрирамо интеграцију ових техника.

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

Пре него што заронимо у код, хајде да поставимо наше развојно окружење. Користићемо Питхон и неколико популарних НЛП библиотека, укључујући Хуггинг Фаце Трансформерс, Сентенце Трансформерс и ЛанцеДБ.

# Install required libraries
!pip install datasets huggingface_hub sentence_transformers lancedb

Припрема података

У сврху демонстрације, користићемо скуп података „аи-аркив-цхункед” из скупова података Хуггинг Фаце, који садржи преко 400 АрКсив радова о машинском учењу, обради природног језика и великим језичким моделима.

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)
За почетну фазу преузимања, користићемо модел Сентенце Трансформер да кодирамо наше документе и упите у густе векторске репрезентације, а затим извршимо приближну претрагу најближег суседа користећи векторску базу података као што је ЛанцеДБ.
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)

Поновно рангирање

Након иницијалног преузимања, користићемо модел поновног рангирања да променимо редослед преузетих докумената на основу њихове релевантности за упит. У овом примеру, користићемо ЦолБЕРТ реранкер, брз и прецизан модел заснован на трансформатору посебно дизајниран за рангирање докумената.

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

reranked_docs листа сада садржи документе који су промењени на основу њихове релевантности за упит, како је одредио ЦолБЕРТ реранкер.

Повећање и генерисање

Са поново рангираним и релевантним документима у руци, можемо прећи на фазе повећања и генерисања РАГ цевовода. Користићемо модел језика из библиотеке Хуггинг Фаце Трансформерс да генеришемо коначни одговор.

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 променљива ће садржати коначни резултат, користећи екстерне информације из преузетих и поново рангираних докумената како би се пружио тачнији и свеобухватнији одговор на оригинални упит.

Напредне технике и разматрања

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

  1. Проширење упита: Да бисте побољшали почетну фазу преузимања, можете користити технике проширења упита, које укључују допуну оригиналног упита сродним терминима или фразама. Ово може помоћи у проналажењу разноврснијег скупа потенцијално релевантних докумената.
  2. Енсембле Реранкинг: Уместо да се ослањате на један модел прерангирања, можете комбиновати више реранкера у ансамбл, користећи предности различитих модела да бисте побољшали укупне перформансе.
  3. Фино подешавање Реранкерс: Док унапред обучени модели прерангирања могу бити ефикасни, њихово фино подешавање на подацима специфичним за домен може додатно побољшати њихову способност да хватају семантику специфичне за домен и сигнале релевантности.
  4. Итеративно проналажење и поновно рангирање: У неким случајевима, једна итерација преузимања и поновног рангирања можда неће бити довољна. Можете истражити итеративне приступе, где се излаз језичког модела користи за прецизирање процеса упита и проналажења, што доводи до интерактивнијег и динамичнијег система.
  5. Балансирање релевантности и разноликости: Док реранкери имају за циљ да промовишу најрелевантније документе, од суштинске је важности да се успостави равнотежа између релевантности и различитости. Укључивање техника за промовисање разноликости може помоћи да се спречи да систем буде претерано узак или пристрасан у својим изворима информација.
  6. Евалуатион Метрицс: Да бисте проценили ефикасност вашег приступа у две фазе проналажења и поновног рангирања, мораћете да дефинишете одговарајуће метрике евалуације. Оне могу укључивати традиционалне метрике за проналажење информација као што су прецизност, опозив и средњи реципрочни ранг (МРР), као и метрике специфичне за задатак прилагођене вашем случају употребе.

Zakljucak

Проширено генерисање проналажења (РАГ) се појавило као моћна техника за побољшање способности великих језичких модела коришћењем екстерних извора информација. Међутим, традиционалне методе проналажења често се боре да идентификују најрелевантније документе, што доводи до неоптималних перформанси.

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

Провео сам последњих пет година урањајући се у фасцинантан свет машинског учења и дубоког учења. Моја страст и стручност довели су ме до тога да допринесем преко 50 различитих пројеката софтверског инжењеринга, са посебним фокусом на АИ/МЛ. Моја стална радозналост ме је такође привукла ка обради природног језика, пољу које желим даље да истражујем.