Android এর সাথে প্রশ্নের উত্তর দেওয়া

অ্যান্ড্রয়েডে প্রশ্নের উত্তর দেওয়ার উদাহরণ অ্যাপ

এই টিউটোরিয়ালটি আপনাকে দেখায় কিভাবে টেনসরফ্লো লাইট ব্যবহার করে একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশন তৈরি করতে হয় যাতে প্রাকৃতিক ভাষার পাঠ্যে কাঠামোগত প্রশ্নের উত্তর দেওয়া যায়। উদাহরণ অ্যাপ্লিকেশনটি BERT প্রশ্ন উত্তরকারী ( BertQuestionAnswerer ) API ব্যবহার করে প্রাকৃতিক ভাষার জন্য টাস্ক লাইব্রেরির মধ্যে (NL) প্রশ্নের উত্তর দেওয়ার মেশিন লার্নিং মডেলগুলি সক্ষম করতে। অ্যাপ্লিকেশনটি একটি শারীরিক অ্যান্ড্রয়েড ডিভাইসের জন্য ডিজাইন করা হয়েছে তবে এটি একটি ডিভাইস এমুলেটরেও চলতে পারে।

আপনি যদি একটি বিদ্যমান প্রকল্প আপডেট করছেন, আপনি একটি রেফারেন্স বা টেমপ্লেট হিসাবে উদাহরণ অ্যাপ্লিকেশন ব্যবহার করতে পারেন। একটি বিদ্যমান অ্যাপ্লিকেশনে প্রশ্নের উত্তর যোগ করার নির্দেশাবলীর জন্য, আপনার অ্যাপ্লিকেশন আপডেট করা এবং সংশোধন করা দেখুন।

প্রশ্ন উত্তর ওভারভিউ

প্রশ্নের উত্তর হল প্রাকৃতিক ভাষায় উত্থাপিত প্রশ্নের উত্তর দেওয়ার মেশিন লার্নিং কাজ। একটি প্রশিক্ষিত প্রশ্নের উত্তর মডেল ইনপুট হিসাবে একটি টেক্সট প্যাসেজ এবং প্রশ্ন গ্রহণ করে এবং প্যাসেজের মধ্যে থাকা তথ্যের ব্যাখ্যার উপর ভিত্তি করে প্রশ্নের উত্তর দেওয়ার চেষ্টা করে।

একটি প্রশ্ন উত্তর মডেল একটি প্রশ্ন উত্তর ডেটাসেটের উপর প্রশিক্ষিত হয়, যা পাঠ্যের বিভিন্ন অংশের উপর ভিত্তি করে প্রশ্ন-উত্তর জোড়া সহ একটি পাঠ বোঝার ডেটাসেট নিয়ে গঠিত।

এই টিউটোরিয়ালের মডেলগুলি কীভাবে তৈরি করা হয় সে সম্পর্কে আরও তথ্যের জন্য, TensorFlow Lite Model Maker টিউটোরিয়াল সহ BERT প্রশ্নের উত্তর পড়ুন।

মডেল এবং ডেটাসেট

উদাহরণ অ্যাপটি মোবাইল BERT Q&A ( mobilebert ) মডেল ব্যবহার করে, যা BERT (ট্রান্সফরমার থেকে দ্বিমুখী এনকোডার প্রতিনিধিত্ব) এর একটি হালকা এবং দ্রুত সংস্করণ। mobilebert সম্পর্কে আরও তথ্যের জন্য, মোবাইলবার্ট দেখুন: রিসোর্স-লিমিটেড ডিভাইসের জন্য একটি কমপ্যাক্ট টাস্ক-অ্যাগনস্টিক BERT গবেষণাপত্র।

mobilebert মডেলটিকে স্ট্যানফোর্ড কোয়েশ্চেন অ্যানসারিং ডেটাসেট ( SQuAD ) ডেটাসেট, উইকিপিডিয়ার নিবন্ধগুলি এবং প্রতিটি নিবন্ধের জন্য প্রশ্ন-উত্তর জোড়ার একটি সেট সমন্বিত একটি পাঠ বোঝার ডেটাসেট ব্যবহার করে প্রশিক্ষণ দেওয়া হয়েছিল।

উদাহরণ অ্যাপ সেটআপ করুন এবং চালান

প্রশ্ন উত্তর অ্যাপ্লিকেশন সেটআপ করতে, GitHub থেকে উদাহরণ অ্যাপ্লিকেশনটি ডাউনলোড করুন এবং Android স্টুডিও ব্যবহার করে এটি চালান।

সিস্টেমের জন্য আবশ্যক

উদাহরণ কোড পান

উদাহরণ কোডের একটি স্থানীয় অনুলিপি তৈরি করুন। আপনি অ্যান্ড্রয়েড স্টুডিওতে একটি প্রকল্প তৈরি করতে এবং উদাহরণ অ্যাপ্লিকেশন চালানোর জন্য এই কোডটি ব্যবহার করবেন।

উদাহরণ কোড ক্লোন এবং সেটআপ করতে:

  1. git সংগ্রহস্থল
    git clone https://github.com/tensorflow/examples.git
    
    ক্লোন করুন
  2. ঐচ্ছিকভাবে, স্পার্স চেকআউট ব্যবহার করার জন্য আপনার গিট ইন্সট্যান্স কনফিগার করুন, যাতে আপনার কাছে প্রশ্নের উত্তর দেওয়ার উদাহরণ অ্যাপের জন্য শুধুমাত্র ফাইল থাকে:
    cd examples
    git sparse-checkout init --cone
    git sparse-checkout set lite/examples/bert_qa/android
    

আমদানি করুন এবং প্রকল্প চালান

ডাউনলোড করা উদাহরণ কোড থেকে একটি প্রকল্প তৈরি করুন, প্রকল্পটি তৈরি করুন এবং তারপরে এটি চালান।

উদাহরণ কোড প্রকল্প আমদানি এবং নির্মাণ করতে:

  1. অ্যান্ড্রয়েড স্টুডিও শুরু করুন।
  2. অ্যান্ড্রয়েড স্টুডিও থেকে, ফাইল > নতুন > আমদানি প্রকল্প নির্বাচন করুন।
  3. build.gradle ফাইল ( .../examples/lite/examples/bert_qa/android/build.gradle ) ধারণকারী উদাহরণ কোড ডিরেক্টরিতে নেভিগেট করুন এবং সেই ডিরেক্টরিটি নির্বাচন করুন।
  4. যদি অ্যান্ড্রয়েড স্টুডিও গ্রেডল সিঙ্কের অনুরোধ করে, ঠিক আছে বেছে নিন।
  5. নিশ্চিত করুন যে আপনার অ্যান্ড্রয়েড ডিভাইস আপনার কম্পিউটারের সাথে সংযুক্ত আছে এবং বিকাশকারী মোড সক্ষম করা আছে৷ সবুজ Run তীর ক্লিক করুন.

আপনি সঠিক ডিরেক্টরি নির্বাচন করলে, অ্যান্ড্রয়েড স্টুডিও একটি নতুন প্রকল্প তৈরি করে এবং এটি তৈরি করে। আপনার কম্পিউটারের গতির উপর নির্ভর করে এবং আপনি যদি অন্যান্য প্রকল্পের জন্য অ্যান্ড্রয়েড স্টুডিও ব্যবহার করেন তবে এই প্রক্রিয়াটি কয়েক মিনিট সময় নিতে পারে। বিল্ড সম্পূর্ণ হলে, অ্যান্ড্রয়েড স্টুডিও বিল্ড আউটপুট স্ট্যাটাস প্যানেলে একটি BUILD SUCCESSFUL বার্তা প্রদর্শন করে।

প্রকল্প চালানোর জন্য:

  1. অ্যান্ড্রয়েড স্টুডিও থেকে, রান > রান… নির্বাচন করে প্রকল্পটি চালান।
  2. অ্যাপটি পরীক্ষা করতে একটি সংযুক্ত Android ডিভাইস (বা এমুলেটর) নির্বাচন করুন।

অ্যাপ্লিকেশন ব্যবহার করে

