Integrar o respondedor de perguntas BERT

A API BertQuestionAnswerer da Biblioteca de Tarefas carrega um modelo Bert e responde a perguntas com base no conteúdo de uma determinada passagem. Para obter mais informações, consulte a documentação do modelo Pergunta-Resposta aqui .

Principais recursos da API BertQuestionAnswerer

  • Recebe duas entradas de texto como pergunta e contexto e gera uma lista de respostas possíveis.

  • Executa tokenizações Wordpiece ou Sentencepiece fora do gráfico no texto de entrada.

Modelos BertQuestionAnswerer compatíveis

Os modelos a seguir são compatíveis com a API BertNLClassifier .

Executar inferência em Java

Etapa 1: importar a dependência do Gradle e outras configurações

Copie o arquivo de modelo .tflite para o diretório assets do módulo Android onde o modelo será executado. Especifique que o arquivo não deve ser compactado e adicione a biblioteca do TensorFlow Lite ao arquivo build.gradle do 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.3.0'
}

Etapa 2: execute a inferência usando a 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 o código-fonte para obter mais detalhes.

Executar inferência no Swift

Etapa 1: importar CocoaPods

Adicionar o pod TensorFlowLiteTaskText no Podfile

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

Etapa 2: execute a inferência usando a API

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

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

Consulte o código-fonte para obter mais detalhes.

Executar inferência em 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 o código-fonte para obter mais detalhes.

Resultados de exemplo

Aqui está um exemplo dos resultados de resposta do modelo ALBERT .

Contexto: "A floresta amazônica, alternativamente, a selva amazônica, também conhecida em inglês como Amazônia, é uma floresta tropical úmida de folhas largas no bioma amazônico que cobre a maior parte da bacia amazônica da América do Sul. Esta bacia abrange 7.000.000 km2 (2.700.000 sq mi ), dos quais 5.500.000 km2 (2.100.000 sq mi) são cobertos pela floresta tropical. Esta região inclui território pertencente a nove nações."

Pergunta: "Onde está a floresta amazônica?"

Respostas:

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

Experimente a ferramenta de demonstração CLI simples para BertQuestionAnswerer com seu próprio modelo e dados de teste.

Requisitos de compatibilidade do modelo

A API BertQuestionAnswerer espera um modelo TFLite com metadados de modelo TFLite obrigatórios.

Os Metadados devem atender aos seguintes requisitos:

  • input_process_units para Wordpiece/Sentencepiece Tokenizer

  • 3 tensores de entrada com nomes "ids", "mask" e "segment_ids" para a saída do tokenizer

  • 2 tensores de saída com nomes "end_logits" e "start_logits" para indicar a posição relativa da resposta no contexto