שילוב מסווג שפה טבעית (NLP)

ממשק ה-API של Task Library מסווג טקסט קלט לקטגוריות שונות, והוא ממשק API רב-תכליתי וניתן להגדרה שיכול לטפל ברוב מודלי סיווג הטקסט.NLClassifier

התכונות העיקריות של NLClassifier API

  • מקבל מחרוזת אחת כקלט, מבצע סיווג של המחרוזת ומחזיר זוגות של <label, score=""> כתוצאות סיווג.</label,>

  • אפשר להשתמש בטוקניזציה של ביטוי רגולרי לטקסט הקלט.

  • אפשר להגדיר אותו כך שיתאים למודלים שונים של סיווג.

מודלים נתמכים של NLClassifier

המודלים הבאים תואמים בוודאות ל-API של NLClassifier.

הסקת מסקנות ב-Java

דוגמה לשימוש ב-NLClassifier באפליקציית Android אפשר לראות באפליקציית ההפניה לסיווג טקסט.

שלב 1: מייבאים את התלות ב-Gradle והגדרות אחרות

מעתיקים את קובץ המודל .tflite לספריית הנכסים של מודול Android שבו יופעל המודל. מציינים שהקובץ לא צריך להיות דחוס, ומוסיפים את ספריית TensorFlow Lite לקובץ build.gradle של המודול:

android {
    // Other settings

    // Specify tflite file should not be compressed for the app apk
    aaptOptions {
        noCompress "tflite"
    }

}

dependencies {
    // Other dependencies

    // Import the Task Vision Library dependency
    implementation 'org.tensorflow:tensorflow-lite-task-text:0.4.4'
    // Import the GPU delegate plugin Library for GPU inference
    implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.4.4'
}

שלב 2: הפעלת הסקה באמצעות ה-API

// Initialization, use NLClassifierOptions to configure input and output tensors
NLClassifierOptions options =
    NLClassifierOptions.builder()
        .setBaseOptions(BaseOptions.builder().useGpu().build())
        .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);

אפשר לעיין בקוד המקור כדי לראות עוד אפשרויות להגדרת NLClassifier.

הסקת מסקנות ב-Swift

שלב 1: ייבוא CocoaPods

מוסיפים את ה-Pod‏ TensorFlowLiteTaskText ל-Podfile.

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

שלב 2: הפעלת הסקה באמצעות ה-API

// 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)

פרטים נוספים זמינים בקוד המקור.

הרצת הסקה ב-C++‎

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

// Run inference with your input, `input_text`.
std::vector<core::Category> categories = classifier->Classify(input_text);

פרטים נוספים זמינים בקוד המקור.

הרצת הסקה ב-Python

שלב 1: התקנת חבילת pip

pip install tflite-support

שלב 2: שימוש במודל

# Imports
from tflite_support.task import text

# Initialization
classifier = text.NLClassifier.create_from_file(model_path)

# Run inference
text_classification_result = classifier.classify(text)

אפשר לעיין בקוד המקור כדי לראות עוד אפשרויות להגדרת NLClassifier.

תוצאות לדוגמה

הנה דוגמה לתוצאות הסיווג של מודל הביקורת על סרט.

קלט: "What a waste of my time" (איזה בזבוז זמן).

פלט:

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

אפשר לנסות את כלי ההדגמה הפשוט של CLI ל-NLClassifier עם המודל ונתוני הבדיקה שלכם.

דרישות התאימות של המודל

בהתאם לתרחיש השימוש, אפשר להשתמש ב-NLClassifier API כדי לטעון מודל TFLite עם מטא-נתונים של מודל TFLite או בלי מטא-נתונים. אפשר לעיין בדוגמאות ליצירת מטא-נתונים עבור מסווגים של שפה טבעית באמצעות TensorFlow Lite Metadata Writer API.

המודלים התואמים צריכים לעמוד בדרישות הבאות:

  • טנזור קלט: (kTfLiteString/kTfLiteInt32)

    • הקלט של המודל צריך להיות טנזור kTfLiteString של קלט גולמי מחרוזת או טנזור kTfLiteInt32 של אינדקסים של קלט גולמי מחרוזת שעברו טוקניזציה באמצעות ביטוי רגולרי.
    • אם סוג הקלט הוא kTfLiteString, לא נדרשים מטא-נתונים למודל.
    • אם סוג הקלט הוא kTfLiteInt32, צריך להגדיר RegexTokenizer במטא-נתונים של טנסור הקלט.
  • טנזור של ציון הפלט: (kTfLiteUInt8/kTfLiteInt8/kTfLiteInt16/kTfLiteFloat32/kTfLiteFloat64)

    • טנסור פלט חובה לציון של כל קטגוריה שסווגה.

    • אם הסוג הוא אחד מסוגי המספרים השלמים, צריך לבטל את הכמותיות שלו לערך מסוג double או float כדי להשתמש בו בפלטפורמות המתאימות

    • יכול להיות קובץ משויך אופציונלי ב-Tensor של הפלט, במטא-נתונים התואמים לסיווג תוויות. הקובץ צריך להיות קובץ טקסט פשוט עם תוויות, כל אחת בשורה נפרדת, ומספר התוויות צריך להיות זהה למספר הקטגוריות שהמודל מוציא. דוגמה לקובץ תוויות

  • טנזור של תוויות פלט: (kTfLiteString/kTfLiteInt32)

    • טנזור פלט אופציונלי של התווית לכל קטגוריה, צריך להיות באורך זהה לטנזור של ציון הפלט. אם הטנזור הזה לא קיים, ה-API משתמש במדדי הניקוד כשמות של מחלקות.

    • המערכת תתעלם מהערך הזה אם קובץ התוויות המשויך נמצא במטא-נתונים של טנסור ניקוד הפלט.