Buckets:
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.