ממשק ה-API של Task Library מסווג טקסט קלט לקטגוריות שונות, והוא ממשק API רב-תכליתי וניתן להגדרה שיכול לטפל ברוב מודלי סיווג הטקסט.NLClassifier
התכונות העיקריות של NLClassifier API
מקבל מחרוזת אחת כקלט, מבצע סיווג של המחרוזת ומחזיר זוגות של <label, score=""> כתוצאות סיווג.</label,>
אפשר להשתמש בטוקניזציה של ביטוי רגולרי לטקסט הקלט.
אפשר להגדיר אותו כך שיתאים למודלים שונים של סיווג.
מודלים נתמכים של NLClassifier
המודלים הבאים תואמים בוודאות ל-API של NLClassifier.
מודלים עם מפרט
average_word_vecשנוצרו על ידי TensorFlow Lite Model Maker לסיווג טקסט.מודלים בהתאמה אישית שעומדים בדרישות התאימות למודלים.
הסקת מסקנות ב-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 משתמש במדדי הניקוד כשמות של מחלקות.
המערכת תתעלם מהערך הזה אם קובץ התוויות המשויך נמצא במטא-נתונים של טנסור ניקוד הפלט.