بداية سريعة: مكتبات عملاء فهم اللغة (LUIS) وواجهة برمجة تطبيقات REST

هام

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

يمكنك إنشاء تطبيق Azure LUIS للذكاء الاصطناعي (AI) والاستعلام عنه باستخدام مكتبات عملاء LUIS SDK باستخدام هذه البداية السريعة باستخدام C # أو Python أو JavaScript. يمكنك أيضًا استخدام cURL لإرسال الطلبات باستخدام واجهة برمجة تطبيقات REST.

يمكّنك فهم اللغة (LUIS) من تطبيق معالجة اللغة الطبيعية (NLP) على نص المحادثة واللغة الطبيعية للمستخدم للتنبؤ بالمعنى العامّ واستخراج المعلومات ذات الصلة والمفصلة.

  • تتيح لك مكتبة عميل التأليف وواجهة برمجة تطبيقات REST إنشاء تطبيق LUIS وتحريره وتدريبه ونشره.
  • تتيح لك مكتبة عميل وقت تشغيل التنبؤ وواجهة برمجة تطبيقات REST الاستعلام عن التطبيق المنشور.

استخدام مكتبات العملاءLanguage Understanding ل .NETإلى:

  • إنشاء تطبيق
  • إضافة هدف، كياناً تعلّمته الآلة، مع ألفاظ نموذجية
  • التدريب على التطبيق ونشره
  • وقت تشغيل التنبؤ بالاستعلام

الوثائق المرجعية | التأليف والتوقع Library source code | التأليف والتوقع NuGet | عينة C#‎

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

  • الإصدار الحالي من NET Coreو.NET Core CLI.
  • اشتراك Azure - إنشاء اشتراك مجانًا
  • بمجرد اشتراكك في Azure، أنشئمورد تأليف"Language Understanding" في مدخل Microsoft Azure للحصول على المفتاح ونقطة النهاية. انتظر حتى يتم نشرها وانقر فوق زرالانتقال إلى المورد.
    • ستحتاج إلى المفتاح ونقطة النهاية من المورد الذيتنشئه لتوصيل التطبيق الخاص بك بتأليف "Language Understanding ". ستلصق المفتاح ونقطة النهاية في التعليمات البرمجية أدناه لاحقًا في التشغيل السريع. يمكنك استخدام طبقة التسعير المجانيةF0 () لتجربة الخدمة.

الإعداد

إنشاء تطبيق C# جديد

إنشاء تطبيق جديد.NET Core في المحرر المفضل لديك أو IDE.

  1. في نافذة وحدة تحكم، مثل(cmd أو PowerShell أو Bash)، استخدم الأمر dotnet new لإنشاء تطبيق وحدة تحكم جديد يحمل الاسم language-understanding-quickstart. يقوم هذا الأمر بإنشاء مشروع "Hello World" بسيط بلغة C# باستخدام ملف مصدر واحد: Program.cs.

    dotnet new console -n language-understanding-quickstart
    
  2. غيّر دليلك إلى مجلد التطبيق المنشأ حديثاً.

    cd language-understanding-quickstart
    
  3. يمكنك إنشاء التطبيق باستخدام:

    dotnet build
    

    يجب ألا يحتوي إخراج البناء على تحذيرات أو أخطاء.

    ...
    Build succeeded.
     0 Warning(s)
     0 Error(s)
    ...
    

تثبيت مكتبات NuGet

ضمن دليل التطبيق، قم بتثبيت مكتبة عميل Language Understanding لـ .NET باستخدام الأمر التالي:

dotnet add package Microsoft.Azure.CognitiveServices.Language.LUIS.Authoring --version 3.2.0-preview.3
dotnet add package Microsoft.Azure.CognitiveServices.Language.LUIS.Runtime --version 3.1.0-preview.1

تأليف نموذج العنصر

عميل التأليف Language Understanding (LUIS) هو عنصر LUISAuthoringClient الذي يصادق على Azure الذي يحتوي على مفتاح التأليف الخاص بك.

أمثلة الرموز للتأليف

بمجرد إنشاء العميل، استخدم هذا العميل للوصول إلى الوظائف بما في ذلك:

نموذج عنصر التوقع

عميل وقت التشغيل التوقع Language Understanding (LUIS) هو عنصر LUISAuthoringClient الذي يصادق على Azure الذي يحتوي على مفتاح التأليف الخاص بك.

أمثلة الرموز لوقت تشغيل التوقع

بمجرد إنشاء العميل، استخدم هذا العميل للوصول إلى الوظائف بما في ذلك:

أمثلة على التعليمات البرمجية

توضح لك هذه المقتطفات البرمجية كيفية القيام بما يلي باستخدام مكتبة عميل "فهم اللغة" (LUIS) لـ python:

إضافة التبعيات

من دليل المشروع، افتح الملف ⁧⁧Program.cs في المحرر المفضل لديك أو IDE. استبدال الرموز الموجودة using معusing التوجيهات التالية:

using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Azure.CognitiveServices.Language.LUIS.Authoring;
using Microsoft.Azure.CognitiveServices.Language.LUIS.Authoring.Models;
using Microsoft.Azure.CognitiveServices.Language.LUIS.Runtime;
using Microsoft.Azure.CognitiveServices.Language.LUIS.Runtime.Models;
using Newtonsoft.Json;

إضافة رمز أساسي

  1. تغيير توقيع Main الطريقة للسماح بالمكالمات المتزامنة:

    public static async Task Main()
    
  2. إضافة باقي الرموز في طريقة Main للفئة Program ما لم يتم تحديد خلاف ذلك.

إنشاء متغيرات للتطبيق

إنشاء مجموعتين من المتغيرات: المجموعة الأولى التي تقوم بتغييرها، والمجموعة الثانية كما تظهر في نموذج الرموز.

هام

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

  1. إنشاء متغيرات للاحتفاظ بمفتاح التأليف وأسماء الموارد.

    var key = "PASTE_YOUR_LUIS_AUTHORING_SUBSCRIPTION_KEY_HERE";
    
    var authoringEndpoint = "PASTE_YOUR_LUIS_AUTHORING_ENDPOINT_HERE";
    var predictionEndpoint = "PASTE_YOUR_LUIS_PREDICTION_ENDPOINT_HERE";
    
  2. إنشاء متغيرات للاحتفاظ بنقاط النهاية واسم التطبيق والإصدار واسم الهدف.

    var appName = "Contoso Pizza Company";
    var versionId = "0.1";
    var intentName = "OrderPizzaIntent";
    

مصادقة العميل

إنشاء عنصر"ApiKeyServiceClientCredentials" باستخدام مفتاح خاص بك، واستخدمه مع نقطة النهاية لإنشاء عنصر "LUISAuthoringClient".

var credentials = new Microsoft.Azure.CognitiveServices.Language.LUIS.Authoring.ApiKeyServiceClientCredentials(key);
var client = new LUISAuthoringClient(credentials) { Endpoint = authoringEndpoint };

إنشاء تطبيق LUIS

يحتوي تطبيق LUIS على نموذج معالجة اللغة الطبيعية بما في ذلك الأهداف والكيانات والألفاظ النموذجية.

إنشاء "ApplicationCreateObject". الاسم والثقافة اللغوية هي خصائص لمطلوبة. استدعاء طريقة Apps.AddAsync. الاستجابة هي معرف التطبيق.

var newApp = new ApplicationCreateObject
{
    Culture = "en-us",
    Name = appName,
    InitialVersionId = versionId
};

var appId = await client.Apps.AddAsync(newApp);

إنشاء هدف للتطبيق

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

إنشاء "ModelCreateObject" مع اسم الهدف الفريد ثم تمرير معرف التطبيق معرف الإصدار وModelCreateObject إلى الطريقة "Model.AddIntentAsync". الاستجابة هي معرف الهدف.

تم ترميز قيمة intentName إلى OrderPizzaIntent كجزء من المتغيرات في قسم إنشاء متغيرات للتطبيق.

await client.Model.AddIntentAsync(appId, versionId, new ModelCreateObject()
{
    Name = intentName
});

إنشاء كيانات للتطبيق

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

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

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

ينشئ رمز إنشاء الكيان كياناً للتعلم الآلي به كيانات فرعية وميزات مطبقة على الكيانات الفرعيةQuantity.

لقطة شاشة جزئية من المدخل تظهر الكيان الذي تم إنشاؤه، وهو كيان للتعلم الآلي مع تخصصات فرعية وميزات مطبقة على التخصصات الفرعية

// Add Prebuilt entity
await client.Model.AddPrebuiltAsync(appId, versionId, new[] { "number" });

// Define ml entity with children and grandchildren
var mlEntityDefinition = new EntityModelCreateObject
{
    Name = "Pizza order",
    Children = new[]
    {
        new ChildEntityModelCreateObject
        {
            Name = "Pizza",
            Children = new[]
            {
                new ChildEntityModelCreateObject { Name = "Quantity" },
                new ChildEntityModelCreateObject { Name = "Type" },
                new ChildEntityModelCreateObject { Name = "Size" }
            }
        },
        new ChildEntityModelCreateObject
        {
            Name = "Toppings",
            Children = new[]
            {
                new ChildEntityModelCreateObject { Name = "Type" },
                new ChildEntityModelCreateObject { Name = "Quantity" }
            }
        }
    }
};

