دمج أدوات البحث عن النصوص

يتيح البحث النصي البحث عن نص مشابه دلاليًا في مجموعة من النصوص. يعمل من خلال تضمين طلب البحث في متّجه عالي الأبعاد يمثّل المعنى الدلالي لطلب البحث، ثم إجراء بحث عن التشابه في فهرس مخصّص ومحدّد مسبقًا باستخدام ScaNN (البحث عن أقرب الجيران القابل للتوسيع).

على عكس تصنيف النصوص (مثل مصنّف Bert للغة الطبيعية)، لا يتطلّب توسيع عدد العناصر التي يمكن التعرّف عليها إعادة تدريب النموذج بأكمله. يمكن إضافة عناصر جديدة بإعادة إنشاء الفهرس ببساطة. يتيح ذلك أيضًا العمل مع مجموعات أكبر (أكثر من 100 ألف عنصر).

استخدِم واجهة برمجة التطبيقات Task Library TextSearcher لنشر أداة البحث المخصّصة عن النصوص في تطبيقاتك على الأجهزة الجوّالة.

الميزات الرئيسية في TextSearcher API

  • تأخذ هذه الدالة سلسلة واحدة كإدخال، وتنفّذ عملية استخراج التضمين والبحث عن أقرب جار في الفهرس.

  • معالجة النص المُدخَل، بما في ذلك تقسيم النص المُدخَل إلى رموز Wordpiece أو Sentencepiece داخل الرسم البياني أو خارجه

المتطلبات الأساسية

قبل استخدام واجهة برمجة التطبيقات TextSearcher، يجب إنشاء فهرس استنادًا إلى مجموعة النصوص المخصّصة التي سيتم البحث فيها. يمكن تحقيق ذلك باستخدام Model Maker Searcher API باتّباع البرنامج التعليمي وتعديله.

لإجراء ذلك، عليك استيفاء ما يلي:

  • نموذج تضمين نص TFLite، مثل Universal Sentence Encoder على سبيل المثال،
    • النموذج الذي تم إعادة تدريبه في Colab، وهو محسّن للاستدلال على الجهاز. يستغرق البحث عن سلسلة نصية على هاتف Pixel 6‏ 6 ملي ثانية فقط.
    • النسخة المكمَّمة، وهي أصغر من النسخة أعلاه ولكنها تستغرق 38 ملي ثانية لكل تضمين.
  • مجموعة النصوص.

بعد هذه الخطوة، يجب أن يتوفّر لديك نموذج بحث مستقل من TFLite (مثل mobilenet_v3_searcher.tflite)، وهو نموذج تضمين النصوص الأصلي مع إرفاق الفهرس بالبيانات الوصفية لنموذج TFLite.

تشغيل الاستنتاج في Java

الخطوة 1: استيراد تبعية Gradle والإعدادات الأخرى

انسخ ملف نموذج البحث .tflite إلى دليل مواد العرض الخاص بوحدة Android التي سيتم تشغيل النموذج فيها. حدِّد أنّه يجب عدم ضغط الملف، وأضِف مكتبة TensorFlow Lite إلى ملف build.gradle الخاص بالوحدة:

android {
    // Other settings

    // Specify tflite index 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-vision:0.4.4'
    // Import the GPU delegate plugin Library for GPU inference
    implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.4.4'
}

الخطوة 2: استخدام النموذج

// Initialization
TextSearcherOptions options =
    TextSearcherOptions.builder()
        .setBaseOptions(BaseOptions.builder().useGpu().build())
        .setSearcherOptions(
            SearcherOptions.builder().setL2Normalize(true).build())
        .build();
TextSearcher textSearcher =
    textSearcher.createFromFileAndOptions(context, modelFile, options);

// Run inference
List<NearestNeighbor> results = textSearcher.search(text);

راجِع رمز المصدر وJavadoc للحصول على مزيد من الخيارات لإعداد TextSearcher.

تشغيل الاستدلال في C++‎

// Initialization
TextSearcherOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_path);
options.mutable_embedding_options()->set_l2_normalize(true);
std::unique_ptr<TextSearcher> text_searcher = TextSearcher::CreateFromOptions(options).value();

// Run inference with your input, `input_text`.
const SearchResult result = text_searcher->Search(input_text).value();

يمكنك الاطّلاع على رمز المصدر لمعرفة المزيد من الخيارات لإعداد TextSearcher.

تشغيل الاستنتاج في Python

الخطوة 1: تثبيت حزمة TensorFlow Lite Support Pypi

يمكنك تثبيت حزمة TensorFlow Lite Support Pypi باستخدام الأمر التالي:

pip install tflite-support

الخطوة 2: استخدام النموذج

from tflite_support.task import text

# Initialization
text_searcher = text.TextSearcher.create_from_file(model_path)

# Run inference
result = text_searcher.search(text)

اطّلِع على رمز المصدر لمعرفة المزيد من الخيارات لإعداد TextSearcher.

أمثلة النتائج

Results:
 Rank#0:
  metadata: The sun was shining on that day.
  distance: 0.04618
 Rank#1:
  metadata: It was a sunny day.
  distance: 0.10856
 Rank#2:
  metadata: The weather was excellent.
  distance: 0.15223
 Rank#3:
  metadata: The cat is chasing after the mouse.
  distance: 0.34271
 Rank#4:
  metadata: He was very happy with his newly bought car.
  distance: 0.37703

جرِّب أداة العرض التوضيحي البسيطة لواجهة سطر الأوامر الخاصة بـ TextSearcher باستخدام النموذج وبيانات الاختبار الخاصة بك.