Compartir a través de


Resumen de documentos basados en consultas

En esta guía se muestra cómo realizar el resumen de documentos mediante el modelo GPT-3 de Azure OpenAI. Describe conceptos relacionados con el proceso de resumen de documentos, enfoques para el proceso y recomendaciones sobre qué modelo usar para casos de uso específicos. Por último, presenta dos casos de uso, junto con fragmentos de código de ejemplo, para ayudarle a comprender los conceptos clave.

Architecture

En el diagrama siguiente se muestra cómo una consulta de usuario captura los datos pertinentes. El generador de resumen usa GPT-3 para generar un resumen del texto del documento más relevante. En esta arquitectura, el punto de conexión GPT-3 se usa para resumir el texto.

Diagrama que muestra a un usuario usando GPT-3 para hacer una búsqueda y un proceso de resumen.

Descargue un archivo de PowerPoint de esta arquitectura.

Flujo de trabajo

Este flujo de trabajo se produce casi en tiempo real.

  1. Un usuario envía una consulta. Por ejemplo, un empleado de una empresa de fabricación busca información específica sobre una pieza de máquina en el portal de empresa. La consulta se procesa primero mediante un reconocedor de intenciones como el Reconocimiento del lenguaje conversacional. Las entidades o conceptos pertinentes de la consulta de usuario se usan para seleccionar y presentar un subconjunto de documentos de un knowledge base que se rellena sin conexión (en este caso, la base de datos knowledge base de la empresa). La salida se introduce en un motor de búsqueda y análisis como Azure Elastic Search, que filtra los documentos pertinentes para devolver un conjunto de documentos de cientos en lugar de miles o decenas de miles.
  2. La consulta de usuario se vuelve a aplicar en un punto de conexión de búsqueda como Azure Cognitive Search para clasificar el conjunto de documentos recuperado en orden de relevancia (clasificación de páginas). Se selecciona el documento con la clasificación más alta.
  3. El documento seleccionado se examina en busca de oraciones pertinentes. Este proceso de examen usa un método grueso, como extraer todas las oraciones que contienen la consulta del usuario o un método más sofisticado, como las incrustaciones GPT-3, para buscar material semánticamente similar en el documento.
  4. Una vez extraído el texto pertinente, el punto de conexión de finalizaciones de GPT-3 con el generador de resumen resume el contenido extraído. En este ejemplo, se devuelve el resumen de detalles importantes sobre la parte especificada por el empleado en la consulta.

Este artículo se centra en el componente de resumen de la arquitectura.

Detalles del escenario

Las empresas suelen crear y mantener una knowledge base sobre procesos empresariales, clientes, productos e información. Sin embargo, devolver contenido relevante basado en una consulta de usuario de un conjunto de datos grande suele ser difícil. El usuario puede consultar el knowledge base y buscar un documento aplicable mediante métodos como la clasificación de páginas, pero profundizar más en el documento para buscar información relevante normalmente se convierte en una tarea manual que tarda tiempo. Sin embargo, con los avances recientes en los modelos de transformador de base como el desarrollado por OpenAI, el mecanismo de consulta se ha refinado mediante métodos de búsqueda semántica que usan información de codificación como incrustaciones para encontrar información relevante. Estos desarrollos permiten resumir el contenido y presentarlo al usuario de forma concisa y concreta.

El resumen de documentos es el proceso de creación de resúmenes a partir de grandes volúmenes de datos, a la vez que se mantienen elementos informativos importantes y contenido de valor. En este artículo se muestra cómo usar las funcionalidades de GPT-3 de Azure OpenAI Service para un caso de uso específico. GPT-3 es una herramienta eficaz que puede usarse para una gran variedad de tareas de procesamiento de lenguaje natural, como traducciones de idiomas, bots de chat, hacer resúmenes de textos y crear contenido. Los métodos y la arquitectura que se describen aquí son personalizables y se pueden aplicar a muchos conjuntos de datos.

Posibles casos de uso

El resumen de documentos se aplica a cualquier dominio organizativo que requiera que los usuarios busquen grandes cantidades de datos de referencia y generen un resumen que describa concisamente la información pertinente. Los dominios típicos incluyen organizaciones legales, financieras, de noticias, sanitarias y académicas. Los posibles casos de uso para hacer resúmenes son:

  • Generar resúmenes para resaltar información clave sobre noticias, informes financieros, etc.
  • Crear una referencia rápida para hacer referencia a un argumento, por ejemplo, en procedimientos legales.
  • Proporcionar contexto para la tesis de un documento, como en la configuración académica.
  • Escribir reseñas literarias.
  • Anotar una bibliografía.

