¡El Día de la Comunidad de ML es el 9 de noviembre! Únase a nosotros para recibir actualizaciones de TensorFlow, JAX, y más Más información

Integrar el respondedor de preguntas BERT

La API de BertQuestionAnswerer biblioteca de BertQuestionAnswerer carga un modelo de Bert y responde preguntas según el contenido de un pasaje determinado. Para obtener más información, consulte la documentación del modelo Pregunta-Respuesta aquí .

Funciones clave de la API BertQuestionAnswerer

  • Toma dos entradas de texto como pregunta y contexto y genera una lista de posibles respuestas.

  • Realiza tokenizaciones de Wordpiece o Sentencepiece fuera del gráfico en el texto de entrada.

Modelos de BertQuestionAnswerer compatibles

Los siguientes modelos son compatibles con la API BertNLClassifier .

Ejecutar inferencia en Java

Paso 1: importar la dependencia de Gradle y otras configuraciones

Copie el archivo de modelo .tflite en el directorio de activos del módulo de Android donde se ejecutará el modelo. Especifica que el archivo no debe comprimirse y agrega la biblioteca TensorFlow Lite al archivo build.gradle del módulo:

android {
    // Other settings

    // Specify tflite file should not be compressed for the app apk
    aaptOptions {
        noCompress "tflite"
    }

}

dependencies {
    // Other dependencies

    // Import the Task Text Library dependency
    implementation 'org.tensorflow:tensorflow-lite-task-text:0.2.0'
}

Paso 2: ejecutar inferencia usando la API

// Initialization
BertQuestionAnswerer answerer = BertQuestionAnswerer.createFromFile(androidContext, modelFile);

// Run inference
List<QaAnswer> answers = answerer.answer(contextOfTheQuestion, questionToAsk);

Consulte el código fuente para obtener más detalles.

Ejecutar inferencia en Swift

Paso 1: Importar CocoaPods

Agregue el pod TensorFlowLiteTaskText en Podfile

target 'MySwiftAppWithTaskAPI' do
  use_frameworks!
  pod 'TensorFlowLiteTaskText', '~> 0.2.0'
end

Paso 2: ejecutar inferencia usando la API

// Initialization
let mobileBertAnswerer = TFLBertQuestionAnswerer.questionAnswerer(
      modelPath: mobileBertModelPath)

// Run inference
let answers = mobileBertAnswerer.answer(
      context: context, question: question)

Consulte el código fuente para obtener más detalles.

Ejecutar inferencia en C ++

// Initialization
BertQuestionAnswererOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_file);
std::unique_ptr<BertQuestionAnswerer> answerer = BertQuestionAnswerer::CreateFromOptions(options).value();

// Run inference
std::vector<QaAnswer> positive_results = answerer->Answer(context_of_question, question_to_ask);

Consulte el código fuente para obtener más detalles.

Resultados de ejemplo

A continuación se muestra un ejemplo de los resultados de respuesta del modelo ALBERT .

Contexto: "La selva amazónica, alternativamente, la selva amazónica, también conocida en inglés como Amazonia, es una selva tropical húmeda de hoja ancha en el bioma del Amazonas que cubre la mayor parte de la cuenca del Amazonas de América del Sur. Esta cuenca abarca 7.000.000 km2 (2.700.000 millas cuadradas ), de los cuales 5.500.000 km2 (2.100.000 millas cuadradas) están cubiertos por la selva tropical. Esta región incluye territorios pertenecientes a nueve naciones ".

Pregunta: "¿Dónde está la selva amazónica?"

Respuestas:

answer[0]:  'South America.'
logit: 1.84847, start_index: 39, end_index: 40
answer[1]:  'most of the Amazon basin of South America.'
logit: 1.2921, start_index: 34, end_index: 40
answer[2]:  'the Amazon basin of South America.'
logit: -0.0959535, start_index: 36, end_index: 40
answer[3]:  'the Amazon biome that covers most of the Amazon basin of South America.'
logit: -0.498558, start_index: 28, end_index: 40
answer[4]:  'Amazon basin of South America.'
logit: -0.774266, start_index: 37, end_index: 40

Pruebe la sencilla herramienta de demostración CLI para BertQuestionAnswerer con su propio modelo y datos de prueba.

Requisitos de compatibilidad del modelo

La API BertQuestionAnswerer espera un modelo TFLite con metadatos obligatorios del modelo TFLite .

Los metadatos deben cumplir los siguientes requisitos:

  • input_process_units para Wordpiece / Sentencepiece Tokenizer

  • 3 tensores de entrada con los nombres "ids", "máscara" y "segmento_id" para la salida del tokenizador

  • 2 tensores de salida con los nombres "end_logits" y "start_logits" para indicar la posición relativa de la respuesta en el contexto