راهنمای جاسازی متن برای اندروید

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

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

نمونه کد

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

می‌توانید از برنامه به‌عنوان نقطه شروع برای برنامه اندرویدی خود استفاده کنید یا هنگام تغییر برنامه موجود به آن مراجعه کنید. کد نمونه 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/android
    

پس از ایجاد یک نسخه محلی از کد نمونه، می توانید پروژه را به اندروید استودیو وارد کرده و برنامه را اجرا کنید. برای دستورالعمل‌ها، به راهنمای راه‌اندازی برای Android مراجعه کنید.

اجزای کلیدی

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

  • TextEmbedderHelper.kt : جاسازی متن را راه‌اندازی می‌کند و مدل و انتخاب نماینده را مدیریت می‌کند.
  • MainActivity.kt : برنامه را پیاده سازی می کند و اجزای رابط کاربری را مونتاژ می کند.

راه اندازی

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

وابستگی ها

Text Embedder از کتابخانه های com.google.mediapipe:tasks-text استفاده می کند. این وابستگی را به فایل build.gradle پروژه توسعه برنامه اندروید خود اضافه کنید. می توانید وابستگی های مورد نیاز را با کد زیر وارد کنید:

dependencies {
    implementation 'com.google.mediapipe:tasks-text:latest.release'
}

مدل

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

مدل را انتخاب و دانلود کنید و سپس آن را در فهرست پروژه خود ذخیره کنید:

<dev-project-root>/src/main/assets

مسیر مدل را در پارامتر ModelAssetPath مشخص کنید. در کد مثال، مدل در تابع setupTextEmbedder() در فایل TextEmbedderHelper.kt تعریف شده است:

از تابع BaseOptions.Builder.setModelAssetPath() برای تعیین مسیر استفاده شده توسط مدل استفاده کنید. به این روش در مثال کد در قسمت بعدی اشاره شده است.

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

می توانید از یکی از توابع createFrom...() برای ایجاد کار استفاده کنید. تابع createFromOptions() گزینه های پیکربندی را برای تنظیم گزینه های embedder می پذیرد. همچنین می‌توانید با استفاده از تابع createFromFile() کار را مقداردهی اولیه کنید. تابع createFromFile() یک مسیر نسبی یا مطلق به فایل مدل آموزش دیده می پذیرد. برای اطلاعات بیشتر در مورد گزینه های پیکربندی، گزینه های پیکربندی را ببینید.

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

val baseOptions = baseOptionsBuilder.build()
val optionsBuilder =
    TextEmbedderOptions.builder().setBaseOptions(baseOptions)
val options = optionsBuilder.build()
textEmbedder = TextEmbedder.createFromOptions(context, options)

اجرای کد مثال، گزینه های جاسازی متن را در تابع setupTextEmbedder() در فایل TextEmbedderHelper.kt تنظیم می کند.

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

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

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

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

Text Embedder با داده های متن ( String ) کار می کند. وظیفه، پیش پردازش ورودی داده، از جمله پیش پردازش توکن و تانسور را انجام می دهد. تمام پیش پردازش ها در تابع embed() انجام می شود. نیازی به پیش پردازش اضافی متن ورودی از قبل نیست.

val inputText = "The input text to be embedded."

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

Text Embedder از تابع embed برای استنتاج استفاده می کند. برای جاسازی متن، این به معنای برگرداندن بردارهای جاسازی برای متن ورودی است.

کد زیر نحوه اجرای پردازش با مدل وظیفه را نشان می دهد.

textEmbedder?.let {
    val firstEmbed =
        it.embed(firstText).embeddingResult().embeddings().first()
    val secondEmbed =
        it.embed(secondText).embeddingResult().embeddings().first()
    ...
}

در کد مثال، تابع embed در فایل TextEmbedderHelper.kt فراخوانی می شود.

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

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

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

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

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

val similarity = TextEmbedder.cosineSimilarity(firstEmbed, secondEmbed)

در کد مثال، تابع TextEmbedder.cosineSimilarity() در فایل TextEmbedderHelper.kt فراخوانی می شود.