BERT soru cevaplayıcıyı entegre edin

Görev Kitaplığı BertQuestionAnswerer API, bir Bert modeli yükler ve belirli bir pasajın içeriğine göre soruları yanıtlar. Daha fazla bilgi için, buradaki Soru-Cevap modelinin belgelerine bakın .

BertQuestionAnswerer API'sinin temel özellikleri

  • Soru ve bağlam olarak iki metin girişi alır ve olası yanıtların bir listesini verir.

  • Giriş metninde grafik dışı Sözcük Parçası veya Cümle Parçası belirteçleri gerçekleştirir.

Desteklenen BertQuestionCevap modelleri

Aşağıdaki modeller BertNLClassifier API ile uyumludur.

Java'da çıkarımı çalıştır

Adım 1: Gradle bağımlılığını ve diğer ayarları içe aktarın

.tflite model dosyasını, modelin çalıştırılacağı Android modülünün varlıklar dizinine kopyalayın. Dosyanın sıkıştırılmaması gerektiğini belirtin ve TensorFlow Lite kitaplığını modülün build.gradle dosyasına ekleyin:

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

2. Adım: API'yi kullanarak çıkarımı çalıştırın

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

Daha fazla ayrıntı için kaynak koduna bakın.

Swift'de çıkarımı çalıştır

1. Adım: CocoaPod'ları İçe Aktarın

Podfile'de TensorFlowLiteTaskText bölmesini ekleyin

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

2. Adım: API'yi kullanarak çıkarımı çalıştırın

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

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

Daha fazla ayrıntı için kaynak koduna bakın.

Çıkarımı C++ ile çalıştırın

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

Daha fazla ayrıntı için kaynak koduna bakın.

Örnek sonuçlar

İşte ALBERT modelinin cevap sonuçlarına bir örnek.

Bağlam: "Amazon yağmur ormanı, alternatif olarak, İngilizcede Amazonia olarak da bilinen Amazon Ormanı, Amazon biyomunda, Güney Amerika'nın Amazon havzasının çoğunu kapsayan nemli, geniş yapraklı bir tropikal yağmur ormanıdır. Bu havza 7.000.000 km2'yi (2.700.000 sq mi) kapsar ), bunun 5.500.000 km2'si (2.100.000 sq mi) yağmur ormanlarıyla kaplıdır. Bu bölge dokuz ülkeye ait toprakları içerir."

Soru: "Amazon yağmur ormanları nerede?"

Yanıtlar:

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

BertQuestionAnswerer için basit CLI demo aracını kendi model ve test verilerinizle deneyin.

Model uyumluluğu gereksinimleri

BertQuestionAnswerer API, zorunlu TFLite Model Meta Verilerine sahip bir TFLite modeli bekler.

Meta Veriler aşağıdaki gereksinimleri karşılamalıdır:

  • Sözcük Parçası/Cümle Parçası Simgeleştiricisi için input_process_units

  • Belirteç oluşturucunun çıktısı için "ids", "mask" ve "segment_ids" adlarına sahip 3 giriş tensörü

  • Bağlamdaki cevabın göreli konumunu belirtmek için "end_logits" ve "start_logits" adlarına sahip 2 çıkış tensörü