টেক্সট ক্লাসিফায়ার প্রয়োগ করুন

টেক্সট ক্লাসিফায়ার ডেভেলপারদের টেক্সট শ্রেণিবদ্ধ করতে সাহায্য করার জন্য মেশিন লার্নিং কৌশল ব্যবহার করে।

অ্যান্ড্রয়েড ১১ রিলিজ টেক্সট ক্লাসিফায়ার

অ্যান্ড্রয়েড ১১-এ ExtServices মডিউলে টেক্সট ক্লাসিফায়ার সার্ভিসের একটি আপডেটেবল ডিফল্ট ইমপ্লিমেন্টেশন চালু করা হয়েছে। অ্যান্ড্রয়েড ১১ বা তার উচ্চতর সংস্করণে চালিত ডিভাইসগুলিতে, getTextClassifier() মেথডটি ExtServices মডিউলের এই ডিফল্ট ইমপ্লিমেন্টেশনটি রিটার্ন করে। ডিভাইস নির্মাতাদের TextClassifierService এর এই ইমপ্লিমেন্টেশনটি ব্যবহার করার পরামর্শ দেওয়া হচ্ছে, কারণ এটি মেইনলাইন OTA আপডেটের মাধ্যমে আপডেট করা যায়।

অ্যান্ড্রয়েড ১১-এ পূর্বে অ্যান্ড্রয়েড ৮.১- এ চালু হওয়া লোকাল টেক্সট ক্লাসিফায়ারের ডিফল্ট ইমপ্লিমেন্টেশনটিও সরিয়ে দেওয়া হয়েছে। ফলে, getLocalTextClassifier() একটি NO_OP টেক্সট ক্লাসিফায়ার রিটার্ন করে। লোকাল ইমপ্লিমেন্টেশনের পরিবর্তে, আপনার getDefaultTextClassifierImplementation() মেথডটি ব্যবহার করা উচিত।

যেসব ডিভাইস প্রস্তুতকারক তাদের নিজস্ব টেক্সট ক্লাসিফাইং অ্যালগরিদম ব্যবহার করতে চান, তারা config.xml ফাইলে config_defaultTextClassifierPackage উল্লেখ করে একটি কাস্টম টেক্সট ক্লাসিফায়ার সার্ভিস ইমপ্লিমেন্ট করতে পারেন। যদি এই কনফিগারেশনটি উল্লেখ করা না থাকে, তবে ডিফল্ট সিস্টেম ইমপ্লিমেন্টেশনটি ব্যবহৃত হয়। কাস্টম ইমপ্লিমেন্টেশনগুলো TextClassifierService.getDefaultTextClassifierImplementation(Context) কল করে ডিফল্ট ইমপ্লিমেন্টেশনের একটি ইনস্ট্যান্স পেতে পারে। আরও তথ্যের জন্য, “Implementing a custom text classifier service” দেখুন।

পরীক্ষা

আপনার টেক্সট ক্লাসিফায়ার সার্ভিসের ইমপ্লিমেন্টেশন যাচাই করার জন্য, platform/cts/tests/tests/textclassifier/ -এ থাকা কম্প্যাটিবিলিটি টেস্ট স্যুট (CTS) টেস্টগুলো ব্যবহার করুন।

অ্যান্ড্রয়েড ১০ রিলিজে টেক্সট ক্লাসিফায়ারের উন্নতি

অ্যান্ড্রয়েড ১০-এ TextClassifier API-তে দুটি নতুন মেথড যুক্ত করা হয়েছে: suggestConversationActions এবং detectLanguagesuggestConversationActions মেথডটি কোনো নির্দিষ্ট কথোপকথন থেকে প্রস্তাবিত উত্তর ও অ্যাকশন তৈরি করে এবং detectLanguage মেথডটি টেক্সটের ভাষা শনাক্ত করে।

এই মেথডগুলোর মডেল ফাইলগুলো নিচে দেখানো হলো এবং external/libtextclassifier/models/ ফোল্ডারে পাওয়া যাবে।

  • suggestionConversationActions : actions_suggestions.universal.model
  • detectLanguage : lang_id.model

