Integra il risponditore alle domande BERT

L'API BertQuestionAnswerer della Task Library carica un modello Bert e risponde alle domande in base al contenuto di un determinato passaggio. Per ulteriori informazioni, consultare la documentazione per il modello Domanda-Risposta qui .

Caratteristiche principali dell'API BertQuestionAnswerer

  • Accetta due input di testo come domanda e contesto e restituisce un elenco di possibili risposte.

  • Esegue tokenizzazioni di Wordpiece o Sentencepiece fuori dal grafico sul testo di input.

Modelli BertQuestionAnswerer supportati

I seguenti modelli sono compatibili con l'API BertNLClassifier .

Esegui l'inferenza in Java

Passaggio 1: importa la dipendenza Gradle e altre impostazioni

Copia il file del modello .tflite nella directory asset del modulo Android in cui verrà eseguito il modello. Specifica che il file non deve essere compresso e aggiungi la libreria TensorFlow Lite al file build.gradle del modulo:

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'
}

Passaggio 2: esegui l'inferenza utilizzando l'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);

Vedi il codice sorgente per maggiori dettagli.

Esegui l'inferenza in Swift

Passaggio 1: importa CocoaPods

Aggiungi il pod TensorFlowLiteTaskText in Podfile

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

Passaggio 2: esegui l'inferenza utilizzando l'API

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

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

Vedi il codice sorgente per maggiori dettagli.

Esegui l'inferenza in 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);

Vedi il codice sorgente per maggiori dettagli.

Esegui l'inferenza in Python

Passaggio 1: installa il pacchetto pip

pip install tflite-support

Passaggio 2: utilizzo del modello

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

Vedi il codice sorgente per ulteriori opzioni per configurare BertQuestionAnswerer .

Risultati di esempio

Ecco un esempio dei risultati della risposta del modello ALBERT .

Contesto: "La foresta amazzonica, in alternativa, la giungla amazzonica, conosciuta anche in inglese come Amazonia, è una foresta pluviale tropicale umida di latifoglie nel bioma amazzonico che copre la maggior parte del bacino amazzonico del Sud America. Questo bacino comprende 7.000.000 di km2 (2.700.000 miglia quadrate ), di cui 5.500.000 km2 (2.100.000 miglia quadrate) sono coperti dalla foresta pluviale. Questa regione comprende territori appartenenti a nove nazioni.

Domanda: "Dov’è la foresta amazzonica?"

Risposte:

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

Prova il semplice strumento demo CLI per BertQuestionAnswerer con il tuo modello e i dati di test.

Requisiti di compatibilità del modello

L'API BertQuestionAnswerer prevede un modello TFLite con metadati del modello TFLite obbligatori.

I metadati devono soddisfare i seguenti requisiti:

  • input_process_units per Tokenizer Wordpiece/Sentencepiece

  • 3 tensori di input con nomi "ids", "mask" e "segment_ids" per l'output del tokenizzatore

  • 2 tensori di output con nomi "end_logits" e "start_logits" per indicare la posizione relativa della risposta nel contesto