Algunas ventajas de usar un servicio de resumen para cualquier caso de uso son:

  • Se reduce el tiempo de lectura.
  • Búsquedas más eficaces en grandes volúmenes de datos dispares.
  • Menor probabilidad de sesgo de técnicas de resumen humano. (Esta ventaja depende de la parcialidad de los datos de entrenamiento).
  • Permitir que los empleados y los usuarios se centren en un análisis más detallado.

Aprendizaje en contexto

El servicio OpenAI de Azure usa un modelo de finalización generativa. El modelo usa instrucciones de lenguaje natural para identificar la tarea solicitada y la aptitud requerida, un proceso conocido como ingeniería de solicitud. Al usar este enfoque, la primera parte de la solicitud incluye instrucciones de lenguaje natural o ejemplos de la tarea deseada. El modelo termina la terea prediciendo el texto siguiente más probable. Esta técnica se conoce como aprendizaje en contexto.

Con el aprendizaje en contexto, los modelos de lenguaje pueden aprender tareas a partir de unos pocos ejemplos. El modelo de lenguaje se proporciona con una solicitud que contiene una lista de pares de entrada-salida que determinan una tarea y prosigue con una entrada de prueba. El modelo realiza una predicción mediante el acondicionamiento en la solicitud y la predicción de los siguientes tokens.

Hay tres enfoques principales para el aprendizaje en contexto: el aprendizaje zero-shot, el aprendizaje few-shot y los métodos de ajuste preciso que cambian y mejoran la salida. Estos enfoques varían en función de la cantidad de datos específicos de la tarea que se proporcionan al modelo.

Zero-shot: En este enfoque, no se proporciona ningún ejemplo al modelo. Solo se proporciona la solicitud de la tarea como entrada. En el aprendizaje zero-shot, el modelo depende de los conceptos entrenados previamente. Responde solo en función de los datos en los que está entrenado. No comprende necesariamente el significado semántico, pero tiene un conocimiento estadístico que se basa en todo lo que se aprende de Internet sobre lo que se debe generar a continuación. El modelo intenta relacionar la tarea dada con las categorías existentes que ya ha aprendido y responde en consecuencia.

Few-shot: En este caso, un usuario incluye varios ejemplos en la solicitud de llamada que muestran el formato y el contenido de respuesta que espera. El modelo se proporciona con un conjunto de datos de entrenamiento muy pequeño para guiar sus predicciones. El entrenamiento con un pequeño conjunto de ejemplos permite que el modelo generalice y comprenda las tareas no relacionadas pero no vistos previamente. La creación de algunos ejemplos puede ser difícil porque necesita articular con precisión la tarea que desea que el modelo realice. Un problema observado habitualmente es que los modelos son sensibles al estilo de escritura que se usa en los ejemplos de entrenamiento, especialmente los modelos pequeños.

Ajuste preciso: El ajuste preciso es un proceso de adaptación de modelos a sus propios conjuntos de datos. En este paso de personalización, puede mejorar el proceso haciendo lo siguiente:

  • Incluir un conjunto de datos más grande (al menos 500 ejemplos).
  • Usar técnicas de optimización tradicionales con la propiedad de retropropagación para reajustar los pesos del modelo. Estas técnicas permiten obtener resultados de mayor calidad que los que los enfoques zero-shot o few-shot proporcionan por sí mismos.
  • Mejorar el enfoque de pocos pasos mediante el entrenamiento de los pesos del modelo con avisos específicos y una estructura concreta. Esta técnica permite obtener mejores resultados en un mayor número de tareas sin necesidad de proporcionar ejemplos en la solicitud. El resultado es menos texto enviado y menos tokens.

Al crear una solución en GPT-3, el esfuerzo principal es el diseño y el contenido de la solicitud de entrenamiento.

Ingeniería rápida

La ingeniería rápida es una materia de procesamiento de lenguaje natural que implica la detección de entradas que producen salidas deseables o útiles. Cuando un usuario hace una solicitud al sistema, la forma en que se expresa el contenido puede cambiar drásticamente la salida. El diseño de la solicitud es el proceso más significativo para garantizar que el modelo GPT-3 proporciona una respuesta adaptada al contexto y a lo que se quiere.

La arquitectura descrita en este artículo usa el punto de conexión de finalizaciones para el hacer resumen. El punto de conexión de finalizaciones es una API de Servicios de Azure AI que acepta un mensaje parcial o un contexto como entrada y devuelve una o varias salidas que continúan o completan el texto de entrada. Un usuario proporciona texto de entrada a modo de solicitud y el modelo genera un texto que intenta coincidir con el contexto o patrón proporcionado. El diseño de la solicitud depende en gran medida de la tarea y los datos. La incorporación de ingeniería rápida en un conjunto de datos de ajuste preciso e investigación de lo que funciona mejor antes de usar el sistema en producción requiere un tiempo y un esfuerzo significativos.