আপনার ফ্যাক্টরি ইমেজে সর্বশেষ মডেল ফাইলসহ একটি ডিভাইস রিলিজ করতে, নিম্নলিখিতগুলি করুন:

  1. সর্বশেষ মডেল ফাইলগুলো নিয়ে আসুন।

    external/libtextclassifier/models/update.sh
    
  2. বিদ্যমান ফাইলগুলোর পরিবর্তে ডাউনলোড করা ফাইলগুলোর নাম পরিবর্তন করুন।
  3. সেটআপটি যাচাই করুন।
    adb shell dumpsys textclassification
    

    এটি সেই কমান্ডের আউটপুটের একটি নমুনা।

    TextClassifierImpl:
      Annotator model file(s):
        ModelFile { path=/etc/textclassifier/textclassifier.universal.model name=textclassifier.universal.model version=608 locales=und }
        ModelFile { path=/etc/textclassifier/textclassifier.en.model name=textclassifier.en.model version=608 locales=en }
      LangID model file(s):
        ModelFile { path=/etc/textclassifier/lang_id.model name=lang_id.model version=0 locales=und }
      Actions model file(s):
        ModelFile { path=/etc/textclassifier/actions_suggestions.universal.model name=actions_suggestions.universal.model version=0 locales=und }

অ্যান্ড্রয়েড ৯ রিলিজ টেক্সট ক্লাসিফায়ারের উন্নতি

অ্যান্ড্রয়েড ৯, অ্যান্ড্রয়েড ৮.১-এ প্রবর্তিত টেক্সট ক্লাসিফিকেশন ফ্রেমওয়ার্ককে নতুন টেক্সট ক্লাসিফায়ার সার্ভিসের মাধ্যমে আরও উন্নত করেছে। OEM-দের জন্য টেক্সট ক্লাসিফিকেশন সিস্টেম সাপোর্ট প্রদানের ক্ষেত্রে টেক্সট ক্লাসিফায়ার সার্ভিস হলো প্রস্তাবিত উপায়। টেক্সট ক্লাসিফায়ার সার্ভিস যেকোনো সিস্টেম APK-এর অংশ হতে পারে এবং প্রয়োজন অনুযায়ী আপডেট করা যায়।

অ্যান্ড্রয়েড ৯-এ একটি ডিফল্ট টেক্সট ক্লাসিফায়ার সার্ভিস ইমপ্লিমেন্টেশন ( TextClassifierImpl ) অন্তর্ভুক্ত রয়েছে, যা ততক্ষণ পর্যন্ত ব্যবহৃত হয় যতক্ষণ না আপনি এটিকে একটি কাস্টম টেক্সট ক্লাসিফায়ার সার্ভিস ইমপ্লিমেন্টেশন দিয়ে প্রতিস্থাপন করেন।

একটি কাস্টম টেক্সট ক্লাসিফায়ার পরিষেবা বাস্তবায়ন করুন

নিম্নলিখিত বিভাগগুলিতে আপনার তৈরি করা একটি কাস্টম টেক্সট ক্লাসিফায়ার পরিষেবা কীভাবে বাস্তবায়ন করতে হয় তা বর্ণনা করা হয়েছে।

android.service.textclassifier.TextClassifierService প্রসারিত করুন

public final class TextClassifierServiceImpl
        extends TextClassifierService {

    // Returns TextClassifierImpl.
    private final TextClassifier tc = getLocalTextClassifier();

    @Override
    public void onSuggestSelection(
            @Nullable TextClassificationSessionId sessionId,
            @NonNull TextSelection.Request request,
            @NonNull CancellationSignal cancellationSignal,
            @NonNull Callback<TextSelection> callback) {
        CompletableFuture.supplyAsync(
                () -> tc.suggestSelection(request))
                .thenAccept(r -> callback.onSuccess(r));
    }

    @Override
    public void onClassifyText(
            @Nullable TextClassificationSessionId sessionId,
		@NonNull TextClassification.Request request,
		@NonNull CancellationSignal cancellationSignal,
		@NonNull Callback<TextClassification> callback) {
        ...
    }

    @Override
    public void onGenerateLinks(
            @Nullable TextClassificationSessionId sessionId,
            @NonNull TextLinks.Request request,
            @NonNull CancellationSignal cancellationSignal,
            @NonNull Callback<TextLinks> callback) {
        ...
    }
    ...
}

অ্যান্ড্রয়েড ম্যানিফেস্টে সার্ভিসটি সংজ্ঞায়িত করুন।

[AndroidManifest.xml]

