محللات لمعالجة النصوص في Azure الذكاء الاصطناعي Search

المحلل هو أحد مكونات محرك بحث النص الكامل المسؤول عن معالجة السلاسل أثناء الفهرسة وتنفيذ الاستعلام. تعتبر معالجة النص (المعروفة أيضًا باسم التحليل المعجمي) تحويلية، حيث تقوم بتعديل سلسلة من خلال إجراءات مثل هذه:

  • إزالة الكلمات غير الضرورية(كلمات التوقف) وعلامات الترقيم.
  • تقسيم العبارات والكلمات الموصولة بأجزاء مكونة
  • أحرف صغيرة أي كلمات كبيرة
  • قلل الكلمات إلى أشكال جذرية بدائية من أجل كفاءة التخزين بحيث يمكن العثور على المطابقات بغض النظر عن الزمن.

ينطبق التحليل علىEdm.String الحقول التي تم تمييزها على أنها "قابلة للبحث"، مما يشير إلى البحث عن نص كامل.

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

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

لمزيد من المعلومات الأساسية عن التحليل المعجمي، استمع إلى مقطع الفيديو التالي للحصول على شرح موجز.

المحلل الافتراضي

في Azure الذكاء الاصطناعي Search، يتم استدعاء محلل تلقائيا على جميع حقول السلسلة التي تم وضع علامة عليها على أنها قابلة للبحث.

بشكل افتراضي، يستخدم Azure الذكاء الاصطناعي Search محلل Apache Lucene Standard (lucene القياسي)، الذي يقسم النص إلى عناصر تتبع قواعد "Unicode Text Segmentation". يقوم المحلل القياسي بتحويل كافة الأحرف إلى الشكل الصغير الخاص بهم. تخضع كل من المستندات المفهرسة ومصطلحات البحث للتحليل أثناء الفهرسة ومعالجة الاستعلام.

يمكنك تجاوز الإعداد الافتراضي على أساس كل حقل على حدة. يمكن أن تكون المحللات البديلة محلل لغة للمعالجة اللغوية، أو محللًا مخصصًا، أو محللًا مضمنًا من قائمة أدوات التحليل المتاحة.

أنواع أجهزة المحللات

توضح القائمة التالية أدوات التحليل المتوفرة في Azure الذكاء الاصطناعي Search.

الفئة ‏‏الوصف
المحلل الخاص بـ Lucene القياسي الإعداد الافتراضي. لا يتطلب الأمر مواصفات أو تكوين. يعمل محلل الأغراض العامة هذا بشكل جيد فيما يتعلق بالعديد من اللغات والسيناريوهات.
التحليلات المدمجة المستهلكة كما هي حيث يُشار إليها بالاسم. هناك نوعان: اللغة واللغة الغير محددة.

محللات متخصصة (حيادية اللغة) تُستخدم عندما تتطلب إدخالات النص معالجة متخصصة أو الحد الأدنى من المعالجة. تتضمن أمثلة المحللات في هذه الفئة Asciifolding، والكلمة الأساسية، والنمط، والبساطة، وإيقاف التشغيل، والفراغ.

محللات اللغة تُستخدم عندما تحتاج إلى دعم لغوي ثري للغات الفردية يدعم Azure الذكاء الاصطناعي Search 35 محلل لغة Lucene و50 محلل معالجة اللغة الطبيعية من Microsoft.
المحللات المخصصة بالإشارة إلى التكوين المحدد من قبل المستخدم لمجموعة من العناصر الموجودة، والتي تتكون من رمز مميز واحد (مطلوب) وعوامل تصفية اختيارية (حرف أو رمز مميز).

تدعم المحللات المدمجة، مثلالنمطأوإيقاف التشغيل، مجموعة محدودة من خيارات التكوين. لضبط هذه الخيارات، قم بإنشاء محلل مخصص، يتكون من محلل مدمج وأحد الخيارات البديلة الموثقة فيالمحللات المدمجة. كما هو الحال مع أي تكوين مخصص، وفر التكوين الجديد الخاص بك باسم، مثلmyPatternAnalyzerلتمييزه عن محلل أنماط Lucene.

