راهنمای جاسازی متن برای iOS

وظیفه Text Embedder به شما امکان می دهد یک نمایش عددی از داده های متنی ایجاد کنید تا معنای معنایی آن را دریافت کنید. این دستورالعمل‌ها به شما نشان می‌دهند که چگونه از Text Embedder در برنامه‌های iOS استفاده کنید.

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

نمونه کد

کد مثال برای Text Embedder یک پیاده سازی اساسی از یک برنامه برای iOS را ارائه می دهد که این کار را یکپارچه می کند. این مثال شباهت های معنایی بین دو قطعه متن را ارزیابی می کند و به یک دستگاه فیزیکی iOS یا شبیه ساز iOS نیاز دارد.

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

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

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

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

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

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

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

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

اجزای کلیدی

فایل های زیر حاوی کد حیاتی برای مثال برنامه Text Embedder هستند:

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

راه اندازی

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

وابستگی ها

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

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

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

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

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

مدل

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

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

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

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

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

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

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

سویفت

import MediaPipeTasksText

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

let options = TextEmbedderOptions()
options.baseOptions.modelAssetPath = modelPath
options.quantize = true

let textEmbedder = try TextEmbedder(options: options)

هدف-C

@import MediaPipeTasksText;

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

MPPTextEmbedderOptions *options = [[MPPTextEmbedderOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.quantize = YES;

MPPTextEmbedder *textEmbedder =
      [[MPPTextEmbedder alloc] initWithOptions:options error:nil];

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

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

نام گزینه توضیحات محدوده ارزش مقدار پیش فرض
l2_normalize آیا باید بردار ویژگی بازگشتی را با نرمال L2 عادی سازی کرد. فقط در صورتی از این گزینه استفاده کنید که مدل از قبل دارای یک L2_NORMALIZATION TFLite Op بومی نباشد. در بیشتر موارد، این قبلاً وجود دارد و بنابراین عادی سازی L2 از طریق استنتاج TFLite بدون نیاز به این گزینه حاصل می شود. Boolean False
quantize اینکه آیا تعبیه برگشتی باید از طریق کوانتیزه کردن اسکالر به بایت تبدیل شود یا خیر. تعبیه‌ها به طور ضمنی واحد هنجار فرض می‌شوند و بنابراین هر بعد تضمین می‌شود که مقداری در [-1.0، 1.0] داشته باشد. اگر اینطور نیست از گزینه l2_normalize استفاده کنید. Boolean False

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

برای جاسازی متن ورودی و به دست آوردن بردارهای تعبیه شده آن می توانید از روش embed(text:) TextEmbedder استفاده کنید.

سویفت

let result = try textEmbedder.embed(text: text)

هدف-C

MPPTextEmbedderResult *result = [textEmbedder embedText:text
                                                  error:nil];

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

در کد مثال، متد embed(text:) در فایل TextEmbedderService.swift فراخوانی می شود.

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

پس از اجرای استنتاج، وظیفه Text Embedder یک شی TextEmbedderResult را برمی‌گرداند که حاوی لیستی از جاسازی‌ها (اعم از ممیز شناور یا اسکالر کوانتیزه) برای متن ورودی است.

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

TextEmbedderResult:
  Embedding #0 (sole embedding head):
    float_embedding: {0.2345f, 0.1234f, ..., 0.6789f}
    head_index: 0

می توانید شباهت معنایی دو جاسازی را با استفاده از روش TextEmbedder.cosineSimilarity مقایسه کنید.

سویفت

let similarity = try TextEmbedder.cosineSimilarity(
  embedding1: result.embeddingResult.embeddings[0],
  embedding2: otherResult.embeddingResult.embeddings[0])
    

هدف-C

NSNumber *similarity = [MPPTextEmbedder
      cosineSimilarityBetweenEmbedding1:result.embeddingResult.embeddings[0]
                          andEmbedding2:otherResult.embeddingResult.embeddings[0]
                                  error:nil];
    

در کد مثال، متد TextEmbedder.cosineSimilarity در فایل TextEmbedderService.swift فراخوانی شده است.