<service android:name=".TextClassifierServiceImpl"
  android:permission="android.permission.BIND_TEXTCLASSIFIER_SERVICE">
    <intent-filter>
      <action android:name=
        "android.service.textclassifier.TextClassifierService"/>
    </intent-filter>
</service>

মনে রাখবেন যে, সার্ভিসটির জন্য অবশ্যই android.permission.BIND_TEXTCLASSIFIER_SERVICE পারমিশনটি প্রয়োজন হবে এবং android.service.textclassifier.TextClassifierService ইন্টেন্ট অ্যাকশনটি নির্দিষ্ট করতে হবে।

কনফিগ ওভারলেতে একটি সিস্টেম ডিফল্ট টেক্সট ক্লাসিফায়ার সার্ভিস সেট করুন।

[ config.xml ]

<string name="config_defaultTextClassifierPackage" translatable="false">com.example.textclassifierservice</string>

সিস্টেম ইমেজে টেক্সট ক্লাসিফায়ার সার্ভিসটি অন্তর্ভুক্ত করুন।

আপনার কাস্টম টেক্সট ক্লাসিফায়ার সার্ভিসটি সিস্টেম ইমেজের অন্তর্ভুক্ত একটি স্বতন্ত্র APK অথবা অন্য কোনো সিস্টেম APK-এর অংশ হতে পারে। সিস্টেমটি সার্ভিসটি রিজলভ করার জন্য PackageManager.MATCH_SYSTEM_ONLY ব্যবহার করে।

পরীক্ষা

android.view.textclassifier.cts ফাইলে টেস্টগুলো চালান।

অ্যান্ড্রয়েড ৯-এ টেক্সট ক্লাসিফিকেশনের অন্যান্য পরিবর্তনসমূহ

ইনস্টল করা ভাষা মডিউলগুলো পরিদর্শন করা দেখুন।

অ্যান্ড্রয়েড ৯ মডেল ফাইলগুলো অ্যান্ড্রয়েড ৮.x মডেল ফাইলগুলোর সাথে সামঞ্জস্যপূর্ণ নয়।

অ্যান্ড্রয়েড ৮.x-এর textclassifier.smartselection.en.model এর পরিবর্তে, অ্যান্ড্রয়েড ৯-এর মডেল ফাইলগুলোর নামকরণের ধরণ হলো: texclassifier.[language-code].model (উদাহরণস্বরূপ, textclassifier.en.model )।

সর্বশেষ টেক্সট ক্লাসিফিকেশন মডেল ফাইলগুলো সংগ্রহ করুন।

সর্বাধুনিক মডেলগুলো পেতে নিম্নলিখিত স্ক্রিপ্টটি চালানো যেতে পারে, যা সোর্স ট্রিতে থাকা TextClassifier মডেলগুলোকে আপডেট করে:

external/libtextclassifier/native/models/update.sh

অ্যান্ড্রয়েড রিলিজ ৮.১ টেক্সট ক্লাসিফায়ার

অ্যান্ড্রয়েড ৮.১-এ টেক্সট ক্লাসিফিকেশন বাস্তবায়নের জন্য TextClassifier API চালু করা হয়েছে।

TextClassificationManager tcm =
    context.getSystemService(TextClassificationManager.class);
TextClassifier classifier = tcm.getTextClassifier();
TextSelection selection = classifier.suggestSelection(...);
TextClassification classification = classifier.classifyText(...);

ডেভেলপাররা একটি কাস্টম টেক্সট ক্লাসিফায়ার সেট করতে পারেন:

tcm.setTextClassifier(customTextClassifier);

কিন্তু যদি কোনো অ্যাপ ডেভেলপার টেক্সট ক্লাসিফায়ারকে null সেট করেন, তাহলে getTextClassifier() এর জন্য সিস্টেমের ডিফল্ট টেক্সট ক্লাসিফায়ার রিটার্ন করা হয়।

android.view.textclassifier.TextClassifierImpl দেখুন।

TextView এবং WebView স্মার্ট সিলেকশন ও স্মার্ট টেক্সট শেয়ার ফিচারের জন্য TextClassifier ব্যবহার করে।

টেক্সট ক্লাসিফায়ার ব্যবহার

চিত্র ১. টেক্সটক্লাসিফায়ারের ব্যবহার