Diseño de la solicitud

Los modelos GPT-3 pueden realizar varias tareas, por lo que debe ser explícito en los objetivos del diseño. Los modelos calculan la salida deseada en función de la solicitud proporcionada.

Por ejemplo, si entra las palabras "dame una lista de razas de gatos", el modelo no asumirá automáticamente que le pide una lista de razas de gatos. Podría estar pidiéndole al modelo que continuara una conversación en la que las primeras palabras fueran "Dame una lista de razas de gatos" y las siguientes "y te diré cuáles me gustan". Si el modelo solo asumiera que quiere una lista de gatos, no sería tan bueno en la creación de contenidos, en la clasificación o en otras tareas.

Como se describe en Aprenda a generar o manipular texto, hay tres directrices básicas para crear solicitudes:

  • Mostrar y contar Mejore la claridad sobre lo que desea proporcionando instrucciones, ejemplos o una combinación de estos dos. Si quiere que el modelo clasifique una lista de elementos por orden alfabético o que clasifique un párrafo por opinión, muéstrele que eso es lo que quiere.
  • Proporcionar datos de calidad. Si va a crear un clasificador o quiere que un modelo siga un patrón, asegúrese de proporcionar suficientes ejemplos. También debe revisar estos ejemplos. Normalmente, el modelo puede reconocer errores ortográficos y devolver una respuesta, pero podría suponer que los errores ortográficos son intencionales, lo que puede afectar a la respuesta.
  • Compruebe la configuración. La configuración de temperature y el top_p controla cómo de determinante es el modelo a la hora de generar una respuesta. Si pregunta para obtener una respuesta que solo tenga una respuesta correcta, configure estas opciones en un nivel inferior. Si quiere respuestas más diversas, es posible que quiera configurar las opciones en un nivel superior. Un error común es suponer que estas configuraciones son controles de "inteligencia" o "creatividad".

Alternativas

El reconocimiento del lenguaje conversacional de Azure es una alternativa al generador de resumen que se usa aquí. El propósito principal de la comprensión del lenguaje conversacional es crear modelos que predigan la intención general de una expresión entrante, extraigan información valiosa de ella y generen una respuesta que se alinee con el tema. Resulta útil en las aplicaciones de bot de chat cuando puede hacer referencia a un knowledge base existente para encontrar la sugerencia que mejor se corresponda con la expresión entrante. No ayuda mucho cuando el texto de entrada no requiere una respuesta. La intención de esta arquitectura es generar un breve resumen de los contenidos textuales largos. La esencia del contenido se describe de forma concisa y se representa toda la información importante.

Escenarios de ejemplo

En este caso de uso, se resume una colección de proyectos legislativos aprobados a través del Congreso. El resumen está ajustado para acercarlo a un resumen generado por personas, lo que se conoce como resumen de verdad fundamentada.

La ingeniería rápida zero-shot se usa para resumir las facturas. A continuación, se modifican la solicitud y la configuración para generar diferentes resúmenes como salidas.

Dataset

El primer conjunto de datos es el conjunto de datos BillSum para resumir las facturas estatales del Congreso de Estados Unidos y California. En este ejemplo solo se usan las leyes del Congreso. Los datos se dividen en 18.949 facturas que se usarán para el entrenamiento y 3.269 facturas que se usarán para las pruebas. BillSum se centra en la legislación de longitud media que tiene entre 5.000 y 20.000 caracteres. Está limpiado y preprocesado.

Para obtener más información sobre el conjunto de datos y las instrucciones para su descarga, vea FiscalNote/BillSum en GitHub.

Esquema BillSum

El esquema del conjunto de datos BillSum incluye:

  • bill_id. Identificador del error.
  • text. Texto de la factura.
  • summary. Un resumen escrito por una persona de la factura.
  • title. Título de la factura.
  • text_len. Longitud del carácter de la entidad.
  • sum_len. Longitud del carácter del resumen de la factura.

En este caso de uso, se usan los elementos text y summary.

Zero-shot

El objetivo aquí es enseñar el modelo GPT-3 para aprender la entrada de estilo de conversación. El punto de conexión de finalizaciones se usa para crear una API de Azure OpenAI y una solicitud que genera el mejor resumen posible de la factura. Es importante crear cuidadosamente las solicitudes para que se extraiga información relevante. Para extraer resúmenes generales de una factura determinada, se usa el siguiente formato.

  • Prefijo: lo que desea que haga.
  • Introducción al contexto: contexto.
  • Contexto: la información necesaria para proporcionar una respuesta. En este caso, el texto que se va a resumir.
  • Sufijo: forma prevista de la respuesta. Por ejemplo, una respuesta, una finalización o un resumen.
