Συνδεθείτε μαζί μας

Power of Rerankers και ανάκτηση δύο σταδίων για ανάκτηση επαυξημένης γενιάς

Τεχνητή Γενική Νοημοσύνη

Power of Rerankers και ανάκτηση δύο σταδίων για ανάκτηση επαυξημένης γενιάς

mm
Ανάκτηση επαυξημένης γενιάς

Όταν πρόκειται για επεξεργασία φυσικής γλώσσας (NLP) και ανάκτηση πληροφοριών, η ικανότητα αποτελεσματικής και ακριβούς ανάκτησης σχετικών πληροφοριών είναι υψίστης σημασίας. Καθώς το πεδίο συνεχίζει να εξελίσσεται, νέες τεχνικές και μεθοδολογίες αναπτύσσονται για τη βελτίωση της απόδοσης των συστημάτων ανάκτησης, ιδιαίτερα στο πλαίσιο Ανάκτηση επαυξημένης γενιάς (ΚΟΥΡΕΛΙ). Μια τέτοια τεχνική, γνωστή ως ανάκτηση δύο σταδίων με ανακατατάξεις, έχει εμφανιστεί ως μια ισχυρή λύση για την αντιμετώπιση των εγγενών περιορισμών των παραδοσιακών μεθόδων ανάκτησης.

Σε αυτό το άρθρο συζητάμε τις περιπλοκές της ανάκτησης και της ανακατάταξης δύο σταδίων, διερευνώντας τις βασικές αρχές, τις στρατηγικές υλοποίησης και τα οφέλη που προσφέρουν στη βελτίωση της ακρίβειας και της αποτελεσματικότητας των συστημάτων RAG. Θα παρέχουμε επίσης πρακτικά παραδείγματα και αποσπάσματα κώδικα για να επεξηγήσουμε τις έννοιες και να διευκολύνουμε τη βαθύτερη κατανόηση αυτής της τεχνικής αιχμής.

Κατανόηση της επαυξημένης γενιάς ανάκτησης (RAG)

swe agent LLM

Πριν βουτήξουμε στις ιδιαιτερότητες της ανάκτησης δύο σταδίων και των ανακατατάξεων, ας επανεξετάσουμε εν συντομία την έννοια της Αυξημένης Γενιάς Ανάκτησης (RAG). Το RAG είναι μια τεχνική που επεκτείνει τις γνώσεις και τις δυνατότητες των μεγάλων γλωσσικών μοντέλων (LLM) παρέχοντάς τους πρόσβαση σε εξωτερικές πηγές πληροφοριών, όπως βάσεις δεδομένων ή συλλογές εγγράφων. Ανατρέξτε περισσότερα από το άρθρο "Μια βαθιά κατάδυση στην επαυξημένη γενιά ανάκτησης στο LLM".

Η τυπική διαδικασία RAG περιλαμβάνει τα ακόλουθα βήματα:

  1. Απορία: Ένας χρήστης θέτει μια ερώτηση ή παρέχει μια οδηγία στο σύστημα.
  2. Ανάκτηση: Το σύστημα ερωτά μια διανυσματική βάση δεδομένων ή συλλογή εγγράφων για να βρει πληροφορίες σχετικές με το ερώτημα του χρήστη.
  3. Αύξηση: Οι πληροφορίες που ανακτήθηκαν συνδυάζονται με το αρχικό ερώτημα ή την οδηγία του χρήστη.
  4. Γενεά: Το μοντέλο γλώσσας επεξεργάζεται την επαυξημένη είσοδο και δημιουργεί μια απόκριση, αξιοποιώντας τις εξωτερικές πληροφορίες για να βελτιώσει την ακρίβεια και την πληρότητα της εξόδου του.

Ενώ το RAG έχει αποδειχθεί μια ισχυρή τεχνική, δεν είναι χωρίς προκλήσεις. Ένα από τα βασικά ζητήματα βρίσκεται στο στάδιο της ανάκτησης, όπου οι παραδοσιακές μέθοδοι ανάκτησης ενδέχεται να αποτύχουν να προσδιορίσουν τα πιο σχετικά έγγραφα, οδηγώντας σε μη βέλτιστες ή ανακριβείς απαντήσεις από το γλωσσικό μοντέλο.

The Need for Two-Stage Retrieval and Rerankers

