ما هي مطابقة النمط؟

يمكن تخصيص مطابقة الأنماط لتجميع أهداف وكيانات النمط معًا داخل ملف PatternMatchingModel. باستخدام هذا التجميع، من الممكن الوصول إلى أنواع الكيانات الأكثر تقدما التي تساعد على جعل التعرف على الهدف أكثر دقة.

للحصول على إعدادات محلية مدعومة، راجع هنا.

الأنماط مقابل العبارات الدقيقة

هناك نوعان من السلاسل المستخدمة في مطابقة النمط: "عبارات متطابقة" و"أنماط". ومن المهم فهم الاختلافات.

العبارات الدقيقة هي سلاسل من الكلمات الدقيقة التي تريد مطابقتها. على سبيل المثال:

"اصطحبني إلى الطابق السابع".

النمط عبارة عن عبارة تحتوي على كيان محدد. يتم تمييز الكيانات بواسطة "{}" لتحديد المكان داخل النموذج ويشير النص الموجود داخل "{}" إلى معرف الكيان. بالنظر إلى المثال السابق، ربما ترغب في استخراج اسم الطابق في كيان يسمى "floorName". يمكنك القيام بذلك بنمط مثل هذا:

"خذني إلى الدور الأرضي {floorName}"

مخطط تفصيلي لنموذج المطابقة

يحتوي على PatternMatchingModel معرّف للإشارة إلى هذا النموذج بواسطة قائمة بالعناصر PatternMatchingIntent، وقائمة بالعناصر PatternMatchingEntity.

أهداف مطابقة النمط

PatternMatchingIntent تمثل الكائنات مجموعة من العبارات المستخدمة لتقييم الكلام أو النص في IntentRecognizer. إذا تمت مطابقة العبارات، فإن IntentRecognitionResult الذي تم إرجاعه يحتوي على معرف PatternMatchingIntent الذي تمت مطابقته.

كيانات مطابقة النمط

PatternMatchingEntity العناصر مرجع كيان فردي وخصائصه المقابلة التي تخبر IntentRecognizer كيفية التعامل معه. يجب أن يكون لكافة PatternMatchingEntity الكائنات معرف موجود في عبارة وإلا فإنه غير متطابق.

قيود تسمية الكيان

تعين أسماء الكيانات التي تحتوي على أحرف ':' دورا إلى كيان.

أنواع الكيانات

أي كيان

يتطابق الكيان "أي" مع أي نص يظهر في تلك الفتحة بغض النظر عن النص الذي يحتوي عليه. إذا أخذنا في الاعتبار المثال السابق باستخدام النمط "خذني إلى الطابق {floorName}"، فقد يقول المستخدم شيئًا مثل:

"خذني إلى طابق موقف السيارات 2

ففي هذه الحالة، فإن كيان "floorName" سيطابق "موقف السيارات 2".

هذه الكيانات هي تطابقات بطيئة تحاول مطابقة أقل عدد ممكن من الكلمات ما لم تظهر في بداية أو نهاية التعبير. ضع في اعتبارك النمط التالي:

"خذني للطابق {floorName1} {floorName2}"

في هذه الحالة، سيتطابق نطق "خذني إلى موقف السيارات 2" ويعيد floorName1 = "parking" وfloorName2 = "2".

قد يكون من الصعب التعامل مع النص الملتقط الإضافي. ربما استمر المستخدم في الحديث واستحوذ الكلام على أكثر من أمره. "خذني إلى موقف السيارات 2، نعم، سمعت جانس عن ذلك". في هذه الحالة، سيكون اسم floor1 صحيحًا، لكن الكلمة floorName2 ستكون = "2 نعم، سمعت جانس بذلك". من المهم أن تكون على دراية بالطريقة التي تتطابق بها الكيانات، وضبط السيناريو الخاص بك بشكل مناسب. أي نوع كيان هو النوع الأساسي والأقل دقة من المطابقة التي تم إجراؤها.

كيان قائمة

يتكون كيان "القائمة" من قائمة من العبارات التي توجه المحرك حول كيفية مطابقته. ويحتوي كيان "القائمة" على وضعين. "Strict" and "Fuzzy".

فلنفترض أن لدينا قائمة بالطوابق لمصعدنا. نظرا لأننا نتعامل مع الكلام، نضيف إدخالات باستخدام التنسيق المعجمي أيضا.

"1"، "2"، "3"، "البهو"، "الطابق الأرضي"، "واحد"، "اثنان"، "ثلاثة"

عند استخدام كيان من نوع معرف "القائمة" في وضع "صارم"، يتطابق المحرك فقط إذا ظهر النص في الفتحة في القائمة.

سيتطابق "اصطحبني إلى الطابق الأول".

"اصطحبني إلى الطابق 5" لن تفعل ذلك.

من المهم ملاحظة أن الهدف بأكمله لن يتطابق، وليس الكيان فقط.

عند استخدام كيان من نوع معرف "القائمة" في وضع "غامض"، لا يزال المحرك يطابق الهدف، ويعيد النص الذي ظهر في الفتحة في التعبير، حتى لو لم يكن في القائمة. هذه المطابقة مفيدة خلف الكواليس للمساعدة في تحسين التعرف على الكلام.

تحذير

يتم تنفيذ كيانات القائمة الضبابية، ولكن لا يتم دمجها في جزء التعرف على الكلام. لذلك، سوف تتطابق مع الكيانات، ولكنها لن تعمل على تحسين التعرف على الكلام.

كيان عدد صحيح تم إنشاؤه مسبقًا

