Nuair a thig e gu giollachd cànain nàdarra (NLP) agus lorg fiosrachaidh, tha comas air fiosrachadh buntainneach fhaighinn air ais gu h-èifeachdach agus gu ceart air leth cudromach. Mar a tha an raon a’ leantainn air adhart a’ tighinn air adhart, thathas a’ leasachadh dhòighean agus dhòighean-obrach ùra gus coileanadh shiostaman lorg àrdachadh, gu sònraichte ann an co-theacsa Ginealach Meudaichte Ath-ghairm (RAG). Tha aon innleachd den leithid, ris an canar ath-lorg dà-ìre le ath-rangaichean, air nochdadh mar fhuasgladh cumhachdach gus dèiligeadh ri crìochan gnèitheach dòighean trusaidh traidiseanta.
San artaigil seo bruidhnidh sinn mu cho iom-fhillte ‘s a tha ath-ghairm dà-ìre agus ath-rangachadh, a’ sgrùdadh am prionnsapalan bunaiteach, ro-innleachdan buileachaidh, agus na buannachdan a tha iad a’ tabhann ann a bhith ag àrdachadh cruinneas agus èifeachdas siostaman RAG. Bheir sinn cuideachd seachad eisimpleirean practaigeach agus criomagan còd gus na bun-bheachdan a nochdadh agus gus tuigse nas doimhne fhaighinn air an dòigh ùr-nodha seo.
A’ tuigsinn Ginealach Meudaichte Ath-ghairm (RAG)
Mus tèid sinn a-steach do na mion-fhiosrachadh mu ath-lorg dà-ìre agus ath-rangachadh, leig dhuinn sùil a thoirt a-rithist air bun-bheachd Ginealach Meudaichte Ath-lorg (RAG). Is e dòigh-obrach a th’ ann an RAG a leudaicheas eòlas agus comasan mhodalan cànain mòra (LLMn) le bhith a’ toirt dhaibh cothrom air tobraichean fiosrachaidh bhon taobh a-muigh, leithid stòran-dàta no cruinneachaidhean sgrìobhainnean. Thoir barrachd iomradh bhon artaigil “Dàibheadh domhainn a-steach do ghinealach nas motha fhaighinn air ais ann an LLM".
Tha am pròiseas RAG àbhaisteach a’ toirt a-steach na ceumannan a leanas:
- Ceist: Bidh cleachdaiche a’ togail ceist no a’ toirt stiùireadh don t-siostam.
- Togail: Bidh an siostam a’ ceasnachadh stòr-dàta vector no cruinneachadh sgrìobhainnean gus fiosrachadh a lorg a bhuineas do cheist an neach-cleachdaidh.
- meudachadh: Tha am fiosrachadh a chaidh fhaighinn air ais air a chur còmhla ri ceist no stiùireadh tùsail a’ chleachdaiche.
- Ginealach: Bidh am modail cànain a’ pròiseasadh an in-chur leasaichte agus a’ gineadh freagairt, a’ cleachdadh an fhiosrachaidh bhon taobh a-muigh gus cruinneas agus coileantachd an toraidh aige a neartachadh.
Ged a tha RAG air a bhith na dhòigh cumhachdach, chan ann às aonais na dùbhlain a tha ann. Tha aon de na prìomh chùisean na laighe aig ìre ath-lorg, far am faodadh dòighean trusaidh traidiseanta fàiligeadh air na sgrìobhainnean as iomchaidh a chomharrachadh, a’ leantainn gu freagairtean neo-iomchaidh no mearachdach bhon mhodail cànain.
An Fheum air Ath-lorg Dà-ìre agus Ath-chlàran
Bidh dòighean trusaidh traidiseanta, leithid an fheadhainn a tha stèidhichte air maids prìomh fhaclan no modalan fànais feòir, gu tric a’ strì gus na dàimhean semantach adhartach eadar ceistean agus sgrìobhainnean a ghlacadh. Faodaidh an cuingeachadh seo leantainn gu bhith a’ faighinn air ais sgrìobhainnean nach eil ach buntainneach air uachdar no ag ionndrainn fiosrachadh deatamach a dh’ fhaodadh càileachd an fhreagairt a chaidh a chruthachadh a leasachadh gu mòr.
Gus dèiligeadh ris an dùbhlan seo, tha luchd-rannsachaidh agus cleachdaichean air tionndadh gu ath-lorg dà-ìre le ath-rangaichean. Tha an dòigh-obrach seo a 'gabhail a-steach pròiseas dà-cheum:
- Ath-ghairm tùsail: Anns a’ chiad ìre, gheibhear seata coimeasach mòr de sgrìobhainnean a dh’ fhaodadh a bhith buntainneach le bhith a’ cleachdadh dòigh lorgaidh luath is èifeachdach, leithid modal fànais vectar no rannsachadh stèidhichte air prìomh fhacal.
- Ath-rangachadh: Anns an dàrna ìre, thathas a’ cleachdadh modal ath-rangachaidh nas ionnsaichte gus na sgrìobhainnean a chaidh fhaighinn air ais an toiseach ath-òrdachadh a rèir am buntainneachd don cheist, gu h-èifeachdach a’ toirt na sgrìobhainnean as iomchaidh gu mullach na liosta.
Tha am modail ath-rangachaidh, gu tric lìonra neural no ailtireachd stèidhichte air cruth-atharrachaidh, air a thrèanadh gu sònraichte gus iomchaidheachd sgrìobhainn do cheist shònraichte a mheasadh. Le bhith a’ faighinn buannachd bho chomasan tuigse cànain nàdarra adhartach, faodaidh an t-ath-rangaiche na nuances semantach agus na dàimhean co-theacsail eadar a’ cheist agus na sgrìobhainnean a ghlacadh, a’ leantainn gu rangachadh nas cruinne agus nas iomchaidh.
Buannachdan Ath-ghairm Dà-ìre agus Ath-chlàran
Tha gabhail ri ath-lorg dà-ìre le ath-rangaichean a’ tabhann grunn bhuannachdan cudromach ann an co-theacs siostaman RAG:
- Cruinneas nas fheàrr: Le bhith ag ath-rangachadh nan sgrìobhainnean a chaidh fhaighinn air ais an toiseach agus ag adhartachadh an fheadhainn as buntainniche chun mhullach, faodaidh an siostam fiosrachadh nas cruinne agus nas mionaidiche a thoirt don mhodail cànain, a’ leantainn gu freagairtean de chàileachd nas àirde.
- Cùisean Taobh a-muigh an Fhearainn air an lasachadh: Gu tric bidh modalan in-ghabhail a thathas a’ cleachdadh airson lorg traidiseanta air an trèanadh air corpora teacsa coitcheann, a dh’ fhaodadh nach eil iad a’ glacadh cànan agus semantics a tha sònraichte don àrainn. Air an làimh eile, faodar modalan ath-rangachadh a thrèanadh air dàta a tha sònraichte don raon, a’ lughdachadh na duilgheadas “taobh a-muigh an àrainn” agus a’ leasachadh iomchaidheachd sgrìobhainnean a chaidh fhaighinn air ais taobh a-staigh raointean sònraichte.
- Neo-eisimeileachd: Tha an dòigh-obrach dà-ìre a’ ceadachadh sgèileadh èifeachdach le bhith a’ cleachdadh dhòighean trusaidh luath is aotrom aig a’ chiad ìre, agus aig an aon àm a’ gleidheadh a’ phròiseas ath-rangachaidh nas dian a thaobh àireamhachd airson fo-sheata de sgrìobhainnean.
- sùbailteachd: Faodar modalan ath-rangachadh a bhith air an atharrachadh no air an ùrachadh gu neo-eisimeileach bhon chiad dhòigh trusaidh, a’ toirt sùbailteachd agus sùbailteachd a rèir feumalachdan mean-fhàs an t-siostaim.
ColBERT: Eadar-obrachadh fadalach èifeachdach agus èifeachdach
Is e aon de na modalan seasamh a-mach ann an raon ath-rangachadh ColBERT (Eadar-obrachadh fadalach co-theacsail thairis air BERT). Tha ColBERT na mhodail ath-chlàradh sgrìobhainnean a bhios a’ cleachdadh comasan tuigse cànain domhainn BERT fhad ‘s a tha e a’ toirt a-steach inneal eadar-obrachaidh ùr-nodha ris an canar “eadar-obrachadh fadalach.”
ColBERT: Rannsachadh Slighe Èifeachdach is Èifeachdach tro eadar-obrachadh fadalach le co-theacsa thairis air BERT
Tha an uidheamachd eadar-obrachaidh fadalach ann an ColBERT a’ ceadachadh lorg èifeachdach agus mionaideach le bhith a’ giullachd cheistean agus sgrìobhainnean fa leth gu na h-ìrean deireannach den phròiseas trusaidh. Gu sònraichte, bidh ColBERT gu neo-eisimeileach a’ còdachadh na ceiste agus an sgrìobhainn a’ cleachdadh BERT, agus an uairsin a’ cleachdadh ceum eadar-obrachaidh aotrom ach cumhachdach a bhios a’ modaladh an coltas grinn. Le bhith a’ cur dàil air ach a’ cumail an eadar-obrachaidh ghrinn seo, faodaidh ColBERT luathsachadh a dhèanamh air faireachdainneachd mhodalan cànain domhainn agus aig an aon àm a’ faighinn comas air riochdachaidhean sgrìobhainnean ro-làimh far-loidhne, a’ luathachadh giullachd cheistean gu mòr.
Tha ailtireachd eadar-obrachaidh fadalach ColBERT a’ tabhann grunn bhuannachdan, a ’toirt a-steach èifeachdas coimpiutaireachd nas fheàrr, scalability le meud cruinneachadh sgrìobhainnean, agus iomchaidheachd practaigeach airson suidheachaidhean fìor. A bharrachd air an sin, chaidh ColBERT a leasachadh nas motha le dòighean-obrach leithid stiùireadh diùltadh agus teannachadh fuigheall (ann an ColBERTv2), a bhios ag ùrachadh a’ phròiseas trèanaidh agus a lughdaicheas lorg-fànais a’ mhodail agus aig an aon àm a’ cumail suas èifeachdas trusaidh àrd.
Tha an criomag còd seo a’ sealltainn mar a rèiticheas agus a chleachdas tu am modal jina-colbert-v1-en airson cruinneachadh de sgrìobhainnean a chlàradh, a’ faighinn buannachd às a chomas air co-theacsan fada a làimhseachadh gu h-èifeachdach.
A’ buileachadh Dà Ìre Ath-lorg le Rerankers
A-nis gu bheil tuigse againn air na prionnsapalan air cùl ath-ghairm dà-ìre agus ath-rangachadh, leig dhuinn sgrùdadh a dhèanamh air an cur an gnìomh practaigeach taobh a-staigh co-theacsa siostam RAG. Luasaichidh sinn leabharlannan agus frèaman mòr-chòrdte gus amalachadh nan dòighean sin a nochdadh.
Àrainneachd a stèidheachadh
Mus tèid sinn a-steach don chòd, leig dhuinn ar n-àrainneachd leasachaidh a stèidheachadh. Bidh sinn a’ cleachdadh Python agus grunn leabharlannan NLP mòr-chòrdte, nam measg Hugging Face Transformers, Sentence Transformers, agus LanceDB.
# Install required libraries
!pip install datasets huggingface_hub sentence_transformers lancedb
Ullachadh dàta
Airson adhbharan taisbeanaidh, cleachdaidh sinn an dàta “ai-arxiv-chunked” bho Hugging Face Datasets, anns a bheil còrr air 400 pàipear ArXiv air ionnsachadh innealan, giollachd cànain nàdarra, agus modalan cànain mòra.
from datasets import load_dataset
dataset = load_dataset("jamescalam/ai-arxiv-chunked", split="train")
<pre>
An ath rud, nì sinn ro-phròiseasadh air an dàta agus roinnidh sinn e ann am pìosan nas lugha gus a bhith comasach air lorg agus giullachd èifeachdach.
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)
Airson a’ chiad ìre lorgaidh, cleachdaidh sinn modal Sentence Transformer gus na sgrìobhainnean agus na ceistean againn a chòdachadh gu riochdachaidhean dùmhail vectar, agus an uairsin dèan sgrùdadh tuairmseach air na nàbaidhean as fhaisge a’ cleachdadh stòr-dàta vector mar 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)
Le na sgrìobhainnean againn air an clàradh, is urrainn dhuinn a’ chiad ath-lorg a dhèanamh le bhith a’ lorg nan nàbaidhean as fhaisge air vectar ceist sònraichte.
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)
Ath-rangachadh
Às deidh an lorg tùsail, cleachdaidh sinn modal ath-rangachaidh gus na sgrìobhainnean a fhuaradh ath-òrdachadh a rèir am buntainneachd don cheist. San eisimpleir seo, cleachdaidh sinn an ColBERT reranker, modal luath agus ceart stèidhichte air cruth-atharrachaidh a chaidh a dhealbhadh gu sònraichte airson rangachadh sgrìobhainnean.
from lancedb.rerankers import ColbertReranker
reranker = ColbertReranker()
# Rerank initial documents
reranked_docs = reranker.rerank(query, initial_docs)
Tha reranked_docs
liosta a-nis tha na sgrìobhainnean air an ath-òrdachadh stèidhichte air am buntainneachd don cheist, mar a chaidh a dhearbhadh leis an ath-rangachadh ColBERT.
Meudachadh agus Ginealach
Leis na sgrìobhainnean ath-ainmichte agus buntainneach nar làimh, is urrainn dhuinn a dhol air adhart gu ìrean àrdachadh is ginealach loidhne-phìoban RAG. Cleachdaidh sinn modal cànain bhon leabharlann Hugging Face Transformers gus am freagairt mu dheireadh a ghineadh.
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)