Χρησιμοποιήστε ένα παραγωγικό μοντέλο θεμελίωσης AI για σύνοψη και απάντηση ερωτήσεων χρησιμοποιώντας τα δικά σας δεδομένα | Υπηρεσίες Ιστού της Amazon

Χρησιμοποιήστε ένα παραγωγικό μοντέλο θεμελίωσης AI για σύνοψη και απάντηση ερωτήσεων χρησιμοποιώντας τα δικά σας δεδομένα | Υπηρεσίες Ιστού της Amazon

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

Εργασία με οικονομικά έγγραφα

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

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

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

Επισκόπηση λύσεων

Το σχέδιό μας έχει τρία σημαντικά κομμάτια:

  • Διαθέτει μια διαδραστική εφαρμογή web για επαγγελματίες χρήστες για να ανεβάζουν και να επεξεργάζονται αρχεία PDF
  • Χρησιμοποιεί τη βιβλιοθήκη langchain για να χωρίσει ένα μεγάλο PDF σε πιο διαχειρίσιμα κομμάτια
  • Χρησιμοποιεί την τεχνική ανάκτησης επαυξημένης γενιάς για να επιτρέπει στους χρήστες να κάνουν ερωτήσεις σχετικά με νέα δεδομένα που το LLM δεν έχει δει πριν

Όπως φαίνεται στο παρακάτω διάγραμμα, χρησιμοποιούμε μια διεπαφή που υλοποιείται με React JavaScript που φιλοξενείται σε ένα Απλή υπηρεσία αποθήκευσης Amazon (Amazon S3) κουβάς μπροστά Amazon CloudFront. Η εφαρμογή front-end επιτρέπει στους χρήστες να ανεβάζουν έγγραφα PDF στο Amazon S3. Αφού ολοκληρωθεί η μεταφόρτωση, μπορείτε να ενεργοποιήσετε μια εργασία εξαγωγής κειμένου που υποστηρίζεται από Textract Amazon. Ως μέρος της μετα-επεξεργασίας, ένα AWS Lambda Η συνάρτηση εισάγει ειδικούς δείκτες στο κείμενο που υποδεικνύουν τα όρια της σελίδας. Όταν ολοκληρωθεί αυτή η εργασία, μπορείτε να επικαλεστείτε ένα API που συνοψίζει το κείμενο ή απαντά σε ερωτήσεις σχετικά με αυτό.

Χρησιμοποιήστε ένα παραγωγικό μοντέλο θεμελίωσης AI για σύνοψη και απάντηση ερωτήσεων χρησιμοποιώντας τα δικά σας δεδομένα | Υπηρεσίες Ιστού Amazon PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Επειδή ορισμένα από αυτά τα βήματα μπορεί να διαρκέσουν κάποιο χρόνο, η αρχιτεκτονική χρησιμοποιεί μια αποσυνδεδεμένη ασύγχρονη προσέγγιση. Για παράδειγμα, η κλήση για σύνοψη ενός εγγράφου καλεί μια συνάρτηση Lambda που δημοσιεύει ένα μήνυμα σε ένα Υπηρεσία απλής ουράς Amazon (Amazon SQS) ουρά. Μια άλλη συνάρτηση Lambda λαμβάνει αυτό το μήνυμα και ξεκινά ένα Υπηρεσία ελαστικών εμπορευματοκιβωτίων Amazon (Amazon ECS) AWS Fargate έργο. Η εργασία Fargate καλεί το Amazon Sage Maker τελικό σημείο συμπερασμάτων. Χρησιμοποιούμε μια εργασία Fargate εδώ, επειδή η σύνοψη ενός πολύ μεγάλου PDF μπορεί να πάρει περισσότερο χρόνο και μνήμη από ό,τι έχει διαθέσιμη μια συνάρτηση Lambda. Όταν ολοκληρωθεί η σύνοψη, η εφαρμογή front-end μπορεί να πάρει τα αποτελέσματα από ένα Amazon DynamoDB πίνακα.

Για περίληψη, χρησιμοποιούμε το μοντέλο Summarize του AI21, ένα από τα βασικά μοντέλα που είναι διαθέσιμα μέσω Amazon SageMaker JumpStart. Αν και αυτό το μοντέλο χειρίζεται έγγραφα έως και 10,000 λέξεων (περίπου 40 σελίδες), χρησιμοποιούμε τον διαχωριστή κειμένου της langchain για να βεβαιωθούμε ότι κάθε κλήση περίληψης στο LLM δεν υπερβαίνει τις 10,000 λέξεις. Για τη δημιουργία κειμένου, χρησιμοποιούμε το μοντέλο Cohere's Medium και χρησιμοποιούμε το GPT-J για ενσωματώσεις, και τα δύο μέσω του JumpStart.

Επεξεργασία περίληψης

Όταν χειριζόμαστε μεγαλύτερα έγγραφα, πρέπει να ορίσουμε πώς να χωρίσουμε το έγγραφο σε μικρότερα κομμάτια. Όταν λαμβάνουμε τα αποτελέσματα εξαγωγής κειμένου πίσω από το Amazon Textract, εισάγουμε δείκτες για μεγαλύτερα κομμάτια κειμένου (ένας διαμορφώσιμος αριθμός σελίδων), μεμονωμένες σελίδες και αλλαγές γραμμής. Η Langchain θα χωριστεί με βάση αυτούς τους δείκτες και θα συναρμολογήσει μικρότερα έγγραφα που βρίσκονται κάτω από το όριο διακριτικών. Δείτε τον παρακάτω κώδικα:

