Απάντηση ερωτήσεων με χρήση του Retrieval Augmented Generation με μοντέλα θεμελίωσης στο Amazon SageMaker JumpStart

Απάντηση ερωτήσεων με χρήση του Retrieval Augmented Generation με μοντέλα θεμελίωσης στο Amazon SageMaker JumpStart

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

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

Σε αυτήν την ανάρτηση, περιγράφουμε το RAG και τα πλεονεκτήματά του και δείχνουμε πώς να ξεκινήσετε γρήγορα χρησιμοποιώντας ένα δείγμα σημειωματάριου για να λύσετε μια εργασία απάντησης ερωτήσεων χρησιμοποιώντας την υλοποίηση RAG με LLM στο Jumpstart. Δείχνουμε δύο προσεγγίσεις:

  • Πώς να λύσετε το πρόβλημα με το open-source LangChain βιβλιοθήκη και Amazon Sage Maker τελικά σημεία σε μερικές γραμμές κώδικα
  • Πώς να χρησιμοποιήσετε τον αλγόριθμο SageMaker KNN για να εκτελέσετε σημασιολογική αναζήτηση δεδομένων μεγάλης κλίμακας χρησιμοποιώντας τελικά σημεία του SageMaker

LLMS και περιορισμοί

Οι LLM εκπαιδεύονται σε μεγάλους όγκους μη δομημένων δεδομένων και είναι εξαιρετικοί στη γενική δημιουργία κειμένου. Τα LLMs μπορούν να αποθηκεύσουν πραγματικές γνώσεις εκπαιδεύοντας τις παραμέτρους τους σε ένα μεγάλο σύνολο δεδομένων φυσικής γλώσσας.

Υπάρχουν μερικοί περιορισμοί στη χρήση προεκπαιδευμένων LLM εκτός ραφιού:

  • Συνήθως εκπαιδεύονται εκτός σύνδεσης, καθιστώντας το μοντέλο αγνωστικιστικό στις πιο πρόσφατες πληροφορίες (για παράδειγμα, ένα chatbot που εκπαιδεύτηκε από το 2011–2018 δεν έχει πληροφορίες για τον COVID-19).
  • Κάνουν προβλέψεις αναζητώντας μόνο πληροφορίες που είναι αποθηκευμένες στις παραμέτρους τους, οδηγώντας σε κατώτερη ερμηνευτικότητα.
  • Είναι κυρίως εκπαιδευμένοι σε σώματα γενικού τομέα, καθιστώντας τα λιγότερο αποτελεσματικά σε εργασίες που αφορούν συγκεκριμένους τομείς. Υπάρχουν σενάρια όταν θέλετε τα μοντέλα να δημιουργούν κείμενο με βάση συγκεκριμένα δεδομένα και όχι γενικά δεδομένα. Για παράδειγμα, μια εταιρεία ασφάλισης υγείας μπορεί να θέλει το bot απάντησης ερωτήσεών της να απαντά σε ερωτήσεις χρησιμοποιώντας τις πιο πρόσφατες πληροφορίες που είναι αποθηκευμένες στο χώρο αποθήκευσης εγγράφων της επιχείρησης ή στη βάση δεδομένων της, ώστε οι απαντήσεις να είναι ακριβείς και να αντικατοπτρίζουν τους μοναδικούς επιχειρηματικούς κανόνες της.

Επί του παρόντος, υπάρχουν δύο δημοφιλείς τρόποι αναφοράς συγκεκριμένων δεδομένων σε LLMs:

  • Εισαγάγετε δεδομένα ως πλαίσιο στην προτροπή του μοντέλου ως τρόπο παροχής των πληροφοριών που μπορεί να χρησιμοποιήσει το μοντέλο κατά τη δημιουργία του αποτελέσματος
  • Βελτιώστε το μοντέλο παρέχοντας ένα αρχείο με ζεύγη προτροπής και ολοκλήρωσης

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

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