অ্যান্ড্রয়েড স্টুডিওতে প্রকল্পটি চালানোর পরে, অ্যাপ্লিকেশনটি স্বয়ংক্রিয়ভাবে সংযুক্ত ডিভাইস বা ডিভাইস এমুলেটরে খোলে।

প্রশ্নের উত্তরদাতার উদাহরণ অ্যাপ ব্যবহার করতে:

  1. বিষয়ের তালিকা থেকে একটি বিষয় নির্বাচন করুন।
  2. একটি প্রস্তাবিত প্রশ্ন চয়ন করুন বা পাঠ্য বাক্সে আপনার নিজের লিখুন৷
  3. মডেল চালানোর জন্য কমলা তীর টগল করুন.

অ্যাপ্লিকেশনটি প্যাসেজ টেক্সট থেকে প্রশ্নের উত্তর সনাক্ত করার চেষ্টা করে। যদি মডেলটি উত্তরণের মধ্যে একটি উত্তর সনাক্ত করে, তবে অ্যাপ্লিকেশনটি ব্যবহারকারীর জন্য পাঠ্যের প্রাসঙ্গিক স্প্যানটি হাইলাইট করে।

আপনার কাছে এখন একটি কার্যকরী প্রশ্নের উত্তর দেওয়ার অ্যাপ্লিকেশন রয়েছে। উদাহরণ অ্যাপ্লিকেশনটি কীভাবে কাজ করে এবং কীভাবে আপনার উত্পাদন অ্যাপ্লিকেশনগুলিতে প্রশ্নের উত্তর দেওয়ার বৈশিষ্ট্যগুলি প্রয়োগ করতে হয় তা আরও ভালভাবে বুঝতে নিম্নলিখিত বিভাগগুলি ব্যবহার করুন:

উদাহরণ অ্যাপ কিভাবে কাজ করে

অ্যাপ্লিকেশনটি প্রাকৃতিক ভাষা (NL) প্যাকেজের জন্য টাস্ক লাইব্রেরির মধ্যে BertQuestionAnswerer API ব্যবহার করে। MobileBERT মডেলটি TensorFlow Lite Model Maker ব্যবহার করে প্রশিক্ষিত হয়েছিল। GPU বা NNAPI প্রতিনিধি ব্যবহার করে হার্ডওয়্যার ত্বরণের বিকল্প সহ অ্যাপ্লিকেশনটি ডিফল্টরূপে CPU-তে চলে।

নিম্নলিখিত ফাইল এবং ডিরেক্টরিতে এই অ্যাপ্লিকেশনের জন্য গুরুত্বপূর্ণ কোড রয়েছে:

  • BertQaHelper.kt - প্রশ্নের উত্তরদাতাকে শুরু করে এবং মডেল ও প্রতিনিধি নির্বাচন পরিচালনা করে।
  • QaFragment.kt - ফলাফলগুলি পরিচালনা করে এবং ফর্ম্যাট করে।
  • MainActivity.kt - অ্যাপের সংগঠিত যুক্তি প্রদান করে।

আপনার আবেদন সংশোধন করুন

নিম্নলিখিত বিভাগগুলি উদাহরণ অ্যাপে দেখানো মডেলটি চালানোর জন্য আপনার নিজের অ্যান্ড্রয়েড অ্যাপ পরিবর্তন করার মূল পদক্ষেপগুলি ব্যাখ্যা করে৷ এই নির্দেশাবলী একটি রেফারেন্স পয়েন্ট হিসাবে উদাহরণ অ্যাপ্লিকেশন ব্যবহার করে. আপনার নিজের অ্যাপের জন্য প্রয়োজনীয় নির্দিষ্ট পরিবর্তনগুলি উদাহরণ অ্যাপ থেকে পরিবর্তিত হতে পারে।

একটি Android প্রকল্প খুলুন বা তৈরি করুন

এই বাকি নির্দেশাবলী অনুসরণ করার জন্য আপনার Android স্টুডিওতে একটি Android ডেভেলপমেন্ট প্রজেক্ট প্রয়োজন। একটি বিদ্যমান প্রকল্প খুলতে বা একটি নতুন তৈরি করতে নীচের নির্দেশাবলী অনুসরণ করুন৷