// Add ML entity 
var mlEntityId = await client.Model.AddEntityAsync(appId, versionId, mlEntityDefinition); ;

// Add phraselist feature
var phraselistId = await client.Features.AddPhraseListAsync(appId, versionId, new PhraselistCreateObject
{
    EnabledForAllModels = false,
    IsExchangeable = true,
    Name = "QuantityPhraselist",
    Phrases = "few,more,extra"
});

// Get entity and subentities
var model = await client.Model.GetEntityAsync(appId, versionId, mlEntityId);
var toppingQuantityId = GetModelGrandchild(model, "Toppings", "Quantity");
var pizzaQuantityId = GetModelGrandchild(model, "Pizza", "Quantity");

// add model as feature to subentity model
await client.Features.AddEntityFeatureAsync(appId, versionId, pizzaQuantityId, new ModelFeatureInformation { ModelName = "number", IsRequired = true });
await client.Features.AddEntityFeatureAsync(appId, versionId, toppingQuantityId, new ModelFeatureInformation { ModelName = "number"});

// add phrase list as feature to subentity model
await client.Features.AddEntityFeatureAsync(appId, versionId, toppingQuantityId, new ModelFeatureInformation { FeatureName = "QuantityPhraselist" });

استخدم الطريقة التالية للفصل للعثور على معرف الكيان الفرعي "Quantity"، من أجل تعيين الميزات لتلك الكيان الفرعي.

static Guid GetModelGrandchild(NDepthEntityExtractor model, string childName, string grandchildName)
{
    return model.Children.
        Single(c => c.Name == childName).
        Children.
        Single(c => c.Name == grandchildName).Id;
}

إضافة كلمات نموذجية للهدف

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

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

 لقطة شاشة جزئية تعرض لفظ نموذجي مصنف في المدخل.

الاتصال"Examples.AddAsync" مع معرف التطبيق، معرف الإصدار، والمثال.

// Define labeled example
var labeledExampleUtteranceWithMLEntity = new ExampleLabelObject
{
    Text = "I want two small seafood pizzas with extra cheese.",
    IntentName = intentName,
    EntityLabels = new[]
    {
        new EntityLabelObject
        {
            StartCharIndex = 7,
            EndCharIndex = 48,
            EntityName = "Pizza order",
            Children = new[]
            {
                new EntityLabelObject
                {
                    StartCharIndex = 7,
                    EndCharIndex = 30,
                    EntityName = "Pizza",
                    Children = new[]
                    {
                        new EntityLabelObject { StartCharIndex = 7, EndCharIndex = 9, EntityName = "Quantity" },
                        new EntityLabelObject { StartCharIndex = 11, EndCharIndex = 15, EntityName = "Size" },
                        new EntityLabelObject { StartCharIndex = 17, EndCharIndex = 23, EntityName = "Type" }
                    }
                },
                new EntityLabelObject
                {
                    StartCharIndex = 37,
                    EndCharIndex = 48,
                    EntityName = "Toppings",
                    Children = new[]
                    {
                        new EntityLabelObject { StartCharIndex = 37, EndCharIndex = 41, EntityName = "Quantity" },
                        new EntityLabelObject { StartCharIndex = 43, EndCharIndex = 48, EntityName = "Type" }
                    }
                }
            }
        },
    }
};

// Add an example for the entity.
// Enable nested children to allow using multiple models with the same name.
// The quantity subentity and the phraselist could have the same exact name if this is set to True
await client.Examples.AddAsync(appId, versionId, labeledExampleUtteranceWithMLEntity, enableNestedChildren: true); 

تدريب التطبيق

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

تحتاج طريقة "Train.TrainVersionAsync" إلى معرف التطبيق ومعرف الإصدار.

نموذج صغير جداً، مثل عروض التشغيل، سيتدرب بسرعة كبيرة. بالنسبة للتطبيقات على مستوى الإنتاج، يجب أن يشتمل تدريب التطبيق على استدعاء استطلاع لأسلوب "GetStatusAsync" لتحديد وقت نجاح التدريب أم لا. الاستجابة عبارة عن قائمة من عناصر"ModelTrainingInfo" بحالة منفصلة لكل عنصر. يجب أن تكون جميع العناصر ناجحة حتى يعتبر التدريب مكتملاً.

await client.Train.TrainVersionAsync(appId, versionId);
while (true)
{
    var status = await client.Train.GetStatusAsync(appId, versionId);
    if (status.All(m => m.Details.Status == "Success"))
    {
        // Assumes that we never fail, and that eventually we'll always succeed.
        break;
    }
}

نشر التطبيق إلى فتحة الإنتاج

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

await client.Apps.PublishAsync(appId, new ApplicationPublishObject { VersionId = versionId, IsStaging=false});

مصادقة عميل وقت تشغيل التوقع

استخدام عنصر"ApiKeyServiceClientCredentials" باستخدام مفتاح خاص بك، واستخدمه مع نقطة النهاية لإنشاء عنصر "LUISRuntimeClient".

تنبيه

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

var runtimeClient = new LUISRuntimeClient(credentials) { Endpoint = predictionEndpoint };

الحصول على التوقع من وقت التشغيل

إضافة الرموز التالية لإنشاء الطلب إلى وقت تشغيل التوقع.

كلام المستخدم هو جزء من كائن"predictionRequest".

تحتاج طريقة "GetSlotPredictionAsync " إلى العديد من المعلمات مثل معرف التطبيق واسم الفتحة وعنصر طلب التوقع لتلبية الطلب. الخيارات الأخرى مثل الإسهاب وإظهار جميع الأهداف والسجل اختيارية.

// Production == slot name
var request = new PredictionRequest { Query = "I want two small pepperoni pizzas with more salsa" };
var prediction = await runtimeClient.Prediction.GetSlotPredictionAsync(appId, "Production", request);
Console.Write(JsonConvert.SerializeObject(prediction, Formatting.Indented));

استجابة التوقع هي كائن JSON يشمل الهدف وأي كيانات يُعثر عليها.