Για να δείξουμε αυτούς τους περιορισμούς, χρησιμοποιήσαμε ένα μοντέλο LLM Flan T5 XXL και θέσαμε την ακόλουθη ερώτηση:

question = "Which instances can I use with Managed Spot Training in SageMaker?"

Λαμβάνουμε την ακόλουθη απάντηση:

"""For model: huggingface-text2text-flan-t5-xxl, the generated output is: the Managed Spot Training is a subscriptions product available for the following instances: Data Science Virtual Machine (DSVM), DSVM High, and DSVM Low. """

Όπως μπορείτε να δείτε, η απάντηση δεν είναι ακριβής. Η σωστή απάντηση θα πρέπει να είναι ότι όλες οι παρουσίες του SageMaker υποστηρίζουν την Εκπαίδευση Managed Spot.

Δοκιμάσαμε την ίδια ερώτηση αλλά με πρόσθετο πλαίσιο πέρασε μαζί με την ερώτηση:

question + context + prompt = """
Answer based on context: Managed Spot Training can be used with all instances supported in Amazon SageMaker. Managed Spot Training is supported in all AWS Regions where Amazon SageMaker is currently available. Which instances can I use with Managed Spot Training in SageMaker? """

Αυτή τη φορά πήραμε την εξής απάντηση:

"""For model: huggingface-text2text-flan-t5-xxl, the generated output is: instances supported in Amazon SageMaker """

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

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

Για να λύσουμε τους περιορισμούς που συζητήσαμε, μπορούμε να χρησιμοποιήσουμε το Retrieval Augmented Generation (RAG) με LLM. Το RAG ανακτά δεδομένα εκτός του γλωσσικού μοντέλου (μη παραμετρική) και επαυξάνει τις προτροπές προσθέτοντας τα σχετικά ανακτημένα δεδομένα στο περιβάλλον. Τα μοντέλα RAG εισήχθησαν από Οι Lewis et al. το 2020 ως μοντέλο όπου η παραμετρική μνήμη είναι ένα προ-εκπαιδευμένο μοντέλο seq2seq και η μη παραμετρική μνήμη είναι ένας πυκνός διανυσματικός δείκτης της Wikipedia, προσπελάσιμος με ένα προ-εκπαιδευμένο νευρικό retriever.

Στο RAG, τα εξωτερικά δεδομένα μπορούν να προέρχονται από πολλαπλές πηγές δεδομένων, όπως αποθήκη εγγράφων, βάσεις δεδομένων ή API. Το πρώτο βήμα είναι να μετατρέψετε τα έγγραφα και το ερώτημα χρήστη σε μορφή, ώστε να μπορούν να συγκριθούν και να πραγματοποιηθεί αναζήτηση σχετικότητας. Για να γίνουν οι μορφές συγκρίσιμες για την πραγματοποίηση αναζήτησης συνάφειας, μια συλλογή εγγράφων (βιβλιοθήκη γνώσης) και το ερώτημα που υποβάλλεται από τον χρήστη μετατρέπονται σε αριθμητική αναπαράσταση χρησιμοποιώντας μοντέλα γλώσσας ενσωμάτωσης. Οι ενσωματώσεις είναι ουσιαστικά αριθμητικές αναπαραστάσεις της έννοιας στο κείμενο. Στη συνέχεια, με βάση την ενσωμάτωση του ερωτήματος χρήστη, το σχετικό κείμενό του προσδιορίζεται στη συλλογή εγγράφων με μια αναζήτηση ομοιότητας στον χώρο ενσωμάτωσης. Στη συνέχεια, η προτροπή που παρέχεται από τον χρήστη επισυνάπτεται με σχετικό κείμενο που αναζητήθηκε και προστίθεται στο περιβάλλον. Η προτροπή αποστέλλεται τώρα στο LLM και επειδή το περιβάλλον έχει σχετικά εξωτερικά δεδομένα μαζί με την αρχική προτροπή, η έξοδος του μοντέλου είναι σχετική και ακριβής.

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