একটি বিদ্যমান অ্যান্ড্রয়েড উন্নয়ন প্রকল্প খুলতে:

  • অ্যান্ড্রয়েড স্টুডিওতে, ফাইল > খুলুন নির্বাচন করুন এবং একটি বিদ্যমান প্রকল্প নির্বাচন করুন।

একটি মৌলিক অ্যান্ড্রয়েড উন্নয়ন প্রকল্প তৈরি করতে:

অ্যান্ড্রয়েড স্টুডিও ব্যবহার সম্পর্কে আরও তথ্যের জন্য, অ্যান্ড্রয়েড স্টুডিও ডকুমেন্টেশন দেখুন।

প্রকল্প নির্ভরতা যোগ করুন

আপনার নিজের অ্যাপ্লিকেশনে, TensorFlow Lite মেশিন লার্নিং মডেল এবং অ্যাক্সেস ইউটিলিটি ফাংশন চালানোর জন্য নির্দিষ্ট প্রকল্প নির্ভরতা যোগ করুন। এই ফাংশনগুলি স্ট্রিংগুলির মতো ডেটাকে টেনসর ডেটা ফর্ম্যাটে রূপান্তর করে যা মডেল দ্বারা প্রক্রিয়া করা যেতে পারে। নিম্নলিখিত নির্দেশাবলী ব্যাখ্যা করে কিভাবে আপনার নিজের Android অ্যাপ প্রকল্পে প্রয়োজনীয় প্রকল্প এবং মডিউল নির্ভরতা যোগ করতে হয়।

মডিউল নির্ভরতা যোগ করতে:

  1. TensorFlow Lite ব্যবহার করে এমন মডিউলে, নিম্নলিখিত নির্ভরতাগুলি অন্তর্ভুক্ত করতে মডিউলের build.gradle ফাইলটি আপডেট করুন।

    উদাহরণ অ্যাপ্লিকেশনে, নির্ভরতাগুলি app/build.gradle- এ অবস্থিত:

    dependencies {
      ...
      // Import tensorflow library
      implementation 'org.tensorflow:tensorflow-lite-task-text:0.3.0'
    
      // Import the GPU delegate plugin Library for GPU inference
      implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.4.0'
      implementation 'org.tensorflow:tensorflow-lite-gpu:2.9.0'
    }
    

    প্রজেক্টে অবশ্যই টেক্সট টাস্ক লাইব্রেরি ( tensorflow-lite-task-text ) অন্তর্ভুক্ত থাকতে হবে।

    আপনি যদি গ্রাফিক্স প্রসেসিং ইউনিটে (GPU) চালানোর জন্য এই অ্যাপটিকে পরিবর্তন করতে চান, তাহলে GPU লাইব্রেরি ( tensorflow-lite-gpu-delegate-plugin ) অ্যাপটিকে GPU-তে চালানোর জন্য পরিকাঠামো প্রদান করে এবং প্রতিনিধি ( tensorflow-lite-gpu ) সামঞ্জস্য তালিকা প্রদান করে।

  2. অ্যান্ড্রয়েড স্টুডিওতে, নির্বাচন করে প্রকল্প নির্ভরতা সিঙ্ক করুন: ফাইল > গ্রেডল ফাইলের সাথে প্রকল্প সিঙ্ক করুন

ML মডেলগুলি শুরু করুন

আপনার Android অ্যাপে, মডেলের সাথে ভবিষ্যদ্বাণী চালানোর আগে আপনাকে অবশ্যই প্যারামিটার সহ TensorFlow Lite মেশিন লার্নিং মডেলটি আরম্ভ করতে হবে।

একটি TensorFlow Lite মডেল একটি *.tflite ফাইল হিসাবে সংরক্ষণ করা হয়। মডেল ফাইলে ভবিষ্যদ্বাণীর যুক্তি রয়েছে এবং সাধারণত ভবিষ্যদ্বাণী ফলাফলগুলি কীভাবে ব্যাখ্যা করা যায় সে সম্পর্কে মেটাডেটা অন্তর্ভুক্ত করে। সাধারণত, মডেল ফাইলগুলি আপনার ডেভেলপমেন্ট প্রজেক্টের src/main/assets ডিরেক্টরিতে সংরক্ষণ করা হয়, যেমন কোড উদাহরণে:

  • <project>/src/main/assets/mobilebert_qa.tflite