{
    "query": "I want two small pepperoni pizzas with more salsa",
    "prediction": {
        "topIntent": "OrderPizzaIntent",
        "intents": {
            "OrderPizzaIntent": {
                "score": 0.753606856
            },
            "None": {
                "score": 0.119097039
            }
        },
        "entities": {
            "Pizza order": [
                {
                    "Pizza": [
                        {
                            "Quantity": [
                                2
                            ],
                            "Type": [
                                "pepperoni"
                            ],
                            "Size": [
                                "small"
                            ],
                            "$instance": {
                                "Quantity": [
                                    {
                                        "type": "builtin.number",
                                        "text": "two",
                                        "startIndex": 7,
                                        "length": 3,
                                        "score": 0.968156934,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ],
                                "Type": [
                                    {
                                        "type": "Type",
                                        "text": "pepperoni",
                                        "startIndex": 17,
                                        "length": 9,
                                        "score": 0.9345611,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ],
                                "Size": [
                                    {
                                        "type": "Size",
                                        "text": "small",
                                        "startIndex": 11,
                                        "length": 5,
                                        "score": 0.9592077,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ]
                            }
                        }
                    ],
                    "Toppings": [
                        {
                            "Type": [
                                "salsa"
                            ],
                            "Quantity": [
                                "more"
                            ],
                            "$instance": {
                                "Type": [
                                    {
                                        "type": "Type",
                                        "text": "salsa",
                                        "startIndex": 44,
                                        "length": 5,
                                        "score": 0.7292897,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ],
                                "Quantity": [
                                    {
                                        "type": "Quantity",
                                        "text": "more",
                                        "startIndex": 39,
                                        "length": 4,
                                        "score": 0.9320932,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ]
                            }
                        }
                    ],
                    "$instance": {
                        "Pizza": [
                            {
                                "type": "Pizza",
                                "text": "two small pepperoni pizzas",
                                "startIndex": 7,
                                "length": 26,
                                "score": 0.812199831,
                                "modelTypeId": 1,
                                "modelType": "Entity Extractor",
                                "recognitionSources": [
                                    "model"
                                ]
                            }
                        ],
                        "Toppings": [
                            {
                                "type": "Toppings",
                                "text": "more salsa",
                                "startIndex": 39,
                                "length": 10,
                                "score": 0.7250252,
                                "modelTypeId": 1,
                                "modelType": "Entity Extractor",
                                "recognitionSources": [
                                    "model"
                                ]
                            }
                        ]
                    }
                }
            ],
            "$instance": {
                "Pizza order": [
                    {
                        "type": "Pizza order",
                        "text": "two small pepperoni pizzas with more salsa",
                        "startIndex": 7,
                        "length": 42,
                        "score": 0.769223332,
                        "modelTypeId": 1,
                        "modelType": "Entity Extractor",
                        "recognitionSources": [
                            "model"
                        ]
                    }
                ]
            }
        }
    }
}

شغّل التطبيق

شغل التطبيق من دليل تطبيقك باستخدام الأمر dotnet run.

dotnet run

استخدم مكتبات عميلLanguage Understanding (LUIS) لـ Node.js من أجل:

  • إنشاء تطبيق
  • إضافة هدف، كياناً تعلّمته الآلة، مع ألفاظ نموذجية
  • التدريب على التطبيق ونشره
  • وقت تشغيل التنبؤ بالاستعلام

الوثائق | المرجعية تأليف وتوقع NPM | عينات

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

  • Node.js
  • اشتراك Azure - إنشاء اشتراك مجانًا
  • بمجرد اشتراكك في Azure، أنشئمورد تأليف"Language Understanding" في مدخل Microsoft Azure للحصول على المفتاح ونقطة النهاية. انتظر حتى يتم نشرها وانقر فوق زرالانتقال إلى المورد.
    • ستحتاج إلى المفتاح ونقطة النهاية من المورد الذيتنشئه لتوصيل التطبيق الخاص بك بتأليف "Language Understanding ". ستلصق المفتاح ونقطة النهاية في التعليمات البرمجية أدناه لاحقًا في التشغيل السريع. يمكنك استخدام طبقة التسعير المجانيةF0 () لتجربة الخدمة.

الإعداد

إنشاء تطبيق JavaScript الجديد

  1. في إطار وحدة تحكم إنشاء دليل جديد للتطبيق الخاص بك والانتقال إلى هذا الدليل.

    mkdir quickstart-sdk && cd quickstart-sdk
    
  2. تهيئة الدليل كتطبيق JavaScript عن طريق إنشاء ملفpackage.json.

    npm init -y
    
  3. إنشاء ملف باسم index.jsلرمز JavaScript الخاص بك.

    touch index.js
    

تثبيت مكتبات NPM

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

npm install @azure/ms-rest-js
npm install @azure/cognitiveservices-luis-authoring
npm install @azure/cognitiveservices-luis-runtime

يجب أن تبدوpackage.json كما يلي:

{
  "name": "quickstart-sdk",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@azure/cognitiveservices-luis-authoring": "^4.0.0-preview.3",
    "@azure/cognitiveservices-luis-runtime": "^5.0.0",
    "@azure/ms-rest-js": "^2.0.8"
  }
}

تأليف نموذج العنصر

عميل التأليف Language Understanding (LUIS) هو عنصر LUISAuthoringClient الذي يصادق على Azure الذي يحتوي على مفتاح التأليف الخاص بك.

أمثلة الرموز للتأليف

بمجرد إنشاء العميل، استخدم هذا العميل للوصول إلى الوظائف بما في ذلك:

نموذج عنصر التوقع

عميل التأليف Language Understanding (LUIS) هو عنصر LUISAuthoringClient الذي يصادق على Azure الذي يحتوي على مفتاح التأليف الخاص بك.

أمثلة الرموز لوقت تشغيل التوقع

بمجرد إنشاء العميل، استخدم هذا العميل للوصول إلى الوظائف بما في ذلك:

أمثلة على التعليمات البرمجية

توضح لك هذه المقتطفات البرمجية كيفية القيام بما يلي باستخدام مكتبة عميل "فهم اللغة" (LUIS) لـ python:

إضافة التبعيات

فتح index.js الملف في المحرر المفضل لديك أو IDE المسماة ثم إضافة التبعيات التالية.

const msRest = require("@azure/ms-rest-js");
const LUIS_Authoring = require("@azure/cognitiveservices-luis-authoring");
const LUIS_Prediction = require("@azure/cognitiveservices-luis-runtime");

إضافة رمز أساسي

  1. إضافة الأسلوب quickstart ودعوته. تحتوي هذه الطريقة على معظم الرمز المتبقي. يتم استدعاء هذه الطريقة في نهاية الملف.

    const quickstart = async () => {
    
        // add calls here
    
    
    }
    quickstart()
        .then(result => console.log("Done"))
        .catch(err => {
            console.log(`Error: ${err}`)
            })
    
  2. إضافة الرموز المتبقية في طريقة التشغيل السريع ما لم يتم تحديد خلاف ذلك.

إنشاء متغيرات للتطبيق

إنشاء مجموعتين من المتغيرات: المجموعة الأولى التي تقوم بتغييرها، والمجموعة الثانية كما تظهر في نموذج الرموز.

هام

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

  1. إنشاء متغيرات للاحتفاظ بمفتاح التأليف وأسماء الموارد.

    const authoringKey = 'PASTE_YOUR_LUIS_AUTHORING_SUBSCRIPTION_KEY_HERE';
    
    const authoringEndpoint = "PASTE_YOUR_LUIS_AUTHORING_ENDPOINT_HERE";
    const predictionEndpoint = "PASTE_YOUR_LUIS_PREDICTION_ENDPOINT_HERE";
    
  2. إنشاء متغيرات للاحتفاظ بنقاط النهاية واسم التطبيق والإصدار واسم الهدف.

    const appName = "Contoso Pizza Company";
    const versionId = "0.1";
    const intentName = "OrderPizzaIntent";
    

مصادقة العميل

إنشاء عنصر CognitiveServicesCredentials باستخدام مفتاح خاص بك، واستخدمه مع نقطة النهاية لإنشاء عنصر LUISAuthoringClient.

const luisAuthoringCredentials = new msRest.ApiKeyCredentials({
    inHeader: { "Ocp-Apim-Subscription-Key": authoringKey }
});
const client = new LUIS_Authoring.LUISAuthoringClient(
    luisAuthoringCredentials,
    authoringEndpoint
);

إنشاء تطبيق LUIS

يحتوي تطبيق LUIS على نموذج معالجة اللغة الطبيعية بما في ذلك الأهداف والكيانات والألفاظ النموذجية.

قم بإنشاء أسلوب "add" لكائن "AppsOperation" لإنشاء التطبيق. الاسم والثقافة اللغوية هي خصائص لمطلوبة.

const create_app_payload = {
    name: appName,
    initialVersionId: versionId,
    culture: "en-us"
};

const createAppResult = await client.apps.add(
    create_app_payload
);

const appId = createAppResult.body

إنشاء هدف للتطبيق

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

استخدام أسلوب "model.add_intent" مع اسم الهدف الفريد ثم مرر معرف التطبيق ومعرف الإصدار واسم الهدف الجديد.

تم ترميز قيمة intentName إلى OrderPizzaIntent كجزء من المتغيرات في قسم إنشاء متغيرات للتطبيق.

await client.model.addIntent(
    appId,
    versionId,
    { name: intentName }
);

إنشاء كيانات للتطبيق

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

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

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

ينشئ رمز إنشاء الكيان كياناً للتعلم الآلي به كيانات فرعية وميزات مطبقة على الكيانات الفرعيةQuantity.

لقطة شاشة جزئية من المدخل تظهر الكيان الذي تم إنشاؤه، وهو كيان للتعلم الآلي مع تخصصات فرعية وميزات مطبقة على التخصصات الفرعية

// Add Prebuilt entity
await client.model.addPrebuilt(appId, versionId, ["number"]);

// Define ml entity with children and grandchildren
const mlEntityDefinition = {
    name: "Pizza order",
    children: [
        {
            name: "Pizza",
            children: [
                { name: "Quantity" },
                { name: "Type" },
                { name: "Size" }
            ]
        },
        {
            name: "Toppings",
            children: [
                { name: "Type" },
                { name: "Quantity" }
            ]
        }
    ]
};

// Add ML entity 
const response = await client.model.addEntity(appId, versionId, mlEntityDefinition);
const mlEntityId = response.body;

// Add phraselist feature
const phraselistResponse = await client.features.addPhraseList(appId, versionId, {
    enabledForAllModels: false,
    isExchangeable: true,
    name: "QuantityPhraselist",
    phrases: "few,more,extra"
});
const phraseListId = phraselistResponse.body;

// Get entity and subentities
const model = await client.model.getEntity(appId, versionId, mlEntityId);
const toppingQuantityId = getModelGrandchild(model, "Toppings", "Quantity");
const pizzaQuantityId = getModelGrandchild(model, "Pizza", "Quantity");

// add model as feature to subentity model
await client.features.addEntityFeature(appId, versionId, pizzaQuantityId, { modelName: "number", isRequired: true });
await client.features.addEntityFeature(appId, versionId, toppingQuantityId, { modelName: "number" });

// add phrase list as feature to subentity model
await client.features.addEntityFeature(appId, versionId, toppingQuantityId, { featureName: "QuantityPhraselist" });

وضع الطريقة التالية أعلاه quickstart الطريقة للبحث عن معرف الكيان الفرعي "Quantity" لتعيين الميزات إلى ذلك الكيان الفرعي.

const getModelGrandchild = (model, childName, grandchildName) => {

    return model.children.find(c => c.name == childName).children.find(c => c.name == grandchildName).id

}

إضافة كلمات نموذجية للهدف

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

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

 لقطة شاشة جزئية تعرض لفظ نموذجي مصنف في المدخل.

اتصل بـ "examples.add" مع معرف التطبيق، معرف الإصدار، والمثال.

// Define labeled example
const labeledExampleUtteranceWithMLEntity =
{
    text: "I want two small seafood pizzas with extra cheese.",
    intentName: intentName,
    entityLabels: [
        {
            startCharIndex: 7,
            endCharIndex: 48,
            entityName: "Pizza order",
            children: [
                {
                    startCharIndex: 7,
                    endCharIndex: 30,
                    entityName: "Pizza",
                    children: [
                        {
                            startCharIndex: 7,
                            endCharIndex: 9,
                            entityName: "Quantity"
                        },
                        {
                            startCharIndex: 11,
                            endCharIndex: 15,
                            entityName: "Size"
                        },
                        {
                            startCharIndex: 17,
                            endCharIndex: 23,
                            entityName: "Type"
                        }]
                },
                {
                    startCharIndex: 37,
                    endCharIndex: 48,
                    entityName: "Toppings",
                    children: [
                        {
                            startCharIndex: 37,
                            endCharIndex: 41,
                            entityName: "Quantity"
                        },
                        {
                            startCharIndex: 43,
                            endCharIndex: 48,
                            entityName: "Type"
                        }]
                }
            ]
        }
    ]
};

console.log("Labeled Example Utterance:", JSON.stringify(labeledExampleUtteranceWithMLEntity, null, 4 ));

// Add an example for the entity.
// Enable nested children to allow using multiple models with the same name.
// The quantity subentity and the phraselist could have the same exact name if this is set to True
await client.examples.add(appId, versionId, labeledExampleUtteranceWithMLEntity, { enableNestedChildren: true });

تدريب التطبيق

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

تحتاج طريقة "train.trainVersion" إلى معرف التطبيق ومعرف الإصدار.

نموذج صغير جداً، مثل عروض التشغيل، سيتدرب بسرعة كبيرة. بالنسبة للتطبيقات على مستوى الإنتاج، يجب أن يشتمل تدريب التطبيق على استدعاء استطلاع لأسلوب "get_status" لتحديد وقت نجاح التدريب أم لا. الاستجابة عبارة عن قائمة من عناصر"ModelTrainingInfo" بحالة منفصلة لكل عنصر. يجب أن تكون جميع العناصر ناجحة حتى يعتبر التدريب مكتملاً.

await client.train.trainVersion(appId, versionId);
while (true) {
    const status = await client.train.getStatus(appId, versionId);
    if (status.every(m => m.details.status == "Success")) {
        // Assumes that we never fail, and that eventually we'll always succeed.
        break;
    }
}

نشر التطبيق إلى فتحة الإنتاج

نشر التطبيق LUIS باستخدام الطريقة "app.publish". يؤدي هذا إلى نشر الإصدار الحالي المدرب إلى الفتحة المحددة عند نقطة النهاية. يستخدم تطبيق العميل نقطة النهاية هذه لإرسال كلام المستخدم للتنبؤ بالهدف واستخراج الكيان.

await client.apps.publish(appId, { versionId: versionId, isStaging: false });

مصادقة عميل وقت تشغيل التوقع

استخدام عنصر msRest.ApiKeyCredentials مع المفتاح الخاص بك، واستخدامه مع نقطة النهاية لإنشاء عنصر "LUIS.LUISRuntimeClient".

تنبيه

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

const luisPredictionClient = new LUIS_Prediction.LUISRuntimeClient(
    luisAuthoringCredentials,
    predictionEndpoint
);

الحصول على التوقع من وقت التشغيل

إضافة الرموز التالية لإنشاء الطلب إلى وقت تشغيل التوقع. كلام المستخدم هو جزء من كائن"predictionRequest".

تحتاج طريقة "luisRuntimeClient.prediction.getSlotPrediction" إلى عدة معلمات مثل معرف التطبيق واسم الفتحة وكائن طلب التوقع لتلبية الطلب. الخيارات الأخرى مثل الإسهاب وإظهار جميع الأهداف والسجل اختيارية.

// Production == slot name
const request = { query: "I want two small pepperoni pizzas with more salsa" };
const response = await luisPredictionClient.prediction.getSlotPrediction(appId, "Production", request);
console.log(JSON.stringify(response.prediction, null, 4 ));

استجابة التوقع هي كائن JSON يشمل الهدف وأي كيانات يُعثر عليها.

{
    "query": "I want two small pepperoni pizzas with more salsa",
    "prediction": {
        "topIntent": "OrderPizzaIntent",
        "intents": {
            "OrderPizzaIntent": {
                "score": 0.753606856
            },
            "None": {
                "score": 0.119097039
            }
        },
        "entities": {
            "Pizza order": [
                {
                    "Pizza": [
                        {
                            "Quantity": [
                                2
                            ],
                            "Type": [
                                "pepperoni"
                            ],
                            "Size": [
                                "small"
                            ],
                            "$instance": {
                                "Quantity": [
                                    {
                                        "type": "builtin.number",
                                        "text": "two",
                                        "startIndex": 7,
                                        "length": 3,
                                        "score": 0.968156934,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ],
                                "Type": [
                                    {
                                        "type": "Type",
                                        "text": "pepperoni",
                                        "startIndex": 17,
                                        "length": 9,
                                        "score": 0.9345611,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ],
                                "Size": [
                                    {
                                        "type": "Size",
                                        "text": "small",
                                        "startIndex": 11,
                                        "length": 5,
                                        "score": 0.9592077,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ]
                            }
                        }
                    ],
                    "Toppings": [
                        {
                            "Type": [
                                "salsa"
                            ],
                            "Quantity": [
                                "more"
                            ],
                            "$instance": {
                                "Type": [
                                    {
                                        "type": "Type",
                                        "text": "salsa",
                                        "startIndex": 44,
                                        "length": 5,
                                        "score": 0.7292897,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ],
                                "Quantity": [
                                    {
                                        "type": "Quantity",
                                        "text": "more",
                                        "startIndex": 39,
                                        "length": 4,
                                        "score": 0.9320932,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ]
                            }
                        }
                    ],
                    "$instance": {
                        "Pizza": [
                            {
                                "type": "Pizza",
                                "text": "two small pepperoni pizzas",
                                "startIndex": 7,
                                "length": 26,
                                "score": 0.812199831,
                                "modelTypeId": 1,
                                "modelType": "Entity Extractor",
                                "recognitionSources": [
                                    "model"
                                ]
                            }
                        ],
                        "Toppings": [
                            {
                                "type": "Toppings",
                                "text": "more salsa",
                                "startIndex": 39,
                                "length": 10,
                                "score": 0.7250252,
                                "modelTypeId": 1,
                                "modelType": "Entity Extractor",
                                "recognitionSources": [
                                    "model"
                                ]
                            }
                        ]
                    }
                }
            ],
            "$instance": {
                "Pizza order": [
                    {
                        "type": "Pizza order",
                        "text": "two small pepperoni pizzas with more salsa",
                        "startIndex": 7,
                        "length": 42,
                        "score": 0.769223332,
                        "modelTypeId": 1,
                        "modelType": "Entity Extractor",
                        "recognitionSources": [
                            "model"
                        ]
                    }
                ]
            }
        }
    }
}

شغّل التطبيق

شغّل التطبيق باستخدام الأمر node index.js المُتاح على ملف التشغيل السريع.

node index.js

استخدام مكتبات العملاءLanguage Understanding ل Python إلى:

  • إنشاء تطبيق
  • إضافة هدف، كياناً تعلّمته الآلة، مع ألفاظ نموذجية
  • التدريب على التطبيق ونشره
  • وقت تشغيل التنبؤ بالاستعلام

الوثائق المرجعية | التأليف والتوقع التعليمة البرمجية المصدر للمكتبة | الحزمة (Pypi) | عينات

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

  • الإصدار الحالي من Python 3.x.
  • اشتراك Azure - إنشاء اشتراك مجانًا
  • بمجرد اشتراكك في Azure، أنشئمورد تأليف"Language Understanding" في مدخل Microsoft Azure للحصول على المفتاح ونقطة النهاية. انتظر حتى يتم نشرها وانقر فوق زرالانتقال إلى المورد.
    • ستحتاج إلى المفتاح ونقطة النهاية من المورد الذيتنشئه لتوصيل التطبيق الخاص بك بتأليف "Language Understanding ". ستلصق المفتاح ونقطة النهاية في التعليمات البرمجية أدناه لاحقًا في التشغيل السريع. يمكنك استخدام طبقة التسعير المجانيةF0 () لتجربة الخدمة.

الإعداد

إنشاء تطبيق Python جديد

  1. في إطار وحدة تحكم إنشاء دليل جديد للتطبيق الخاص بك والانتقال إلى هذا الدليل.

    mkdir quickstart-sdk && cd quickstart-sdk
    
  2. إنشاء ملف باسم authoring_and_predict.py لرمز Python الخاص بك.

    touch authoring_and_predict.py
    

يمكنك تثبيت مكتبة العميل مع Pip

في دليل التطبيق، قم بتثبيت مكتبة العميل Language Understanding (LUIS) لـ Python باستخدام الأمر التالي:

pip install azure-cognitiveservices-language-luis

تأليف نموذج العنصر

عميل التأليف Language Understanding (LUIS) هو عنصر LUISAuthoringClient الذي يصادق على Azure الذي يحتوي على مفتاح التأليف الخاص بك.

أمثلة الرموز للتأليف

بمجرد إنشاء العميل، استخدم هذا العميل للوصول إلى الوظائف بما في ذلك:

نموذج عنصر التوقع

عميل وقت التشغيل التوقع Language Understanding (LUIS) هو عنصر LUISAuthoringClient الذي يصادق على Azure الذي يحتوي على مفتاح التأليف الخاص بك.

أمثلة الرموز لوقت تشغيل التوقع

بمجرد إنشاء العميل، استخدم هذا العميل للوصول إلى الوظائف بما في ذلك:

أمثلة على التعليمات البرمجية

توضح لك هذه المقتطفات البرمجية كيفية القيام بما يلي باستخدام مكتبة عميل "فهم اللغة" (LUIS) لـ python:

إضافة التبعيات

أضف مكتبات العميل إلى ملف Python.

from azure.cognitiveservices.language.luis.authoring import LUISAuthoringClient
from azure.cognitiveservices.language.luis.authoring.models import ApplicationCreateObject
from azure.cognitiveservices.language.luis.runtime import LUISRuntimeClient
from msrest.authentication import CognitiveServicesCredentials
from functools import reduce

import json, time, uuid

إضافة رمز أساسي

  1. إضافة الأسلوب quickstart ودعوته. تحتوي هذه الطريقة على معظم الرمز المتبقي. يتم استدعاء هذه الطريقة في نهاية الملف.

    def quickstart():
    
        # add calls here, remember to indent properly
    
    quickstart()
    
  2. إضافة الرموز المتبقية في طريقة التشغيل السريع ما لم يتم تحديد خلاف ذلك.

إنشاء متغيرات للتطبيق

إنشاء مجموعتين من المتغيرات: المجموعة الأولى التي تقوم بتغييرها، والمجموعة الثانية كما تظهر في نموذج الرموز.

هام

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

  1. إنشاء متغيرات للاحتفاظ بمفتاح التأليف وأسماء الموارد.

    authoringKey = 'PASTE_YOUR_LUIS_AUTHORING_SUBSCRIPTION_KEY_HERE'
    authoringEndpoint = 'PASTE_YOUR_LUIS_AUTHORING_ENDPOINT_HERE'
    predictionKey = 'PASTE_YOUR_LUIS_PREDICTION_SUBSCRIPTION_KEY_HERE'
    predictionEndpoint = 'PASTE_YOUR_LUIS_PREDICTION_ENDPOINT_HERE'
    
  2. إنشاء متغيرات للاحتفاظ بنقاط النهاية واسم التطبيق والإصدار واسم الهدف.

    # We use a UUID to avoid name collisions.
    appName = "Contoso Pizza Company " + str(uuid.uuid4())
    versionId = "0.1"
    intentName = "OrderPizzaIntent"
    

مصادقة العميل

إنشاء كائن CognitiveServicesCredentials باستخدام المفتاح الخاص بك، واستخدامه مع نقطة النهاية لإنشاء كائن LUISAuthoringClient .

client = LUISAuthoringClient(authoringEndpoint, CognitiveServicesCredentials(authoringKey))

إنشاء تطبيق LUIS

يحتوي تطبيق LUIS على نموذج معالجة اللغة الطبيعية بما في ذلك الأهداف والكيانات والألفاظ النموذجية.

قم بإنشاء أسلوب "add" لكائن "AppsOperation" لإنشاء التطبيق. الاسم والثقافة اللغوية هي خصائص لمطلوبة.

# define app basics
appDefinition = ApplicationCreateObject (name=appName, initial_version_id=versionId, culture='en-us')

# create app
app_id = client.apps.add(appDefinition)

# get app id - necessary for all other changes
print("Created LUIS app with ID {}".format(app_id))

إنشاء هدف للتطبيق

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

استخدام أسلوب "model.add_intent" مع اسم الهدف الفريد ثم مرر معرف التطبيق ومعرف الإصدار واسم الهدف الجديد.

تم ترميز قيمة intentName إلى OrderPizzaIntent كجزء من المتغيرات في قسم إنشاء متغيرات للتطبيق.

client.model.add_intent(app_id, versionId, intentName)

إنشاء كيانات للتطبيق

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

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

تعد طرق الإنشاء للكيانات جزءاً من فئة "ModelOperations". لكل نوع كيان نموذج عنصر تحويل البيانات الخاص به.

ينشئ رمز إنشاء الكيان كياناً للتعلم الآلي به كيانات فرعية وميزات مطبقة على الكيانات الفرعيةQuantity.

لقطة شاشة جزئية من المدخل تظهر الكيان الذي تم إنشاؤه، وهو كيان للتعلم الآلي مع تخصصات فرعية وميزات مطبقة على التخصصات الفرعية

# Add Prebuilt entity
client.model.add_prebuilt(app_id, versionId, prebuilt_extractor_names=["number"])

# define machine-learned entity
mlEntityDefinition = [
{
    "name": "Pizza",
    "children": [
        { "name": "Quantity" },
        { "name": "Type" },
        { "name": "Size" }
    ]
},
{
    "name": "Toppings",
    "children": [
        { "name": "Type" },
        { "name": "Quantity" }
    ]
}]

# add entity to app
modelId = client.model.add_entity(app_id, versionId, name="Pizza order", children=mlEntityDefinition)

# define phraselist - add phrases as significant vocabulary to app
phraseList = {
    "enabledForAllModels": False,
    "isExchangeable": True,
    "name": "QuantityPhraselist",
    "phrases": "few,more,extra"
}

# add phrase list to app
phraseListId = client.features.add_phrase_list(app_id, versionId, phraseList)

# Get entity and subentities
modelObject = client.model.get_entity(app_id, versionId, modelId)
toppingQuantityId = get_grandchild_id(modelObject, "Toppings", "Quantity")
pizzaQuantityId = get_grandchild_id(modelObject, "Pizza", "Quantity")

# add model as feature to subentity model
prebuiltFeatureRequiredDefinition = { "model_name": "number", "is_required": True }
client.features.add_entity_feature(app_id, versionId, pizzaQuantityId, prebuiltFeatureRequiredDefinition)

# add model as feature to subentity model
prebuiltFeatureNotRequiredDefinition = { "model_name": "number" }
client.features.add_entity_feature(app_id, versionId, toppingQuantityId, prebuiltFeatureNotRequiredDefinition)

# add phrase list as feature to subentity model
phraseListFeatureDefinition = { "feature_name": "QuantityPhraselist", "model_name": None }
client.features.add_entity_feature(app_id, versionId, toppingQuantityId, phraseListFeatureDefinition)

وضع الطريقة التالية أعلاه quickstart الطريقة للبحث عن معرف الكيان الفرعي "Quantity" لتعيين الميزات إلى ذلك الكيان الفرعي.

def get_grandchild_id(model, childName, grandChildName):
    
    theseChildren = next(filter((lambda child: child.name == childName), model.children))
    theseGrandchildren = next(filter((lambda child: child.name == grandChildName), theseChildren.children))
    
    grandChildId = theseGrandchildren.id
    
    return grandChildId

إضافة كلمات نموذجية للهدف

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

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

 لقطة شاشة جزئية تعرض لفظ نموذجي مصنف في المدخل.

اتصل بـ "examples.add" مع معرف التطبيق، معرف الإصدار، والمثال.

# Define labeled example
labeledExampleUtteranceWithMLEntity = {
    "text": "I want two small seafood pizzas with extra cheese.",
    "intentName": intentName,
    "entityLabels": [
        {
            "startCharIndex": 7,
            "endCharIndex": 48,
            "entityName": "Pizza order",
            "children": [
                {
                    "startCharIndex": 7,
                    "endCharIndex": 30,
                    "entityName": "Pizza",
                    "children": [
                        {
                            "startCharIndex": 7,
                            "endCharIndex": 9,
                            "entityName": "Quantity"
                        },
                        {
                            "startCharIndex": 11,
                            "endCharIndex": 15,
                            "entityName": "Size"
                        },
                        {
                            "startCharIndex": 17,
                            "endCharIndex": 23,
                            "entityName": "Type"
                        }]
                },
                {
                    "startCharIndex": 37,
                    "endCharIndex": 48,
                    "entityName": "Toppings",
                    "children": [
                        {
                            "startCharIndex": 37,
                            "endCharIndex": 41,
                            "entityName": "Quantity"
                        },
                        {
                            "startCharIndex": 43,
                            "endCharIndex": 48,
                            "entityName": "Type"
                        }]
                }
            ]
        }
    ]
}

print("Labeled Example Utterance:", labeledExampleUtteranceWithMLEntity)

# Add an example for the entity.
# Enable nested children to allow using multiple models with the same name.
# The quantity subentity and the phraselist could have the same exact name if this is set to True
client.examples.add(app_id, versionId, labeledExampleUtteranceWithMLEntity, { "enableNestedChildren": True })

تدريب التطبيق

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

تحتاج طريقة "train.train_version" إلى معرف التطبيق ومعرف الإصدار.

نموذج صغير جداً، مثل عروض التشغيل، سيتدرب بسرعة كبيرة. بالنسبة للتطبيقات على مستوى الإنتاج، يجب أن يشتمل تدريب التطبيق على استدعاء استطلاع لأسلوب "get_status" لتحديد وقت نجاح التدريب أم لا. الاستجابة عبارة عن قائمة من عناصر"ModelTrainingInfo" بحالة منفصلة لكل عنصر. يجب أن تكون جميع العناصر ناجحة حتى يعتبر التدريب مكتملاً.

client.train.train_version(app_id, versionId)
waiting = True
while waiting:
    info = client.train.get_status(app_id, versionId)

    # get_status returns a list of training statuses, one for each model. Loop through them and make sure all are done.
    waiting = any(map(lambda x: 'Queued' == x.details.status or 'InProgress' == x.details.status, info))
    if waiting:
        print ("Waiting 10 seconds for training to complete...")
        time.sleep(10)
    else: 
        print ("trained")
        waiting = False

نشر التطبيق إلى فتحة الإنتاج

نشر التطبيق LUIS باستخدام الطريقة "app.publish". يؤدي هذا إلى نشر الإصدار الحالي المدرب إلى الفتحة المحددة عند نقطة النهاية. يستخدم تطبيق العميل نقطة النهاية هذه لإرسال كلام المستخدم للتنبؤ بالهدف واستخراج الكيان.

# Mark the app as public so we can query it using any prediction endpoint.
# Note: For production scenarios, you should instead assign the app to your own LUIS prediction endpoint. See:
# https://docs.microsoft.com/en-gb/azure/cognitive-services/luis/luis-how-to-azure-subscription#assign-a-resource-to-an-app
client.apps.update_settings(app_id, is_public=True)

responseEndpointInfo = client.apps.publish(app_id, versionId, is_staging=False)

مصادقة عميل وقت تشغيل التوقع

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

تنبيه

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

runtimeCredentials = CognitiveServicesCredentials(predictionKey)
clientRuntime = LUISRuntimeClient(endpoint=predictionEndpoint, credentials=runtimeCredentials)

الحصول على التوقع من وقت التشغيل

إضافة الرموز التالية لإنشاء الطلب إلى وقت تشغيل التوقع.

كلام المستخدم هو جزء من عنصر"prediction_request".

تحتاج طريقة "get_slot_prediction" إلى العديد من المعلمات مثل معرف التطبيق واسم الفتحة وعنصر طلب الكائن لتلبية الطلب. الخيارات الأخرى مثل الإسهاب وإظهار جميع الأهداف والسجل اختيارية. إرجاع الطلب عنصر PredictionResponse.

# Production == slot name
predictionRequest = { "query" : "I want two small pepperoni pizzas with more salsa" }

predictionResponse = clientRuntime.prediction.get_slot_prediction(app_id, "Production", predictionRequest)
print("Top intent: {}".format(predictionResponse.prediction.top_intent))
print("Sentiment: {}".format (predictionResponse.prediction.sentiment))
print("Intents: ")

for intent in predictionResponse.prediction.intents:
    print("\t{}".format (json.dumps (intent)))
print("Entities: {}".format (predictionResponse.prediction.entities))

استجابة التوقع هي كائن JSON يشمل الهدف وأي كيانات يُعثر عليها.

{
    "query": "I want two small pepperoni pizzas with more salsa",
    "prediction": {
        "topIntent": "OrderPizzaIntent",
        "intents": {
            "OrderPizzaIntent": {
                "score": 0.753606856
            },
            "None": {
                "score": 0.119097039
            }
        },
        "entities": {
            "Pizza order": [
                {
                    "Pizza": [
                        {
                            "Quantity": [
                                2
                            ],
                            "Type": [
                                "pepperoni"
                            ],
                            "Size": [
                                "small"
                            ],
                            "$instance": {
                                "Quantity": [
                                    {
                                        "type": "builtin.number",
                                        "text": "two",
                                        "startIndex": 7,
                                        "length": 3,
                                        "score": 0.968156934,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ],
                                "Type": [
                                    {
                                        "type": "Type",
                                        "text": "pepperoni",
                                        "startIndex": 17,
                                        "length": 9,
                                        "score": 0.9345611,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ],
                                "Size": [
                                    {
                                        "type": "Size",
                                        "text": "small",
                                        "startIndex": 11,
                                        "length": 5,
                                        "score": 0.9592077,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ]
                            }
                        }
                    ],
                    "Toppings": [
                        {
                            "Type": [
                                "salsa"
                            ],
                            "Quantity": [
                                "more"
                            ],
                            "$instance": {
                                "Type": [
                                    {
                                        "type": "Type",
                                        "text": "salsa",
                                        "startIndex": 44,
                                        "length": 5,
                                        "score": 0.7292897,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ],
                                "Quantity": [
                                    {
                                        "type": "Quantity",
                                        "text": "more",
                                        "startIndex": 39,
                                        "length": 4,
                                        "score": 0.9320932,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ]
                            }
                        }
                    ],
                    "$instance": {
                        "Pizza": [
                            {
                                "type": "Pizza",
                                "text": "two small pepperoni pizzas",
                                "startIndex": 7,
                                "length": 26,
                                "score": 0.812199831,
                                "modelTypeId": 1,
                                "modelType": "Entity Extractor",
                                "recognitionSources": [
                                    "model"
                                ]
                            }
                        ],
                        "Toppings": [
                            {
                                "type": "Toppings",
                                "text": "more salsa",
                                "startIndex": 39,
                                "length": 10,
                                "score": 0.7250252,
                                "modelTypeId": 1,
                                "modelType": "Entity Extractor",
                                "recognitionSources": [
                                    "model"
                                ]
                            }
                        ]
                    }
                }
            ],
            "$instance": {
                "Pizza order": [
                    {
                        "type": "Pizza order",
                        "text": "two small pepperoni pizzas with more salsa",
                        "startIndex": 7,
                        "length": 42,
                        "score": 0.769223332,
                        "modelTypeId": 1,
                        "modelType": "Entity Extractor",
                        "recognitionSources": [
                            "model"
                        ]
                    }
                ]
            }
        }
    }
}

شغّل التطبيق

شغّل التطبيق باستخدام الأمر python المُتاح على ملف التشغيل السريع.

python authoring_and_predict.py

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

  • أولا، ستقوم بتحميل دفعة من أمثلة الألفاظ، والتي سيتم استخدامها لتدريب نموذج تطبيق Pizza، باستخدام استدعاء REST Batch add labels .
  • بعد ذلك، ستبدأ جلسة تدريب لتطبيق Pizza، باستخدام استدعاء إصدار تطبيق REST Train.
  • وأخيرا، ستحصل على حالة جلسة التدريب لتطبيق Pizza، باستخدام استدعاء حالة تدريب REST Get version.

الوثائق المرجعية

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

  • حساب LUIS مجاني.

  • محرر نصوص مثل Visual Studio Code.

  • برنامج cURL لسطر الأوامر. تم تثبيت برنامج cURL بالفعل على macOS، ومعظم توزيعات Linux ،Windows 10 إصدار 1803 والإصدارات الأحدث.

    إذا كنت بحاجة إلى تثبيت cURL، يمكنك تنزيل cURL من صفحة تنزيل cURL.

إنشاء تطبيق بيتزا

إنشاء تطبيق Pizza.

  1. حدد pizza-app-for-luis-v6.json لإظهار صفحة GitHub للملف pizza-app-for-luis.json .
  2. انقر بزر الماوس الأيمن أو اضغط ضغطا طويلا على الزر Raw وحدد حفظ الارتباط باسم لحفظ على pizza-app-for-luis.json الكمبيوتر.
  3. سجل الدخول إلى مدخل LUIS.
  4. حدد تطبيقاتي.
  5. في صفحة تطبيقاتي، حدد + تطبيق جديد للمحادثة.
  6. حدد استيراد ك JSON.
  7. في مربع الحوار استيراد تطبيق جديد، حدد الزر اختيار ملف .
  8. حدد الملف الذي pizza-app-for-luis.json قمت بتنزيله، ثم حدد فتح.
  9. في مربع الحواراستيراد تطبيق جديد، أدخل اسما لتطبيق Pizza، ثم حدد الزر تم.

سيتم استيراد التطبيق.

إذا رأيت مربع حوار كيفية إنشاء تطبيق LUIS فعال، فقم بإغلاق مربع الحوار.

التدريب على تطبيق Pizza ونشره

يجب أن تشاهد صفحة Intents مع قائمة بالأهداف في تطبيق Pizza.

  1. في الجانب العلوي الأيمن من موقع LUIS، حدد الزر "Train".

    زر التدريب

  2. يكتمل التدريب عند تعطيل زر Train.

من أجل الحصول على توقّع LUIS في روبوت الدردشة أو تطبيق العميل الآخر، تحتاج إلى نشر التطبيق إلى نقطة النهاية التوقّع.

  1. حدد نشر في شريط التنقل العلوي الأيمن.

    لقطة شاشة لزر النشر إلى نقطة النهاية.

  2. حدد فتحة الإنتاج، ثم حدد تم.

    لقطة شاشة تظهر نشر LUIS إلى نقطة النهاية.

  3. حدد الوصول إلى عناوين URL لنقطة النهاية في الإخطار للانتقال إلى صفحة Azure Resources. لن تتمكن من رؤية عناوين URL إلا إذا كان لديك مورد تنبؤ مقترن بالتطبيق. يمكنك أيضًا الاطلاع على صفحة موارد Azure بالنقر فوق إدارة.

    لقطة شاشة تظهر رسالة توضح بأن التطبيق تم نشره.

أضف مورد تأليف إلى تطبيق Pizza

  1. حدد MANAGE.
  2. حدد موارد Azure.
  3. حدد Authoring Resource.
  4. حدد تغيير مورد التأليف.

إذا كان لديك مورد تأليف، أدخل اسم المستأجر واسم الاشتراك واسم مورد LUIS لمورد التأليف.

إذا لم يكن لديك مورد التأليف:

  1. حدد إنشاء مورد جديد.
  2. أدخل اسم المستأجر واسم المورد واسم الاشتراك واسم مجموعة موارد Azure.

تطبيق Pizza الخاص بك جاهز الآن للاستخدام.

تسجيل قيم الوصول لتطبيق Pizza

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

للعثور على هذه القيم:

  1. من صفحة Intents ، حدد MANAGE.
  2. من صفحة الإعدادات التطبيق، سجل معرف التطبيق.
  3. حدد موارد Azure.
  4. حدد Authoring Resource.
  5. من علامة التبويب مورد التأليف وموارد التنبؤ، سجل المفتاح الأساسي. تمثل هذه القيمة مفتاح التأليف لديك.
  6. سجل عنوان URL لنقطة النهاية. تمثل هذه القيمة نقطة نهاية التأليف لديك.

إنشاء ملف JSON لتدريب تطبيق بيتزا

لإنشاء ملف JSON مع ثلاثة أمثلة على التعبيرات، احفظ بيانات JSON التالية إلى ملف يسمى ExampleUtterances.JSON:

[
  {
    "text": "order a pizza",
    "intentName": "ModifyOrder",
    "entityLabels": [
      {
        "entityName": "Order",
        "startCharIndex": 6,
        "endCharIndex": 12
      }
    ]
  },
  {
    "text": "order a large pepperoni pizza",
    "intentName": "ModifyOrder",
    "entityLabels": [
      {
        "entityName": "Order",
        "startCharIndex": 6,
        "endCharIndex": 28
      },
      {
        "entityName": "FullPizzaWithModifiers",
        "startCharIndex": 6,
        "endCharIndex": 28
      },
      {
        "entityName": "PizzaType",
        "startCharIndex": 14,
        "endCharIndex": 28
      },
      {
        "entityName": "Size",
        "startCharIndex": 8,
        "endCharIndex": 12
      }
    ]
  },
  {
    "text": "I want two large pepperoni pizzas on thin crust",
    "intentName": "ModifyOrder",
    "entityLabels": [
      {
        "entityName": "Order",
        "startCharIndex": 7,
        "endCharIndex": 46
      },
      {
        "entityName": "FullPizzaWithModifiers",
        "startCharIndex": 7,
        "endCharIndex": 46
      },
      {
        "entityName": "PizzaType",
        "startCharIndex": 17,
        "endCharIndex": 32
      },
      {
        "entityName": "Size",
        "startCharIndex": 11,
        "endCharIndex": 15
      },
      {
        "entityName": "Quantity",
        "startCharIndex": 7,
        "endCharIndex": 9
      },
      {
        "entityName": "Crust",
        "startCharIndex": 37,
        "endCharIndex": 46
      }
    ]
  }
]`

أمثلة JSON للكلمات تتبع تنسيق معيَّن.

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

إذا لم يكن صفيف entityLabels فارغا، فيتعين startCharIndexendCharIndex وضع علامة على الكيان المشار إليه في entityName الحقل. الفهرس قائم على صفر. إذا بدأت أو أنهيت التسمية بمسافة في النص، فسيفشل استدعاء API لإضافة الكلمات.

إضافة أمثلة للعبارات المنطوقة

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

    curl "***YOUR-AUTHORING-ENDPOINT***/luis/authoring/v3.0-preview/apps/***YOUR-APP-ID***/versions/***YOUR-APP-VERSION***/examples?verbose=true&show-all-intents=true" ^
          --request POST ^
          --header "Content-Type:application/json" ^
          --header "Ocp-Apim-Subscription-Key: ***YOUR-AUTHORING-KEY***" ^
          --data "@ExampleUtterances.JSON"
    
  2. استبدل القيم التي تبدأ ***YOUR- بالقيم الخاصة بك.

    ‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏المعلومات الغرض
    ***YOUR-AUTHORING-ENDPOINT*** نقطة نهاية تأليف URL. على سبيل المثال، "https://REPLACE-WITH-YOUR-RESOURCE-NAME.api.cognitive.microsoft.com/"؛. تقوم بتعيين اسم المورد الخاص بك عند إنشاء المورد.
    ***YOUR-APP-ID*** معرّف تطبيق LUIS الخاص بك.
    ***YOUR-APP-VERSION*** إصدار تطبيق LUIS الخاص بك. بالنسبة لتطبيق بيتزا، يأتي رقم الإصدار "0.1" دون علامات الاقتباس.
    ***YOUR-AUTHORING-KEY*** مفتاح تأليف مكون من 32 حرفًا.

    تظهر المفاتيح والموارد المعينة في مدخل LUIS في قسم الإدارة، في صفحة Azure resources. يتوفر معرف التطبيق في نفس قسم الإدارة، في صفحة الإعدادات التطبيق.

    هام

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

  3. ابدأ موجه الأوامر (Windows) أو Terminal (macOS وLinux)، وغير الدلائل إلى نفس الدليل حيث قمت بحفظ ExampleUtterances.JSON الملف.

  4. قم بنسخ أمر cURL من المحرر، وألصقه في موجه الأوامر (Windows)، أو الوحدة الطرفية (macOS و Linux). انقر على مفتاح الإدخال لتنفيذ الأمر.

    يجب أن تتلقى الرد الآتي:

    [{"value":{"ExampleId":1255129706,"UtteranceText":"order a pizza"},"hasError":false},{"value":{"ExampleId":1255129707,"UtteranceText":"order a large pepperoni pizza"},"hasError":false},{"value":{"ExampleId":1255129708,"UtteranceText":"i want two large pepperoni pizzas on thin crust"},"hasError":false}]
    

    هذا هو الناتج المُعد للقراءة:

    [
      {
        "value": {
          "ExampleId": 1255129706,
          "UtteranceText": "order a pizza"
        },
        "hasError": false
      },
      {
        "value": {
          "ExampleId": 1255129707,
          "UtteranceText": "order a large pepperoni pizza"
        },
        "hasError": false
      },
      {
        "value": {
          "ExampleId": 1255129708,
          "UtteranceText": "i want two large pepperoni pizzas on thin crust"
        },
        "hasError": false
      }
    ]
    

تدريب نموذج تطبيق بيتزا

  1. لبدء جلسة عمل تدريب لتطبيق بيتزا، انسخ هذا الأمر إلى محرر النص:

    curl "***YOUR-AUTHORING-ENDPOINT***/luis/authoring/v3.0-preview/apps/***YOUR-APP-ID***/versions/***YOUR-APP-VERSION***/train?verbose=true&show-all-intents=true" ^
          --data "" ^
          --request POST ^
          --header "Content-Type:application/json" ^
          --header "Ocp-Apim-Subscription-Key: ***YOUR-AUTHORING-KEY***"
    
  2. كما فعلت من قبل، استبدل القيم التي تبدأ ***YOUR- بقيمك الخاصة.

  3. قم بنسخ أمر cURL من المحرر، وألصقه في موجه الأوامر (Windows)، أو الوحدة الطرفية (macOS و Linux). انقر على مفتاح الإدخال لتنفيذ الأمر.

    يجب أن تتلقى الرد الآتي:

    {"statusId":2,"status":"UpToDate"}
    

    هذا هو الناتج المُعد للقراءة:

    {
      "statusId": 2,
      "status": "UpToDate"
    }
    

معرفة حالة التدريب

  1. لمعرفة حالة التدريب لجلسة العمل، انسخ هذا الأمر إلى محرر النص:

    curl "***YOUR-AUTHORING-ENDPOINT***/luis/authoring/v3.0-preview/apps/***YOUR-APP-ID***/versions/***YOUR-APP-VERSION***/train?verbose=true&show-all-intents=true" ^
            --request GET ^
            --header "Content-Type:application/json" ^
            --header "Ocp-Apim-Subscription-Key: ***YOUR-AUTHORING-KEY***"
    
  2. كما فعلت من قبل، استبدل القيم التي تبدأ ***YOUR- بقيمك الخاصة.

  3. قم بنسخ أمر cURL من المحرر، وألصقه في موجه الأوامر (Windows)، أو الوحدة الطرفية (macOS و Linux). انقر على مفتاح الإدخال لتنفيذ الأمر.

    يجب أن تتلقى الرد الآتي:

    [{"modelId":"8eb7ad8f-5db5-4c28-819b-ca3905fffd80","details":{"statusId":2,"status":"UpToDate","exampleCount":171}},{"modelId":"6f53bc92-ae54-44ce-bc4e-010d1f8cfda0","details":{"statusId":2,"status":"UpToDate","exampleCount":171}},{"modelId":"6cb17888-ad6e-464c-82c0-d37fd1f2c4f8","details":{"statusId":2,"status":"UpToDate","exampleCount":171}},{"modelId":"a16fc4fd-1949-4e77-9de3-30369f16c3a5","details":{"statusId":2,"status":"UpToDate","exampleCount":171}},{"modelId":"6bacdb75-1889-4f93-8971-8c8995ff8960","details":{"statusId":2,"status":"UpToDate","exampleCount":171}},{"modelId":"be963f4c-4898-48d7-9eba-3c6af0867b9d","details":{"statusId":2,"status":"UpToDate","exampleCount":171}}]
    

    هذا هو الناتج المُعد للقراءة:

    [
      {
        "modelId": "8eb7ad8f-5db5-4c28-819b-ca3905fffd80",
        "details": {
          "statusId": 2,
          "status": "UpToDate",
          "exampleCount": 171
        }
      },
      {
        "modelId": "6f53bc92-ae54-44ce-bc4e-010d1f8cfda0",
        "details": {
          "statusId": 2,
          "status": "UpToDate",
          "exampleCount": 171
        }
      },
      {
        "modelId": "6cb17888-ad6e-464c-82c0-d37fd1f2c4f8",
        "details": {
          "statusId": 2,
          "status": "UpToDate",
          "exampleCount": 171
        }
      },
      {
        "modelId": "a16fc4fd-1949-4e77-9de3-30369f16c3a5",
        "details": {
          "statusId": 2,
          "status": "UpToDate",
          "exampleCount": 171
        }
      },
      {
        "modelId": "6bacdb75-1889-4f93-8971-8c8995ff8960",
        "details": {
          "statusId": 2,
          "status": "UpToDate",
          "exampleCount": 171
        }
      },
      {
        "modelId": "be963f4c-4898-48d7-9eba-3c6af0867b9d",
        "details": {
          "statusId": 2,
          "status": "UpToDate",
          "exampleCount": 171
        }
      }
    ]
    

معرفة الهدف من نقطة النهاية المتوقعة

استخدم cURL للاستعلام عن نقطة نهاية التنبؤ والحصول على نتيجة التنبؤ.

إشعار

يستخدم هذا الأمر نقطة النهاية المتوقعة لديك.

  1. نسخ هذا الأمر إلى محرر النص:

    curl "https://***YOUR-PREDICTION-ENDPOINT***/luis/prediction/v3.0/apps/***YOUR-APP-ID***/slots/production/predict" ^
          --request GET ^
          --get ^
          --data "subscription-key=***YOUR-PREDICTION-KEY***" ^
          --data "verbose=true" ^
          --data "show-all-intents=true" ^
          --data-urlencode "query=I want two large pepperoni pizzas on thin crust please"
    
  2. استبدل القيم التي تبدأ ***YOUR- بالقيم الخاصة بك.

    ‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏المعلومات الغرض
    ***YOUR-PREDICTION-ENDPOINT*** نقطة نهاية متوقعة لعنوان URL. يوجد في مدخل LUIS، صفحة موارد Azure لتطبيقك.
    على سبيل المثال، https://westus.api.cognitive.microsoft.com/
    ***YOUR-APP-ID*** معرّف التطبيق الخاص بك. يوجد في مدخل LUIS، صفحة إعدادات التطبيق الخاص بك.
    ***YOUR-PREDICTION-KEY*** المفتاح المتوقع لديك المكون من 32 حرفًا. يوجد في مدخل LUIS، صفحة موارد Azure لتطبيقك.
  3. نسخ النص إلى نافذة وحدة التحكم، والنقر على مفتاح الإدخال لتنفيذ الأمر:

  4. راجع الاستجابة المتوقعة، التي يتم إرجاعها كـ JSON:

    {"query":"I want two large pepperoni pizzas on thin crust please","prediction":{"topIntent":"ModifyOrder","intents":{"ModifyOrder":{"score":1.0},"None":{"score":8.55E-09},"Greetings":{"score":1.82222226E-09},"CancelOrder":{"score":1.47272727E-09},"Confirmation":{"score":9.8125E-10}},"entities":{"Order":[{"FullPizzaWithModifiers":[{"PizzaType":["pepperoni pizzas"],"Size":[["Large"]],"Quantity":[2],"Crust":[["Thin"]],"$instance":{"PizzaType":[{"type":"PizzaType","text":"pepperoni pizzas","startIndex":17,"length":16,"score":0.9978157,"modelTypeId":1,"modelType":"Entity Extractor","recognitionSources":["model"]}],"Size":[{"type":"SizeList","text":"large","startIndex":11,"length":5,"score":0.9984481,"modelTypeId":1,"modelType":"Entity Extractor","recognitionSources":["model"]}],"Quantity":[{"type":"builtin.number","text":"two","startIndex":7,"length":3,"score":0.999770939,"modelTypeId":1,"modelType":"Entity Extractor","recognitionSources":["model"]}],"Crust":[{"type":"CrustList","text":"thin crust","startIndex":37,"length":10,"score":0.933985531,"modelTypeId":1,"modelType":"Entity Extractor","recognitionSources":["model"]}]}}],"$instance":{"FullPizzaWithModifiers":[{"type":"FullPizzaWithModifiers","text":"two large pepperoni pizzas on thin crust","startIndex":7,"length":40,"score":0.90681237,"modelTypeId":1,"modelType":"Entity Extractor","recognitionSources":["model"]}]}}],"ToppingList":[["Pepperoni"]],"$instance":{"Order":[{"type":"Order","text":"two large pepperoni pizzas on thin crust","startIndex":7,"length":40,"score":0.9047088,"modelTypeId":1,"modelType":"Entity Extractor","recognitionSources":["model"]}],"ToppingList":[{"type":"ToppingList","text":"pepperoni","startIndex":17,"length":9,"modelTypeId":5,"modelType":"List Entity Extractor","recognitionSources":["model"]}]}}}}
    

    استجابة JSON مُعدة للقراءة:

    {
      "query": "I want two large pepperoni pizzas on thin crust please",
      "prediction": {
        "topIntent": "ModifyOrder",
        "intents": {
          "ModifyOrder": {
            "score": 1.0
          },
          "None": {
            "score": 8.55e-9
          },
          "Greetings": {
            "score": 1.82222226e-9
          },
          "CancelOrder": {
            "score": 1.47272727e-9
          },
          "Confirmation": {
            "score": 9.8125e-10
          }
        },
        "entities": {
          "Order": [
            {
              "FullPizzaWithModifiers": [
                {
                  "PizzaType": [
                    "pepperoni pizzas"
                  ],
                  "Size": [
                    [
                      "Large"
                    ]
                  ],
                  "Quantity": [
                    2
                  ],
                  "Crust": [
                    [
                      "Thin"
                    ]
                  ],
                  "$instance": {
                    "PizzaType": [
                      {
                        "type": "PizzaType",
                        "text": "pepperoni pizzas",
                        "startIndex": 17,
                        "length": 16,
                        "score": 0.9978157,
                        "modelTypeId": 1,
                        "modelType": "Entity Extractor",
                        "recognitionSources": [
                          "model"
                        ]
                      }
                    ],
                    "Size": [
                      {
                        "type": "SizeList",
                        "text": "large",
                        "startIndex": 11,
                        "length": 5,
                        "score": 0.9984481,
                        "modelTypeId": 1,
                        "modelType": "Entity Extractor",
                        "recognitionSources": [
                          "model"
                        ]
                      }
                    ],
                    "Quantity": [
                      {
                        "type": "builtin.number",
                        "text": "two",
                        "startIndex": 7,
                        "length": 3,
                        "score": 0.999770939,
                        "modelTypeId": 1,
                        "modelType": "Entity Extractor",
                        "recognitionSources": [
                          "model"
                        ]
                      }
                    ],
                    "Crust": [
                      {
                        "type": "CrustList",
                        "text": "thin crust",
                        "startIndex": 37,
                        "length": 10,
                        "score": 0.933985531,
                        "modelTypeId": 1,
                        "modelType": "Entity Extractor",
                        "recognitionSources": [
                          "model"
                        ]
                      }
                    ]
                  }
                }
              ],
              "$instance": {
                "FullPizzaWithModifiers": [
                  {
                    "type": "FullPizzaWithModifiers",
                    "text": "two large pepperoni pizzas on thin crust",
                    "startIndex": 7,
                    "length": 40,
                    "score": 0.90681237,
                    "modelTypeId": 1,
                    "modelType": "Entity Extractor",
                    "recognitionSources": [
                      "model"
                    ]
                  }
                ]
              }
            }
          ],
          "ToppingList": [
            [
              "Pepperoni"
            ]
          ],
          "$instance": {
            "Order": [
              {
                "type": "Order",
                "text": "two large pepperoni pizzas on thin crust",
                "startIndex": 7,
                "length": 40,
                "score": 0.9047088,
                "modelTypeId": 1,
                "modelType": "Entity Extractor",
                "recognitionSources": [
                  "model"
                ]
              }
            ],
            "ToppingList": [
              {
                "type": "ToppingList",
                "text": "pepperoni",
                "startIndex": 17,
                "length": 9,
                "modelTypeId": 5,
                "modelType": "List Entity Extractor",
                "recognitionSources": [
                  "model"
                ]
              }
            ]
          }
        }
      }
    }
    

تنظيف الموارد

يمكنك حذف التطبيق من مدخل LUIS وحذف موارد Azure من مدخل Microsoft Azure.

إذا كنت تستخدم واجهة برمجة تطبيقات REST، فاحذف ExampleUtterances.JSON الملف من نظام الملفات عند الانتهاء من التشغيل السريع.

استكشاف الأخطاء وإصلاحها

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

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

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