Το παρακάτω διάγραμμα δείχνει την εννοιολογική ροή της χρήσης RAG με LLM.

Απάντηση ερωτήσεων χρησιμοποιώντας το Retrieval Augmented Generation με μοντέλα θεμελίων στο Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Σε αυτήν την ανάρτηση, δείχνουμε πώς να εφαρμόσετε μια εφαρμογή απάντησης ερωτήσεων με τα ακόλουθα βήματα:

  1. Δημιουργήστε ενσωμάτωση για καθένα από τα έγγραφα στη βιβλιοθήκη γνώσεων με ένα μοντέλο ενσωμάτωσης SageMaker GPT-J-6B.
  2. Προσδιορίστε τα κορυφαία K πιο σχετικά έγγραφα με βάση το ερώτημα χρήστη.
    1. Για το ερώτημά σας, δημιουργήστε την ενσωμάτωση του ερωτήματος χρησιμοποιώντας το ίδιο μοντέλο ενσωμάτωσης.
    2. Αναζητήστε τα ευρετήρια των κορυφαίων K πιο συναφών εγγράφων στον χώρο ενσωμάτωσης χρησιμοποιώντας μια αναζήτηση FAISS στη μνήμη.
    3. Χρησιμοποιήστε τα ευρετήρια για να ανακτήσετε τα αντίστοιχα έγγραφα.
  3. Χρησιμοποιήστε τα ανακτημένα σχετικά έγγραφα ως πλαίσιο με την προτροπή και την ερώτηση και στείλτε τα στο SageMaker LLM για να δημιουργήσετε την απάντηση.

Δείχνουμε τις ακόλουθες προσεγγίσεις:

  • Πώς να λύσετε μια εργασία απάντησης ερωτήσεων με τα SageMaker LLM και την ενσωμάτωση τελικών σημείων και τη βιβλιοθήκη ανοιχτού κώδικα LangChain σε λίγες γραμμές κώδικα. Συγκεκριμένα, χρησιμοποιούμε δύο τελικά σημεία SageMaker για το LLM (Flan T5 XXL) και το μοντέλο ενσωμάτωσης (GPT-J 6B) και η διανυσματική βάση δεδομένων που χρησιμοποιείται είναι στη μνήμη FAISS. Για περισσότερες λεπτομέρειες, δείτε το GitHub repo.
  • Εάν το FAISS στη μνήμη δεν χωράει στο μεγάλο σας σύνολο δεδομένων, σας παρέχουμε ένα Αλγόριθμος SageMaker KNN για να εκτελέσετε τη σημασιολογική αναζήτηση, η οποία χρησιμοποιεί επίσης το FAISS ως τον υποκείμενο αλγόριθμο αναζήτησης. Για λεπτομέρειες, δείτε το GitHub repo.

Το παρακάτω διάγραμμα απεικονίζει την αρχιτεκτονική λύσης.

Απάντηση ερωτήσεων χρησιμοποιώντας το Retrieval Augmented Generation με μοντέλα θεμελίων στο Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Σημειωματάριο υλοποίησης που βασίζεται σε JumpStart RAG με LangChain

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

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

Δημιουργία μοντέλου LLM

Ως πρώτο βήμα, αναπτύξτε το μοντέλο JumpStart LLM της επιλογής σας. Σε αυτήν την επίδειξη, χρησιμοποιούμε ένα τελικό σημείο μοντέλου Jumpstart Flan T5 XXL. Για οδηγίες ανάπτυξης, ανατρέξτε στο Προτροπή μηδενικής λήψης για το μοντέλο βάσης Flan-T5 στο Amazon SageMaker JumpStart. Με βάση την περίπτωση χρήσης σας, μπορείτε επίσης να αναπτύξετε άλλα μοντέλα συντονισμένα με οδηγίες όπως π.χ Φλάντζα T5 UL2 or BloomZ 7B1. Για λεπτομέρειες, ανατρέξτε στο παράδειγμα σημειωματάριο.

