راهنمای طبقه بندی متون برای iOS

وظیفه طبقه‌بندی متن به شما امکان می‌دهد متن را به مجموعه‌ای از دسته‌های تعریف‌شده، مانند احساسات مثبت یا منفی طبقه‌بندی کنید. دسته بندی ها بر اساس مدلی که استفاده می کنید و نحوه آموزش آن مدل تعیین می شود. این دستورالعمل‌ها به شما نشان می‌دهند که چگونه از Text Classifier در برنامه‌های iOS استفاده کنید. نمونه کد شرح داده شده در این دستورالعمل ها در GitHub موجود است.

شما می توانید با مشاهده این نسخه نمایشی وب، این کار را در عمل مشاهده کنید. برای اطلاعات بیشتر در مورد قابلیت‌ها، مدل‌ها و گزینه‌های پیکربندی این کار، به نمای کلی مراجعه کنید.

نمونه کد

کد مثال MediaPipe Tasks یک پیاده سازی اساسی از یک برنامه Text Classifier برای iOS است.

می‌توانید از برنامه به‌عنوان نقطه شروع برای برنامه iOS خودتان استفاده کنید، یا هنگام تغییر یک برنامه موجود به آن مراجعه کنید. می توانید به کد نمونه Text Classifier در GitHub مراجعه کنید.

کد را دانلود کنید

دستورالعمل های زیر به شما نشان می دهد که چگونه با استفاده از ابزار خط فرمان git یک کپی محلی از کد مثال ایجاد کنید.

برای دانلود کد نمونه:

  1. با استفاده از دستور زیر مخزن git را کلون کنید:

    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. به صورت اختیاری، نمونه git خود را برای استفاده از پرداخت پراکنده پیکربندی کنید، بنابراین فقط فایل‌های برنامه نمونه طبقه‌بندی متن را داشته باشید:

    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/text_classification/ios/
    

پس از ایجاد یک نسخه محلی از کد نمونه، می توانید کتابخانه وظایف MediaPipe را نصب کنید، پروژه را با استفاده از Xcode باز کنید و برنامه را اجرا کنید. برای دستورالعمل‌ها، به راهنمای راه‌اندازی برای iOS مراجعه کنید.

اجزای کلیدی

فایل‌های زیر حاوی کد حیاتی برای مثال برنامه طبقه‌بندی متن هستند:

  • TextClassifierHelper.swift : طبقه‌بندی‌کننده متن را راه‌اندازی می‌کند و انتخاب مدل را مدیریت می‌کند.
  • ViewController.swift : رابط کاربری را پیاده سازی کرده و نتایج را قالب بندی می کند.

راه اندازی

این بخش مراحل کلیدی را برای تنظیم محیط توسعه و پروژه های کد برای استفاده از Text Classifier توضیح می دهد. برای اطلاعات کلی در مورد تنظیم محیط توسعه خود برای استفاده از وظایف MediaPipe، از جمله الزامات نسخه پلت فرم، به راهنمای راه اندازی برای iOS مراجعه کنید.

وابستگی ها

Text Classifier از کتابخانه MediaPipeTasksText استفاده می کند که باید با استفاده از CocoaPods نصب شود. این کتابخانه با هر دو برنامه Swift و Objective-C سازگار است و نیازی به تنظیمات زبان خاصی ندارد.

برای دستورالعمل‌های نصب CocoaPods در macOS، به راهنمای نصب CocoaPods مراجعه کنید. برای دستورالعمل‌های نحوه ایجاد یک Podfile با پادهای لازم برای برنامه خود، به استفاده از CocoaPods مراجعه کنید.

با استفاده از کد زیر، MediaPipeTasksText pod را در Podfile اضافه کنید:

target 'MyTextClassifierApp' do
  use_frameworks!
  pod 'MediaPipeTasksText'
end

اگر برنامه شما شامل اهداف تست واحد است، برای اطلاعات بیشتر در مورد راه‌اندازی Podfile به راهنمای تنظیم برای iOS مراجعه کنید.

مدل

وظیفه MediaPipe Text Classifier به یک مدل آموزش دیده نیاز دارد که با این کار سازگار باشد. برای اطلاعات بیشتر در مورد مدل‌های آموزش‌دیده موجود برای Text Classifier، بخش مدل‌های نمای کلی کار را ببینید.

یک مدل را انتخاب و دانلود کنید و با استفاده از Xcode آن را به فهرست پروژه خود اضافه کنید. برای دستورالعمل‌هایی درباره نحوه افزودن فایل‌ها به پروژه Xcode، به مدیریت فایل‌ها و پوشه‌ها در پروژه Xcode خود مراجعه کنید.

از ویژگی BaseOptions.modelAssetPath برای تعیین مسیر مدل در بسته نرم افزاری خود استفاده کنید. برای مثال کد، بخش بعدی را ببینید.

کار را ایجاد کنید

شما می توانید وظیفه Text Classifier را با فراخوانی یکی از اولیه سازهای آن ایجاد کنید. آغازگر TextClassifier(options:) مقادیری را برای گزینه های پیکربندی تنظیم می کند.