Οι παραδοσιακές μέθοδοι ανάκτησης, όπως αυτές που βασίζονται σε μοντέλα αντιστοίχισης λέξεων-κλειδιών ή διανυσματικών χώρων, συχνά δυσκολεύονται να καταγράψουν τις διαφοροποιημένες σημασιολογικές σχέσεις μεταξύ ερωτημάτων και εγγράφων. Αυτός ο περιορισμός μπορεί να έχει ως αποτέλεσμα την ανάκτηση εγγράφων που είναι μόνο επιφανειακά σχετικά ή χάνουν κρίσιμες πληροφορίες που θα μπορούσαν να βελτιώσουν σημαντικά την ποιότητα της παραγόμενης απόκρισης.

Για να αντιμετωπίσουν αυτήν την πρόκληση, ερευνητές και επαγγελματίες έχουν στραφεί στην ανάκτηση δύο σταδίων με ανακατατάξεις. Αυτή η προσέγγιση περιλαμβάνει μια διαδικασία δύο σταδίων:

  1. Αρχική Ανάκτηση: Στο πρώτο στάδιο, ανακτάται ένα σχετικά μεγάλο σύνολο δυνητικά σχετικών εγγράφων χρησιμοποιώντας μια γρήγορη και αποτελεσματική μέθοδο ανάκτησης, όπως ένα μοντέλο διανυσματικού χώρου ή μια αναζήτηση που βασίζεται σε λέξεις-κλειδιά.
  2. Ανακατάταξη: Στο δεύτερο στάδιο, χρησιμοποιείται ένα πιο εξελιγμένο μοντέλο ανακατάταξης για την αναδιάταξη των εγγράφων που ανακτήθηκαν αρχικά με βάση τη συνάφειά τους με το ερώτημα, φέρνοντας ουσιαστικά τα πιο σχετικά έγγραφα στην κορυφή της λίστας.

Το μοντέλο ανακατάταξης, συχνά ένα νευρωνικό δίκτυο ή μια αρχιτεκτονική που βασίζεται σε μετασχηματιστή, είναι ειδικά εκπαιδευμένο για την αξιολόγηση της συνάφειας ενός εγγράφου με ένα δεδομένο ερώτημα. Αξιοποιώντας προηγμένες δυνατότητες κατανόησης φυσικής γλώσσας, ο αναβαθμιστής μπορεί να συλλάβει τις σημασιολογικές αποχρώσεις και τις συμφραζόμενες σχέσεις μεταξύ του ερωτήματος και των εγγράφων, με αποτέλεσμα μια πιο ακριβή και σχετική κατάταξη.

Πλεονεκτήματα της ανάκτησης σε δύο στάδια και των ανακατατάξεων

Η υιοθέτηση της ανάκτησης δύο σταδίων με rerankers προσφέρει αρκετά σημαντικά οφέλη στο πλαίσιο των συστημάτων 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 για την ευρετηρίαση μιας συλλογής εγγράφων, αξιοποιώντας την ικανότητά του να χειρίζεται αποτελεσματικά μεγάλα περιβάλλοντα.

Εφαρμογή ανάκτησης δύο σταδίων με 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 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)

Για το αρχικό στάδιο ανάκτησης, θα χρησιμοποιήσουμε ένα μοντέλο Sentence 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)

The 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. Στη συνέχεια περνάμε αυτό το επαυξημένο ερώτημα σε ένα μοντέλο γλώσσας T5, το οποίο παράγει μια απάντηση με βάση το παρεχόμενο πλαίσιο.

The response Η μεταβλητή θα περιέχει την τελική έξοδο, αξιοποιώντας τις εξωτερικές πληροφορίες από τα έγγραφα που ανακτήθηκαν και ανακατατάχθηκαν για να παρέχουν μια πιο ακριβή και περιεκτική απάντηση στο αρχικό ερώτημα.

Προηγμένες Τεχνικές και Θεωρήσεις

