Utilice un modelo de base de IA generativa para la síntesis y respuesta a preguntas utilizando sus propios datos

Use a generative AI base model for question synthesis and response using your own data.

Los modelos de lenguaje grandes (LLMs) se pueden usar para analizar documentos complejos y ofrecer resúmenes y respuestas a preguntas. El artículo Adaptación de dominio y ajuste fino de modelos base en Amazon SageMaker JumpStart sobre datos financieros describe cómo ajustar fino un LLM utilizando su propio conjunto de datos. Una vez que tenga un LLM sólido, querrá exponer ese LLM a los usuarios empresariales para procesar nuevos documentos, que podrían tener cientos de páginas de longitud. En este artículo, demostramos cómo construir una interfaz de usuario en tiempo real para permitir que los usuarios empresariales procesen un documento PDF de longitud arbitraria. Una vez que se procesa el archivo, puede resumir el documento o hacer preguntas sobre el contenido. La solución de ejemplo descrita en este artículo está disponible en GitHub.

Trabajando con documentos financieros

Los informes financieros, como los informes de ganancias trimestrales y los informes anuales para los accionistas, a menudo tienen decenas o cientos de páginas. Estos documentos contienen mucho texto estándar como exenciones de responsabilidad y lenguaje legal. Si desea extraer los puntos de datos clave de uno de estos documentos, necesita tiempo y cierta familiaridad con el texto estándar para poder identificar los hechos interesantes. Y, por supuesto, no puede hacer preguntas a un LLM sobre un documento que nunca ha visto.

Los LLM utilizados para la sumarización tienen un límite en el número de tokens (caracteres) que se pasan al modelo, y salvo algunas excepciones, estos suelen ser no más de unos pocos miles de tokens. Esto normalmente impide la capacidad de resumir documentos más largos.

Nuestra solución maneja documentos que exceden la longitud máxima de secuencia de tokens de un LLM y pone ese documento a disposición del LLM para responder preguntas.

Descripción general de la solución

Nuestro diseño tiene tres piezas importantes:

  • Tiene una aplicación web interactiva para que los usuarios empresariales carguen y procesen archivos PDF
  • Utiliza la biblioteca langchain para dividir un PDF grande en fragmentos más manejables
  • Utiliza la técnica de generación aumentada de recuperación para permitir que los usuarios hagan preguntas sobre nuevos datos que el LLM no haya visto antes

Como se muestra en el siguiente diagrama, utilizamos un front-end implementado con React JavaScript alojado en un bucket de Amazon Simple Storage Service (Amazon S3) con CloudFront de Amazon. La aplicación de front-end permite a los usuarios cargar documentos PDF en Amazon S3. Después de que se complete la carga, puede iniciar un trabajo de extracción de texto con Amazon Textract. Como parte del post-procesamiento, una función de AWS Lambda inserta marcadores especiales en el texto que indican los límites de página. Cuando se completa ese trabajo, puede invocar una API que resuma el texto o responda preguntas al respecto.

Debido a que algunos de estos pasos pueden llevar algo de tiempo, la arquitectura utiliza un enfoque asincrónico desacoplado. Por ejemplo, la llamada para resumir un documento invoca una función de Lambda que envía un mensaje a una cola de Amazon Simple Queue Service (Amazon SQS). Otra función de Lambda recoge ese mensaje y comienza una tarea de AWS Fargate en Amazon Elastic Container Service (Amazon ECS). La tarea de Fargate llama al punto de enlace de inferencia de Amazon SageMaker. Utilizamos una tarea de Fargate aquí porque resumir un PDF muy largo puede llevar más tiempo y memoria de la que una función de Lambda tiene disponible. Cuando se completa el resumen, la aplicación de front-end puede obtener los resultados de una tabla de Amazon DynamoDB.

Para la sumarización, utilizamos el modelo Summarize de AI21, uno de los modelos base disponibles a través de Amazon SageMaker JumpStart. Aunque este modelo maneja documentos de hasta 10,000 palabras (aproximadamente 40 páginas), utilizamos el separador de texto de langchain para asegurarnos de que cada llamada de sumarización al LLM no supere las 10,000 palabras. Para la generación de texto, utilizamos el modelo VoAGI de Cohere y utilizamos GPT-J para los embeddings, ambos a través de JumpStart.

Procesamiento de sumarización

Cuando se manejan documentos más grandes, necesitamos definir cómo dividir el documento en partes más pequeñas. Cuando recibimos los resultados de extracción de texto de Amazon Textract, insertamos marcadores para fragmentos más grandes de texto (un número configurable de páginas), páginas individuales y saltos de línea. Langchain se dividirá en función de esos marcadores y ensamblará documentos más pequeños que estén por debajo del límite de tokens. Vea el siguiente código:

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"Número de divisiones: {len(texts)}")

llm = SageMakerLLM(endpoint_name = endpoint_name)

responses = []
for t in texts:
     r = llm(t)
     responses.append(r)
summary = "\n".join(responses)

El LLM en la cadena de resumen es una envoltura delgada alrededor de nuestro punto final de SageMaker:

