!!! Puede ejecutar este cuaderno localmente (si tiene todas las dependencias y una GPU) o en Google Colab.
Asegúrese de cumplir con los siguientes requisitos de software si trabajará en local:
python 3.6 .9
docker - ce > 19.03 . 5
docker - API 1.40
nvidia - container - toolkit > 1.3 . 0 - 1
nvidia - container - runtime > 3.4 . 0 - 1
nvidia - docker2 > 2.5 . 0 - 1
nvidia - driver >= 455.23
El conjunto de datos SQuAD2.0 combina las 100.000 preguntas de SQuAD1.1 con más de 50.000 preguntas sin respuesta escritas en forma adversa por trabajadores colaborativos para que parezcan preguntas con respuesta.
A continuación se muestra un formato de ejemplo para un conjunto de datos de preguntas y respuestas de un equipo:
Cada title
tiene una o varias entradas paragraph
, cada una de las cuales consta de context
y question-answer entries (qas)
.
Cada entrada de pregunta y respuesta tiene una question
y una id
global única.
El indicador booleano is_impossible
, que muestra si una pregunta se puede responder o no: si la pregunta se puede responder, una entrada answer
contiene el intervalo de texto y su índice de caracteres inicial en el contexto. Si la pregunta no tiene respuesta, se proporciona una lista de answers
vacía.
!!! Para la tarea de control de calidad, el kit de herramientas de NVIDIA acepta datos en formato SQuAD JSON. Si tiene sus datos en cualquier otro formato, asegúrese de convertirlos al formato SQuAD como se muestra a continuación.
{
"data" : [
{
"title" : "Super_Bowl_50" ,
"paragraphs" : [
{
"context" : "Super Bowl 50 was an American football game to determine the champion of the National Football League (NFL) for the 2015 season. The American Football Conference (AFC) champion Denver Broncos defeated the National Football Conference (NFC) champion Carolina Panthers 24 u2013 10 to earn their third Super Bowl title. The game was played on February 7, 2016, at Levi's Stadium in the San Francisco Bay Area at Santa Clara, California. As this was the 50th Super Bowl, the league emphasized the " golden anniversary " with various gold-themed initiatives, as well as temporarily suspending the tradition of naming each Super Bowl game with Roman numerals (under which the game would have been known as " Super Bowl L " ), so that the logo could prominently feature the Arabic numerals 50." ,
"qas" : [
{
"question" : "Where did Super Bowl 50 take place?" ,
"is_impossible" : "false" ,
"id" : "56be4db0acb8001400a502ee" ,
"answers" : [
{
"answer_start" : "403" ,
"text" : "Santa Clara, California"
}
]
},
{
"question" : "What was the winning score of the Super Bowl 50?" ,
"is_impossible" : "true" ,
"id" : "56be4db0acb8001400a502ez" ,
"answers" : [
]
}
]
}
]
}
]
}
¡Es esencialmente solo un comando para ejecutar el preprocesamiento, el entrenamiento, el ajuste, la evaluación, la inferencia y la exportación de datos! Todas las configuraciones se realizan a través de archivos de especificaciones YAML. Ya hay archivos de especificaciones de muestra disponibles para que los utilice directamente o como referencia para crear los suyos propios. A través de estos archivos de especificaciones, puede ajustar muchos controles como el modelo, el conjunto de datos, los hiperparámetros, el optimizador, etc.
Para entrenar un modelo de control de calidad en formato NVIDIA, utilizamos los siguientes comandos:
# set language model and tokenizer to be used
config . model . language_model . pretrained_model_name = "bert-base-uncased"
config . model . tokenizer . tokenizer_name = "bert-base-uncased"
# path where model will be saved
config . model . nemo_path = f" { WORK_DIR } /checkpoints/bert_squad_v2_0.nemo"
trainer = pl . Trainer ( ** config . trainer )
model = BERTQAModel ( config . model , trainer = trainer )
trainer . fit ( model )
trainer . test ( model )
model . save_to ( config . model . nemo_path )
Más detalles sobre estos argumentos están presentes en Question_Answering.ipynb
!!! Los archivos de evaluación (para validación y prueba) siguen el formato anterior excepto que pueden proporcionar más de una respuesta a la misma pregunta. !!! El archivo de inferencia sigue el formato anterior excepto que no requiere las answers
y las palabras clave is_impossible
.
# Load saved model
model = BERTQAModel . restore_from ( config . model . nemo_path )
eval_device = [ config . trainer . devices [ 0 ]] if isinstance ( config . trainer . devices , list ) else 1
model . trainer = pl . Trainer (
devices = eval_device ,
accelerator = config . trainer . accelerator ,
precision = 16 ,
logger = False ,
)
config . exp_manager . create_checkpoint_callback = False
exp_dir = exp_manager ( model . trainer , config . exp_manager )
def dump_json ( filepath , data ):
with open ( filepath , "w" ) as f :
json . dump ( data , f )
def create_inference_data_format ( context , question ):
squad_data = { "data" : [{ "title" : "inference" , "paragraphs" : []}], "version" : "v2.1" }
squad_data [ "data" ][ 0 ][ "paragraphs" ]. append (
{
"context" : context ,
"qas" : [
{ "id" : 0 , "question" : question ,}
],
}
)
return squad_data
context = "The Amazon rainforest is a moist broadleaf forest that covers most of the Amazon basin of South America. This basin encompasses 7,000,000 square kilometres (2,700,000 sq mi), of which 5,500,000 square kilometres (2,100,000 sq mi) are covered by the rainforest. The majority of the forest is contained within Brazil, with 60% of the rainforest, followed by Peru with 13%, and Colombia with 10%."
question = "Which country has the most?"
inference_filepath = "inference.json"
inference_data = create_inference_data_format ( context , question )
dump_json ( inference_filepath , inference_data )
predictions = model . inference ( "inference.json" )
question = predictions [ 1 ][ 0 ][ 0 ][ "question" ]
answer = predictions [ 1 ][ 0 ][ 0 ][ "text" ]
probability = predictions [ 1 ][ 0 ][ 0 ][ "probability" ]
print ( f" n > Question: { question } n > Answer: { answer } n Probability: { probability } " )
100 % | ██████████ | 1 / 1 [ 00 : 00 < 00 : 00 , 184.29 it / s ]
100 % | ██████████ | 1 / 1 [ 00 : 00 < 00 : 00 , 8112.77 it / s ]
> Question : Which country has the most ?
> Answer : Brazil
Probability : 0.9688649039578262
En este estudio, se utiliza desde question-answering-training-final.ipynb. Puedes encontrar más información aquí.