API_KEY = # SET YOUR OWN API KEY HERE
RESOURCE_ENDPOINT = " -- # SET A LINK TO YOUR RESOURCE ENDPOINT -- "

openai.api_type = "azure"
openai.api_key = API_KEY
openai.api_base = RESOURCE_ENDPOINT
openai.api_version = "2022-12-01-preview"
prompt_i = 'Summarize the legislative bill given the title and the text.\n\nTitle:\n'+" ".join([normalize_text(bill_title_1)])+ '\n\nText:\n'+ " ".join([normalize_text(bill_text_1)])+'\n\nSummary:\n'
response = openai.Completion.create(
    engine=TEXT_DAVINCI_001
    prompt=prompt_i,
    temperature=0.4,
    max_tokens=500,
    top_p=1.0,
    frequency_penalty=0.5,
    presence_penalty=0.5,
    stop=['\n\n###\n\n'], # The ending token used during inference. Once it reaches this token, GPT-3 knows the completion is over.
    best_of=1
    )
 = 1

Verdad fundamentada: Ley Nacional de Incentivos Fiscales a la Educación Científica para Empresas en 2007: Modifica el Código de Rentas Internas para permitir un crédito fiscal empresarial general para las contribuciones de bienes o servicios a las escuelas primarias y secundarias y para la formación del profesorado con el fin de promover la educación en ciencia, tecnología, ingeniería o matemáticas.

Resumen del modelo zero-shot: La Ley nacional de incentivos fiscales para la educación científica para empresas de 2007 crearía un nuevo crédito fiscal para empresas que hagan contribuciones a la ciencia, la tecnología, la ingeniería y la educación matemática (STEM) en el nivel de escuela primaria y secundaria. El crédito sería igual al 100 por ciento de las contribuciones STEM calificadas del contribuyente para el año sujeto pasivo. Las contribuciones de STEM calificadas incluyen contribuciones a la escuela STEM, gastos de externificación de maestros DE STEM y gastos de formación de profesores de STEM.

Observaciones: El modelo de captura cero genera un resumen concisa y generalizado del documento. Es similar a la verdad fundamentada en escritos por personas y captura los mismos puntos clave. Se organiza como un resumen escrito por personas y permanece centrado en el punto.

Ajuste preciso

El ajuste preciso mejora el aprendizaje zero-shot mediante el entrenamiento en más ejemplos de los que puede incluir en la solicitud, por lo que se obtienen mejores resultados en un mayor número de tareas. Después de ajustar un modelo, no es necesario proporcionar ejemplos en la solicitud. El ajuste preciso ahorra dinero al reducir el número de tokens necesarios y permite solicitudes de menor latencia.

En un nivel alto, el ajuste preciso incluye estos pasos:

  • Preparar y cargar los datos de entrenamiento.
  • Entrenar un nuevo modelo ajustado.
  • Usar el modelo con ajuste preciso.

Para más información, consulte Personalización de un modelo con el servicio OpenAI de Azure.

Preparar datos para el ajuste preciso

Este paso permite mejorar el modelo zero-shot mediante la incorporación de ingeniería rápida en las solicitudes que se usan para el ajuste preciso. Esto ayuda a proporcionar instrucciones al modelo sobre cómo acercarse a los pares de solicitud y finalización. En un modelo de ajuste preciso, las solicitudes proporcionan un punto de partida del que el modelo puede aprender y usarse para realizar predicciones. Este proceso permite que el modelo comience con una comprensión básica de los datos, lo que se puede mejorar gradualmente a medida que el modelo se expone a más datos. Además, las solicitudes pueden ayudar al modelo a identificar patrones en los datos que, de lo contrario, podrían perderse.

La misma estructura de ingeniería de solicitudes también se usa durante la inferencia, una vez finalizado el entrenamiento del modelo, de modo que el modelo reconozca el comportamiento que ha aprendido durante el entrenamiento y pueda generar finalizaciones como se indica.

#Adding variables used to design prompts consistently across all examples
#You can learn more here: https://learn.microsoft.com/azure/cognitive-services/openai/how-to/prepare-dataset

LINE_SEP = " \n "
PROMPT_END = " [end] "
#Injecting the zero-shot prompt into the fine-tune dataset
def stage_examples(proc_df):
    proc_df['prompt'] = proc_df.apply(lambda x:"Summarize the legislative bill. Do not make up facts.\n\nText:\n"+" ".join([normalize_text(x['prompt'])])+'\n\nSummary:', axis=1)
    proc_df['completion'] = proc_df.apply(lambda x:" "+normalize_text(x['completion'])+PROMPT_END, axis=1)

    return proc_df

df_staged_full_train = stage_examples(df_prompt_completion_train)
df_staged_full_val = stage_examples(df_prompt_completion_val)

