Integrar o respondente de perguntas BERT

A API Task Library BertQuestionAnswerer carrega um modelo Bert e responde a perguntas com base no conteúdo de um trecho específico. Para mais informações, consulte o exemplo do modelo de pergunta-resposta.

Principais recursos da API BertQuestionAnswerer

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

  • 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 de recursos do módulo Android em que 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
    implementation 'org.tensorflow:tensorflow-lite-task-text:0.4.4'
}

Etapa 2: executar 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 mais detalhes.

Executar inferência em Swift

Etapa 1: importar o CocoaPods

Adicione o pod TensorFlowLiteTaskText ao Podfile

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

Etapa 2: executar 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 mais detalhes.

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

Executar inferência em Python

Etapa 1: instalar o pacote pip

pip install tflite-support

Etapa 2: usar o 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 o código-fonte para mais opções de configuração do BertQuestionAnswerer.

Resultados de exemplo

Confira um exemplo dos resultados da resposta do modelo ALBERT.

Contexto: "A floresta tropical da Amazônia, também chamada de selva amazônica ou Amazônia, é uma floresta tropical de folhas amplas úmidas no bioma da Amazônia que cobre a maior parte da bacia amazônica da América do Sul. Esta bacia abrange 7.000.000 km2, dos quais 5.500.000 km2 são cobertos pela floresta tropical. Esta região inclui território que pertence a nove países".

Pergunta: "Onde fica 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

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

Requisitos de compatibilidade de modelo

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

Os metadados precisam atender aos seguintes requisitos:

  • input_process_units para tokenizador Wordpiece/Sentencepiece

  • Três tensores de entrada com os nomes "ids", "mask" e "segment_ids" para a saída do tokenizer

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