সুবিধা এবং কোড পঠনযোগ্যতার জন্য, উদাহরণটি একটি সহচর বস্তু ঘোষণা করে যা মডেলের সেটিংস সংজ্ঞায়িত করে।

আপনার অ্যাপে মডেলটি শুরু করতে:

  1. মডেলের জন্য সেটিংস সংজ্ঞায়িত করতে একটি সহচর বস্তু তৈরি করুন। উদাহরণ অ্যাপ্লিকেশনে, এই বস্তুটি BertQaHelper.kt এ অবস্থিত:

    companion object {
        private const val BERT_QA_MODEL = "mobilebert.tflite"
        private const val TAG = "BertQaHelper"
        const val DELEGATE_CPU = 0
        const val DELEGATE_GPU = 1
        const val DELEGATE_NNAPI = 2
    }
    
  2. একটি BertQaHelper অবজেক্ট তৈরি করে মডেলের জন্য সেটিংস তৈরি করুন এবং bertQuestionAnswerer দিয়ে একটি TensorFlow Lite অবজেক্ট তৈরি করুন।

    উদাহরণ অ্যাপ্লিকেশনে, এটি BertQaHelper.kt- এর মধ্যে setupBertQuestionAnswerer() ফাংশনে অবস্থিত:

    class BertQaHelper(
        ...
    ) {
        ...
        init {
            setupBertQuestionAnswerer()
        }
    
        fun clearBertQuestionAnswerer() {
            bertQuestionAnswerer = null
        }
    
        private fun setupBertQuestionAnswerer() {
            val baseOptionsBuilder = BaseOptions.builder().setNumThreads(numThreads)
            ...
            val options = BertQuestionAnswererOptions.builder()
                .setBaseOptions(baseOptionsBuilder.build())
                .build()
    
            try {
                bertQuestionAnswerer =
                    BertQuestionAnswerer.createFromFileAndOptions(context, BERT_QA_MODEL, options)
            } catch (e: IllegalStateException) {
                answererListener
                    ?.onError("Bert Question Answerer failed to initialize. See error logs for details")
                Log.e(TAG, "TFLite failed to load model with error: " + e.message)
            }
        }
        ...
        }
    

হার্ডওয়্যার ত্বরণ সক্ষম করুন (ঐচ্ছিক)

আপনার অ্যাপে একটি টেনসরফ্লো লাইট মডেল শুরু করার সময়, মডেলের পূর্বাভাস গণনার গতি বাড়ানোর জন্য আপনার হার্ডওয়্যার ত্বরণ বৈশিষ্ট্যগুলি ব্যবহার করার কথা বিবেচনা করা উচিত। TensorFlow Lite প্রতিনিধি হল সফ্টওয়্যার মডিউল যা মোবাইল ডিভাইসে বিশেষায়িত প্রসেসিং হার্ডওয়্যার, যেমন গ্রাফিক্স প্রসেসিং ইউনিট (GPUs) বা টেনসর প্রসেসিং ইউনিট (TPUs) ব্যবহার করে মেশিন লার্নিং মডেলগুলির সম্পাদনকে ত্বরান্বিত করে।

আপনার অ্যাপে হার্ডওয়্যার ত্বরণ সক্ষম করতে:

  1. অ্যাপ্লিকেশনটি ব্যবহার করবে এমন প্রতিনিধিকে সংজ্ঞায়িত করতে একটি ভেরিয়েবল তৈরি করুন। উদাহরণ অ্যাপ্লিকেশনে, এই ভেরিয়েবলটি BertQaHelper.kt- এর প্রথম দিকে অবস্থিত:

    var currentDelegate: Int = 0
    
  2. একটি প্রতিনিধি নির্বাচক তৈরি করুন। উদাহরণ অ্যাপ্লিকেশনে, প্রতিনিধি নির্বাচনকারী BertQaHelper.kt- এর মধ্যে setupBertQuestionAnswerer ফাংশনে অবস্থিত:

    when (currentDelegate) {
        DELEGATE_CPU -> {
            // Default
        }
        DELEGATE_GPU -> {
            if (CompatibilityList().isDelegateSupportedOnThisDevice) {
                baseOptionsBuilder.useGpu()
            } else {
                answererListener?.onError("GPU is not supported on this device")
            }
        }
        DELEGATE_NNAPI -> {
            baseOptionsBuilder.useNnapi()
        }
    }
    

