پاسخگوی پرسش BERT را ادغام کنید

کتابخانه وظایف، رابط برنامه‌نویسی کاربردی (API) BertQuestionAnswerer یک مدل Bert را بارگذاری می‌کند و بر اساس محتوای یک متن داده شده به سوالات پاسخ می‌دهد. برای اطلاعات بیشتر، به مثال مدل پرسش-پاسخ مراجعه کنید.

ویژگی‌های کلیدی رابط برنامه‌نویسی کاربردی (API) پاسخ‌دهنده‌ی BertQuestion

  • دو ورودی متنی به عنوان سوال و متن را دریافت می‌کند و لیستی از پاسخ‌های ممکن را به عنوان خروجی ارائه می‌دهد.

  • توکن‌سازی‌های خارج از نمودار Wordpiece یا Sentencepiece را روی متن ورودی انجام می‌دهد.

مدل‌های پشتیبانی‌شده‌ی BertQuestionAnswerer

مدل‌های زیر با API مربوط به BertNLClassifier سازگار هستند.

اجرای استنتاج در جاوا

مرحله ۱: وارد کردن وابستگی Gradle و سایر تنظیمات

فایل مدل .tflite را در دایرکتوری assets ماژول اندروید که مدل در آن اجرا خواهد شد، کپی کنید. مشخص کنید که فایل نباید فشرده شود و کتابخانه 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'
}

مرحله ۲: اجرای استنتاج با استفاده از 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);

برای جزئیات بیشتر به کد منبع مراجعه کنید.

اجرای استنتاج در سوئیفت

مرحله 1: وارد کردن CocoaPods

غلاف TensorFlowLiteTaskText را در Podfile اضافه کنید

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

مرحله ۲: اجرای استنتاج با استفاده از 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);

برای جزئیات بیشتر به کد منبع مراجعه کنید.

اجرای استنتاج در پایتون

مرحله ۱: نصب بسته pip

pip install tflite-support

مرحله ۲: استفاده از مدل

# 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 به کد منبع مراجعه کنید.

نتایج مثال

در اینجا مثالی از نتایج پاسخ مدل آلبرت آورده شده است.

متن: «جنگل بارانی آمازون، که به طور خلاصه، جنگل آمازون، که در انگلیسی با نام آمازونیا نیز شناخته می‌شود، یک جنگل بارانی گرمسیری پهن‌برگ و مرطوب در زیست‌بوم آمازون است که بیشتر حوضه آمازون آمریکای جنوبی را پوشش می‌دهد. این حوضه شامل ۷،۰۰۰،۰۰۰ کیلومتر مربع (۲،۷۰۰،۰۰۰ مایل مربع) است که ۵،۵۰۰،۰۰۰ کیلومتر مربع (۲،۱۰۰،۰۰۰ مایل مربع) آن توسط جنگل بارانی پوشیده شده است. این منطقه شامل قلمرو متعلق به نه کشور است.»

سوال: جنگل‌های آمازون کجا هستند؟

پاسخ‌ها:

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 با فراداده (Metadata) مدل TFLite اجباری را دارد.

متادیتا باید الزامات زیر را برآورده کند:

  • input_process_units برای توکن‌ساز Wordpiece/Sentencepiece

  • ۳ تانسور ورودی با نام‌های "ids"، "mask" و "segment_ids" برای خروجی توکن‌ساز

  • دو تانسور خروجی با نام‌های "end_logits" و "start_logits" برای نشان دادن موقعیت نسبی پاسخ در متن