DistilBERT base uncased distilled SQuAD

distilbert
Pregunta y respuesta

DistilBERT es una versión comprimida de BERT, descrita en el blog 'Más pequeño, más rápido, más barato, más ligero: Introduciendo DistilBERT', y en el artículo 'DistilBERT, una versión destilada de BERT: más pequeño, más rápido, más barato y más ligero'. DistilBERT es un modelo Transformer pequeño, rápido, barato y ligero entrenado a partir de BERT base mediante destilación. Tiene un 40% menos de parámetros que bert-base-uncased, corre un 60% más rápido y mantiene más del 95% de las prestaciones de BERT según el punto de referencia de evaluación del lenguaje GLUE. Este modelo es un punto de comprobación afinado de DistilBERT-base-uncased, afinado utilizando (en un segundo paso) destilación de conocimiento en SQuAD v1.1.

Como usar

Usa el código a continuación para comenzar a utilizar el modelo.

from transformers import pipeline
question_answerer = pipeline("question-answering", model='distilbert-base-uncased-distilled-squad')

context = r"""
... Extractive Question Answering es la tarea de extraer una respuesta de un texto dado una pregunta. Un ejemplo de un
dataset de preguntas y respuestas es el dataset de SQuAD, que se basa completamente en esa tarea. Si deseas afinar
un modelo en una tarea de SQuAD, puedes aprovechar el script examples/pytorch/question-answering/run_squad.py.
... """

result = question_answerer(question="¿Cuál es un buen ejemplo de un dataset de preguntas y respuestas?", context=context)
print(f"Respuesta: '{result['answer']}', puntuación: {round(result['score'], 4)}, inicio: {result['start']}, fin: {result['end']}")

Respuesta: 'SQuAD dataset', puntuación: 0.4704, inicio: 147, fin: 160

Aquí se muestra cómo utilizar este modelo en PyTorch:

from transformers import DistilBertTokenizer, DistilBertForQuestionAnswering
import torch
tokenizer = DistilBertTokenizer.from_pretrained('distilbert-base-uncased-distilled-squad')
model = DistilBertForQuestionAnswering.from_pretrained('distilbert-base-uncased-distilled-squad')

question, text = "¿Quién era Jim Henson?", "Jim Henson era un buen titiritero"

inputs = tokenizer(question, text, return_tensors="pt")
with torch.no_grad():
    outputs = model(**inputs)

answer_start_index = torch.argmax(outputs.start_logits)
answer_end_index = torch.argmax(outputs.end_logits)

predict_answer_tokens = inputs.input_ids[0, answer_start_index : answer_end_index + 1]
tokenizer.decode(predict_answer_tokens)

Y en TensorFlow:

from transformers import DistilBertTokenizer, TFDistilBertForQuestionAnswering
import tensorflow as tf

tokenizer = DistilBertTokenizer.from_pretrained("distilbert-base-uncased-distilled-squad")
model = TFDistilBertForQuestionAnswering.from_pretrained("distilbert-base-uncased-distilled-squad")

question, text = "¿Quién era Jim Henson?", "Jim Henson era un buen titiritero"

inputs = tokenizer(question, text, return_tensors="tf")
outputs = model(**inputs)

answer_start_index = int(tf.math.argmax(outputs.start_logits, axis=-1)[0])
answer_end_index = int(tf.math.argmax(outputs.end_logits, axis=-1)[0])

predict_answer_tokens = inputs.input_ids[0, answer_start_index : answer_end_index + 1]
tokenizer.decode(predict_answer_tokens)

Funcionalidades

Transformador rápido y ligero
40% menos de parámetros que bert-base-uncased
Corre un 60% más rápido que BERT
Mantiene más del 95% de rendimiento de BERT en la evaluación GLUE

Casos de uso

Este modelo se puede utilizar para responder preguntas extractivas.
No debe usarse para crear entornos hostiles o alienantes para las personas.
No fue entrenado para ser representaciones fieles o verdaderas de personas o eventos, por lo que no se debe utilizar para generar tales contenidos.