TensorFlow Lite মডেল চালানোর জন্য প্রতিনিধিদের ব্যবহার করার পরামর্শ দেওয়া হয়, কিন্তু প্রয়োজন হয় না। TensorFlow Lite এর সাথে প্রতিনিধিদের ব্যবহার সম্পর্কে আরও তথ্যের জন্য, TensorFlow Lite প্রতিনিধি দেখুন।

মডেলের জন্য ডেটা প্রস্তুত করুন

আপনার অ্যান্ড্রয়েড অ্যাপে, আপনার কোডটি বিদ্যমান ডেটা যেমন কাঁচা পাঠ্যকে একটি টেনসর ডেটা ফর্ম্যাটে রূপান্তর করে ব্যাখ্যার জন্য মডেলকে ডেটা সরবরাহ করে যা আপনার মডেল দ্বারা প্রক্রিয়া করা যেতে পারে। আপনি একটি মডেলে যে টেনসরটি পাস করেন তা অবশ্যই নির্দিষ্ট মাত্রা বা আকার থাকতে হবে যা মডেলটিকে প্রশিক্ষণের জন্য ব্যবহৃত ডেটার বিন্যাসের সাথে মেলে। এই প্রশ্নের উত্তর দেওয়ার অ্যাপটি টেক্সট প্যাসেজ এবং প্রশ্ন উভয়ের জন্য ইনপুট হিসাবে স্ট্রিং গ্রহণ করে। মডেল বিশেষ অক্ষর এবং অ-ইংরেজি শব্দ চিনতে পারে না।

মডেলে প্যাসেজ টেক্সট ডেটা প্রদান করতে:

  1. অ্যাপে প্যাসেজ টেক্সট ডেটা লোড করতে LoadDataSetClient অবজেক্ট ব্যবহার করুন। উদাহরণ অ্যাপ্লিকেশনে, এটি LoadDataSetClient.kt- এ অবস্থিত

    fun loadJson(): DataSet? {
        var dataSet: DataSet? = null
        try {
            val inputStream: InputStream = context.assets.open(JSON_DIR)
            val bufferReader = inputStream.bufferedReader()
            val stringJson: String = bufferReader.use { it.readText() }
            val datasetType = object : TypeToken<DataSet>() {}.type
            dataSet = Gson().fromJson(stringJson, datasetType)
        } catch (e: IOException) {
            Log.e(TAG, e.message.toString())
        }
        return dataSet
    }
    
  2. পাঠ্যের প্রতিটি অনুচ্ছেদের শিরোনাম তালিকাভুক্ত করতে DatasetFragment অবজেক্ট ব্যবহার করুন এবং TFL প্রশ্ন ও উত্তর স্ক্রীন শুরু করুন। উদাহরণ অ্যাপ্লিকেশনে, এটি DatasetFragment.kt এ অবস্থিত:

    class DatasetFragment : Fragment() {
        ...
        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
            val client = LoadDataSetClient(requireActivity())
            client.loadJson()?.let {
                titles = it.getTitles()
            }
            ...
        }
       ...
    }
    
  3. পাঠ্যের প্রতিটি প্যাসেজের জন্য শিরোনাম উপস্থাপন করতে DatasetAdapter অবজেক্টের মধ্যে onCreateViewHolder ফাংশনটি ব্যবহার করুন। উদাহরণ অ্যাপ্লিকেশনে, এটি DatasetAdapter.kt এ অবস্থিত:

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val binding = ItemDatasetBinding.inflate(
            LayoutInflater.from(parent.context),
            parent,
            false
        )
        return ViewHolder(binding)
    }
    