Ahora que los datos están almacenados provisionalmente para el ajuste preciso en el formato adecuado, puede empezar a ejecutar los comandos de ajuste.

A continuación, puede usar la CLI de OpenAI para ayudar con algunos de los pasos de preparación de datos. La herramienta OpenAI valida los datos, proporciona sugerencias y vuelve a formatear los datos.

openai tools fine_tunes.prepare_data -f data/billsum_v4_1/prompt_completion_staged_train.csv

openai tools fine_tunes.prepare_data -f data/billsum_v4_1/prompt_completion_staged_val.csv
Ajuste del conjunto de datos
payload = {
  "model": "curie",
  "training_file": " -- INSERT TRAINING FILE ID -- ",
  "validation_file": "-- INSERT VALIDATION FILE ID --",
  "hyperparams": {
  "n_epochs": 1,
  "batch_size": 200,
  "learning_rate_multiplier": 0.1,
  "prompt_loss_weight": 0.0001    
  }
}

url = RESOURCE_ENDPOINT + "openai/fine-tunes?api-version=2022-12-01-preview"
r = requests.post(url, 
    headers={
    "api-key": API_KEY,
    "Content-Type": "application/json"
    },
    json = payload
)
data = r.json()
print(data)
fine_tune_id = data['id']
print('Endpoint Called: {endpoint}'.format(endpoint = url))
print('Status Code: {status}'.format(status= r.status_code))
print('Fine tuning job ID: {id}'.format(id=fine_tune_id))
print('Response Information \n\n {text}'.format(text=r.text))
Evaluación del modelo con ajuste preciso

En esta sección se muestra cómo evaluar el modelo con ajuste preciso.

#Run this cell to check status
url = RESOURCE_ENDPOINT + "openai/fine-tunes/<--insert fine-tune id-->?api-version=2022-12-01-preview"
r = requests.get(url, 
    headers={
    "api-key": API_KEY,
    "Content-Type": "application/json"
    }
)

data = r.json()
print('Endpoint Called: {endpoint}'.format(endpoint = url))
print('Status Code: {status}'.format(status= r.status_code))
print('Fine tuning ID: {id}'.format(id=fine_tune_id))
print('Status: {status}'.format(status = data['status'])) 
print('Response Information \n\n {text}'.format(text=r.text))

Verdad fundamentada: Ley Nacional de Incentivos Fiscales a la Educación Científica para Empresas en 2007: Modifica el Código de Rentas Internas para permitir un crédito fiscal empresarial general para las contribuciones de bienes o servicios a las escuelas primarias y secundarias y para la formación del profesorado con el fin de promover la educación en ciencia, tecnología, ingeniería o matemáticas.

Resumen del modelo con ajuste preciso: Este proyecto de ley proporciona un crédito fiscal para las contribuciones a las escuelas primarias y secundarias que benefician a la ciencia, la tecnología, la ingeniería y la educación matemática. El crédito es igual al 100% de las contribuciones STEM calificadas realizadas por los contribuyentes durante el año sujeto pasivo. Las contribuciones de STEM calificadas incluyen: (1) contribuciones a la escuela STEM, (2) gastos de externificación de maestros DE STEM y (3) gastos de formación de profesores de STEM. El presupuesto también ofrece un crédito fiscal para las contribuciones a las escuelas primarias y secundarias que benefician a la ciencia, la tecnología, la ingeniería o la educación matemática. El crédito es igual al 100% de las contribuciones del servicio STEM calificadas realizadas por los contribuyentes durante el año sujeto pasivo. Las contribuciones calificadas a los servicios STEM incluyen: (1) contribuciones de servicio STEM pagadas o incurridas durante el año sujeto pasivo para los servicios prestados en el Estados Unidos o en una base militar fuera de la Estados Unidos; y (2) propiedad de inventario STEM aportada durante el año sujeto pasivo que utiliza una organización educativa ubicada en el Estados Unidos o en una base militar fuera del Estados Unidos para proporcionar educación en los grados K-12 en ciencia, tecnología, ingeniería o matemáticas.

Observaciones: En general, el modelo ajustado hace un excelente trabajo de resumir la factura. Captura la jerga específica del dominio y los puntos clave que se representan, pero no se explican en la verdad fundamentada en escritos por personas. Se diferencia del modelo de captura cero proporcionando un resumen más detallado y completo.

Caso de uso: informes financieros

En este caso de uso, la ingeniería rápida de disparo cero se usa para crear resúmenes de informes financieros. A continuación, se usa un resumen del enfoque de resúmenes para generar los resultados.

Resumen del enfoque de resúmenes