Για να χρησιμοποιήσουμε το τελικό σημείο SageMaker LLM με το LangChain, χρησιμοποιούμε langchain.llms.sagemaker_endpoint.SagemakerEndpoint, το οποίο αφαιρεί το τελικό σημείο SageMaker LLM. Πρέπει να πραγματοποιήσουμε έναν μετασχηματισμό για το ωφέλιμο φορτίο αιτήματος και απόκρισης, όπως φαίνεται στον ακόλουθο κώδικα για την ενοποίηση του LangChain SageMaker. Σημειώστε ότι ίσως χρειαστεί να προσαρμόσετε τον κωδικό ContentHandler με βάση τη content_type και δέχεται τη μορφή του μοντέλου LLM που επιλέγετε να χρησιμοποιήσετε.

from langchain.llms.sagemaker_endpoint import SagemakerEndpoint class ContentHandler(ContentHandlerBase): content_type = "application/json" accepts = "application/json" def transform_input(self, prompt: str, model_kwargs={}) -> bytes: input_str = json.dumps({"text_inputs": prompt, **model_kwargs}) return input_str.encode("utf-8") def transform_output(self, output: bytes) -> str: response_json = json.loads(output.read().decode("utf-8")) return response_json["generated_texts"][0] content_handler = ContentHandler() sm_llm = SagemakerEndpoint( endpoint_name=_MODEL_CONFIG_["huggingface-text2text-flan-t5-xxl"]["endpoint_name"], region_name=aws_region, model_kwargs=parameters, content_handler=content_handler,
)

Δημιουργήστε το μοντέλο ενσωμάτωσης

Στη συνέχεια, πρέπει να ετοιμάσουμε το ενσωματωμένο μοντέλο μας. Αναπτύσσουμε το GPT-J 6B μοντέλο ως μοντέλο ενσωμάτωσης. Εάν χρησιμοποιείτε ένα μοντέλο ενσωμάτωσης JumpStart, πρέπει να προσαρμόσετε την κλάση ενσωμάτωσης τελικού σημείου LangChain SageMaker και να μετατρέψετε το αίτημα και την απόκριση του μοντέλου για ενσωμάτωση με το LangChain. Για λεπτομερή εφαρμογή, ανατρέξτε στο GitHub repo.

embeddings = SagemakerEndpointEmbeddingsJumpStart( endpoint_name=_MODEL_CONFIG_["huggingface-textembedding-gpt-j-6b"]["endpoint_name"], region_name=aws_region, content_handler=content_handler,
)

Φορτώστε έγγραφα για συγκεκριμένο τομέα χρησιμοποιώντας το πρόγραμμα φόρτωσης εγγράφων LangChain και δημιουργήστε ένα ευρετήριο

Χρησιμοποιούμε το CSVLoader πακέτο στο LangChain για να φορτώσετε έγγραφα με μορφή CSV στη φόρτωση εγγράφων:

loader = CSVLoader(file_path="rag_data/processed_data.csv")
documents = loader.load()

Στη συνέχεια, χρησιμοποιούμε το TextSplitter για την προεπεξεργασία δεδομένων για σκοπούς ενσωμάτωσης και χρησιμοποιούμε το μοντέλο ενσωμάτωσης SageMaker GPT-J -6B για να δημιουργήσετε την ενσωμάτωση. Αποθηκεύουμε την ενσωμάτωση σε ένα διανυσματικό κατάστημα FAISS για να δημιουργήσουμε ένα ευρετήριο. Χρησιμοποιούμε αυτό το ευρετήριο για να βρούμε σχετικά έγγραφα που είναι σημασιολογικά παρόμοια με το ερώτημα του χρήστη.