يتم استخدام الكيان "PrebuiltInteger" عندما تتوقع الحصول على عدد صحيح في تلك الفتحة. لن يتطابق مع الهدف إذا تعذر العثور على عدد صحيح. القيمة المعادة هي سلسلة تمثيل للرقم.

أمثلة على قيم مطابقة وإرجاع صالحة

"ألفان ومائة وخمسة وخمسون" >- "2155"

"first" -> "1"

"أحد" -> "1"

"أربعة صفر سبعة واحد" -> "4071"

إذا كان هناك نص لا يمكن التعرف عليه كرقم، فلن يتطابق الكيان والقصد.

أمثلة على التطابق غير الصالح

"الثالث"

"أعتقد الطابق الأول"

"اثنان زائد ثلاثة"

"ثلاثة وثلاثون تقريبًا"

ضع في اعتبارك مثال المصعد الخاص بنا.

"خذني إلى الدور الأرضي {floorName}"

إذا كان "floorName" عبارة عن كيان عدد صحيح تم إنشاؤه مسبقا، فإن التوقع هو أن أي نص موجود داخل الفتحة يمثل عددا صحيحا. هنا رقم الكلمة سوف تتطابق بشكل جيد، ولكن الكلمة التي تحمل اسما مثل "اللوبي" لن.

تجميع العناصر المطلوبة والاختيارية

في النمط، يسمح بتضمين الكلمات أو الكيانات التي "قد" تكون موجودة في التعبير. هذا مفيد بشكل خاص للمحددات مثل "the" أو "a" أو "an". لا يحتوي هذا على أي اختلاف وظيفي عن الترميز الثابت للتركيبات العديدة، ولكن يمكن أن يساعد في تقليل عدد الأنماط المطلوبة. أشر إلى العناصر الاختيارية باستخدام "[" و "]". أشر إلى العناصر المطلوبة باستخدام "(" و ")". يمكنك تضمين عناصر متعددة في المجموعة نفسها عن طريق فصلها بحرف '|'.

لمعرفة كيفية تقليل هذا عدد الأنماط المطلوبة، ضع في اعتبارك المجموعة التالية:

"اصطحبني إلى {floorName}"

"اصطحبني {floorName}"

"خذني لـ {floorName}"

"خذني إلى {floorName} رجاءً"

"خذني {floorName} رجاءً"

"خذني لـ {floorName} رجاءً"

"أحضر لي {floorName} رجاءً"

"اصطحبني إلى {floorName} رجاءً"

يمكن اختزال كل ذلك إلى نمط واحد مع التجميع والعناصر الاختيارية. أولا، من الممكن تجميع "إلى" و"و" معا ككلمات اختيارية مثل ذلك: "[to | و]"، والثانية يمكننا أن نجعل "من فضلك" اختيارية أيضا. أخيرًا، يمكننا تجميع "إحضار" و "أخذ" حسب الحاجة.

"(أحضر لي | خذني) [إلى |] {floorName} [رجاءً]"

من الممكن أيضًا تضمين كيانات اختيارية. تخيل أن هناك عدة مستويات لوقوف السيارات وتريد مطابقة الكلمة الموجودة قبل {floorName}. يمكنك القيام بذلك بنمط مثل هذا:

"اصطحبني إلى [{floorType}] {floorName}"

تكون الخيارات الاختيارية مفيدة أيضا إذا كنت تستخدم التعرف على الكلمة الأساسية ودالة دفع إلى كلام. وهذا يعني أنه في بعض الأحيان تكون الكلمة الأساسية موجودة، وأحيانا لن تكون موجودة. بافتراض أن كلمتك الرئيسية كانت "كمبيوتر"، سيبدو النمط الخاص بك مشابهًا لذلك.

"[كمبيوتر] خذني إلى {floorName}"

إشعار

في حين أنه من المفيد استخدام العناصر الاختيارية، إلا أنه يزيد من فرص تضارب الأنماط. هذا هو المكان الذي يمكن أن يتطابق فيه نمطان مع العبارة المنطوقة نفسها. في حالة حدوث ذلك، يمكن أحيانًا حله عن طريق فصل العناصر الاختيارية إلى أنماط منفصلة.

أدوار الكيان

داخل النمط، قد يكون هناك سيناريو حيث تريد استخدام نفس الكيان عدة مرات. ضع في اعتبارك سيناريو حجز رحلة طيران من مدينة إلى أخرى. وفي هذه الحالة، تكون قائمة المدن هي نفسها، ولكن من الضروري معرفة المدينة التي يأتي منها المستخدم والمدينة التي هي الوجهة. لإنجاز ذلك، يمكنك استخدام الدور المخصص لكيان باستخدام ":".

"احجز رحلة طيران من {city: from} إلى {city: destination}"

بالنظر إلى نمط مثل هذا، سيكون هناك كيانان في النتيجة بعنوان "المدينة: من" و"المدينة: الوجهة" ولكن كلاهما سيشير إلى كيان "المدينة" لأغراض المطابقة.

أولوية مطابقة الهدف

في بعض الأحيان تتطابق أنماط متعددة مع نفس التعبير. في هذه الحالة، يعطي المحرك الأولوية للأنماط كما يلي.

  1. عبارات دقيقة.
  2. الأنماط مع المزيد من الكيانات.
  3. الأنماط ذات الكيانات الصحيحة.
  4. الأنماط مع قائمة الكيانات.
  5. الأنماط مع أي كيانات.
  6. تطابق الأنماط مع المزيد من وحدات البايت.
    • مثال: سيكون النمط "تحديد {something} على اليسار" أولوية أعلى من "تحديد {something}".

الخطوات التالية