تحديد المحللات

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

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

  2. عند تعريف حقل، قم بتعيين الخاصية "analyzer" إلى أحد ما يلي: محلل مضمن مثل الكلمة الأساسية أو محلل لغة مثل en.microsoft، أو محلل مخصص (معرف في نفس مخطط الفهرس).

      "fields": [
     {
       "name": "Description",
       "type": "Edm.String",
       "retrievable": true,
       "searchable": true,
       "analyzer": "en.microsoft",
       "indexAnalyzer": null,
       "searchAnalyzer": null
     },
    
  3. إذا كنت تستخدم محلل لغة، يجب استخدام خاصية "المحلل" لتحديده. لا تنطبق الخاصيتان "searchAnalyzer" و"indexAnalyzer" على محللات اللغة.

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

      "fields": [
     {
       "name": "ProductGroup",
       "type": "Edm.String",
       "retrievable": true,
       "searchable": true,
       "analyzer": null,
       "indexAnalyzer": "keyword",
       "searchAnalyzer": "standard"
     },
    

متى تضيف المحللات

أفضل وقت لإضافة وتعيين محللات أثناء التطوير النشط، عند إسقاط وإعادة إنشاء الفهارس أمر روتيني.

نظرًا لاستخدام المحللات في ترميز المصطلحات، يجب عليك أن تقوم بتعيين محلل عند إنشاء الحقل. في الواقع، لا يسمح بتعيين محلل أو indexAnalyzer لحقل تم إنشاؤه فعليا (على الرغم من أنه يمكنك تغيير الخاصية searchAnalyzer في أي وقت دون أي تأثير على الفهرس).

لتغيير محلل حقل موجود، سيتعين عليك إسقاط الفهرس بأكمله وإعادة إنشائه (لا يمكنك إعادة إنشاء الحقول الفردية). فيما يتعلق بالفهارس في مرحلة الإنتاج، يمكنك تأجيل إعادة البناء عن طريق إنشاء حقل جديد باستخدام تعيين المحلل الجديد، والبدء في استخدامه بدلاً من الحقل القديم. استخدم فهرس التحديث لتضمين الحقل الجديد و mergeOrUpload لتعبئته. لاحقًا، كجزء من خدمة الفهرس المخططة، يمكنك تنظيف الفهرس من أجل إزالة الحقول القديمة.

لإضافة حقل جديد إلى فهرس موجود اتصل بـ Update Index من أجل إضافة الحقل، ثم mergeOrUpload لتعبئته.

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

"Index update not allowed because it would cause downtime. In order to add new analyzers, tokenizers, token filters, or character filters to an existing index, set the 'allowIndexDowntime' query parameter to 'true' in the index update request. Note that this operation will put your index offline for at least a few seconds, causing your indexing and query requests to fail. Performance and write availability of the index can be impaired for several minutes after the index is updated, or longer for very large indexes."

التوصيات المتعلقة بالعمل مع المحللات

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

محلل واحد للقراءة والكتابة في حالة عدم وجود متطلبات محددة خاصة بك

يتيح لك Azure الذكاء الاصطناعي Search تحديد محللات مختلفة للفهرسة والبحث من خلال خصائص الحقل "indexAnalyzer" و"searchAnalyzer". إذا لم يكن محدد، يُستخدم المحلل الذي تم تعيينه بخاصية المحلل للفهرسة والبحث. إذا كان المحلل غير محدد، يُستخدم محلل Lucene القياسي الافتراضي.

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

إجراء الاختبار أثناء عملية التطوير النشط

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

فحص المصطلحات ذات الرموز المييزة

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

الرموز الخاصة بـREST

تعرض الأمثلة أدناه تعريفات المحلل لعدد قليل من السيناريوهات الرئيسية.

مثال محلل مخصص

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

إجراء سير العمل من خلال هذا المثال:

  • أدوات التحليل هي خاصية لفئة المجال لحقل قابل للبحث.

  • المحلل المخصص هو جزء من تعريف الفهرس. يُمكن تخصيصه بشكل خفيف (على سبيل المثال، تخصيص خيار واحد في عامل تصفية واحد) أو تخصيصه في أماكن متعددة.

  • في هذه الحالة، يكون المحلل المخصص هو "my_analyzer"، والذي يستخدم بدوره رمز مميز قياسي مخصصًا "my_standard_tokenizer" واثنين من عوامل تصفية الرمز المميز: عامل تصفية الأحرف الصغيرة والمخصص "my_asciifolding".

  • كما تحدد عوامل تصفية حرفين مخصصين هما "map_dash" و "remove_whitespace". الأول يستبدل كل الشرطات بشرطة سفلية بينما يزيل الثاني كل المسافات. يجب أن تكون المسافات بترميز UTF-8 في قواعد التعيين. يتم تطبيق عوامل تصفية الأحرف قبل الرمز المميز وتؤثر على الرموز المميزة الناتجة (يقاطع الرمز المميز القياسي عند الشرطة والمسافات ولكن ليس على الشرطة السفلية).

  {
     "name":"myindex",
     "fields":[
        {
           "name":"id",
           "type":"Edm.String",
           "key":true,
           "searchable":false
        },
        {
           "name":"text",
           "type":"Edm.String",
           "searchable":true,
           "analyzer":"my_analyzer"
        }
     ],
     "analyzers":[
        {
           "name":"my_analyzer",
           "@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer",
           "charFilters":[
              "map_dash",
              "remove_whitespace"
           ],
           "tokenizer":"my_standard_tokenizer",
           "tokenFilters":[
              "my_asciifolding",
              "lowercase"
           ]
        }
     ],
     "charFilters":[
        {
           "name":"map_dash",
           "@odata.type":"#Microsoft.Azure.Search.MappingCharFilter",
           "mappings":["-=>_"]
        },
        {
           "name":"remove_whitespace",
           "@odata.type":"#Microsoft.Azure.Search.MappingCharFilter",
           "mappings":["\\u0020=>"]
        }
     ],
     "tokenizers":[
        {
           "name":"my_standard_tokenizer",
           "@odata.type":"#Microsoft.Azure.Search.StandardTokenizerV2",
           "maxTokenLength":20
        }
     ],
     "tokenFilters":[
        {
           "name":"my_asciifolding",
           "@odata.type":"#Microsoft.Azure.Search.AsciiFoldingTokenFilter",
           "preserveOriginal":true
        }
     ]
  }

مثال على تعيين محلل لكل مجال

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

يتجاوز عنصر "محلل" محلل قياسي على أساس حقل وفقاً للحقل. عدم وجود تجاوز عمومي. في هذا المثال،text1 يستخدم محلل الأنماط، وtext2الذي لا يحدد محللًا، يستخدم المحلل الافتراضي.

  {
     "name":"myindex",
     "fields":[
        {
           "name":"id",
           "type":"Edm.String",
           "key":true,
           "searchable":false
        },
        {
           "name":"text1",
           "type":"Edm.String",
           "searchable":true,
           "analyzer":"pattern"
        },
        {
           "name":"text2",
           "type":"Edm.String",
           "searchable":true
        }
     ]
  }

دمج المحللات لعمليات الفهرسة والبحث

تتضمن واجهات برمجة التطبيقات سمات الفهرس من أجل تحديد محللات مختلفة للفهرسة والبحث. يجب تحديد سمات searchAnalyzer و indexAnalyzer كزوج، لتحل محل السمة الخاصة بمحلل واحد.

  {
     "name":"myindex",
     "fields":[
        {
           "name":"id",
           "type":"Edm.String",
           "key":true,
           "searchable":false
        },
        {
           "name":"text",
           "type":"Edm.String",
           "searchable":true,
           "indexAnalyzer":"whitespace",
           "searchAnalyzer":"simple"
        },
     ],
  }

مثال المحلل الخاص باللغة

يمكن للحقول التي تحتوي على سلاسل بلغات مختلفة استخدام محلل اللغة، بينما تحتفظ الحقول الأخرى بالمحلل الافتراضي (أو استخدام محلل آخر محدد بشكل مسبق أو مخصص). إذا كنت تستخدم محلل لغة، يجب عليك استخدامه لكل من عمليات الفهرسة والبحث. لا يمكن أن تحتوي الحقول التي تستخدم محلل اللغة على محللات مختلفة للفهرسة والبحث.

  {
     "name":"myindex",
     "fields":[
        {
           "name":"id",
           "type":"Edm.String",
           "key":true,
           "searchable":false
        },
        {
           "name":"text",
           "type":"Edm.String",
           "searchable":true,
           "indexAnalyzer":"whitespace",
           "searchAnalyzer":"simple"
        },
        {
           "name":"text_fr",
           "type":"Edm.String",
           "searchable":true,
           "analyzer":"fr.lucene"
        }
     ],
  }

أمثلة C #

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

تعيين محلل لغة

يتم تحديد أي محلل يتم استخدامه كما هو، بدون تكوين، في تعريف الحقل. لا يوجد أي متطلبات لإنشاء إدخال في قسم [المحللات] الخاص بالفهرس.

تستخدم أدوات تحليل اللغة كما هي. لاستخدامها، اتصل ب LexicalAnalyzer، مع تحديد نوع LexicalAnalyzerName الذي يوفر محلل نص مدعوم في Azure الذكاء الاصطناعي Search.

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

    public partial class Hotel
    {
       . . . 
        [SearchableField(AnalyzerName = LexicalAnalyzerName.Values.EnLucene)]
        public string Description { get; set; }

        [SearchableField(AnalyzerName = LexicalAnalyzerName.Values.FrLucene)]
        [JsonPropertyName("Description_fr")]
        public string DescriptionFr { get; set; }

        [SearchableField(AnalyzerName = "url-analyze")]
        public string Url { get; set; }
      . . .
    }

تحديد محلل مخصص

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

إنشاء الكائن الخاص بـ CustomAnalyzer المحلل المخصص عبارة عن توليفة يحددها المستخدم من رمز مميز معروف، أو عامل تصفية رمزي مميز صفري أو أكثر، وصفر أو أكثر من أسماء عوامل تصفية الأحرف:

يقوم المثال التالي بإنشاء محلل مخصص يسمى "url-analyze" والذي يستخدم رمز المميز الخاص بـ uax_url_email وعامل تصفية الرموز المميزة الصغيرة.

private static void CreateIndex(string indexName, SearchIndexClient adminClient)
{
   FieldBuilder fieldBuilder = new FieldBuilder();
   var searchFields = fieldBuilder.Build(typeof(Hotel));

   var analyzer = new CustomAnalyzer("url-analyze", "uax_url_email")
   {
         TokenFilters = { TokenFilterName.Lowercase }
   };

   var definition = new SearchIndex(indexName, searchFields);

   definition.Analyzers.Add(analyzer);

   adminClient.CreateOrUpdateIndex(definition);
}

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

يمكن العثور على وصف مفصل لتنفيذ الاستعلام في البحث عن النص الكامل في Azure الذكاء الاصطناعي Search. تستخدم المقالة أمثلة لشرح السلوكيات التي من الممكن أن تبدو غير بديهية على السطح.

لمعرفة المزيد حول أدوات التحليل، راجع المقالات التالية: