Buckets:

rtrm's picture
|
download
raw
2.75 kB

Respuesta a preguntas[[question-answering]]

{#if fw === 'pt'}

{:else}

{/if}

En respuesta a preguntas extractiva, el objetivo es localizar dentro de un contexto el fragmento de texto que responde a una pregunta.

En esta sección ajustaremos BERT sobre SQuAD.

El conjunto de datos SQuAD[[the-squad-dataset]]

from datasets import load_dataset

raw_datasets = load_dataset("squad")
raw_datasets
DatasetDict({
    train: Dataset({
        features: ['id', 'title', 'context', 'question', 'answers'],
        num_rows: 87599
    })
    validation: Dataset({
        features: ['id', 'title', 'context', 'question', 'answers'],
        num_rows: 10570
    })
})

Cada ejemplo tiene un context, una question y un diccionario answers con el texto de la respuesta y el índice de carácter donde empieza.

Preprocesamiento de entrenamiento[[processing-the-training-data]]

Primero cargamos el tokenizador:

from transformers import AutoTokenizer

model_checkpoint = "bert-base-cased"
tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)

La dificultad principal está en contextos largos. Cuando la pareja pregunta-contexto supera la longitud máxima, debemos crear varias features con una ventana deslizante:

inputs = tokenizer(
    raw_datasets["train"][0]["question"],
    raw_datasets["train"][0]["context"],
    max_length=100,
    truncation="only_second",
    stride=50,
    return_overflowing_tokens=True,
    return_offsets_mapping=True,
)

Después usamos offset_mapping y overflow_to_sample_mapping para convertir la respuesta en caracteres a posiciones de tokens start_positions y end_positions.

Idea de las etiquetas[[labels]]

Si la respuesta está dentro del fragmento de contexto, la etiqueta es el token inicial y el token final de la respuesta. Si no está dentro del fragmento, usamos (0, 0), que corresponde al token especial [CLS].

Ese detalle es importante porque una sola muestra puede generar varias features y no todas contendrán la respuesta.

Entrenamiento y evaluación[[training-and-evaluation]]

Una vez tokenizados los datos, podemos usar AutoModelForQuestionAnswering o TFAutoModelForQuestionAnswering según el framework. El modelo aprende a producir un logit de inicio y un logit de fin para cada token.

En evaluación, el posprocesamiento combina las predicciones de todas las features que vienen de una misma muestra original y selecciona la mejor respuesta posible dentro del contexto.

Este patrón de trabajo, dividir contextos largos, mapear respuestas a offsets y recomponer las predicciones, es la parte esencial de la respuesta a preguntas extractiva con Transformers.

Xet Storage Details

Size:
2.75 kB
·
Xet hash:
41de7e2ac5a1336946cf0116ea8848ac7da59f58e72dad7167780a798f66b781

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.