Klassifizierer für natürliche Sprache integrieren

Die Task - Bibliothek NLClassifier API stuft Eingabetext in verschiedene Kategorien, und ist eine vielseitige und konfigurierbare API , die meisten Textklassifikationsmodelle verarbeiten kann.

Hauptmerkmale der NLClassifier API

  • Nimmt eine einzelne Zeichenfolge als Eingabe, führt eine Klassifizierung mit der Zeichenfolge durch und gibt aus Paare als Klassifikationsergebnisse.

  • Optionale Regex-Tokenisierung für Eingabetext verfügbar.

  • Konfigurierbar, um verschiedene Klassifizierungsmodelle anzupassen.

Unterstützte NLClassifier-Modelle

Folgende Modelle sind garantiert mit der kompatibel sein NLClassifier API.

Inferenz in Java ausführen

Siehe den Text Classification Referenz App für ein Beispiel dafür , wie die Verwendung NLClassifier in einem Android - App.

Schritt 1: Importieren Sie die Gradle-Abhängigkeit und andere Einstellungen

Kopieren Sie die .tflite Modell - Datei in das Vermögen Verzeichnis des Android Modul , in dem das Modell ausgeführt wird. Gibt an, dass die Datei nicht komprimiert werden soll, und fügen Sie die TensorFlow Lite - Bibliothek zu den wichtigsten Modul build.gradle Datei:

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.2.0'
}

Schritt 2: Inferenz mithilfe der API ausführen

// Initialization, use NLClassifierOptions to configure input and output tensors
NLClassifierOptions options = NLClassifierOptions.builder().setInputTensorName(INPUT_TENSOR_NAME).setOutputScoreTensorName(OUTPUT_SCORE_TENSOR_NAME).build();
NLClassifier classifier = NLClassifier.createFromFileAndOptions(context, modelFile, options);

// Run inference
List<Category> results = classifier.classify(input);

Siehe den Quellcode für mehr Optionen zu konfigurieren NLClassifier .

Inferenz in Swift ausführen

Schritt 1: CocoaPods importieren

Fügen Sie den TensorFlowLiteTaskText-Pod in Podfile hinzu

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

Schritt 2: Inferenz mithilfe der API ausführen

// Initialization
var modelOptions:TFLNLClassifierOptions = TFLNLClassifierOptions()
modelOptions.inputTensorName = inputTensorName
modelOptions.outputScoreTensorName = outputScoreTensorName
let nlClassifier = TFLNLClassifier.nlClassifier(
      modelPath: modelPath,
      options: modelOptions)

// Run inference
let categories = nlClassifier.classify(text: input)

Siehe den Quellcode für weitere Details.

Inferenz in C++ ausführen

// Initialization
NLClassifierOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_file);
std::unique_ptr<NLClassifier> classifier = NLClassifier::CreateFromOptions(options).value();

// Run inference
std::vector<core::Category> categories = classifier->Classify(kInput);

Siehe den Quellcode für weitere Details.

Beispielergebnisse

Hier ist ein Beispiel des Klassifikationsergebnisses des Film Review - Modells .

Input: "Was für eine Verschwendung meiner Zeit."

Ausgabe:

category[0]: 'Negative' : '0.81313'
category[1]: 'Positive' : '0.18687'

Versuchen Sie, die einfach aus CLI - Demo - Tool für NLClassifier mit Ihren eigenen Modell und Testdaten.

Anforderungen an die Modellkompatibilität

Je nach Anwendungsfall, die NLClassifier kann API ein TFLite Modell mit oder ohne Last TFLite Modell Metadaten . Hier finden Sie Beispiele von Metadaten für natürliche Sprache Klassifizierer Erstellung der Verwendung TensorFlow Lite Metadaten Writer - API .

Die kompatiblen Modelle sollten folgende Anforderungen erfüllen:

  • Eingabetensor: (kTfLiteString/kTfLiteInt32)

    • Die Eingabe des Modells sollte entweder ein kTfLiteString-Tensor-Roheingabe-String oder ein kTfLiteInt32-Tensor für Regex-Tokenized-Indizes von Raw-Input-Strings sein.

    • Wenn Eingabetyp kTfLiteString ist, keine Metadaten für das Modell erforderlich.

    • Wenn Eingabetyp kTfLiteInt32 ist, ein RegexTokenizer muss in der Eingabe Tensor der eingerichtet werden Metadaten .

  • Ausgabe-Score-Tensor: (kTfLiteUInt8/kTfLiteInt8/kTfLiteInt16/kTfLiteFloat32/kTfLiteFloat64)

    • Obligatorischer Ausgabetensor für die Punktzahl jeder klassifizierten Kategorie.

    • Wenn type einer der Int-Typen ist, dequantisieren Sie ihn auf Double/Float zu den entsprechenden Plattformen

    • Kann eine optionale zugehörige Datei in der Ausgabe hat Tensor ist entsprechenden Metadaten für die Kategorie Etiketten, sollte die Datei mit einem Etikett pro Zeile eine einfache Textdatei, und die Anzahl der Etiketten sollte die Anzahl der Kategorien , wie die Modellausgaben entspricht. Siehe die exmaple Etikettendatei .

  • Ausgabelabel-Tensor: (kTfLiteString/kTfLiteInt32)

    • Der optionale Ausgabetensor für das Label für jede Kategorie sollte die gleiche Länge wie der Ausgabe-Score-Tensor haben. Wenn dieser Tensor nicht vorhanden ist, verwendet die API Score-Indizes als Klassennamen.

    • Wird ignoriert, wenn die zugehörige Etikettendatei in den Metadaten des Ausgabe-Score-Tensors vorhanden ist.