La API BertQuestionAnswerer
de la biblioteca de tareas carga un modelo Bert y responde preguntas basadas en el contenido de un pasaje determinado. Para obtener más información, consulte la documentación del modelo Pregunta-Respuesta aquí .
Características 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 BertQuestionAnswerer compatibles
Los siguientes modelos son compatibles con la API BertNLClassifier
.
Modelos creados por TensorFlow Lite Model Maker para BERT Question Answer .
Modelos personalizados que cumplen con los requisitos de compatibilidad de modelos .
Ejecutar inferencia en Java
Paso 1: importar la dependencia de Gradle y otras configuraciones
Copie el archivo del modelo .tflite
en el directorio de activos del módulo de Android donde se ejecutará el modelo. Especifique que el archivo no debe comprimirse y agregue 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 (NNAPI is included)
implementation 'org.tensorflow:tensorflow-lite-task-text:0.4.4'
}
Paso 2: Ejecutar inferencia usando la API
// Initialization
BertQuestionAnswererOptions options =
BertQuestionAnswererOptions.builder()
.setBaseOptions(BaseOptions.builder().setNumThreads(4).build())
.build();
BertQuestionAnswerer answerer =
BertQuestionAnswerer.createFromFileAndOptions(
androidContext, modelFile, options);
// 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.4.4'
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_path);
std::unique_ptr<BertQuestionAnswerer> answerer = BertQuestionAnswerer::CreateFromOptions(options).value();
// Run inference with your inputs, `context_of_question` and `question_to_ask`.
std::vector<QaAnswer> positive_results = answerer->Answer(context_of_question, question_to_ask);
Consulte el código fuente para obtener más detalles.
Ejecutar inferencia en Python
Paso 1: instale el paquete pip
pip install tflite-support
Paso 2: usar el modelo
# Imports
from tflite_support.task import text
# Initialization
answerer = text.BertQuestionAnswerer.create_from_file(model_path)
# Run inference
bert_qa_result = answerer.answer(context, question)
Consulte el código fuente para conocer más opciones para configurar BertQuestionAnswerer
.
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 amazónico 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 selva tropical. Esta región incluye territorio perteneciente 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 del modelo TFLite obligatorios.
Los Metadatos deben cumplir los siguientes requisitos:
input_process_units
para tokenizador de Wordpiece/Sentencepiece3 tensores de entrada con nombres "ids", "mask" y "segment_ids" para la salida del tokenizador
2 tensores de salida con nombres "end_logits" y "start_logits" para indicar la posición relativa de la respuesta en el contexto