Utilisez un modèle de base d'IA génératif pour résumer et répondre aux questions en utilisant vos propres données | Services Web Amazon

Utilisez un modèle de base d'IA génératif pour résumer et répondre aux questions en utilisant vos propres données | Services Web Amazon

Les grands modèles de langage (LLM) peuvent être utilisés pour analyser des documents complexes et fournir des résumés et des réponses aux questions. La poste Adaptation au domaine Ajustement des modèles de base dans Amazon SageMaker JumpStart sur les données financières décrit comment affiner un LLM à l'aide de votre propre ensemble de données. Une fois que vous avez un LLM solide, vous voudrez exposer ce LLM aux utilisateurs professionnels pour traiter de nouveaux documents, qui pourraient comporter des centaines de pages. Dans cet article, nous montrons comment construire une interface utilisateur en temps réel pour permettre aux utilisateurs professionnels de traiter un document PDF de longueur arbitraire. Une fois le dossier traité, vous pouvez résumer le document ou poser des questions sur le contenu. L'exemple de solution décrit dans cet article est disponible sur GitHub.

Travailler avec des documents financiers

Les états financiers comme les rapports sur les résultats trimestriels et les rapports annuels aux actionnaires comptent souvent des dizaines ou des centaines de pages. Ces documents contiennent beaucoup de langage passe-partout comme les clauses de non-responsabilité et le langage juridique. Si vous souhaitez extraire les points de données clés de l'un de ces documents, vous avez besoin à la fois de temps et d'une certaine familiarité avec le langage passe-partout afin de pouvoir identifier les faits intéressants. Et bien sûr, vous ne pouvez pas poser de questions à un LLM sur un document qu'il n'a jamais vu.

Les LLM utilisés pour le résumé ont une limite sur le nombre de jetons (caractères) passés dans le modèle, et à quelques exceptions près, ce ne sont généralement pas plus de quelques milliers de jetons. Cela empêche normalement la possibilité de résumer des documents plus longs.

Notre solution gère les documents qui dépassent la longueur maximale de la séquence de jetons d'un LLM et met ce document à la disposition du LLM pour répondre aux questions.

Vue d'ensemble de la solution

Notre conception comporte trois éléments importants :

  • Il dispose d'une application Web interactive permettant aux utilisateurs professionnels de télécharger et de traiter des fichiers PDF
  • Il utilise la bibliothèque langchain pour diviser un grand PDF en morceaux plus gérables
  • Il utilise la technique de génération augmentée de récupération pour permettre aux utilisateurs de poser des questions sur de nouvelles données que le LLM n'a pas vues auparavant

Comme le montre le diagramme suivant, nous utilisons un frontal implémenté avec React JavaScript hébergé dans un Service de stockage simple Amazon (Amazon S3) seau dirigé par Amazon CloudFront. L'application frontale permet aux utilisateurs de télécharger des documents PDF sur Amazon S3. Une fois le téléchargement terminé, vous pouvez déclencher une tâche d'extraction de texte alimentée par Extrait d'Amazon. Dans le cadre du post-traitement, un AWS Lambda La fonction insère des marqueurs spéciaux dans le texte indiquant les limites de la page. Lorsque ce travail est terminé, vous pouvez appeler une API qui résume le texte ou répond aux questions à ce sujet.

Utilisez un modèle de base d'IA générative pour la synthèse et la réponse aux questions en utilisant vos propres données | Amazon Web Services PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Étant donné que certaines de ces étapes peuvent prendre un certain temps, l'architecture utilise une approche asynchrone découplée. Par exemple, l'appel pour résumer un document appelle une fonction Lambda qui publie un message sur un Service Amazon Simple Queue (Amazon SQS). Une autre fonction Lambda récupère ce message et démarre une Service de conteneur élastique Amazon (AmazonECS) AWSFargate tâche. La tâche Fargate appelle le Amazon Sage Maker critère d'inférence. Nous utilisons ici une tâche Fargate car la synthèse d'un PDF très long peut prendre plus de temps et de mémoire qu'une fonction Lambda n'en dispose. Lorsque le récapitulatif est terminé, l'application frontale peut récupérer les résultats d'un Amazon DynamoDB tableau.

Pour résumer, nous utilisons le modèle Summarize d'AI21, l'un des modèles de base disponibles via Amazon SageMaker JumpStart. Bien que ce modèle gère des documents jusqu'à 10,000 40 mots (environ 10,000 pages), nous utilisons le séparateur de texte de langchain pour nous assurer que chaque appel de résumé au LLM ne dépasse pas XNUMX XNUMX mots. Pour la génération de texte, nous utilisons le modèle Medium de Cohere et nous utilisons GPT-J pour les intégrations, les deux via JumpStart.

Traitement de synthèse