Al escribir mensajes, el total de solicitudes y finalizaciones resultantes de GPT-3 debe incluir menos de 4000 tokens, por lo que se ha de limitar a un par de páginas de texto de resumen. En el caso de los documentos que normalmente contienen más de 4000 tokens (aproximadamente 3000 palabras), puede usar un resumen del enfoque de resúmenes . Cuando se usa este enfoque, todo el texto se divide primero para cumplir las restricciones de token. A continuación, se derivan resúmenes de los textos más cortos. En el paso siguiente, se crea un resumen de los resúmenes. En este caso de uso se muestra el resumen del enfoque de resúmenes con un modelo zero-shot. Esta solución es útil para documentos largos. Además, en esta sección se describe cómo las diferentes prácticas de ingeniería rápida pueden variar los resultados.

Nota

El ajuste preciso no se aplica en el caso de uso financiero porque no hay suficientes datos disponibles para completar ese paso.

Dataset

El conjunto de datos para este caso de uso es técnico e incluye métricas cuantitativas clave para evaluar el rendimiento de una empresa.

El conjunto de datos financieros incluye:

  • url: la dirección URL del informe financiero.
  • pages: la página del informe que contiene información clave que se va a resumir (indizada 1).
  • completion: el resumen de la verdad fundamentada del informe.
  • comments: cualquier información adicional necesaria.

En este caso de uso, se resumirá el informe financiero de Rathbone, del conjunto de datos. Rathbone es una empresa individual de gestión de inversiones y riquezas para clientes privados. El informe destaca el rendimiento de Rathbone en 2020 y menciona métricas de rendimiento como beneficios, FUMA e ingresos. La información clave que se va a resumir está en la página 1 del PDF.

API_KEY = # SET YOUR OWN API KEY HERE
RESOURCE_ENDPOINT = "# SET A LINK TO YOUR RESOURCE ENDPOINT"

openai.api_type = "azure"
openai.api_key = API_KEY
openai.api_base = RESOURCE_ENDPOINT
openai.api_version = "2022-12-01-preview"
name = os.path.abspath(os.path.join(os.getcwd(), '---INSERT PATH OF LOCALLY DOWNLOADED RATHBONES_2020_PRELIM_RESULTS---')).replace('\\', '/')

pages_to_summarize = [0]
# Using pdfminer.six to extract the text 
# !pip install pdfminer.six
from pdfminer.high_level import extract_text
t = extract_text(name
, page_numbers=pages_to_summarize
)
print("Text extracted from " + name)
t
Enfoque zero-shot

Al usar el enfoque de disparo cero, no se proporcionan ejemplos resueltos. Solo se proporciona el comando y la entrada sin resolver. En este ejemplo, se usa el modelo Instruct. Este modelo está diseñado específicamente para tomar una instrucción y registrar una respuesta para él sin contexto adicional, que es ideal para el enfoque zero-shot.

Después de extraer el texto, puede usar varias solicitudes para ver cómo influyen en la calidad del resumen:

#Using the text from the Rathbone's report, you can try different prompts to see how they affect the summary

prompt_i = 'Summarize the key financial information in the report using qualitative metrics.\n\nText:\n'+" ".join([normalize_text(t)])+'\n\nKey metrics:\n'

response = openai.Completion.create(
        engine="davinci-instruct",
        prompt=prompt_i,
        temperature=0,
        max_tokens=2048-int(len(prompt_i.split())*1.5),
        top_p=1.0,
        frequency_penalty=0.5,
        presence_penalty=0.5,
        best_of=1
    )
print(response.choices[0].text)
>>>
- Funds under management and administration (FUMA) reached £54.7 billion at 31 December 2020, up 8.5% from £50.4 billion at 31 December 2019
- Operating income totalled £366.1 million, 5.2% ahead of the prior year (2019: £348.1 million)
- Underlying1 profit before tax totalled £92.5 million, an increase of 4.3% (2019: £88.7 million); underlying operating margin of 25.3% (2019: 25.5%)

# Different prompt

prompt_i = 'Extract most significant money related values of financial performance of the business like revenue, profit, etc. from the below text in about two hundred words.\n\nText:\n'+" ".join([normalize_text(t)])+'\n\nKey metrics:\n'

response = openai.Completion.create(
        engine="davinci-instruct",
        prompt=prompt_i,
        temperature=0,
        max_tokens=2048-int(len(prompt_i.split())*1.5),
        top_p=1.0,
        frequency_penalty=0.5,
        presence_penalty=0.5,
        best_of=1
    )