Ο παρακάτω κώδικας δείχνει πώς γίνονται όλα αυτά τα βήματα από το VectorstoreIndexCreator τάξη σε λίγες μόνο γραμμές κώδικα στο LangChain για να δημιουργήσετε μια συνοπτική υλοποίηση της απάντησης ερωτήσεων με το RAG:

index_creator = VectorstoreIndexCreator( vectorstore_cls=FAISS, embedding=embeddings, text_splitter=CharacterTextSplitter(chunk_size=300, chunk_overlap=0),
)
index = index_creator.from_loaders([loader])

Χρησιμοποιήστε το ευρετήριο για να αναζητήσετε σχετικό περιβάλλον και να το μεταβιβάσετε στο μοντέλο LLM

Στη συνέχεια, χρησιμοποιήστε τη μέθοδο ερωτήματος στο ευρετήριο που δημιουργήθηκε και περάστε την ερώτηση του χρήστη και το τελικό σημείο SageMaker LLM. Το LangChain επιλέγει τα τέσσερα κορυφαία πλησιέστερα έγγραφα (K=4) και μεταβιβάζει το σχετικό πλαίσιο που εξάγεται από τα έγγραφα για να δημιουργήσει μια ακριβή απάντηση. Δείτε τον παρακάτω κώδικα:

index.query(question=question, llm=sm_llm)

Λαμβάνουμε την ακόλουθη απάντηση για το ερώτημα χρησιμοποιώντας την προσέγγιση που βασίζεται σε RAG με το Flan T5 XXL:

"""For model: huggingface-text2text-flan-t5-xxl, the generated output is: Managed Spot Training can be used with all instances supported in Amazon SageMaker """

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

Εναλλακτική προσέγγιση για την εφαρμογή RAG με περισσότερη προσαρμογή χρησιμοποιώντας το SageMaker και το LangChain

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

Στον παρακάτω κώδικα, χρησιμοποιούμε ρητά το FAISS για τη δημιουργία ενσωμάτωσης για κάθε ένα από τα έγγραφα στη βιβλιοθήκη γνώσεων με το μοντέλο ενσωμάτωσης SageMaker GPT-J-6B. Στη συνέχεια, προσδιορίζουμε τα κορυφαία K (K=3) πιο σχετικά έγγραφα με βάση το ερώτημα του χρήστη.

docsearch = FAISS.from_documents(documents, embeddings)
docs = docsearch.similarity_search(question, k=3)

Στη συνέχεια, χρησιμοποιούμε ένα πρότυπο προτροπής και το αλυσιδώνουμε με το SageMaker LLM:

prompt_template = """Answer based on context:nn{context}nn{question}"""
PROMPT = PromptTemplate(template=prompt_template, input_variables=["context", "question"])
chain = load_qa_chain(llm=sm_llm, prompt=PROMPT)

Στέλνουμε τα τρία κορυφαία (K=3) σχετικά έγγραφα που βρήκαμε ως πλαίσιο στην προτροπή χρησιμοποιώντας μια αλυσίδα LangChain:

result = chain({"input_documents": docs, "question": question}, return_only_outputs=True)["output_text"]

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

Σημειωματάριο υλοποίησης που βασίζεται σε JumpStart RAG με το SageMaker KNN

Σε αυτήν την ενότητα, εφαρμόζουμε την προσέγγιση που βασίζεται σε RAG χρησιμοποιώντας τον αλγόριθμο KNN για την εύρεση σχετικών εγγράφων για τη δημιουργία βελτιωμένου περιβάλλοντος. Σε αυτήν την προσέγγιση, δεν χρησιμοποιούμε LangChain, αλλά χρησιμοποιούμε το ίδιο σύνολο δεδομένων Συχνές ερωτήσεις για το Amazon SageMaker ως έγγραφα γνώσης, ενσωματώνοντας τα μοντέλα GPT-J-6B και LLM Flan T5 XXL όπως ακριβώς κάναμε στην προηγούμενη προσέγγιση LangChain.

