BERT-Fragenantworter einbinden

Die BertQuestionAnswerer API der Task Library lädt ein Bert-Modell und gibt Antworten Fragen, die sich auf den Inhalt einer bestimmten Passage beziehen. Weitere Informationen finden Sie in der Beispiel für das Frage-Antwort-Modell.

Wichtige Funktionen der BertQuestionAnswerer API

  • Verwendet zwei Texteingaben als Frage und Kontext und gibt eine Liste möglicher Antworten.

  • Führt Out-of-Graph-Wort- oder Satztokenisierungen bei der Eingabe durch Text.

Unterstützte BertQuestionAnswerer-Modelle

Die folgenden Modelle sind mit der BertNLClassifier API kompatibel.

Inferenz in Java ausführen

Schritt 1: Gradle-Abhängigkeit und andere Einstellungen importieren

Kopieren Sie die Modelldatei .tflite in das Asset-Verzeichnis des Android-Moduls. in dem das Modell ausgeführt wird. Geben Sie an, dass die Datei nicht komprimiert werden soll, und Fügen Sie der Datei build.gradle des Moduls die TensorFlow Lite-Bibliothek hinzu:

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

Schritt 2: Inferenz mit der API ausführen

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

Weitere Informationen finden Sie in der Quellcode .

Inferenzen in Swift ausführen

Schritt 1: CocoaPods importieren

TensorFlowLiteTaskText-Pod in Podfile hinzufügen

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

Schritt 2: Inferenz mit der API ausführen

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

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

Weitere Informationen finden Sie in der Quellcode .

Inferenz in C++ ausführen

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

Weitere Informationen finden Sie in der Quellcode .

Inferenz in Python ausführen

Schritt 1: pip-Paket installieren

pip install tflite-support

Schritt 2: Modell verwenden

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

Weitere Informationen finden Sie in der Quellcode finden Sie weitere Optionen zum Konfigurieren von BertQuestionAnswerer.

Beispielergebnisse

Hier ist ein Beispiel für die Antwortergebnisse ALBERT-Modell

Kontext: „Der Amazonas-Regenwald, alternativ der Amazonas-Dschungel, auch bekannt in Englisch wie Amazonia ist ein feuchter tropischer Regenwald mit breitem Blatt im Amazonas. das den Großteil des Amazonasbeckens in Südamerika bedeckt. Dieses Becken umfasst 7.000.000 km2 davon, davon 5.500.000 km2 sind vom Regenwald bedeckt. Diese Region umfasst ein Territorium, das zu neun Nationen gehört.“

Frage: „Wo ist der Amazonas-Regenwald?“

Antworten:

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

Probieren Sie die einfache CLI-Demotool für BertQuestionAnswerer mit eigenen Modell- und Testdaten.

Anforderungen an die Modellkompatibilität

Die BertQuestionAnswerer API erwartet ein TFLite-Modell mit obligatorischen TFLite-Modellmetadaten.

Metadaten sollten die folgenden Anforderungen erfüllen:

  • input_process_units für Wortstück-/Satz-Tokenizer

  • 3 Eingabetensoren mit den Namen „ids“, „mask“ und "segment_ids" für die Ausgabe von der Tokenizer

  • 2 Ausgabetensoren mit den Namen „end_logits“ und "start_logits" um die die relative Position der Antwort im Kontext