Integrar o respondedor de perguntas do BERT

A API BertQuestionAnswerer 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 de pergunta-resposta aqui .

Principais recursos da API BertQuestionAnswerer

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

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

Modelos BertQuestionAnswerer suportados

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

Executar inferência em Java

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

Copie o arquivo de 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
    implementation 'org.tensorflow:tensorflow-lite-task-text:0.2.0'
}

Etapa 2: executar inferência usando a API

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

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

Veja o código-fonte para mais detalhes.

Executar inferência em Swift

Etapa 1: importar CocoaPods

Adicione o pod TensorFlowLiteTaskText no Podfile

target 'MySwiftAppWithTaskAPI' do
  use_frameworks!
  pod 'TensorFlowLiteTaskText', '~> 0.2.0'
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.

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

Veja o código-fonte para 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 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órios pertencentes 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 Wordpiece / Sentença de Tokenizer

  • 3 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