Εάν έχετε ένα μεγάλο σύνολο δεδομένων, το Αλγόριθμος SageMaker KNN μπορεί να σας προσφέρει μια αποτελεσματική σημασιολογική αναζήτηση. Ο αλγόριθμος SageMaker KNN χρησιμοποιεί επίσης το FAISS ως τον υποκείμενο αλγόριθμο αναζήτησης. Μπορείτε να βρείτε το σημειωματάριο για αυτήν τη λύση GitHub.

Αρχικά, αναπτύσσουμε τα μοντέλα ενσωμάτωσης LLM Flan T5 XXL και GPT-J 6B με τον ίδιο τρόπο όπως στην προηγούμενη ενότητα. Για κάθε εγγραφή στη βάση δεδομένων γνώσης, δημιουργούμε ένα διάνυσμα ενσωμάτωσης χρησιμοποιώντας το μοντέλο ενσωμάτωσης GPT-J.

Στη συνέχεια, χρησιμοποιούμε α SageMaker KNN εργασία κατάρτισης για την ευρετηρίαση της ενσωμάτωσης των δεδομένων γνώσης. Ο υποκείμενος αλγόριθμος που χρησιμοποιείται για την ευρετηρίαση των δεδομένων είναι FAISS. Θέλουμε να βρούμε τα πέντε κορυφαία πιο σχετικά έγγραφα, γι' αυτό ορίσαμε το TOP_K μεταβλητή σε 5. Δημιουργούμε τον εκτιμητή για τον αλγόριθμο KNN, εκτελούμε την εργασία εκπαίδευσης και αναπτύσσουμε το μοντέλο KNN για να βρούμε ευρετήρια των πέντε κορυφαίων εγγράφων που ταιριάζουν με το ερώτημα. Δείτε τον παρακάτω κώδικα:

from sagemaker.amazon.amazon_estimator import get_image_uri def trained_estimator_from_hyperparams(s3_train_data, hyperparams, output_path): """ Create an Estimator from the given hyperparams, fit to training data, and return a deployed predictor """ # set up the estimator knn = sagemaker.estimator.Estimator( get_image_uri(boto3.Session().region_name, "knn"), aws_role, instance_count=1, instance_type="ml.m5.2xlarge", output_path=output_path, sagemaker_session=sess, ) knn.set_hyperparameters(**hyperparams) # train a model. fit_input contains the locations of the train data fit_input = {"train": s3_train_data} knn.fit(fit_input) return knn hyperparams = {"feature_dim": train_features.shape[1], "k": TOP_K,"sample_size": train_features.shape[0], "predictor_type": "classifier"}
output_path = f"s3://{bucket}/{prefix}/default_example/output"
knn_estimator = trained_estimator_from_hyperparams( s3_train_data, hyperparams, output_path)

Στη συνέχεια, δημιουργούμε μια αναπαράσταση ενσωμάτωσης του ερωτήματος χρησιμοποιώντας το μοντέλο ενσωμάτωσης GPT-J-6B που χρησιμοποιήσαμε για τη δημιουργία μιας ενσωμάτωσης των εγγράφων της βιβλιοθήκης γνώσης:

query_response = query_endpoint_with_json_payload(question, endpoint_name_embed, content_type="application/x-text")
question_embedding = parse_response_text_embed(query_response)

Στη συνέχεια χρησιμοποιούμε το τελικό σημείο KNN και περνάμε την ενσωμάτωση του ερωτήματος στο τελικό σημείο KNN για να λάβουμε τα ευρετήρια των κορυφαίων K πιο συναφών εγγράφων. Χρησιμοποιούμε τα ευρετήρια για να ανακτήσουμε τα αντίστοιχα κειμενικά έγγραφα. Στη συνέχεια, συνενώνουμε τα έγγραφα, διασφαλίζοντας ότι δεν γίνεται υπέρβαση του μέγιστου επιτρεπόμενου μήκους περιβάλλοντος. Δείτε τον παρακάτω κώδικα:

"""With maximum sequence length 500, selected top 4 document sections: Managed Spot Training can be used with all instances supported in Amazon SageMaker. Managed Spot Training is supported in all AWS Regions where Amazon SageMaker is currently available. The difference between Savings Plans for Amazon SageMaker and Savings Plans for EC2 is in the services they include. SageMaker Savings Plans apply only to SageMaker ML Instance usage. There are no fixed limits to the size of the dataset you can use for training models with Amazon SageMaker. """

Τώρα φτάνουμε στο τελικό μας βήμα στο οποίο συνδυάζουμε το ερώτημα, την προτροπή και το περιβάλλον που περιέχει κείμενο από σχετικά έγγραφα και το περνάμε στο μοντέλο παραγωγής κειμένου LLM Flan T5 XXL για να δημιουργήσουμε την απάντηση.

Λαμβάνουμε την ακόλουθη απάντηση για το ερώτημα χρησιμοποιώντας μια προσέγγιση βασισμένη σε RAG με το Flan T5 XXL:

"""
For model: huggingface-text2text-flan-t5-xxl, the generated output is: Managed Spot Training can be used with all instances supported in Amazon SageMaker """

εκκαθάριση

Φροντίστε να διαγράψετε τα τελικά σημεία που δημιουργήσαμε σε αυτό το σημειωματάριο όταν δεν τα χρησιμοποιούμε για να αποφύγετε το επαναλαμβανόμενο κόστος.

Συμπέρασμα

Σε αυτήν την ανάρτηση, δείξαμε την εφαρμογή μιας προσέγγισης βασισμένης σε RAG με LLM για εργασίες απάντησης ερωτήσεων χρησιμοποιώντας δύο προσεγγίσεις: το LangChain και τον ενσωματωμένο αλγόριθμο KNN. Η προσέγγιση που βασίζεται σε RAG βελτιστοποιεί την ακρίβεια της δημιουργίας κειμένου χρησιμοποιώντας το Flan T5 XXL παρέχοντας δυναμικά το σχετικό πλαίσιο που δημιουργήθηκε με την αναζήτηση μιας λίστας εγγράφων.

Μπορείτε να χρησιμοποιήσετε αυτά τα σημειωματάρια στο SageMaker ως έχουν ή μπορείτε να τα προσαρμόσετε στις ανάγκες σας. Για να προσαρμόσετε, μπορείτε να χρησιμοποιήσετε το δικό σας σύνολο εγγράφων στη βιβλιοθήκη γνώσεων, να χρησιμοποιήσετε άλλες εφαρμογές αναζήτησης συνάφειας όπως το OpenSearch και να χρησιμοποιήσετε άλλα μοντέλα ενσωμάτωσης και LLM δημιουργίας κειμένου που είναι διαθέσιμα στο JumpStart.

Ανυπομονούμε να δούμε τι χτίζετε στο JumpStart χρησιμοποιώντας μια προσέγγιση που βασίζεται σε RAG!


Σχετικά με τους συγγραφείς

Απάντηση ερωτήσεων χρησιμοποιώντας το Retrieval Augmented Generation με μοντέλα θεμελίων στο Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Δόκτωρ Σιν Χουάνγκ είναι Senior Applied Scientist για τους ενσωματωμένους αλγόριθμους Amazon SageMaker JumpStart και Amazon SageMaker. Επικεντρώνεται στην ανάπτυξη κλιμακωτών αλγορίθμων μηχανικής μάθησης. Τα ερευνητικά του ενδιαφέροντα είναι στον τομέα της επεξεργασίας φυσικής γλώσσας, της εξηγήσιμης βαθιάς μάθησης σε δεδομένα πινάκων και της ισχυρής ανάλυσης της μη παραμετρικής ομαδοποίησης του χωροχρόνου. Έχει δημοσιεύσει πολλές εργασίες σε συνέδρια ACL, ICDM, KDD και Royal Statistical Society: Series A.

