Udhëzues për klasifikimin e tekstit për Android

Detyra MediaPipe Text Classifier ju lejon të klasifikoni tekstin në një grup kategorish të përcaktuara, të tilla si ndjenja pozitive ose negative. Kategoritë përcaktohen modeli që përdorni dhe si është trajnuar ai model. Këto udhëzime ju tregojnë se si të përdorni Klasifikuesin e Tekstit me aplikacionet Android.

Ju mund ta shihni këtë detyrë në veprim duke parë demonstrimin . Për më shumë informacion rreth aftësive, modeleve dhe opsioneve të konfigurimit të kësaj detyre, shihni Përmbledhjen .

Shembull kodi

Kodi shembull për Klasifikuesin e Tekstit ofron një zbatim të thjeshtë të kësaj detyre për referencën tuaj. Ky kod ju ndihmon të provoni këtë detyrë dhe të filloni ndërtimin e aplikacionit tuaj të klasifikimit të tekstit. Mund të shfletoni kodin e shembullit të Klasifikuesit të Tekstit në GitHub.

Shkarkoni kodin

Udhëzimet e mëposhtme ju tregojnë se si të krijoni një kopje lokale të kodit shembull duke përdorur mjetin e linjës së komandës të kontrollit të versionit git .

Për të shkarkuar kodin shembull:

  1. Klononi depon e git duke përdorur komandën e mëposhtme:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. Opsionale, konfiguroni shembullin tuaj të git për të përdorur arkëtimin e rrallë, në mënyrë që të keni vetëm skedarët për shembullin e aplikacionit Text Classifier:
    cd mediapipe-samples
    git sparse-checkout init --cone
    git sparse-checkout set examples/text_classification/android
    

Për udhëzime se si të konfiguroni dhe ekzekutoni një shembull me Android Studio, shihni shembullin e udhëzimeve të konfigurimit të kodit në Udhëzuesin e konfigurimit për Android .

Komponentët kryesorë

Skedarët e mëposhtëm përmbajnë kodin vendimtar për aplikacionin shembull të klasifikimit të tekstit:

Konfigurimi

Ky seksion përshkruan hapat kryesorë për konfigurimin e mjedisit tuaj të zhvillimit dhe projekteve të kodit në mënyrë specifike për të përdorur Klasifikuesin e Tekstit. Për informacion të përgjithshëm mbi konfigurimin e mjedisit tuaj të zhvillimit për përdorimin e MediaPipe Tasks, duke përfshirë kërkesat e versionit të platformës, shihni udhëzuesin e konfigurimit për Android .

varësitë

Klasifikuesi i tekstit përdor bibliotekat com.google.mediapipe:tasks-text . Shtoni këtë varësi në skedarin build.gradle të projektit tuaj të zhvillimit të aplikacionit Android. Ju mund të importoni varësitë e kërkuara me kodin e mëposhtëm:

dependencies {
    implementation 'com.google.mediapipe:tasks-text:latest.release'
}

Model

Detyra MediaPipe Text Classifier kërkon një model të trajnuar që është në përputhje me këtë detyrë. Për më shumë informacion mbi modelet e trajnuara të disponueshme për Klasifikuesin e Tekstit, shihni seksionin Modelet e përmbledhjes së detyrave.

Zgjidhni dhe shkarkoni një model dhe më pas ruajeni atë në drejtorinë e assets të projektit tuaj:

<dev-project-root>/src/main/assets

Përdorni metodën BaseOptions.Builder.setModelAssetPath() për të specifikuar shtegun e modelit që do të përdoret. Për një shembull kodi, shihni seksionin tjetër.

Krijo detyrën

Përdorni një nga funksionet Text Classifier TextClassifier.createFrom...() për të përgatitur detyrën për ekzekutimin e konkluzioneve. Ju mund të përdorni funksionin createFromFile() me një shteg relativ ose absolut drejt skedarit të modelit të trajnuar. Shembulli i kodit më poshtë tregon përdorimin e funksionit TextClassifier.createFromOptions() . Për më shumë informacion mbi opsionet e disponueshme të konfigurimit, shihni Opsionet e konfigurimit .

Kodi i mëposhtëm tregon se si të ndërtohet dhe konfigurohet kjo detyrë.

// no directory path required if model file is in src/main/assets:
String currentModel = "text_classifier_model.tflite";

fun initClassifier() {
    val baseOptionsBuilder = BaseOptions.builder()
        .setModelAssetPath(currentModel)
    try {
        val baseOptions = baseOptionsBuilder.build()
        val optionsBuilder = TextClassifier.TextClassifierOptions.builder()
            .setBaseOptions(baseOptions)
        val options = optionsBuilder.build()
        textClassifier = TextClassifier.createFromOptions(context, options)
    } catch (e: IllegalStateException) { // exception handling
    }
}

