שילוב של תשובות לשאלות BERT

ה-API של ספריית המשימות BertQuestionAnswerer טוען מודל BERT ותשובות בהתאם לתוכן של פסקה מסוימת. מידע נוסף זמין במאמר עבור מודל שאלה-תשובה.

תכונות מרכזיות של BertQuestionAnswerer API

  • מקבל שני קלטי טקסט כשאלה והקשר ומפיק רשימה של תשובות.

  • ביצוע המרה לאסימונים של מילים או קטעי משפטים לא גרפיים בקלט טקסט.

מודלים נתמכים של BertQuestionAnswerer

המודלים הבאים תואמים ל-API של BertNLClassifier.

הרצת ההסקה ב-Java

שלב 1: מייבאים תלות ב-Gradle והגדרות אחרות

מעתיקים את קובץ המודל .tflite לספריית הנכסים הדיגיטליים של מודול Android. שבה המודל יפעל. לציין שאין לדחוס את הקובץ. מוסיפים את ספריית TensorFlow Lite לקובץ build.gradle של המודול:

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

שלב 2: מריצים מסקנות באמצעות ה-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);

לצפייה קוד מקור אפשר לקבל פרטים נוספים.

הרצת ההסקה ב-Swift

שלב 1: מייבאים CocoaPods

הוספת רצף TensorFlowLiteTaskText ב-Podfile

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

שלב 2: מריצים מסקנות באמצעות ה-API

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

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

לצפייה קוד מקור אפשר לקבל פרטים נוספים.

הרצת ההסקה ב-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);

לצפייה קוד מקור אפשר לקבל פרטים נוספים.

הרצת ההסקה ב-Python

שלב 1: מתקינים את חבילת PIP

pip install tflite-support

שלב 2: שימוש במודל

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

לצפייה קוד מקור לאפשרויות נוספות להגדרה של BertQuestionAnswerer.

תוצאות לדוגמה

הנה דוגמה לתוצאות התשובה של מודל אלBERT.

הקשר: "יער הגשם של האמזונאס, לחלופין, ג'ונגל האמזונאס, אנגלית כמו אמזוניה, הוא יער של גשם טרופי לחות באמזונס ביומה שמכסה את רוב אגן האמזונס בדרום אמריקה. אגן הניקוז הזה שטח של 7,000,000 km2 (2,700,000 מייל רבוע), שמתוכם 5,500,000 קמ"ר (2,100,000 קמ"ר) מכוסים ביער הגשם. באזור הזה כולל טריטוריה השייכת לתשע אומות."

שאלה: "איפה נמצא יער הגשם של האמזונאס?"

תשובות:

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

תנסו את השיטה הפשוטה כלי הדגמה של CLI עבור BertQuestionAnswerer את המודל ונתוני הבדיקה שלכם.

דרישות התאימות של המודלים

ל-API BertQuestionAnswerer נדרש מודל TFLite עם מטא-נתונים של מודל TFLite.

המטא-נתונים צריכים לעמוד בדרישות הבאות:

  • input_process_units לרכיב אסימון של מילה/טקסט

  • 3 רכיבי קלט עם השמות 'ids', 'mask' ו-segment_id את הפלט של כלי ההמרה לאסימונים

  • 2 רכיבי פלט עם השם end_logits ו-start_logits כדי לציין את המיקום היחסי של התשובה בהקשר