Lors de la manipulation de documents plus volumineux, nous devons définir comment diviser le document en plus petits morceaux. Lorsque nous récupérons les résultats d'extraction de texte d'Amazon Textract, nous insérons des marqueurs pour les gros morceaux de texte (un nombre configurable de pages), les pages individuelles et les sauts de ligne. Langchain se divisera en fonction de ces marqueurs et assemblera des documents plus petits qui sont sous la limite de jetons. Voir le code suivant :

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)

Le LLM dans la chaîne de résumé est une mince enveloppe autour de notre point de terminaison 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 

Question répondant

Dans la méthode de génération augmentée par récupération, nous divisons d'abord le document en segments plus petits. Nous créons des intégrations pour chaque segment et les stockons dans la base de données vectorielle open-source Chroma via l'interface de langchain. Nous sauvegardons la base de données dans un Système de fichiers Amazon Elastic (Amazon EFS) système de fichiers pour une utilisation ultérieure. Voir le code suivant :

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()

Lorsque les incrustations sont prêtes, l'utilisateur peut poser une question. Nous recherchons dans la base de données vectorielle les morceaux de texte qui correspondent le mieux à la question :

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

Nous prenons le morceau correspondant le plus proche et l'utilisons comme contexte pour le modèle de génération de texte afin de répondre à la 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', '')

Expérience de l'utilisateur

Bien que les LLM représentent une science des données avancée, la plupart des cas d'utilisation des LLM impliquent finalement une interaction avec des utilisateurs non techniques. Notre exemple d'application Web gère un cas d'utilisation interactif où les utilisateurs professionnels peuvent télécharger et traiter un nouveau document PDF.

Le schéma suivant montre l'interface utilisateur. Un utilisateur commence par télécharger un PDF. Une fois le document stocké dans Amazon S3, l'utilisateur peut démarrer la tâche d'extraction de texte. Une fois cette opération terminée, l'utilisateur peut appeler la tâche de synthèse ou poser des questions. L'interface utilisateur expose certaines options avancées telles que la taille des blocs et le chevauchement des blocs, ce qui serait utile pour les utilisateurs avancés qui testent l'application sur de nouveaux documents.

Interface utilisateur

Prochaines étapes

Les LLM offrent de nouvelles capacités importantes de récupération d'informations. Les utilisateurs professionnels ont besoin d'un accès pratique à ces fonctionnalités. Il y a deux directions pour les travaux futurs à considérer :

  • Tirez parti des puissants LLM déjà disponibles dans les modèles de fondation Jumpstart. Avec seulement quelques lignes de code, notre exemple d'application pourrait déployer et utiliser des LLM avancés d'AI21 et de Cohere pour la synthèse et la génération de texte.
  • Rendre ces fonctionnalités accessibles aux utilisateurs non techniques. Une condition préalable au traitement des documents PDF est l'extraction du texte du document, et l'exécution des travaux de synthèse peut prendre plusieurs minutes. Cela nécessite une interface utilisateur simple avec des capacités de traitement backend asynchrones, facile à concevoir à l'aide de services cloud natifs tels que Lambda et Fargate.

Nous notons également qu'un document PDF est une information semi-structurée. Les indices importants tels que les titres de section sont difficiles à identifier par programmation, car ils dépendent de la taille des polices et d'autres indicateurs visuels. L'identification de la structure sous-jacente des informations aide le LLM à traiter les données avec plus de précision, du moins jusqu'à ce que les LLM puissent gérer des entrées de longueur illimitée.

Conclusion

Dans cet article, nous avons montré comment créer une application Web interactive qui permet aux utilisateurs professionnels de télécharger et de traiter des documents PDF pour les résumer et répondre aux questions. Nous avons vu comment tirer parti des modèles de base Jumpstart pour accéder aux LLM avancés et utiliser des techniques de génération augmentée de fractionnement et de récupération de texte pour traiter des documents plus longs et les rendre disponibles en tant qu'informations pour le LLM.

À ce stade, il n'y a aucune raison de ne pas mettre ces puissantes fonctionnalités à la disposition de vos utilisateurs. Nous vous encourageons à commencer à utiliser le Modèles de base Jumpstart dès aujourd’hui.


A propos de l'auteure

Photo de l'auteurRandy DeFauw est architecte principal principal de solutions chez AWS. Il est titulaire d'un MSEE de l'Université du Michigan, où il a travaillé sur la vision par ordinateur pour les véhicules autonomes. Il est également titulaire d'un MBA de la Colorado State University. Randy a occupé divers postes dans le domaine technologique, allant de l'ingénierie logicielle à la gestion de produits. In est entré dans l'espace Big Data en 2013 et continue d'explorer ce domaine. Il travaille activement sur des projets dans l'espace ML et a présenté de nombreuses conférences, notamment Strata et GlueCon.

Horodatage:

Plus de Apprentissage automatique AWS