Integrar o respondente de perguntas BERT

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

Principais recursos da API BertQuestionAnswerer

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

  • Executa tokenizações do Wordnote ou Frases fora do gráfico na entrada em textos.

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 modelo .tflite para o diretório de assets do módulo Android. em que o modelo será executado. Especifique que o arquivo não deve ser compactado. 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 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 a código-fonte para mais detalhes.

Executar inferência no Swift

Etapa 1: importar o CocoaPods

Adicionar o pod do TensorFlowLiteTaskText ao 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)

Consulte a 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 a código-fonte para mais detalhes.

Executar inferência em Python

Etapa 1: instalar o pacote pip

pip install tflite-support

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

Resultados de exemplo

Aqui está um exemplo dos resultados da resposta Modelo ALBERT.

Contexto: "A floresta amazônica, alternativamente, a Selva Amazônica, também conhecida em "Amazônia", em inglês, é uma floresta tropical úmida de folha ampla da Amazônia bioma que cobre a maior parte da bacia Amazônica da América do Sul. Esta bacia abrange 7.000.000 km2 (2.700.000 milhas quadradas), dos quais 5.500.000 km2 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

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

Requisitos de compatibilidade do modelo

A API BertQuestionAnswerer espera um modelo TFLite com valores obrigatórios Metadados de modelo do TFLite.

Os metadados devem atender aos seguintes requisitos:

  • input_process_units para tokenizador do Wordnote/Sentencenote

  • 3 tensores de entrada com os nomes "ids", "mask" e "segment_ids" para a saída de o tokenizador

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