text_splitter = RecursiveCharacterTextSplitter( separators = ["<CHUNK>", "<PAGE>", "n"], chunk_size = int(chunk_size), chunk_overlap = int(chunk_overlap)) with open(local_path) as f: doc = f.read() texts = text_splitter.split_text(doc) print(f"Number of splits: {len(texts)}") llm = SageMakerLLM(endpoint_name = endpoint_name) responses = [] for t in texts: r = llm(t) responses.append(r) summary = "n".join(responses)

Το LLM στην αλυσίδα σύνοψης είναι ένα λεπτό περιτύλιγμα γύρω από το τελικό σημείο του SageMaker:

class SageMakerLLM(LLM): endpoint_name: str @property
def _llm_type(self) -> str: return "summarize" def _call(self, prompt: str, stop: Optional[List[str]] = None) -> str: response = ai21.Summarize.execute( source=prompt, sourceType="TEXT", sm_endpoint=self.endpoint_name ) return response.summary 

Ερώτηση απάντηση

Στη μέθοδο ανάκτησης επαυξημένης παραγωγής, πρώτα χωρίζουμε το έγγραφο σε μικρότερα τμήματα. Δημιουργούμε ενσωματώσεις για κάθε τμήμα και τις αποθηκεύουμε στη βάση δεδομένων ανοιχτού κώδικα Chroma vector μέσω της διεπαφής του langchain. Αποθηκεύουμε τη βάση δεδομένων σε ένα Σύστημα αρχείων ελαστικού Amazon (Amazon EFS) σύστημα αρχείων για μελλοντική χρήση. Δείτε τον παρακάτω κώδικα:

documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size = 500, chunk_overlap = 0)
texts = text_splitter.split_documents(documents)
print(f"Number of splits: {len(texts)}") embeddings = SMEndpointEmbeddings( endpoint_name=endpoint_name,
)
vectordb = Chroma.from_documents(texts, embeddings, persist_directory=persist_directory)
vectordb.persist()

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

embeddings = SMEndpointEmbeddings( endpoint_name=endpoint_embed
)
vectordb = Chroma(persist_directory=persist_directory, embedding_function=embeddings)
docs = vectordb.similarity_search_with_score(question)

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

cohere_client = Client(endpoint_name=endpoint_qa)
context = docs[high_score_idx][0].page_content.replace("n", "")
qa_prompt = f'Context={context}nQuestion={question}nAnswer='
response = cohere_client.generate(prompt=qa_prompt, max_tokens=512, temperature=0.25, return_likelihoods='GENERATION')
answer = response.generations[0].text.strip().replace('n', '')

Εμπειρία χρήστη

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

Το παρακάτω διάγραμμα δείχνει τη διεπαφή χρήστη. Ένας χρήστης ξεκινάει ανεβάζοντας ένα PDF. Μετά την αποθήκευση του εγγράφου στο Amazon S3, ο χρήστης μπορεί να ξεκινήσει την εργασία εξαγωγής κειμένου. Όταν αυτό ολοκληρωθεί, ο χρήστης μπορεί να επικαλεστεί την εργασία σύνοψης ή να κάνει ερωτήσεις. Η διεπαφή χρήστη εκθέτει ορισμένες προηγμένες επιλογές, όπως το μέγεθος και την επικάλυψη κομματιού, κάτι που θα ήταν χρήσιμο για προχωρημένους χρήστες που δοκιμάζουν την εφαρμογή σε νέα έγγραφα.

διεπαφή χρήστη

Τα επόμενα βήματα

Τα LLM παρέχουν σημαντικές νέες δυνατότητες ανάκτησης πληροφοριών. Οι επαγγελματίες χρήστες χρειάζονται εύκολη πρόσβαση σε αυτές τις δυνατότητες. Υπάρχουν δύο κατευθύνσεις για μελλοντικές εργασίες που πρέπει να ληφθούν υπόψη:

  • Επωφεληθείτε από τα ισχυρά LLM που είναι ήδη διαθέσιμα στα μοντέλα Jumpstart foundation. Με λίγες μόνο γραμμές κώδικα, το δείγμα της εφαρμογής μας θα μπορούσε να αναπτύξει και να χρησιμοποιήσει προηγμένα LLM από το AI21 και το Cohere για σύνοψη και δημιουργία κειμένου.
  • Κάντε αυτές τις δυνατότητες προσβάσιμες σε μη τεχνικούς χρήστες. Προϋπόθεση για την επεξεργασία εγγράφων PDF είναι η εξαγωγή κειμένου από το έγγραφο και οι εργασίες σύνοψης ενδέχεται να διαρκέσουν αρκετά λεπτά για να εκτελεστούν. Αυτό απαιτεί μια απλή διεπαφή χρήστη με δυνατότητες ασύγχρονης επεξεργασίας backend, η οποία είναι εύκολο να σχεδιαστεί χρησιμοποιώντας υπηρεσίες εγγενούς στο cloud, όπως το Lambda και το Fargate.

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

Συμπέρασμα

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

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


Σχετικά με τον Συγγραφέα

Φωτογραφία συγγραφέαRandy DeFauw είναι Senior Principal Solutions Architect στην AWS. Είναι κάτοχος MSEE από το Πανεπιστήμιο του Μίσιγκαν, όπου εργάστηκε στην όραση υπολογιστών για αυτόνομα οχήματα. Είναι επίσης κάτοχος MBA από το Κρατικό Πανεπιστήμιο του Κολοράντο. Ο Randy κατείχε διάφορες θέσεις στον τεχνολογικό χώρο, που κυμαίνονται από τη μηχανική λογισμικού έως τη διαχείριση προϊόντων. Το In εισήλθε στον χώρο των Big Data το 2013 και συνεχίζει να εξερευνά αυτήν την περιοχή. Εργάζεται ενεργά σε έργα στον χώρο της ML και έχει παρουσιάσει σε πολυάριθμα συνέδρια, συμπεριλαμβανομένων των Strata και GlueCon.

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

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