Απάντηση ερωτήσεων χρησιμοποιώντας το Retrieval Augmented Generation με μοντέλα θεμελίων στο Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Rachna Chadha είναι ένας κύριος αρχιτέκτονας λύσεων AI/ML σε στρατηγικούς λογαριασμούς στο AWS. Η Rachna είναι αισιόδοξη που πιστεύει ότι η ηθική και υπεύθυνη χρήση της τεχνητής νοημοσύνης μπορεί να βελτιώσει την κοινωνία στο μέλλον και να φέρει οικονομική και κοινωνική ευημερία. Στον ελεύθερο χρόνο της, στη Ράχνα αρέσει να περνά χρόνο με την οικογένειά της, να κάνει πεζοπορία και να ακούει μουσική.

Απάντηση ερωτήσεων χρησιμοποιώντας το Retrieval Augmented Generation με μοντέλα θεμελίων στο Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Δόκτωρ Kyle Ulrich είναι Εφαρμοσμένος Επιστήμονας με την ομάδα ενσωματωμένων αλγορίθμων του Amazon SageMaker. Τα ερευνητικά του ενδιαφέροντα περιλαμβάνουν κλιμακωτούς αλγόριθμους μηχανικής μάθησης, όραση υπολογιστή, χρονοσειρές, μη παραμετρικές Μπεϋζιανές και διεργασίες Gauss. Το διδακτορικό του είναι από το Πανεπιστήμιο Duke και έχει δημοσιεύσει εργασίες στα NeurIPS, Cell και Neuron.

Απάντηση ερωτήσεων χρησιμοποιώντας το Retrieval Augmented Generation με μοντέλα θεμελίων στο Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Χέμαντ Σινγκ είναι Μηχανικός Μηχανικής Μάθησης με εμπειρία στους ενσωματωμένους αλγόριθμους Amazon SageMaker JumpStart και Amazon SageMaker. Πήρε το μεταπτυχιακό του από το Courant Institute of Mathematical Sciences και το B.Tech από το IIT Delhi. Είχε εμπειρία στην εργασία σε ένα ευρύ φάσμα προβλημάτων Μηχανικής Μάθησης στον τομέα της επεξεργασίας φυσικής γλώσσας, της όρασης υπολογιστή και της ανάλυσης χρονοσειρών.

Απάντηση ερωτήσεων χρησιμοποιώντας το Retrieval Augmented Generation με μοντέλα θεμελίων στο Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Manas Dadarkar είναι Διευθυντής Ανάπτυξης Λογισμικού που κατέχει τη μηχανική της υπηρεσίας Amazon Forecast. Είναι παθιασμένος με τις εφαρμογές της μηχανικής μάθησης και να κάνει τις τεχνολογίες ML εύκολα διαθέσιμες σε όλους για υιοθέτηση και ανάπτυξη στην παραγωγή. Εκτός δουλειάς, έχει πολλά ενδιαφέροντα, όπως ταξίδια, διάβασμα και να περνά χρόνο με φίλους και οικογένεια.

Απάντηση ερωτήσεων χρησιμοποιώντας το Retrieval Augmented Generation με μοντέλα θεμελίων στο Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Δρ Ashish Khetan είναι Ανώτερος Εφαρμοσμένος Επιστήμονας με ενσωματωμένους αλγόριθμους του Amazon SageMaker και βοηθά στην ανάπτυξη αλγορίθμων μηχανικής μάθησης. Πήρε το διδακτορικό του από το Πανεπιστήμιο του Illinois Urbana-Champaign. Είναι ενεργός ερευνητής στη μηχανική μάθηση και στα στατιστικά συμπεράσματα και έχει δημοσιεύσει πολλές εργασίες σε συνέδρια NeurIPS, ICML, ICLR, JMLR, ACL και EMNLP.

Σφραγίδα ώρας:

Περισσότερα από Μηχανική εκμάθηση AWS