print(response.choices[0].text)
>>>
- Funds under management and administration (FUMA) grew by 8.5% to reach £54.7 billion at 31 December 2020
- Underlying profit before tax increased by 4.3% to £92.5 million, delivering an underlying operating margin of 25.3%
- The board is announcing a final 2020 dividend of 47 pence per share, which brings the total dividend to 72 pence per share, an increase of 2.9% over 2019
Desafíos
  • Como puede ver, el modelo podría generar métricas que no se mencionan en el texto original.

    Solución propuesta: puede resolver este problema cambiando la solicitud.

  • El resumen podría centrarse en una sección del artículo y descuidar otra información importante.

    Solución propuesta: puede probar un resumen del enfoque de resúmenes. Divida el informe en secciones y cree resúmenes más pequeños que puede resumir para crear el resumen de salida.

Este código implementa las soluciones propuestas:

# Body of function

from pdfminer.high_level import extract_text

text = extract_text(name
, page_numbers=pages_to_summarize
)

r = splitter(200, text)

tok_l = int(2000/len(r))
tok_l_w = num2words(tok_l)

res_lis = []
# Stage 1: Summaries
for i in range(len(r)):
    prompt_i = f'Extract and summarize the key financial numbers and percentages mentioned in the Text in less than {tok_l_w} 
words.\n\nText:\n'+normalize_text(r[i])+'\n\nSummary in one paragraph:'

    response = openai.Completion.create(
        engine=TEXT_DAVINCI_001,
        prompt=prompt_i,
        temperature=0,
        max_tokens=tok_l,
        top_p=1.0,
        frequency_penalty=0.5,
        presence_penalty=0.5,
        best_of=1
    )
    t = trim_incomplete(response.choices[0].text)
    res_lis.append(t)

# Stage 2: Summary of summaries
prompt_i = 'Summarize the financial performance of the business like revenue, profit, etc. in less than one hundred words. Do not make up values that are not mentioned in the Text.\n\nText:\n'+" ".join([normalize_text(res) for res in res_lis])+'\n\nSummary:\n'

response = openai.Completion.create(
        engine=TEXT_DAVINCI_001,
        prompt=prompt_i,
        temperature=0,
        max_tokens=200,
        top_p=1.0,
        frequency_penalty=0.5,
        presence_penalty=0.5,
        best_of=1
)

print(trim_incomplete(response.choices[0].text))

La solicitud de entrada incluye el texto original del informe financiero de Rathbone para un año específico.

Verdad fundamentada: Rathbones ha notificado ingresos de £366,1m en 2020, hasta £348,1m en 2019, y un aumento del beneficio subyacente antes de impuestos de hasta £92,5m desde £88,7m. Los activos bajo gestión aumentaron el 8,5% de £50,4bn a £54,7bn, con activos en gestión de la riqueza aumentando 4,4% a £44,9bn. Los flujos netos fueron de 2,100 millones de libras en 2020 en comparación con los 600 millones de libras del año anterior, impulsados principalmente por 1,500 millones de libras en su negocio de fondos y 400 millones debido a la transferencia de activos de Barclays Wealth.

Resumen zero-shot de los resúmenes de salida: Rathbones entregó un fuerte desempeño en 2020, con fondos bajo gestión y administración (FUMA) creciendo un 8,5% para alcanzar £54,7 mil millones al final del año. El beneficio subyacente antes del impuesto aumentó un 4,3% a 92,5 millones de libras, lo que proporciona un margen operativo subyacente del 25,3%. Los flujos netos totales en el grupo eran de 2,100 millones de libras, lo que representa una tasa de crecimiento del 4,2%. El beneficio antes de impuestos del ejercicio fue de 43,8 millones de libras esterlinas, con un beneficio básico por acción de 49,6 peniques. Los ingresos operativos del año fueron un 5,2% superiores a los del año anterior, con un total de 366,1 millones de libras.

Observaciones: El resumen del enfoque de resúmenes genera un gran conjunto de resultados que resuelve los desafíos encontrados inicialmente cuando se proporcionó un resumen más detallado y completo. Hace un gran trabajo de capturar el jerga específico del dominio y los puntos clave, que se representan en la verdad fundamentada, pero no se explican bien.

El modelo zero-shot funciona bien para resumir documentos estándar. Si los datos son específicos del sector o específicos del tema, contiene jerga específica del sector o requiere conocimientos específicos del sector, el ajuste preciso funciona mejor. Por ejemplo, este enfoque funciona bien para revistas médicas, formularios legales y estados financieros. Puede usar el enfoquefew-shot en lugar de zero-shot para proporcionar al modelo ejemplos de cómo formular un resumen, por lo que puede aprender a imitar el resumen proporcionado. Para el enfoque zero-shot, esta solución no vuelve a entrenar el modelo. El conocimiento del modelo se basa en el entrenamiento GPT-3. GPT-3 está entrenado con casi todos los datos disponibles de Internet. Funciona bien para las tareas que no requieren conocimientos específicos.

Recomendaciones

Hay muchas maneras de abordar el resumen mediante GPT-3, incluyendo el zero-shot, el few-shot y el ajuste preciso. Los enfoques generan resúmenes de calidad variable. Puede explorar qué enfoque genera los mejores resultados para su caso de uso previsto.

En función de las observaciones sobre las pruebas presentadas en este artículo, estas son algunas recomendaciones:

  • Zero-shot es mejor para los documentos estándar que no requieren conocimientos de dominio específicos. Este enfoque intenta capturar toda la información de alto nivel de una manera concisa, similar a la humana y proporciona un resumen de línea base de alta calidad. Zero-shot crea un resumen de alta calidad para el conjunto de datos legal que se usa en las pruebas de este artículo.
  • Few-shot es difícil de usar para resumir documentos largos porque se supera la limitación del token cuando se proporciona un texto de ejemplo. En su lugar, puede usar un resumen zero-shot del enfoque de resúmenes para documentos largos o aumentar el conjunto de datos para habilitar el ajuste preciso. El resumen del enfoque de resúmenes genera excelentes resultados para el conjunto de datos financiero que se usa en estas pruebas.
  • El ajuste preciso resulta más útil para casos de uso técnicos o específicos de dominio cuando la información no está disponible fácilmente. Para lograr los mejores resultados con este enfoque, necesita un conjunto de datos que contenga un par de miles de muestras. El ajuste preciso captura el resumen de algunas maneras con plantilla, intentando cumplir con la forma en que el conjunto de datos presenta los resúmenes. Para el conjunto de datos legal, este enfoque genera una mayor calidad de resumen que la creada por el enfoque zero-shot.

Evaluación del resumen

Hay varias técnicas para evaluar el rendimiento de los modelos de resumen.

Estas son algunas:

ROUGE (Subestudio orientado a la recuperación para la evaluación de Gisting). Esta técnica incluye medidas para determinar automáticamente la calidad de un resumen comparándolo con resúmenes ideales creados por humanos. Las medidas cuentan el número de unidades superpuestas, como n-gramas, secuencias de palabras y pares de palabras, entre el resumen generado por el equipo que se evalúa y los resúmenes ideales.

Este es un ejemplo:

reference_summary = "The cat ison porch by the tree"
generated_summary = "The cat is by the tree on the porch"
rouge = Rouge()
rouge.get_scores(generated_summary, reference_summary)
[{'rouge-1': {'r':1.0, 'p': 1.0, 'f': 0.999999995},
  'rouge-2': {'r': 0.5714285714285714, 'p': 0.5, 'f': 0.5333333283555556},
  'rouge-1': {'r': 0.75, 'p': 0.75, 'f': 0.749999995}}]

BERTScore. Esta técnica calcula las puntuaciones de similitud mediante la alineación de resúmenes generados y de referencia en un nivel de token. Las alineaciones de tokens se calculan de forma expanstina para maximizar la similitud coseno entre las incrustaciones de tokens contextualizadas de BERT.

Este es un ejemplo:

import torchmetrics
from torchmetrics.text.bert import BERTScore
preds = "You should have ice cream in the summer"
target = "Ice creams are great when the weather is hot"
bertscore = BERTScore()
score = bertscore(preds, target)
print(score)

Matriz de similitud. Una matriz de similitud es una representación de las similitudes entre diferentes entidades en una evaluación de resumen. Puede usarlo para comparar distintos resúmenes del mismo texto y medir su similitud. Se representa mediante una cuadrícula bidimensional, donde cada celda contiene una medida de la similitud entre dos resúmenes. Puede medir la similitud mediante varios métodos, como la similitud de coseno, la similitud de Jaccard y la distancia de edición. A continuación, use la matriz para comparar los resúmenes y determinar cuál es la representación más precisa del texto original.

Este es un comando de ejemplo que obtiene la matriz de similitud de una comparación BERTScore de dos oraciones similares:

bert-score-show --lang en -r "The cat is on the porch by the tree"
                          -c "The cat is by the tree on the porch"
                          -f out.png

La primera frase, "el gato está en el porche junto al árbol", se conoce como candidato. La segunda frase se conoce como referencia. El comando usa BERTScore para comparar las oraciones y generar una matriz.

Esta matriz siguiente muestra la salida generada por el comando anterior:

Diagrama que muestra un ejemplo de una matriz de similitud.

Para obtener más información, vea SummEval: reevaluación de la evaluación de resúmenes. Para obtener un kit de herramientas de Índice de paquetes de Python (PyPI) para resúmenes, consulte Summ-eval 0.892.

Colaboradores

Microsoft mantiene este artículo. Originalmente lo escribieron los siguientes colaboradores.

Autor principal:

Otros colaboradores:

Para ver los perfiles no públicos de LinkedIn, inicie sesión en LinkedIn.

Pasos siguientes