class SageMakerLLM(LLM):

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

Respuesta a preguntas

En el método de generación mejorada con recuperación, primero dividimos el documento en segmentos más pequeños. Creamos embeddings para cada segmento y los almacenamos en la base de datos de vectores Chroma de código abierto a través de la interfaz de langchain. Guardamos la base de datos en un sistema de archivos de Amazon Elastic File System (Amazon EFS) para su uso posterior. Vea el siguiente código:

documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size = 500,
                                                chunk_overlap  = 0)
texts = text_splitter.split_documents(documents)
print(f"Número de divisiones: {len(texts)}")

embeddings = SMEndpointEmbeddings(
    endpoint_name=endpoint_name,
)
vectordb = Chroma.from_documents(texts, embeddings, 
    persist_directory=persist_directory)
vectordb.persist()

Cuando los embeddings estén listos, el usuario puede hacer una pregunta. Buscamos en la base de datos de vectores los fragmentos de texto que se ajusten más a la pregunta:

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

Tomamos el fragmento de coincidencia más cercano y lo usamos como contexto para el modelo de generación de texto para responder la pregunta:

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

Experiencia del usuario

Aunque los LLM representan una ciencia de datos avanzada, la mayoría de los casos de uso para los LLM involucran la interacción con usuarios no técnicos. Nuestra aplicación web de ejemplo maneja un caso de uso interactivo donde los usuarios comerciales pueden cargar y procesar un nuevo documento PDF.

El siguiente diagrama muestra la interfaz de usuario. Un usuario comienza subiendo un PDF. Después de que el documento se almacena en Amazon S3, el usuario puede comenzar el trabajo de extracción de texto. Cuando eso esté completo, el usuario puede invocar la tarea de resumen o hacer preguntas. La interfaz de usuario expone algunas opciones avanzadas como el tamaño de fragmento y la superposición de fragmentos, que serían útiles para usuarios avanzados que están probando la aplicación en nuevos documentos.

Próximos pasos

Los LLM proporcionan capacidades significativas de recuperación de información. Los usuarios comerciales necesitan un acceso conveniente a esas capacidades. Hay dos direcciones para futuros trabajos a considerar:

  • Aprovechar los potentes LLM ya disponibles en los modelos de base de Jumpstart. Con solo unas pocas líneas de código, nuestra aplicación de ejemplo podría implementar y utilizar LLM avanzados de AI21 y Cohere para resumen y generación de texto.
  • Hacer que estas capacidades sean accesibles para usuarios no técnicos. Un requisito previo para procesar documentos PDF es extraer texto del documento, y los trabajos de resumen pueden tardar varios minutos en ejecutarse. Eso requiere una interfaz de usuario simple con capacidades de procesamiento de backend asincrónico, que es fácil de diseñar utilizando servicios nativos de la nube como Lambda y Fargate.

También observamos que un documento PDF es información semiestructurada. Las señales importantes como los encabezados de sección son difíciles de identificar programáticamente, porque dependen de tamaños de fuente y otros indicadores visuales. Identificar la estructura subyacente de la información ayuda al LLM a procesar los datos de manera más precisa, al menos hasta que los LLM puedan manejar la entrada de longitud sin límites.

Conclusión

En esta publicación, mostramos cómo construir una aplicación web interactiva que permite a los usuarios empresariales cargar y procesar documentos PDF para resumir y responder preguntas. Vimos cómo aprovechar los modelos de base de Jumpstart para acceder a LLMs avanzados y utilizar técnicas de división de texto y generación aumentada de recuperación para procesar documentos más largos y hacerlos disponibles como información para el LLM.

En este momento, no hay razón para no poner estas poderosas capacidades a disposición de tus usuarios. Te animamos a comenzar a usar los modelos de base de Jumpstart hoy mismo.

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Desde el Internet de las Cosas hasta el Internet de Todo La Convergencia de la IA y el 6G para una Inteligencia Conectada

Aprende cómo las tecnologías de vanguardia como la Inteligencia Artificial y el 6G inaugurarán una nueva era de siste...

Ciencias de la Computación

Mercedes incorpora ChatGPT en sus coches.

El fabricante de automóviles alemán Mercedes-Benz se ha asociado con Microsoft para agregar el software de inteligenc...

Inteligencia Artificial

Este boletín de inteligencia artificial es todo lo que necesitas #62

Esta semana hemos estado observando el desarrollo de modelos de codificación en META, así como las nuevas capacidades...

Inteligencia Artificial

California acaba de abrir las compuertas para los coches autónomos

Después de una decisión de la junta reguladora estatal, San Francisco tendrá robotaxis las 24 horas del día, los 7 dí...

Inteligencia Artificial

INDIAai y Meta se unen Abren camino para la innovación y colaboración en IA

En un desarrollo prometedor, INDIAai y Meta se han unido para establecer una poderosa colaboración en el ámbito de la...

Inteligencia Artificial

La manía de la IA ¿Se dirige hacia una burbuja a punto de estallar?

El mundo de la inteligencia artificial (IA) experimentó un gran aumento de interés por parte de los inversores de cap...