Κέρδη:
- Υλοποίηση υβριδικής αναζήτησης που συνδυάζει επιλογή top-k και σημασιολογική αναζήτηση και αναζήτηση λέξεων-κλειδιών
- Αύξηση της ακρίβειας της πρώτης αναζήτησης με ανακατάταξη
- Κάνοντας τις δύσκολες ερωτήσεις πιο αναζητήσιμες με τεχνικές όπως ο μετασχηματισμός ερωτημάτων και το HyDE
Τρίψατε όμορφα τα έγγραφα και τα βάλατε στη διανυσματική βάση δεδομένων. Τώρα η πραγματική δουλειά: η λήψη των σωστών κομματιών όταν ο χρήστης κάνει μια ερώτηση. Αυτό ονομάζεται ανάκτηση και είναι η ραχοκοκαλιά της ποιότητας RAG. Θυμηθείτε τη φράση "Ποιότητα ανάκτησης = ποιότητα RAG". Αυτή η μονάδα είναι ακριβώς η τέχνη της βελτίωσης αυτής της ποιότητας. Θα καλύψουμε πρακτικές τεχνικές από την επιλογή top-k έως την υβριδική αναζήτηση, από την ανακατάταξη έως τον μετασχηματισμό ερωτημάτων.
Top-k: Πόσα κομμάτια θα φέρουμε;
Η πιο βασική ρύθμιση: πόσα κομμάτια (k) να επιστρέψετε από την αναζήτηση. Εάν φέρετε λιγότερα (k=1) υπάρχει μεγάλος κίνδυνος να χάσετε το σωστό κομμάτι. Εάν προσθέσετε πάρα πολλά (k=20), θα προσθέσει θόρυβο στο μοντέλο και το token κόστος θα αυξηθεί.
Διάκριση μεταξύ δύο εννοιών. Ανάκληση: ο ρυθμός με τον οποίο το σωστό κομμάτι είναι μεταξύ αυτών που ανακτήθηκαν. Ακρίβεια: ο ρυθμός με τον οποίο αυτό που ανακτάται είναι σχετικό. Η αύξηση του k αυξάνει την ανάκληση αλλά μειώνει την ακρίβεια. Ο στόχος είναι να εξισορροπηθούν τα δύο.
τοπ-κ
Αντίκτυπος
κατάλληλη κατάσταση
1-3
Υψηλή ακρίβεια, κίνδυνος αστοχίας
Απλές ερωτήσεις μιας απάντησης
4-8
Υπόλοιπο; τα περισσότερα σενάρια
Γενική εταιρική RAG
10-20
Υψηλότερη ανάκληση, ο θόρυβος αυξάνεται
Με ανακατάταξη (παρακάτω)
Συμβουλή: Κοινό και ισχυρό μοτίβο: φέρτε το φαρδύ (k=20) και μετά περιορίστε με επανακατάταξη (τοπ 4). Έτσι δεν θα σου λείψει τίποτα και δίνεις καθαρό πλαίσιο στο μοντέλο.
Hybrid Search: The Power of Two Search
Η σημασιολογική (διανυσματική) αναζήτηση καταγράφει το νόημα, αλλά χάνει πράγματα: πλήρης κωδικός προϊόντος ("XR-4471"), σπάνια συντομογραφία, σωστό όνομα, αριθμός έκδοσης. Για αυτές τις εργασίες ακριβούς αντιστοίχισης, η αναζήτηση λέξεων-κλειδιών παλιάς σχολής —ειδικά ο κλασικός αλγόριθμος που ονομάζεται BM25— είναι πολύ καλή.
Η υβριδική αναζήτηση συνδυάζει τα δύο: τόσο οι σημασιολογικές όσο και οι αναζητήσεις λέξεων-κλειδιών λειτουργούν, συνδυάζοντας τα αποτελέσματα. Έτσι, σε μια ερώτηση όπως «Περίοδος εγγύησης του
Η συγχώνευση γίνεται συνήθως με RRF (Reciprocal Rank Fusion): εμφανίζεται το κομμάτι που είναι υψηλότερο και στις δύο λίστες.
# Hybrid retrieval (conceptual)sem = vector_search(question, k=20) # meaningkey = bm25_search(question, k=20) # fullwordresult = rrf_merge(sem, key)[:8] # Fuse the two, top 8
Επανακατάταξη: Δεύτερο και πιο έξυπνο πάσο
Η πρώτη κλήση μπορεί να είναι γρήγορη αλλά αγενής. Η ανακατάταξη βαθμολογεί τους υποψηφίους που επιστράφηκαν από την πρώτη αναζήτηση ένας προς έναν με ένα πιο ισχυρό μοντέλο (συνήθως ένα cross-encoder — ένα μοντέλο που διαβάζει την ερώτηση και το απόσπασμα μαζί και βαθμολογεί τη συνάφεια) και μετακινεί τους πιο σχετικούς στην κορυφή.
Η λογική είναι η εξής: η πρώτη αναζήτηση εκχωρεί μεγάλο αριθμό υποψηφίων για ανάκληση (20 υποψηφίους), ο εκ νέου κατάταξη επιλέγει τους καλύτερους 4 για ακρίβεια. Αυτή η προσέγγιση δύο σταδίων είναι πολύ πιο ακριβής από μια αναζήτηση ενός σταδίου. Κοστίζει κάποια καθυστέρηση και πρόσθετη επεξεργασία. Το κέρδος είναι μια σημαντική αύξηση της ποιότητας.
# Ανάκτηση δύο σταδίων (εννοιολογικοί)υποψήφιοι = υβριδική_αναζήτηση(ερώτηση, k=20) # ευρεία, γρήγορη βαθμολογία = reranker.score(ερώτηση, υποψήφιοι) # βαθμολογία συνάφειας για κάθε υποψήφια περιβάλλον = βαθμολογημένη.κατάταξη()[:4] # top 4
Μετασχηματισμός του ερωτήματος
Μερικές φορές το πρόβλημα δεν βρίσκεται στην αναζήτηση, αλλά στην ίδια την ερώτηση. Εάν ο χρήστης ρωτήσει "τι γίνεται με τους απομακρυσμένους εργαζόμενους;" », αυτό δεν μπορεί να αναζητηθεί μόνο του (δεν είναι σαφές τι ισχύει για τους απομακρυσμένους εργαζόμενους). Ακολουθούν οι τεχνικές μετασχηματισμού ερωτημάτων:
- Ξαναγράψτε: Χρησιμοποιήστε το ιστορικό συνομιλιών για να κάνετε την ερώτηση μεμονωμένη: "Τι δικαιούνται ετήσια άδεια οι απομακρυσμένοι εργαζόμενοι;"
- Multi-query: Δημιουργήστε 3 διαφορετικές εκφράσεις της ίδιας ερώτησης, αναζητήστε με όλες, συνδυάστε τα αποτελέσματα. Διαφορετικές λέξεις βρίσκουν διαφορετικά κομμάτια.
- HyDE (Hypothetical Document Embeddings): Πρώτα εκτυπώστε μια "πιθανή απάντηση" στο μοντέλο και, στη συνέχεια, ενσωματώστε και αναζητήστε τη φανταστική απάντηση. Η φανταστική απάντηση μερικές φορές βρίσκεται καλύτερα επειδή είναι πιο κοντά στα λόγια στο πραγματικό έγγραφο.
# Multi-query (εννοιολογικές)παραλλαγές = model.uret("Εκφράστε αυτήν την ερώτηση με 3 διαφορετικούς τρόπους: " + question)tum_sonuc = []για v σε παραλλαγές: all_sonuc += vector_intermediate(v, k=6)context = singular_and_order(tum_result)[:6]
Αδύναμη Ανάκτηση / Ισχυρή Ανάκτηση
Αδύναμο (μονό στάδιο, μόνο σημασιολογία, σταθερά k=3):
result = vector_search(ερώτηση, k=3)# Πρόβλημα: ο κωδικός προϊόντος χάθηκε, δεν μπορεί να εισαχθεί το σωστό μέρος 3 σε δύσκολες ερωτήσεις.
Ισχυρό (υβριδικό + ευρύ + ανακατάταξη + πολλαπλό ερώτημα εάν είναι απαραίτητο):
υποψήφιοι = hybrid_search(rewrite(ερώτηση, παρελθόν), k=20)context = reranker.score(ερώτηση, υποψήφιοι).first(4)# Καταγράφονται τόσο η ακριβής αντιστοίχιση όσο και το νόημα. Πάει στα 4 καλύτερα μοντέλα.
Τρεις Μίνι Θήκες
Περίπτωση 1 — Διαφυγή κωδικού προϊόντος. Μια καθαρή σημασιολογική αναζήτηση σε μια ομάδα υποστήριξης δεν μπόρεσε να βρει το "RTX-9080" αυτολεξεί στην ερώτηση "Σφάλμα προγράμματος οδήγησης RTX-9080". Έφερνε άλλα προϊόντα με παρόμοια ονόματα. Όταν προστέθηκε η υβριδική αναζήτηση, σημειώθηκε ακριβής αντιστοίχιση κώδικα και το ποσοστό επιστροφής σωστών άρθρων αυξήθηκε από 58% σε 92%.
Περίπτωση 2 — Διαφορά ανακατάταξης. Ένας δικηγόρος δούλευε με k=5 αλλά το σωστό στοιχείο είναι 7-10 τις περισσότερες φορές. Έμενε στις τάξεις. Όταν εισήχθη η ανακατάταξη k=20 +, το ποσοστό του σωστού άρθρου που βρίσκεται στις 3 πρώτες θέσεις αυξήθηκε από 61% σε 94%. Η καθυστέρηση αυξήθηκε μόνο κατά 300 ms — ένας αποδεκτός συμβιβασμός.
Περίπτωση 3 — Επακόλουθη ερώτηση χωρίς πλαίσιο. Σε έναν βοηθό ανθρώπινου δυναμικού, ο χρήστης ρωτά "τι γίνεται με τους μερικής απασχόλησης;" Όταν ρώτησα, το σύστημα έφερε άσχετα ανταλλακτικά. Επαναγράφοντας το ερώτημα (βάζοντας το πλαίσιο "ετήσια άδεια" από το παρελθόν και προσθέτοντας "Οι εργαζόμενοι μερικής απασχόλησης δικαιούνται ετήσια άδεια"), το ποσοστό σωστής απάντησης αυξήθηκε από 40% σε 86%.
Συνήθη λάθη
- Βασιζόμενοι αποκλειστικά στη σημασιολογική αναζήτηση: Ο κωδικός προϊόντος, η συντομογραφία, το κατάλληλο όνομα παραλείπονται. Προσθέστε υβρίδιο.
- Διατήρηση του k πολύ μικρό: Το σωστό κομμάτι δεν μπορεί να μπει στη λίστα. φαρδώστε το και στενέψτε το με ανακατάταξη.
- Δεν σκέφτομαι ποτέ την ανακατάταξη: Η πρώτη αναζήτηση είναι αγενής. Το δεύτερο έξυπνο πέρασμα βελτιώνει σημαντικά την ποιότητα.
- Αναζήτηση επακόλουθων ερωτήσεων ως έχει: Μια ερώτηση χωρίς πλαίσιο αναζητά ανούσια. ξαναγράφω.
- Τυφλά αυξανόμενο k (χωρίς εκ νέου κατάταξη): Το μοντέλο γεμίζει με θόρυβο, η απόκριση παραμορφώνεται και το κόστος αυξάνεται.
Προσοχή: Κάθε τεχνική προσθέτει κόστος και καθυστέρηση. Το πολλαπλό ερώτημα σημαίνει τριπλή αναζήτηση, η ανακατάταξη σημαίνει πρόσθετη κλήση μοντέλου. Ξεκινήστε με απλό υβριδικό + λογικό k πρώτα? Μετρήστε και προσθέστε βαριές τεχνικές όπου χρειάζεται πραγματικά. Προσθήκη χωρίς μέτρηση.
Συνοπτικά
- Το Top-k είναι η ισορροπία μεταξύ ανάκλησης και ακρίβειας. Γενικά το 4-8 είναι μια καλή αρχή.
- Η υβριδική αναζήτηση συνδυάζει τη σημασιολογική αναζήτηση με την αναζήτηση λέξεων-κλειδιών (BM25). Ανακτά ακριβείς αντιστοιχίσεις.
- Η ανακατάταξη βαθμολογεί εκ νέου τους υποψηφίους από την ευρεία αρχική αναζήτηση με ένα ισχυρό μοντέλο και επιλέγει τους καλύτερους.
- Ο μετασχηματισμός ερωτημάτων (επαναγραφή, πολλαπλών ερωτημάτων, HyDE) καθιστά δύσκολες ερωτήσεις και ερωτήσεις χωρίς περιεχόμενο.
- Ισχυρό μοτίβο: ευρεία ανάκτηση → συγχώνευση με υβριδικό → στενό με ανακατάταξη. αλλά προσθέστε κάθε τεχνική μετρώντας την.
Εργασία εφαρμογής
Προετοιμάστε 6 δύσκολες ερωτήσεις με δεδομένα από προηγούμενες ενότητες: τουλάχιστον 2 που απαιτούν ακριβείς αντιστοιχίσεις (κωδικός προϊόντος, συντομογραφία, ημερομηνία), 2 σημασιολογικές (το ίδιο θέμα με διαφορετικές λέξεις), 2 επακόλουθες ερωτήσεις χωρίς πλαίσιο. (1) Σκεφτείτε πρώτα κάθε ερώτηση ως μια καθαρή σημασιολογική αναζήτηση και σημειώστε χειροκίνητα ποια μέρη θα εμφανιστούν. (2) Επαναξιολογήστε τις ίδιες ερωτήσεις με προσθήκη υβριδικών και ανακατάταξης. (3) Ξαναγράψτε τις επακόλουθες ερωτήσεις χωρίς πλαίσιο. Σημειώστε σε μορφή πίνακα ποια τεχνική κάνει τη διαφορά σε ποιο τύπο ερώτησης.
λίστα ελέγχου
- [ ] Γνωρίζω ότι το top-k είναι μια ισορροπία ανάκλησης-ακρίβειας και ένα εύλογο εύρος εκκίνησης.
- [ ] Μπορώ να εξηγήσω γιατί η υβριδική αναζήτηση ανακτά ακριβείς αντιστοιχίσεις.
- [ ] Μπορώ να εφαρμόσω τη λογική των δύο βημάτων της ανακατάταξης (ευρεία → έξυπνη στενή).
- [ ] Αναγνωρίζω την ανάγκη να ξαναγράψω επακόλουθες ερωτήσεις χωρίς πλαίσιο.
- [ ] Επιβεβαιώνω ότι πρόσθεσα βαριές τεχνικές με μέτρηση, όχι με μέτρηση.