Mit der Aufgabe „Textklassifikator“ von MediaPipe können Sie Text in eine Reihe definierter Kategorien, wie positive oder negative Stimmungen. Die Kategorien hängen vom Modell ab, und wie dieses Modell trainiert wurde. In dieser Anleitung erfahren Sie, wie Sie den Textklassifikator in Android-Apps.
Sie können diese Aufgabe in Aktion sehen, indem Sie die Demo ansehen. Weitere Informationen zu den Funktionen, Modellen und Die Konfigurationsoptionen dieser Aufgabe finden Sie in der Übersicht.
Codebeispiel
Der Beispielcode für den Textklassifikator bietet eine einfache Implementierung dieses zu Ihrer Information. Dieser Code hilft Ihnen beim Testen dieser Aufgabe und beim eine eigene App zur Textklassifizierung entwickeln. Sie können in der Beispielcode für Textklassifikator auf GitHub.
Code herunterladen
In der folgenden Anleitung erfahren Sie, wie Sie eine lokale Kopie des Beispiels erstellen. mit dem Befehlszeilentool git für die Versionsverwaltung erstellen.
<ph type="x-smartling-placeholder">So laden Sie den Beispielcode herunter:
- Klonen Sie das Git-Repository mit dem folgenden Befehl:
git clone https://github.com/google-ai-edge/mediapipe-samples
- Konfigurieren Sie optional Ihre Git-Instanz für den Sparse-Checkout.
Sie haben also nur die Dateien für die Beispiel-App „Textklassifikator“:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/text_classification/android
Eine Anleitung zum Einrichten und Ausführen eines Beispiels mit Android Studio finden Sie in der Anleitung zur Einrichtung des Beispielcodes Einrichtungsleitfaden für Android
Schlüsselkomponenten
Die folgenden Dateien enthalten den wichtigen Code für die Textklassifizierung. Beispiel-App:
- TextClassifierHelper.kt Initialisiert den Textklassifikator und übernimmt die Modellauswahl.
- MainActivity.kt
Implementiert die Anwendung, einschließlich Aufrufen von
TextClassifierHelper
undResultsAdapter
. - ResultsAdapter.kt – Verarbeitet und formatiert die Ergebnisse.
Einrichtung
In diesem Abschnitt werden die wichtigsten Schritte zum Einrichten Ihrer Entwicklungsumgebung und mit dem Textklassifikator verwendet werden soll. Allgemeine Informationen zu Einrichten Ihrer Entwicklungsumgebung für die Verwendung von MediaPipe Tasks, einschließlich Plattformversionsanforderungen finden Sie in der Einrichtungsleitfaden für Android
<ph type="x-smartling-placeholder">Abhängigkeiten
Der Textklassifikator verwendet die com.google.mediapipe:tasks-text
-Bibliotheken. Dieses Element hinzufügen
Abhängigkeit zur Datei build.gradle
Ihres Android-App-Entwicklungsprojekts.
Sie können die erforderlichen Abhängigkeiten mit dem folgenden Code importieren:
dependencies {
implementation 'com.google.mediapipe:tasks-text:latest.release'
}
Modell
Für die Aufgabe „Textklassifikator“ von MediaPipe ist ein trainiertes Modell erforderlich, das mit dieser für die Aufgabe. Weitere Informationen zu verfügbaren trainierten Modellen für den Textklassifikator finden Sie unter in der Aufgabenübersicht im Abschnitt „Modelle“.
Modell auswählen, herunterladen und in Ihrem Projekt assets
speichern
Verzeichnis:
<dev-project-root>/src/main/assets
Verwenden Sie die Methode BaseOptions.Builder.setModelAssetPath()
, um den Pfad anzugeben.
des zu verwendenden Modells. Ein Codebeispiel finden Sie im nächsten Abschnitt.
Aufgabe erstellen
Verwenden Sie eine der TextClassifier.createFrom...()
-Funktionen des Textklassifikators, um
die Aufgabe für die Ausführung von Inferenzen vorbereiten. Sie können die createFromFile()
verwenden
mit einem relativen oder absoluten Pfad zur trainierten Modelldatei. Der Code
Im folgenden Beispiel wird die Verwendung von TextClassifier.createFromOptions()
veranschaulicht.
. Weitere Informationen zu den verfügbaren Konfigurationsoptionen finden Sie unter
Konfigurationsoptionen.
Der folgende Code zeigt, wie diese Aufgabe erstellt und konfiguriert wird.
// 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
}
}
Im Codebeispiel finden Sie ein Beispiel für das Erstellen einer Aufgabe.
TextClassifierHelper
Klasse initClassifier()
.
Konfigurationsoptionen
Diese Aufgabe bietet die folgenden Konfigurationsoptionen für Android-Apps:
Option | Beschreibung | Wertebereich | Standardwert |
---|---|---|---|
displayNamesLocale |
Legt die Sprache der Labels fest, die für Anzeigenamen in der
Metadaten des Aufgabenmodells, falls verfügbar. Standardwert ist en für
Englisch. Sie können den Metadaten eines benutzerdefinierten Modells lokalisierte Labels hinzufügen
mit der TensorFlow Lite Metadata Writer API
| Gebietsschemacode | de |
maxResults |
Legt die optionale maximale Anzahl der am besten bewerteten Klassifizierungsergebnisse fest auf zurückgeben. Wenn < 0 setzen, werden alle verfügbaren Ergebnisse zurückgegeben. | Beliebige positive Zahlen | -1 |
scoreThreshold |
Legt den Schwellenwert für die Vorhersagepunktzahl fest, der den Wert in die Modellmetadaten (falls vorhanden). Ergebnisse unter diesem Wert werden abgelehnt. | Beliebiger Gleitkommawert | Nicht festgelegt |
categoryAllowlist |
Legt die optionale Liste der zulässigen Kategorienamen fest. Wenn das Feld nicht leer ist,
Klassifizierungsergebnisse, deren Kategoriename nicht in dieser Gruppe enthalten ist, werden
herausgefiltert. Doppelte oder unbekannte Kategorienamen werden ignoriert.
Diese Option schließt sich mit categoryDenylist gegenseitig aus und verwendet
führt beides zu einem Fehler. |
Alle Strings | Nicht festgelegt |
categoryDenylist |
Legt die optionale Liste der unzulässigen Kategorienamen fest. Wenn
nicht leer ist, werden Klassifizierungsergebnisse gefiltert, deren Kategoriename in diesem Satz enthalten ist.
aus. Doppelte oder unbekannte Kategorienamen werden ignoriert. Diese Option
ausschließlich mit categoryAllowlist und die Verwendung beider führt zu einem Fehler. |
Alle Strings | Nicht festgelegt |
Daten vorbereiten
Der Textklassifikator funktioniert mit Textdaten (String
). Die Aufgabe verarbeitet die Dateneingabe
Vorverarbeitung, einschließlich Tokenisierung und Tensor-Vorverarbeitung.
Die gesamte Vorverarbeitung erfolgt über die Funktion classify()
. Es ist nicht nötig,
zur zusätzlichen Vorverarbeitung des Eingabetexts.
String inputText = "The input text to be classified.";
Aufgabe ausführen
Der Textklassifikator verwendet die Funktion TextClassifier.classify()
zum Ausführen
Rückschlüsse. Einen separaten Ausführungsthread zum Ausführen der Klassifizierung verwenden
damit der Thread auf der Android-Benutzeroberfläche nicht mit deiner App blockiert wird.
Der folgende Code zeigt, wie die Verarbeitung mit der Aufgabe ausgeführt wird. mit einem separaten Ausführungsthread.
fun classify(text: String) {
executor = ScheduledThreadPoolExecutor(1)
executor.execute {
val results = textClassifier.classify(text)
listener.onResult(results)
}
}
Im Codebeispiel finden Sie ein Beispiel für das Ausführen einer Aufgabe.
TextClassifierHelper
Klasse classify()
.
Ergebnisse verarbeiten und anzeigen
Der Textklassifikator gibt ein TextClassifierResult
aus, das die Liste enthält.
möglicher Kategorien für den Eingabetext. Die Kategorien werden durch die
Wählen Sie ein anderes Modell aus,
wenn Sie verschiedene Kategorien nutzen möchten.
oder ein vorhandenes neu trainieren.
Im Folgenden sehen Sie ein Beispiel für die Ausgabedaten dieser Aufgabe:
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
Dieses Ergebnis erhalten Sie, indem Sie den BERT-Klassifikator für den Eingabetext ausgeführt haben:
"an imperfect but overall entertaining mystery"
Im Codebeispiel finden Sie ein Beispiel für die Anzeige von Ergebnissen.
ResultsAdapter
und ViewHolder
innere Klasse.