تحديد الإسقاطات في مخزن المعرفة

الإسقاطات هي مكون تعريف مخزن المعرفة الذي يحدد كيفية تخزين المحتوى المخصب الذكاء الاصطناعي في Azure Storage. تحدد الإسقاطات نوع وكمية وتكوين هياكل البيانات التي تحتوي على المحتوى الخاص بك.

في هذه المقالة، تعرف على بناء الجملة لكل نوع من أنواع الإسقاطات:

تذكر أن الإسقاطات يتم تعريفها تحت خاصية "knowledgeStore" لمجموعة المهارات.

"knowledgeStore" : {
    "storageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<Acct Name>;AccountKey=<Acct Key>;",
    "projections": [
      {
        "tables": [ ],
        "objects": [ ],
        "files": [ ]
      }
    ]

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

تلميح

عند تطوير الإسقاطات، قم بتمكين التخزين المؤقت للتخصيب (المعاينة) بحيث يمكنك إعادة استخدام الإثراءات الموجودة أثناء تحرير تعريفات الإسقاط. هذه ميزة معاينة، لذا تأكد من استخدام واجهة برمجة تطبيقات REST للمعاينة (api-version=2020-06-30-preview أو إصدار أحدث) في طلب المفهرس. بدون التخزين المؤقت، ستؤدي التعديلات البسيطة على الإسقاط إلى إعادة معالجة كاملة للمحتوى المثري. من خلال التخزين المؤقت للإثراءات ، يمكنك تكرار الإسقاطات دون تكبد أي رسوم معالجة مجموعة المهارات.

المتطلبات

تحتوي جميع الإسقاطات على خصائص المصدر والوجهة. المصدر هو دائما محتوى من شجرة إثراء تم إنشاؤها أثناء تنفيذ مجموعة المهارات. الوجهة هي اسم ونوع الكائن الذي سيتم إنشاؤه وتحميله في Azure Storage.

باستثناء إسقاطات الملفات ، التي تقبل الصور الثنائية فقط ، يجب أن يكون المصدر:

  • يسري العرض JSON
  • مسار إلى عقدة في شجرة التخصيب (على سبيل المثال، "source": "/document/objectprojection")

في حين أن العقدة قد تحل إلى حقل واحد ، فإن التمثيل الأكثر شيوعا هو إشارة إلى شكل معقد. يتم إنشاء الأشكال المعقدة من خلال منهجية تشكيل ، إما مهارة المشكل أو تعريف تشكيل مضمن ، ولكن عادة ما تكون مهارة التشكيل.

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

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

تعريف إسقاط جدول

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

لتعريف إسقاط جدول، استخدم الصفيف tables في خاصية الإسقاطات. يحتوي إسقاط الجدول على ثلاث خصائص مطلوبة:

الخاصية الوصف
tableName يحدد اسم جدول جديد تم إنشاؤه في Azure Table Storage.
تم إنشاؤهاسم المفتاح اسم العمود للمفتاح الذي يحدد كل صف بشكل فريد. يتم إنشاء القيمة من قبل النظام. إذا حذفت هذه الخاصية، إنشاء عمود تلقائيا يستخدم اسم الجدول والمفتاح كاصطلاح التسمية.
المصدر طريق إلى عقدة في شجرة إثراء. يجب أن تكون العقدة مرجعا إلى شكل معقد يحدد الأعمدة التي يتم إنشاؤها في الجدول.

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

ملاحظة

تخضع إسقاطات الجدول لحدود التخزين التي يفرضها Azure Storage. لا يمكن أن يتجاوز حجم الكيان 1 ميغابايت ولا يمكن أن يكون حجم الخاصية الواحدة أكبر من 64 كيلوبايت. هذه القيود تجعل الجداول حلا جيدا لتخزين عدد كبير من الكيانات الصغيرة.

مثال على جدول واحد

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

"projections" : [
  {
    "tables": [
      { "tableName": "Hotels", "generatedKeyName": "HotelId", "source": "/document/tableprojection" }
    ]
  }
]

الأعمدة مشتقة من "المصدر". سيؤدي شكل البيانات التالي الذي يحتوي على HotelID واسم الفندق والفئة والوصف إلى إنشاء هذه الأعمدة في الجدول.

{
    "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
    "name": "#3",
    "description": null,
    "context": "/document",
    "inputs": [
    {
        "name": "HotelId",
        "source": "/document/HotelId"
    },
    {
        "name": "HotelName",
        "source": "/document/HotelName"
    },
    {
        "name": "Category",
        "source": "/document/Category"
    },
    {
        "name": "Description",
        "source": "/document/Description"
    },
    ],
    "outputs": [
    {
        "name": "output",
        "targetName": "tableprojection"
    }
    ]
}

مثال على جدول متعدد (تقطيع)

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

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

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

يتكون نمط الجداول المتعددة من:

  • جدول واحد كجدول أصل أو جدول رئيسي
  • جداول إضافية تحتوي على شرائح من المحتوى المخصب

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

"projections" : [
  {
    "tables": [
    { "tableName": "MainTable", "generatedKeyName": "HotelId", "source": "/document/EnrichedShape" },
    { "tableName": "KeyPhrases", "generatedKeyName": "KeyPhraseId", "source": "/document/EnrichedShape/*/KeyPhrases/*" },
    { "tableName": "Entities", "generatedKeyName": "EntityId", "source": "/document/EnrichedShape/*/Entities/*" }
    ]
  }
]

علاقات التسمية

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

يعتمد Power BI على هذه المفاتيح التي تم إنشاؤها لاكتشاف العلاقات داخل الجداول. إذا كنت بحاجة إلى العمود في الجدول الفرعي المسمى بشكل مختلف، فقم بتعيين referenceKeyName الخاصية على الجدول الأصل. أحد الأمثلة على ذلك هو تعيين معرف generatedKeyName ك على جدول tblDocument و referenceKeyName ك DocumentID. سيؤدي ذلك إلى العمود الموجود في جداول tblEntities و tblKeyPhrases التي تحتوي على معرف المستند المسمى DocumentID.

تعريف إسقاط كائن

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

لتعريف إسقاط كائن، استخدم الصفيف objects في خاصية الإسقاطات. يحتوي إسقاط الكائن على ثلاث خصائص مطلوبة:

الخاصية الوصف
storageContainer يحدد اسم حاوية جديدة تم إنشاؤها في Azure Storage.
تم إنشاؤهاسم المفتاح اسم العمود للمفتاح الذي يحدد كل صف بشكل فريد. يتم إنشاء القيمة من قبل النظام. إذا حذفت هذه الخاصية، إنشاء عمود تلقائيا يستخدم اسم الجدول والمفتاح كاصطلاح التسمية.
المصدر مسار إلى عقدة في شجرة إثراء تمثل جذر الإسقاط. عادة ما تكون العقدة مرجعا إلى شكل بيانات معقد يحدد بنية الفقاعة.

يعرض المثال التالي مستندات فندق فردية ، مستند فندق واحد لكل نقطة ، في حاوية تسمى hotels.

"knowledgeStore": {
  "storageConnectionString": "an Azure storage connection string",
  "projections" : [
    {
      "tables": [ ]
    },
    {
      "objects": [
        {
        "storageContainer": "hotels",
        "source": "/document/objectprojection",
        }
      ]
    },
    {
        "files": [ ]
    }
  ]
}

المصدر هو إخراج مهارة المشكل ، المسماة "كائن إسقاط". سيكون لكل نقطة تمثيل JSON لكل إدخال حقل.

    {
      "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
      "name": "#3",
      "description": null,
      "context": "/document",
      "inputs": [
        {
          "name": "HotelId",
          "source": "/document/HotelId"
        },
        {
          "name": "HotelName",
          "source": "/document/HotelName"
        },
        {
          "name": "Category",
          "source": "/document/Category"
        },
        {
          "name": "keyPhrases",
          "source": "/document/HotelId/keyphrases/*"
        },
      ],
      "outputs": [
        {
          "name": "output",
          "targetName": "objectprojection"
        }
      ]
    }

تعريف إسقاط ملف

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

لتعريف إسقاط ملف، استخدم الصفيف في files خاصية الإسقاطات. يحتوي إسقاط الملفات على ثلاث خصائص مطلوبة:

الخاصية الوصف
storageContainer يحدد اسم حاوية جديدة تم إنشاؤها في Azure Storage.
تم إنشاؤهاسم المفتاح اسم العمود للمفتاح الذي يحدد كل صف بشكل فريد. يتم إنشاء القيمة من قبل النظام. إذا حذفت هذه الخاصية، إنشاء عمود تلقائيا يستخدم اسم الجدول والمفتاح كاصطلاح التسمية.
المصدر مسار إلى عقدة في شجرة إثراء تمثل جذر الإسقاط. بالنسبة لملفات الصور ، يكون المصدر دائما /document/normalized_images/*. تعمل إسقاطات الملفات فقط على normalized_images المجموعة. لن تمر المفهرسات أو مجموعة المهارات عبر الصورة الأصلية غير العادية.

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

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

"projections": [
    {
        "tables": [ ],
        "objects": [ ],
        "files": [
            {
                "storageContainer": "myImages",
                "source": "/document/normalized_images/*"
            }
        ]
    }
]

توقعات الاختبار

يمكنك معالجة الإسقاطات باتباع الخطوات التالية:

  1. قم بتعيين خاصية storageConnectionString مخزن المعرفة إلى سلسلة اتصال حساب تخزين V2 صالحة للأغراض العامة.

  2. قم بتحديث مجموعة المهارات عن طريق إصدار طلب PUT مع تعريف الإسقاط الخاص بك في نص مجموعة المهارات.

  3. قم بتشغيل المفهرس لوضع مجموعة المهارات موضع التنفيذ.

  4. راقب تنفيذ المفهرس للتحقق من التقدم المحرز والتقاط أي أخطاء.

  5. استخدم "مستعرض التخزين" للتحقق من إنشاء الكائنات في Azure Storage.

  6. إذا كنت تقوم بعرض الجداول، فقم باستيرادها إلى Power BI لمعالجة الجداول وتصورها. في معظم الحالات، سيكتشف Power BI تلقائيا العلاقات بين الجداول.

مشكلات شائعة

يمكن أن يؤدي حذف أي من الخطوات التالية إلى نتائج غير متوقعة. تحقق من الشروط التالية إذا كان الإخراج الخاص بك لا يبدو صحيحا.

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

  • /* حذف في نهاية مسار المصدر. إذا كان مصدر الإسقاط هو ، يتم /document/projectionShape/keyPhrasesإسقاط صفيف العبارات الرئيسية ككائن / صف واحد. بدلا من ذلك، قم بتعيين مسار /document/projectionShape/keyPhrases/* المصدر للحصول على صف واحد أو كائن واحد لكل عبارة من العبارات الرئيسية.

  • أخطاء بناء جملة المسار. تكون محددات المسار حساسة لحالة الأحرف ويمكن أن تؤدي إلى تحذيرات إدخال مفقودة إذا لم تستخدم الحالة الدقيقة للمحدد.

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

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