Ju mund të shihni një shembull se si të krijoni një detyrë në shembullin e kodit TextClassifierHelper funksionin e klasës initClassifier() .

Opsionet e konfigurimit

Kjo detyrë ka opsionet e mëposhtme të konfigurimit për aplikacionet Android:

Emri i opsionit Përshkrimi Gama e vlerave Vlera e paracaktuar
displayNamesLocale Vendos gjuhën e etiketave për t'u përdorur për emrat e shfaqur të dhëna në meta të dhënat e modelit të detyrës, nëse disponohet. Parazgjedhja është en për anglisht. Ju mund të shtoni etiketa të lokalizuara në meta të dhënat e një modeli të personalizuar duke përdorur API-në e shkrimtarit metadata TensorFlow Lite Kodi lokal sq
maxResults Vendos numrin maksimal opsional të rezultateve të klasifikimit me pikët më të mira për t'u kthyer. Nëse < 0, të gjitha rezultatet e disponueshme do të kthehen. Çdo numër pozitiv -1
scoreThreshold Vendos pragun e rezultatit të parashikimit që tejkalon atë të dhënë në meta të dhënat e modelit (nëse ka). Rezultatet nën këtë vlerë refuzohen. Çdo noton Nuk është vendosur
categoryAllowlist Vendos listën opsionale të emrave të kategorive të lejuara. Nëse nuk janë bosh, rezultatet e klasifikimit emri i kategorisë së të cilave nuk është në këtë grup do të filtrohen. Emrat e kopjuar ose të panjohur të kategorive shpërfillen. Ky opsion është reciprokisht ekskluziv me categoryDenylist dhe duke përdorur të dyja rezulton në një gabim. Çdo varg Nuk është vendosur
categoryDenylist Vendos listën opsionale të emrave të kategorive që nuk lejohen. Nëse nuk janë bosh, rezultatet e klasifikimit emri i kategorisë së të cilave është në këtë grup do të filtrohen. Emrat e kopjuar ose të panjohur të kategorive shpërfillen. Ky opsion është reciprokisht ekskluziv me categoryAllowlist dhe duke përdorur të dyja rezultatet në një gabim. Çdo varg Nuk është vendosur

Përgatitni të dhënat

Klasifikuesi i tekstit punon me të dhëna teksti ( String ). Detyra trajton parapërpunimin e hyrjes së të dhënave, duke përfshirë parapërpunimin e tokenizimit dhe tensorit.

I gjithë parapërpunimi trajtohet brenda funksionit classify() . Nuk ka nevojë për përpunim shtesë të tekstit të hyrjes paraprakisht.

String inputText = "The input text to be classified.";

Drejtoni detyrën

Klasifikuesi i tekstit përdor funksionin TextClassifier.classify() për të ekzekutuar konkluzionet. Përdorni një fill të veçantë ekzekutimi për ekzekutimin e klasifikimit për të shmangur bllokimin e fillit të ndërfaqes së përdoruesit Android me aplikacionin tuaj.

Kodi i mëposhtëm tregon se si të ekzekutohet përpunimi me modelin e detyrës duke përdorur një fill të veçantë ekzekutimi.

    fun classify(text: String) {
        executor = ScheduledThreadPoolExecutor(1)

        executor.execute {
            val results = textClassifier.classify(text)
            listener.onResult(results)
        }
    }

Ju mund të shihni një shembull se si të ekzekutoni një detyrë në funksionin e shembullit të kodit TextClassifierHelper classify() .

Trajtoni dhe shfaqni rezultatet

Klasifikuesi i tekstit nxjerr një TextClassifierResult i cili përmban listën e kategorive të mundshme për tekstin hyrës. Kategoritë përcaktohen nga modeli që përdorni, kështu që nëse doni kategori të ndryshme, zgjidhni një model tjetër ose rikualifikoni një ekzistues.

Më poshtë tregon një shembull të të dhënave dalëse nga kjo detyrë:

TextClassificationResult:
  Classification #0 (single classification head):
    ClassificationEntry #0:
      Category #0:
        category name: "positive"
        score: 0.8904
        index: 0
      Category #1:
        category name: "negative"
        score: 0.1096
        index: 1

Ky rezultat është marrë duke ekzekutuar klasifikuesin BERT në tekstin hyrës: "an imperfect but overall entertaining mystery" .

Ju mund të shihni një shembull se si të shfaqen rezultatet në klasën e kodit ResultsAdapter dhe klasën e brendshme ViewHolder .