اگر به Text Classifier اولیه با گزینه های پیکربندی سفارشی شده نیاز ندارید، می توانید از مقداردهی اولیه TextClassifier(modelPath:) برای ایجاد یک طبقه بندی متن با گزینه های پیش فرض استفاده کنید. برای اطلاعات بیشتر درباره گزینه‌های پیکربندی، به نمای کلی پیکربندی مراجعه کنید.

کد زیر نحوه ساخت و پیکربندی این وظیفه را نشان می دهد.

سویفت

import MediaPipeTasksText

let modelPath = Bundle.main.path(forResource: "model",
                                      ofType: "tflite")

let options = TextClassifierOptions()
options.baseOptions.modelAssetPath = modelPath
options.scoreThreshold = 0.6

let textClassifier = try TextClassifier(options: options)

هدف-C

@import MediaPipeTasksText;

NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model"
                                                      ofType:@"tflite"];

MPPTextClassifierOptions *options = [[MPPTextClassifierOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.scoreThreshold = 0.6;

MPPTextClassifier *textClassifier =
      [[MPPTextClassifier alloc] initWithOptions:options error:nil];

گزینه های پیکربندی

این کار دارای گزینه های پیکربندی زیر برای برنامه های iOS است:

نام گزینه توضیحات محدوده ارزش مقدار پیش فرض
displayNamesLocale زبان برچسب‌ها را برای استفاده برای نام‌های نمایشی ارائه شده در فراداده مدل کار، در صورت وجود، تنظیم می‌کند. پیش فرض برای انگلیسی en است. با استفاده از TensorFlow Lite Metadata Writer API می‌توانید برچسب‌های محلی را به ابرداده یک مدل سفارشی اضافه کنید. کد محلی en
maxResults حداکثر تعداد اختیاری نتایج طبقه بندی با امتیاز بالا را برای بازگشت تنظیم می کند. اگر < 0 باشد، تمام نتایج موجود برگردانده خواهند شد. هر عدد مثبت -1
scoreThreshold آستانه امتیاز پیش‌بینی را تنظیم می‌کند که بر آستانه ارائه‌شده در فراداده مدل (در صورت وجود) لغو می‌شود. نتایج زیر این مقدار رد می شوند. هر شناور تنظیم نشده است
categoryAllowlist فهرست اختیاری نام‌های دسته‌بندی مجاز را تنظیم می‌کند. در صورت خالی نبودن، نتایج طبقه بندی که نام دسته آنها در این مجموعه نیست فیلتر می شود. نام‌های دسته‌بندی تکراری یا ناشناخته نادیده گرفته می‌شوند. این گزینه با categoryDenylist منحصر به فرد است و از هر دو نتیجه در یک خطا استفاده می کند. هر رشته تنظیم نشده است
categoryDenylist فهرست اختیاری نام‌های دسته‌هایی را که مجاز نیستند را تنظیم می‌کند. در صورت خالی نبودن، نتایج طبقه بندی که نام دسته آنها در این مجموعه است فیلتر می شود. نام‌های دسته‌بندی تکراری یا ناشناخته نادیده گرفته می‌شوند. این گزینه با categoryAllowlist منحصر به فرد است و از هر دو نتیجه در خطا استفاده می کند. هر رشته تنظیم نشده است

داده ها را آماده کنید

Text Classifier با داده های متنی کار می کند. این وظیفه، پیش پردازش ورودی داده، از جمله پیش پردازش توکن و تانسور را انجام می دهد.

تمام پیش پردازش ها در تابع classify(text:) انجام می شود. نیازی به پیش پردازش اضافی متن ورودی از قبل نیست.

سویفت

let text = "The input text to be classified."

هدف-C

NSString *text = @"The input text to be classified.";

وظیفه را اجرا کنید

برای اجرای Text Classifier از متد classify(text:) استفاده کنید. Text Classifier دسته بندی های ممکن را برای متن ورودی برمی گرداند.

سویفت

let result = try textClassifier.classify(text: text)

هدف-C

MPPTextClassifierResult *result = [textClassifier classifyText:text
                                                          error:nil];

توجه : کار تا زمانی که اجرای استنتاج روی متن به پایان برسد، موضوع فعلی را مسدود می کند. برای جلوگیری از مسدود کردن رشته فعلی، پردازش را در یک رشته پس‌زمینه با استفاده از چارچوب‌های iOS Dispatch یا NSOperation انجام دهید.

کنترل و نمایش نتایج

پس از اجرای استنتاج، وظیفه Text Classifier یک شی TextClassifierResult را برمی گرداند که حاوی لیستی از دسته بندی های ممکن برای متن ورودی است. دسته‌ها با مدلی که استفاده می‌کنید تعریف می‌شوند، بنابراین اگر دسته‌های متفاوتی می‌خواهید، مدل متفاوتی را انتخاب کنید یا یک مدل موجود را دوباره آموزش دهید.

شکل زیر نمونه ای از داده های خروجی از این کار را نشان می دهد:

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

این نتیجه با اجرای طبقه‌بندی BERT بر روی متن ورودی به دست آمده است: "an imperfect but overall entertaining mystery" .

فایل ViewController.swift در کد مثال نحوه نمایش نتایج تشخیص برگشتی از کار را نشان می دهد.