Integrar o respondedor de perguntas do BERT

A API BertQuestionAnswerer da Biblioteca de Tarefas carrega um modelo Bert e responde 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 de Wordpiece ou Sentencepiece fora do gráfico no texto de entrada.

Modelos BertQuestionAnswerer suportados

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

Execute inferência em Java

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

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

Etapa 2: executar 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);

Veja o código fonte para mais detalhes.

Execute inferência em Swift

Etapa 1: importar CocoaPods

Adicione o pod TensorFlowLiteTaskText no Podfile

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

Etapa 2: executar inferência usando a API

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

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

Veja o código fonte para mais detalhes.

Execute 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);

Veja o código fonte para mais detalhes.

Execute inferência em Python

Etapa 1: instale o pacote pip

pip install tflite-support

Etapa 2: usando 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 obter mais opções de configuração BertQuestionAnswerer .

Resultados de exemplo

Aqui está um exemplo dos resultados da 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 folha larga 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 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

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

Requisitos de compatibilidade de 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 tokenizador de peça de palavra/frase

  • 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