মডেলটিতে ব্যবহারকারীর প্রশ্ন প্রদান করতে:

  1. মডেলকে প্রশ্ন প্রদান করতে QaAdapter অবজেক্ট ব্যবহার করুন। উদাহরণ অ্যাপ্লিকেশনে, এটি QaAdapter.kt এ অবস্থিত:

    class QaAdapter(private val question: List<String>, private val select: (Int) -> Unit) :
      RecyclerView.Adapter<QaAdapter.ViewHolder>() {
    
      inner class ViewHolder(private val binding: ItemQuestionBinding) :
          RecyclerView.ViewHolder(binding.root) {
          init {
              binding.tvQuestionSuggestion.setOnClickListener {
                  select.invoke(adapterPosition)
              }
          }
    
          fun bind(question: String) {
              binding.tvQuestionSuggestion.text = question
          }
      }
      ...
    }
    

ভবিষ্যদ্বাণী চালান

আপনার অ্যান্ড্রয়েড অ্যাপে, একবার আপনি একটি BertQuestionAnswerer অবজেক্ট শুরু করলে, আপনি মডেলটিতে প্রাকৃতিক ভাষার পাঠ্য আকারে প্রশ্ন ইনপুট করা শুরু করতে পারেন। মডেলটি পাঠ্য প্যাসেজের মধ্যে উত্তর সনাক্ত করার চেষ্টা করে।

ভবিষ্যদ্বাণী চালানোর জন্য:

  1. একটি answer ফাংশন তৈরি করুন, যা মডেলটি চালায় এবং উত্তর সনাক্ত করার জন্য নেওয়া সময় পরিমাপ করে ( inferenceTime )। উদাহরণ অ্যাপ্লিকেশনে, answer ফাংশনটি BertQaHelper.kt এ অবস্থিত:

    fun answer(contextOfQuestion: String, question: String) {
        if (bertQuestionAnswerer == null) {
            setupBertQuestionAnswerer()
        }
    
        var inferenceTime = SystemClock.uptimeMillis()
    
        val answers = bertQuestionAnswerer?.answer(contextOfQuestion, question)
        inferenceTime = SystemClock.uptimeMillis() - inferenceTime
        answererListener?.onResults(answers, inferenceTime)
    }
    
  2. শ্রোতা বস্তুর answer থেকে ফলাফল পাস.

    interface AnswererListener {
        fun onError(error: String)
        fun onResults(
            results: List<QaAnswer>?,
            inferenceTime: Long
        )
    }
    

মডেল আউটপুট হ্যান্ডেল

আপনি একটি প্রশ্ন ইনপুট করার পরে, মডেলটি প্যাসেজের মধ্যে সর্বাধিক পাঁচটি সম্ভাব্য উত্তর প্রদান করে।

মডেল থেকে ফলাফল পেতে:

  1. আউটপুট পরিচালনা করার জন্য শ্রোতা বস্তুর জন্য একটি onResult ফাংশন তৈরি করুন। উদাহরণ অ্যাপ্লিকেশনে, লিসেনার অবজেক্টটি BertQaHelper.kt- এ অবস্থিত

    interface AnswererListener {
        fun onError(error: String)
        fun onResults(
            results: List<QaAnswer>?,
            inferenceTime: Long
        )
    }
    
  2. ফলাফলের উপর ভিত্তি করে প্যাসেজের অংশগুলি হাইলাইট করুন। উদাহরণ অ্যাপ্লিকেশনে, এটি QaFragment.kt এ অবস্থিত:

    override fun onResults(results: List<QaAnswer>?, inferenceTime: Long) {
        results?.first()?.let {
            highlightAnswer(it.text)
        }
    
        fragmentQaBinding.tvInferenceTime.text = String.format(
            requireActivity().getString(R.string.bottom_view_inference_time),
            inferenceTime
        )
    }
    

একবার মডেলটি ফলাফলের একটি সেট ফিরিয়ে দিলে, আপনার অ্যাপ্লিকেশনটি আপনার ব্যবহারকারীর কাছে ফলাফল উপস্থাপন করে বা অতিরিক্ত যুক্তি প্রয়োগ করে সেই ভবিষ্যদ্বাণীগুলিতে কাজ করতে পারে।

পরবর্তী পদক্ষেপ