Linapokuja suala la usindikaji wa lugha asilia (NLP) na urejeshaji wa habari, uwezo wa kupata habari muhimu kwa ufanisi na kwa usahihi ni muhimu. Kadiri nyanja inavyoendelea kubadilika, mbinu na mbinu mpya zinatengenezwa ili kuboresha utendaji wa mifumo ya urejeshaji, hasa katika muktadha wa Retrieval Augmented Generation (RAG). Mbinu moja kama hiyo, inayojulikana kama urejeshaji wa hatua mbili kwa wanaonunua upya, imeibuka kama suluhu yenye nguvu ya kushughulikia vikwazo vya asili vya mbinu za jadi za kurejesha.
Katika makala haya tunajadili ugumu wa urejeshaji na urejeshaji wa hatua mbili, kuchunguza kanuni zao za msingi, mikakati ya utekelezaji, na manufaa wanayotoa katika kuimarisha usahihi na ufanisi wa mifumo ya RAG. Pia tutatoa mifano ya vitendo na vijisehemu vya msimbo ili kuonyesha dhana na kuwezesha uelewa wa kina wa mbinu hii ya kisasa.
Kuelewa Urejeshaji Kizazi Kilichoongezwa (RAG)
Kabla ya kupiga mbizi katika maelezo mahususi ya urejeshaji wa hatua mbili na viboreshaji upya, hebu tupitie tena kwa ufupi dhana ya Urejeshaji Kizazi Kilichoongezwa (RAG). RAG ni mbinu inayopanua maarifa na uwezo wa miundo mikubwa ya lugha (LLMs) kwa kuwapa ufikiaji wa vyanzo vya habari vya nje, kama vile hifadhidata au mkusanyiko wa hati. Rejelea zaidi kutoka kwa kifungu "Kuzama kwa Kina katika Urejeshaji wa Kizazi Kilichoongezwa katika LLM".
Mchakato wa kawaida wa RAG unajumuisha hatua zifuatazo:
- Query: Mtumiaji anauliza swali au anatoa maagizo kwa mfumo.
- Rudisha: Mfumo huulizia hifadhidata ya vekta au mkusanyiko wa hati ili kupata taarifa muhimu kwa swali la mtumiaji.
- ongezeko: Maelezo yaliyorejeshwa yanajumuishwa na swali au maagizo asilia ya mtumiaji.
- Kizazi: Muundo wa lugha huchakata ingizo lililoboreshwa na kutoa mwitikio, kwa kutumia maelezo ya nje ili kuimarisha usahihi na mapana wa matokeo yake.
Ingawa RAG imethibitisha kuwa mbinu yenye nguvu, haikosi changamoto zake. Mojawapo ya masuala muhimu iko katika hatua ya kurejesha, ambapo mbinu za jadi za kurejesha zinaweza kushindwa kutambua nyaraka muhimu zaidi, na kusababisha majibu madogo au yasiyo sahihi kutoka kwa mtindo wa lugha.
Haja ya Urejeshaji wa Hatua Mbili na Uwekaji Upya
Mbinu za jadi za kurejesha, kama vile zile zinazolingana na maneno muhimu au miundo ya nafasi ya vekta, mara nyingi hutatizika kunasa uhusiano wa kimaana kati ya hoja na hati. Kizuizi hiki kinaweza kusababisha urejeshaji wa hati ambazo zinafaa kijuujuu tu au zinazokosa taarifa muhimu ambazo zinaweza kuboresha kwa kiasi kikubwa ubora wa majibu yanayotolewa.
Ili kukabiliana na changamoto hii, watafiti na watendaji wamegeukia urejeshaji wa hatua mbili na wasafishaji. Mbinu hii inajumuisha mchakato wa hatua mbili:
- Urejeshaji wa Awali: Katika hatua ya kwanza, seti kubwa kiasi ya hati zinazoweza kufaa hutolewa kwa kutumia mbinu ya urejeshaji haraka na bora, kama vile muundo wa nafasi ya vekta au utafutaji unaotegemea manenomsingi.
- Kuweka upya nafasi: Katika hatua ya pili, muundo wa kisasa zaidi wa kupanga upya unatumiwa kupanga upya hati zilizorejeshwa kwa kuzingatia umuhimu wake kwa hoja, na kuleta hati muhimu zaidi juu ya orodha.
Muundo wa kupanga upya, mara nyingi mtandao wa neva au usanifu wa msingi wa kibadilishaji, umefunzwa mahususi kutathmini umuhimu wa hati kwa hoja fulani. Kwa kutumia uwezo wa hali ya juu wa uelewaji wa lugha asilia, mpangaji upya anaweza kunasa nuances za kisemantiki na uhusiano wa kimuktadha kati ya hoja na hati, na kusababisha nafasi sahihi na inayofaa zaidi.
Manufaa ya Urejeshaji wa Hatua Mbili na Uwekaji Upya
Kupitishwa kwa urejeshaji wa hatua mbili na warekebishaji hutoa faida kadhaa muhimu katika muktadha wa mifumo ya RAG:
- Usahihi ulioboreshwa: Kwa kupanga upya hati zilizorejeshwa hapo awali na kuzipandisha zile zinazofaa zaidi hadi juu, mfumo unaweza kutoa taarifa sahihi na sahihi zaidi kwa muundo wa lugha, na hivyo kusababisha majibu yanayotokana na ubora wa juu zaidi.
- Masuala ya Nje ya Kikoa Yaliyopunguzwa: Miundo ya upachikaji inayotumiwa kurejesha urejeshaji wa kitamaduni mara nyingi hufunzwa kuhusu muundo wa maandishi wa madhumuni ya jumla, ambayo huenda isichukue vya kutosha lugha na semantiki mahususi za kikoa. Miundo ya kupanga upya, kwa upande mwingine, inaweza kufunzwa kwenye data mahususi ya kikoa, kupunguza tatizo la "nje ya kikoa" na kuboresha umuhimu wa hati zilizorejeshwa ndani ya vikoa maalum.
- Uwezeshaji: Mbinu ya hatua mbili inaruhusu kuongeza ufanisi kwa kutumia mbinu za kurejesha haraka na nyepesi katika hatua ya awali, huku ikihifadhi mchakato wa kina zaidi wa kupanga upya nafasi kwa kundi ndogo la hati.
- Kubadilika: Miundo ya kupanga upya inaweza kubadilishwa au kusasishwa bila kuzingatia mbinu ya awali ya kurejesha, kutoa kunyumbulika na kubadilika kulingana na mahitaji yanayoendelea ya mfumo.
ColBERT: Mwingiliano Ufanisi na Ufanisi wa Marehemu
Mojawapo ya mifano bora katika uwanja wa kupanga upya ni ColBERT (Muktadha Muingiliano wa Marehemu juu ya BERT) ColBERT ni kielelezo cha kurekebisha hati ambacho huongeza uwezo wa kuelewa lugha kwa kina wa BERT wakati wa kutambulisha utaratibu mpya wa mwingiliano unaojulikana kama "mwingiliano wa marehemu."
ColBERT: Utafutaji wa Kifungu Ulio Bora na Ufanisi kupitia Mwingiliano wa Marehemu wa Muktadha juu ya BERT
Utaratibu wa mwingiliano wa marehemu katika ColBERT huruhusu urejeshaji kwa ufanisi na kwa usahihi kwa kuchakata hoja na hati kando hadi hatua za mwisho za mchakato wa kurejesha. Hasa, ColBERT husimba hoja na hati kwa kujitegemea kwa kutumia BERT, na kisha hutumia hatua nyepesi lakini yenye nguvu ya mwingiliano inayoonyesha ufanano wao wa hali ya juu. Kwa kuchelewesha lakini kudumisha mwingiliano huu mzuri, ColBERT inaweza kuongeza uwazi wa miundo ya lugha ya kina huku wakati huo huo ikipata uwezo wa kukokotoa uwasilishaji wa hati nje ya mtandao, na hivyo kuharakisha uchakataji wa hoja.
Usanifu wa marehemu wa mwingiliano wa ColBERT hutoa manufaa kadhaa, ikiwa ni pamoja na utendakazi ulioboreshwa wa ukokotoaji, upanuzi na ukubwa wa ukusanyaji wa hati, na utumiaji wa kimatendo kwa matukio ya ulimwengu halisi. Zaidi ya hayo, ColBERT imeimarishwa zaidi kwa mbinu kama vile usimamizi wa denoised na ukandamizaji wa mabaki (katika ColBERTv2), ambayo huboresha mchakato wa mafunzo na kupunguza alama ya nafasi ya mfano huku ikidumisha ufanisi wa juu wa kurejesha.
Kijisehemu hiki cha msimbo kinaonyesha jinsi ya kusanidi na kutumia modeli ya jina-colbert-v1-en kwa kuorodhesha mkusanyiko wa hati, ikitumia uwezo wake wa kushughulikia miktadha mirefu kwa ufanisi.
Utekelezaji wa Urejeshaji wa Hatua Mbili na Wakaaji Upya
Kwa kuwa sasa tuna uelewa wa kanuni za urejeshaji na urejeshaji wa hatua mbili, hebu tuchunguze utekelezaji wao wa vitendo ndani ya muktadha wa mfumo wa RAG. Tutatumia maktaba na mifumo maarufu ili kuonyesha ujumuishaji wa mbinu hizi.
Kuweka Mazingira
Kabla hatujaingia kwenye kanuni, hebu tuweke mazingira yetu ya maendeleo. Tutakuwa tukitumia Python na maktaba kadhaa maarufu za NLP, ikiwa ni pamoja na Hugging Face Transformers, Sentence Transformers, na LanceDB.
# Install required libraries
!pip install datasets huggingface_hub sentence_transformers lancedb
Maandalizi ya Data
Kwa madhumuni ya onyesho, tutatumia seti ya data ya “ai-arxiv-chunked” kutoka Hugging Face Datasets, ambayo ina zaidi ya karatasi 400 za ArXiv kuhusu kujifunza kwa mashine, kuchakata lugha asilia na miundo mikubwa ya lugha.
from datasets import load_dataset
dataset = load_dataset("jamescalam/ai-arxiv-chunked", split="train")
<pre>
Kisha, tutatayarisha data mapema na kuigawanya katika vipande vidogo ili kuwezesha urejeshaji na uchakataji kwa ufanisi.
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)
Kwa hatua ya awali ya urejeshaji, tutatumia kigezo cha Kibadilishaji Sentensi kusimba hati na hoja zetu katika viwakilishi vya vekta mnene, na kisha kufanya utafutaji wa karibu wa jirani kwa kutumia hifadhidata ya vekta kama 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)
Hati zetu zikiwa zimeorodheshwa, tunaweza kufanya urejeshaji wa awali kwa kutafuta majirani wa karibu kwa vekta ya hoja.
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)
Kuweka upya nafasi
Baada ya urejeshaji wa awali, tutatumia muundo wa kupanga upya kupanga upya hati zilizorejeshwa kulingana na umuhimu wao kwa hoja. Katika mfano huu, tutatumia kipanga upya cha ColBERT, kielelezo cha haraka na sahihi cha kibadilishaji kilichoundwa mahususi kwa ajili ya cheo cha hati.
from lancedb.rerankers import ColbertReranker
reranker = ColbertReranker()
# Rerank initial documents
reranked_docs = reranker.rerank(query, initial_docs)
The reranked_docs
list sasa ina hati zilizopangwa upya kulingana na umuhimu wake kwa hoja, kama ilivyobainishwa na mpangaji upya wa ColBERT.
Ongezeko na Kizazi
Tukiwa na hati zilizopangwa upya na zinazofaa mkononi, tunaweza kuendelea na hatua za uongezaji na uzalishaji wa bomba la RAG. Tutatumia muundo wa lugha kutoka maktaba ya Hugging Face Transformers ili kutoa jibu la mwisho.
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)