টেক্সটক্লাসিফায়ার নিউরাল-নেট মডেল

অ্যান্ড্রয়েড ওপেন সোর্স প্রজেক্ট (AOSP)-এ টেক্সট শ্রেণীবদ্ধ করার জন্য বেশ কিছু নিউরাল নেটওয়ার্ক মডেল রয়েছে। প্রতিটি মডেল ফাইল একটিমাত্র ভাষার জন্য প্রশিক্ষিত। আপনি মডেলগুলোর যেকোনো সংমিশ্রণ ইনস্টল করতে পারেন। মডেলগুলো এখানে সংজ্ঞায়িত করা আছে:

external/libtextclassifier/Android.mk

ডিভাইসগুলিতে ভাষা মডেলগুলি আগে থেকে ইনস্টল করুন

আপনি একাধিক ল্যাঙ্গুয়েজ মডেল নির্দিষ্ট করে একটি ডিভাইসে সেগুলো ইনস্টল করতে পারেন:

# -----------------------
# Smart Selection bundles
# -----------------------

include $(CLEAR_VARS)
LOCAL_MODULE           := textclassifier.smartselection.bundle1
LOCAL_REQUIRED_MODULES := textclassifier.smartselection.en.model
LOCAL_REQUIRED_MODULES += textclassifier.smartselection.es.model
LOCAL_REQUIRED_MODULES += textclassifier.smartselection.de.model
LOCAL_REQUIRED_MODULES += textclassifier.smartselection.fr.model
include $(BUILD_STATIC_LIBRARY)

উদাহরণস্বরূপ, device/google/marlin/device-common.mk এ।

# TextClassifier smart selection model files
PRODUCT_PACKAGES += \
    textclassifier.smartselection.bundle1

ইনস্টল করা ভাষা মডিউলগুলি পরিদর্শন করুন

ডিরেক্টরিতে থাকা ফাইলগুলির তালিকা দেখতে ADB ব্যবহার করুন:

$ adb shell ls -l /etc/textclassifier
-rw-r--r-- 1 root root ... textclassifier.smartselection.de.model
-rw-r--r-- 1 root root ... textclassifier.smartselection.en.model
-rw-r--r-- 1 root root ... textclassifier.smartselection.es.model
-rw-r--r-- 1 root root ... textclassifier.smartselection.fr.model

মডেল আপডেট

সিস্টেম ইমেজ আপডেটের অংশ হিসেবে একটি নতুন মডেল অন্তর্ভুক্ত করার মাধ্যমে, অথবা সিস্টেম API ACTION_UPDATE_SMART_SELECTION ইন্টেন্টের মাধ্যমে কোনো সিস্টেম কম্পোনেন্ট দ্বারা আপডেট ট্রিগার করে মডেলগুলোকে ডাইনামিকভাবে আপডেট করা যায়। এই সিস্টেম এপিআই ইন্টেন্টটি ব্রডকাস্ট করার মাধ্যমে, ফ্রেমওয়ার্কটি বর্তমানে সেট করা ভাষার ল্যাঙ্গুয়েজ মডেল আপডেট করতে সক্ষম হয়। মডেলগুলোর মধ্যে সমর্থিত ভাষা এবং একটি ভার্সন নম্বর থাকে, যাতে সর্বশেষ উপযুক্ত মডেলটি ব্যবহৃত হয়।

সুতরাং সব ভাষার জন্য মডেল আগে থেকে লোড করার প্রয়োজন নেই, কারণ সেগুলো পরেও যোগ করা যেতে পারে। নির্দিষ্ট ভাষার জন্য কোনো মডেল ফাইল খুঁজে না পাওয়া গেলে, টেক্সট ক্লাসিফিকেশন কোনো কাজ করে না এমন মান (no-op values) ফেরত দেয়।

সামঞ্জস্যতা পরীক্ষা স্যুট পরীক্ষা

সংশ্লিষ্ট অ্যান্ড্রয়েড কম্প্যাটিবিলিটি টেস্ট স্যুট (CTS) টেস্টগুলো এখানে পাওয়া যাবে:

cts/tests/tests/view/src/android/view/textclassifier/cts/TextClassificationManagerTest.java

cts/tests/tests/widget/src/android/widget/cts/TextViewTest.java

  • testSmartSelection
  • testSmartSelection_dragSelection
  • testSmartSelection_resetSelection