Ενώ η υλοποίηση που καλύψαμε παρέχει μια σταθερή βάση για την ενσωμάτωση της ανάκτησης και των ανακατατάξεων δύο σταδίων σε ένα σύστημα RAG, υπάρχουν αρκετές προηγμένες τεχνικές και εκτιμήσεις που μπορούν να βελτιώσουν περαιτέρω την απόδοση και την ευρωστία της προσέγγισης.

  1. Επέκταση ερωτήματος: Για να βελτιώσετε το αρχικό στάδιο ανάκτησης, μπορείτε να χρησιμοποιήσετε τεχνικές επέκτασης ερωτήματος, οι οποίες περιλαμβάνουν την αύξηση του αρχικού ερωτήματος με σχετικούς όρους ή φράσεις. Αυτό μπορεί να βοηθήσει στην ανάκτηση ενός πιο διαφορετικού συνόλου δυνητικά σχετικών εγγράφων.
  2. Ανακατάταξη συνόλου: Αντί να βασίζεστε σε ένα μεμονωμένο μοντέλο ανακατάταξης, μπορείτε να συνδυάσετε πολλαπλούς αναβαθμιστές σε ένα σύνολο, αξιοποιώντας τα δυνατά σημεία διαφορετικών μοντέλων για να βελτιώσετε τη συνολική απόδοση.
  3. Τελειοποίηση Rerankers: Ενώ τα προεκπαιδευμένα μοντέλα ανακατάταξης μπορεί να είναι αποτελεσματικά, η προσαρμογή τους σε δεδομένα συγκεκριμένου τομέα μπορεί να βελτιώσει περαιτέρω την ικανότητά τους να συλλαμβάνουν σημασιολογία και σήματα συνάφειας για συγκεκριμένο τομέα.
  4. Επαναληπτική Ανάκτηση και Ανακατάταξη: Σε ορισμένες περιπτώσεις, μια μεμονωμένη επανάληψη ανάκτησης και ανακατάταξης μπορεί να μην είναι επαρκής. Μπορείτε να εξερευνήσετε επαναληπτικές προσεγγίσεις, όπου η έξοδος του γλωσσικού μοντέλου χρησιμοποιείται για τη βελτίωση της διαδικασίας αναζήτησης και ανάκτησης, οδηγώντας σε ένα πιο διαδραστικό και δυναμικό σύστημα.
  5. Εξισορρόπηση Συνάφειας και Ποικιλομορφίας: Ενώ οι ανακατατάξεις στοχεύουν στην προώθηση των πιο συναφών εγγράφων, είναι σημαντικό να επιτευχθεί μια ισορροπία μεταξύ συνάφειας και διαφορετικότητας. Η ενσωμάτωση τεχνικών προώθησης της διαφορετικότητας μπορεί να βοηθήσει στην αποτροπή του υπερβολικά στενού ή μεροληπτικού συστήματος στις πηγές πληροφοριών του.
  6. Μετρήσεις αξιολόγησης: Για να αξιολογήσετε την αποτελεσματικότητα της προσέγγισης ανάκτησης και ανακατάταξης δύο σταδίων, θα χρειαστεί να ορίσετε κατάλληλες μετρήσεις αξιολόγησης. Αυτές μπορεί να περιλαμβάνουν παραδοσιακές μετρήσεις ανάκτησης πληροφοριών όπως η ακρίβεια, η ανάκληση και η μέση αμοιβαία κατάταξη (MRR), καθώς και μετρήσεις για συγκεκριμένες εργασίες προσαρμοσμένες στην περίπτωση χρήσης σας.

Συμπέρασμα

Το Retrieval Augmented Generation (RAG) έχει αναδειχθεί ως μια ισχυρή τεχνική για τη βελτίωση των δυνατοτήτων μεγάλων γλωσσικών μοντέλων αξιοποιώντας εξωτερικές πηγές πληροφοριών. Ωστόσο, οι παραδοσιακές μέθοδοι ανάκτησης συχνά δυσκολεύονται να εντοπίσουν τα πιο σχετικά έγγραφα, οδηγώντας σε μη βέλτιστη απόδοση.

Η ανάκτηση σε δύο στάδια με rerankers προσφέρει μια συναρπαστική λύση σε αυτήν την πρόκληση. Συνδυάζοντας ένα αρχικό στάδιο γρήγορης ανάκτησης με ένα πιο εξελιγμένο μοντέλο ανακατάταξης, αυτή η προσέγγιση μπορεί να βελτιώσει σημαντικά την ακρίβεια και τη συνάφεια των ανακτημένων εγγράφων, οδηγώντας τελικά σε απαντήσεις υψηλότερης ποιότητας που δημιουργούνται από το γλωσσικό μοντέλο.

Έχω περάσει τα τελευταία πέντε χρόνια βυθίζοντας τον εαυτό μου στον συναρπαστικό κόσμο της Μηχανικής Μάθησης και της Βαθιάς Μάθησης. Το πάθος και η εξειδίκευσή μου με οδήγησαν να συνεισφέρω σε περισσότερα από 50 διαφορετικά έργα μηχανικής λογισμικού, με ιδιαίτερη έμφαση στην AI/ML. Η συνεχής περιέργειά μου με έχει τραβήξει επίσης προς την Επεξεργασία Φυσικής Γλώσσας, έναν τομέα που ανυπομονώ να εξερευνήσω περαιτέρω.