التشغيل السريع: التعرف على الأهداف باستخدام فهم لغة المحادثة

حزمة وثائق مرجعية | (NuGet) | نماذج إضافية على GitHub

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

هام

يتوفر فهم لغة المحادثة (CLU) ل C# وC++ مع Speech SDK الإصدار 1.25 أو أحدث.

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

إعداد البيئة

يتوفر Speech SDK كحزمة NuGet وينفذ .Microsoft .NET قياسي 2.0. يمكنك تثبيت Speech SDK لاحقا في هذا الدليل، ولكن أولا تحقق من دليل تثبيت SDK لمزيد من المتطلبات.

تعيين متغيرات البيئة

يتطلب هذا المثال متغيرات البيئة المسماة LANGUAGE_KEYو SPEECH_KEYLANGUAGE_ENDPOINTو و.SPEECH_REGION

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

تلميح

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

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

  • لتعيين LANGUAGE_KEY متغير البيئة، استبدل your-language-key بأحد مفاتيح المورد الخاص بك.
  • لتعيين LANGUAGE_ENDPOINT متغير البيئة، استبدل your-language-endpoint بإحدى المناطق لموردك.
  • لتعيين SPEECH_KEY متغير البيئة، استبدل your-speech-key بأحد مفاتيح المورد الخاص بك.
  • لتعيين SPEECH_REGION متغير البيئة، استبدل your-speech-region بإحدى المناطق لموردك.
setx LANGUAGE_KEY your-language-key
setx LANGUAGE_ENDPOINT your-language-endpoint
setx SPEECH_KEY your-speech-key
setx SPEECH_REGION your-speech-region

ملاحظة

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

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

إنشاء مشروع فهم لغة المحادثة

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

انتقل إلى "Language Studio" ثم سجل الدخول باستخدام حساب Azure.

إنشاء مشروع فهم لغة المحادثة

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

  1. ضمن قسم فهم الأسئلة ولغة المحادثة في Language Studio، حدد فهم لغة المحادثة.

    A screenshot showing the location of Custom Language Understanding in the Language Studio landing page.

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

    لقطة شاشة تظهر صفحة مشروع المحادثة في Language Studio.

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

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

درّب نموذجك

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

لتدريب نموذج، تحتاج إلى بدء مهمة تدريب. إن مخرجات وظيفة التدريب الناجحة هي نموذجك المُدرب.

لبدء تدريب النموذج من داخل Language Studio:

  1. حدد Train model من القائمة الجانبية اليسرى.

  2. حدد Start a training job من القائمة العلوية.

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

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

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

  6. حدد الزر Train.

    A screenshot showing the training page in Language Studio.

  7. حدد معرف مهمة التدريب من القائمة. ستظهر لوحة حيث يمكنك التحقق من تقدم التدريب وحالة الوظيفة وتفاصيل أخرى لهذه الوظيفة.

    ملاحظة

    • فقط مهام التدريب المكتملة بنجاح ستنشئ نماذج.
    • قد يستغرق التدريب بعض الوقت بين دقيقتين وساعتين استناداً إلى عدد العبارات.
    • يمكنك تشغيل مهمة تدريب واحدة فقط في كل مرة. لا يمكنك بدء مهام تدريب أخرى داخل نفس المشروع حتى تكتمل المهمة قيد التشغيل.
    • يُحدّث التعلّم الآلي المُستخدم لتدريب النماذج بانتظام. للتدريب على إصدار تكوين سابق، حدد Select here للتغيير من صفحة Start a training job واختر إصدارا سابقا.

نشر النموذج الخاص بك

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

لتوزيع النموذج من داخل Language Studio:

  1. حدّدDeploying a model من القائمة الجانبية اليسري.

  2. حدد Add deployment لبدء تشغيل معالج Add deployment .

    لقطة الشاشة توضح زر توزيع النموذج في Language Studio.

  3. حدد Create a new deployment name لإنشاء توزيع جديد وتعيين نموذج مدرب من القائمة المنسدلة أدناه. يمكنك بخلاف ذلك تحديد الكتابة فوق اسم نشر موجود لاستبدال النموذج المستخدم من قبل توزيع موجود بشكل فعال.

    ملاحظة

    لا يتطلب استبدال توزيع موجود إجراء تغييرات على استدعاء واجهة برمجة تطبيقات التنبؤ ولكن النتائج التي تحصل عليها ستستند إلى النموذج المُعيّن حديثاً.

    A screenshot showing the screen for adding a new deployment in Language Studio.

  4. حدد نموذجا مدربا من القائمة المنسدلة Model .

  5. حدد Deploy لبدء مهمة التوزيع.

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

ستستخدم اسم المشروع واسم التوزيع في القسم التالي.

التعرف على الأهداف من ميكروفون

اتبع هذه الخطوات لإنشاء تطبيق وحدة تحكم جديد وتركيب Speech SDK.

  1. يجب فتح موجه الأوامر حيث تريد المشروع الجديد، وأنشئ تطبيق وحدة تحكم باستخدام .Microsoft .NET CLI. Program.cs يجب إنشاء الملف في دليل المشروع.

    dotnet new console
    
  2. ركب Speech SDK في مشروعك الجديد باستخدام .Microsoft .NET CLI.

    dotnet add package Microsoft.CognitiveServices.Speech
    
  3. استبدل المحتويات بـ Program.csالتعليمات البرمجية التالية.

    using Microsoft.CognitiveServices.Speech;
    using Microsoft.CognitiveServices.Speech.Audio;
    using Microsoft.CognitiveServices.Speech.Intent;
    
    class Program 
    {
        // This example requires environment variables named:
        // "LANGUAGE_KEY", "LANGUAGE_ENDPOINT", "SPEECH_KEY", and "SPEECH_REGION"
        static string languageKey = Environment.GetEnvironmentVariable("LANGUAGE_KEY");
        static string languageEndpoint = Environment.GetEnvironmentVariable("LANGUAGE_ENDPOINT");
        static string speechKey = Environment.GetEnvironmentVariable("SPEECH_KEY");
        static string speechRegion = Environment.GetEnvironmentVariable("SPEECH_REGION");
    
        // Your CLU project name and deployment name.
        static string cluProjectName = "YourProjectNameGoesHere";
        static string cluDeploymentName = "YourDeploymentNameGoesHere";
    
        async static Task Main(string[] args)
        {
            var speechConfig = SpeechConfig.FromSubscription(speechKey, speechRegion);        
            speechConfig.SpeechRecognitionLanguage = "en-US";
    
            using var audioConfig = AudioConfig.FromDefaultMicrophoneInput();
    
            // Creates an intent recognizer in the specified language using microphone as audio input.
            using (var intentRecognizer = new IntentRecognizer(speechConfig, audioConfig))
            {
                var cluModel = new ConversationalLanguageUnderstandingModel(
                    languageKey,
                    languageEndpoint,
                    cluProjectName, 
                    cluDeploymentName);
                var collection = new LanguageUnderstandingModelCollection();
                collection.Add(cluModel);
                intentRecognizer.ApplyLanguageModels(collection);
    
                Console.WriteLine("Speak into your microphone.");
                var recognitionResult = await intentRecognizer.RecognizeOnceAsync().ConfigureAwait(false);
    
                // Checks result.
                if (recognitionResult.Reason == ResultReason.RecognizedIntent)
                {
                    Console.WriteLine($"RECOGNIZED: Text={recognitionResult.Text}");
                    Console.WriteLine($"    Intent Id: {recognitionResult.IntentId}.");
                    Console.WriteLine($"    Language Understanding JSON: {recognitionResult.Properties.GetProperty(PropertyId.LanguageUnderstandingServiceResponse_JsonResult)}.");
                }
                else if (recognitionResult.Reason == ResultReason.RecognizedSpeech)
                {
                    Console.WriteLine($"RECOGNIZED: Text={recognitionResult.Text}");
                    Console.WriteLine($"    Intent not recognized.");
                }
                else if (recognitionResult.Reason == ResultReason.NoMatch)
                {
                    Console.WriteLine($"NOMATCH: Speech could not be recognized.");
                }
                else if (recognitionResult.Reason == ResultReason.Canceled)
                {
                    var cancellation = CancellationDetails.FromResult(recognitionResult);
                    Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");
    
                    if (cancellation.Reason == CancellationReason.Error)
                    {
                        Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
                        Console.WriteLine($"CANCELED: ErrorDetails={cancellation.ErrorDetails}");
                        Console.WriteLine($"CANCELED: Did you update the subscription info?");
                    }
                }
            }
        }
    }
    
  4. في Program.cs تعيين cluProjectName المتغيرين و cluDeploymentName إلى أسماء المشروع والتوزيع. للحصول على معلومات حول كيفية إنشاء مشروع CLU ونشره، راجع إنشاء مشروع Conversational Language Understanding.

  5. فيما يتعلق بتغيير لغة التعرف على الكلام، استبدل en-USبلغة أخرى معتمدة. على سبيل المثال، es-ES للغة الأسبانية (أسبانيا). اللغة الافتراضية هي en-US في حالة عدم تحديد لغة. للحصول على تفاصيل حول كيفية تحديد إحدى اللغات المتعددة التي قد يتم التحدث بها، يجب مراجعةتعريف اللغة.

يجب تشغيل تطبيق وحدة التحكم الجديد لبدء التعرف على الكلام من خلال استخدام ميكروفون:

dotnet run

هام

تأكد من تعيين LANGUAGE_KEYLANGUAGE_ENDPOINTSPEECH_KEYمتغيرات البيئة و SPEECH_REGION كما هو موضح أعلاه. إذا لم تقم بتعيين هذه المتغيرات، فستفشل العينة مع ظهور رسالة خطأ.

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

Speak into your microphone.
RECOGNIZED: Text=Turn on the lights.
    Intent Id: HomeAutomation.TurnOn.
    Language Understanding JSON: {"kind":"ConversationResult","result":{"query":"turn on the lights","prediction":{"topIntent":"HomeAutomation.TurnOn","projectKind":"Conversation","intents":[{"category":"HomeAutomation.TurnOn","confidenceScore":0.97712576},{"category":"HomeAutomation.TurnOff","confidenceScore":0.8431633},{"category":"None","confidenceScore":0.782861}],"entities":[{"category":"HomeAutomation.DeviceType","text":"lights","offset":12,"length":6,"confidenceScore":1,"extraInformation":[{"extraInformationKind":"ListKey","key":"light"}]}]}}}.

ملاحظة

تمت إضافة دعم استجابة JSON ل CLU عبر خاصية LanguageUnderstandingServiceResponse_JsonResult في Speech SDK الإصدار 1.26.

يتم إرجاع الأهداف بترتيب الاحتمال الأقل احتمالا. فيما يلي إصدار منسق من إخراج JSON حيث topIntent يكون HomeAutomation.TurnOn مع درجة ثقة 0.97712576 (97.71٪). قد يكون HomeAutomation.TurnOff الهدف الثاني الأكثر احتمالا مع درجة ثقة 0.8985081 (84.31٪).

{
  "kind": "ConversationResult",
  "result": {
    "query": "turn on the lights",
    "prediction": {
      "topIntent": "HomeAutomation.TurnOn",
      "projectKind": "Conversation",
      "intents": [
        {
          "category": "HomeAutomation.TurnOn",
          "confidenceScore": 0.97712576
        },
        {
          "category": "HomeAutomation.TurnOff",
          "confidenceScore": 0.8431633
        },
        {
          "category": "None",
          "confidenceScore": 0.782861
        }
      ],
      "entities": [
        {
          "category": "HomeAutomation.DeviceType",
          "text": "lights",
          "offset": 12,
          "length": 6,
          "confidenceScore": 1,
          "extraInformation": [
            {
              "extraInformationKind": "ListKey",
              "key": "light"
            }
          ]
        }
      ]
    }
  }
}

الملاحظات

الآن بعد أن أكملت عملية التشغيل السريع، إليك بعض الاعتبارات الإضافية:

  • يستخدم هذا المثال عملية RecognizeOnceAsyncلنسخ الأقوال التي تصل إلى 30 ثانية، أو حتى يتم الكشف عن الصمت. للحصول على معلومات حول التعرّف المستمر على المقاطع الصوتية الأطول، بما يشمل المحادثات متعددة اللغات، راجع كيفية التعرّف على الكلام.
  • للتمكن من معرفة الكلام من ملف صوتي، يجب استخدامFromWavFileInput بدلا من FromDefaultMicrophoneInput:
    using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
    
  • بالنسبة للملفات الصوتية المضغوطة مثل MP4، ركب GStreamer واستخدم PullAudioInputStream أو PushAudioInputStream. لمزيد من المعلومات، يجب مراجعةكيفية استخدام صوت الإدخال المضغوط.

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

يمكنك استخدام مدخل Microsoft Azure أو واجهة سطر الأوامر Azure (CLI) لإزالة موارد اللغة والكلام التي أنشأتها.

حزمة وثائق مرجعية | (NuGet) | نماذج إضافية على GitHub

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

هام

يتوفر فهم لغة المحادثة (CLU) ل C# وC++ مع Speech SDK الإصدار 1.25 أو أحدث.

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

إعداد البيئة

يتوفر Speech SDK كحزمة NuGet وينفذ .Microsoft .NET قياسي 2.0. يمكنك تثبيت Speech SDK لاحقا في هذا الدليل، ولكن تحقق أولا من دليل تثبيت SDK للحصول على أي متطلبات أخرى.

تعيين متغيرات البيئة

يتطلب هذا المثال متغيرات البيئة المسماة LANGUAGE_KEYو SPEECH_KEYLANGUAGE_ENDPOINTو و.SPEECH_REGION

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

تلميح

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

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

  • لتعيين LANGUAGE_KEY متغير البيئة، استبدل your-language-key بأحد مفاتيح المورد الخاص بك.
  • لتعيين LANGUAGE_ENDPOINT متغير البيئة، استبدل your-language-endpoint بإحدى المناطق لموردك.
  • لتعيين SPEECH_KEY متغير البيئة، استبدل your-speech-key بأحد مفاتيح المورد الخاص بك.
  • لتعيين SPEECH_REGION متغير البيئة، استبدل your-speech-region بإحدى المناطق لموردك.
setx LANGUAGE_KEY your-language-key
setx LANGUAGE_ENDPOINT your-language-endpoint
setx SPEECH_KEY your-speech-key
setx SPEECH_REGION your-speech-region

ملاحظة

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

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

إنشاء مشروع Conversational Language Understanding

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

انتقل إلى "Language Studio" ثم سجل الدخول باستخدام حساب Azure.

إنشاء مشروع فهم لغة المحادثة

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

  1. ضمن قسم فهم الأسئلة ولغة المحادثة في Language Studio، حدد فهم لغة المحادثة.

    A screenshot showing the location of Custom Language Understanding in the Language Studio landing page.

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

    لقطة شاشة تظهر صفحة مشروع المحادثة في Language Studio.

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

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

درّب نموذجك

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

لتدريب نموذج، تحتاج إلى بدء مهمة تدريب. إن مخرجات وظيفة التدريب الناجحة هي نموذجك المُدرب.

لبدء تدريب النموذج من داخل Language Studio:

  1. حدد Train model من القائمة الجانبية اليسرى.

  2. حدد Start a training job من القائمة العلوية.

  3. حدد Train a new model وأدخل اسم نموذج جديد في مربع النص. وإلا لاستبدال نموذج موجود بنموذج مدرب على البيانات الجديدة، حدد الكتابة فوق نموذج موجود ثم حدد نموذجا موجودا. الكتابة فوق نموذج مُدرّب أمر لا رجعة فيه، ولكنه لن يؤثر على النماذج الموزعة حتى توزع النموذج الجديد.

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

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

  6. حدد الزر Train.

    A screenshot showing the training page in Language Studio.

  7. حدد معرف مهمة التدريب من القائمة. ستظهر لوحة حيث يمكنك التحقق من تقدم التدريب وحالة الوظيفة وتفاصيل أخرى لهذه الوظيفة.

    ملاحظة

    • فقط مهام التدريب المكتملة بنجاح ستنشئ نماذج.
    • قد يستغرق التدريب بعض الوقت بين دقيقتين وساعتين استناداً إلى عدد العبارات.
    • يمكنك تشغيل مهمة تدريب واحدة فقط في كل مرة. لا يمكنك بدء مهام تدريب أخرى داخل نفس المشروع حتى تكتمل المهمة قيد التشغيل.
    • يُحدّث التعلّم الآلي المُستخدم لتدريب النماذج بانتظام. للتدريب على إصدار تكوين سابق، حدد Select here للتغيير من صفحة Start a training job واختر إصدارا سابقا.

نشر النموذج الخاص بك

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

لتوزيع النموذج من داخل Language Studio:

  1. حدّدDeploying a model من القائمة الجانبية اليسري.

  2. حدد Add deployment لبدء تشغيل معالج Add deployment .

    لقطة الشاشة توضح زر توزيع النموذج في Language Studio.

  3. حدد Create a new deployment name لإنشاء توزيع جديد وتعيين نموذج مدرب من القائمة المنسدلة أدناه. يمكنك بخلاف ذلك تحديد الكتابة فوق اسم نشر موجود لاستبدال النموذج المستخدم من قبل توزيع موجود بشكل فعال.

    ملاحظة

    لا يتطلب استبدال توزيع موجود إجراء تغييرات على استدعاء واجهة برمجة تطبيقات التنبؤ ولكن النتائج التي تحصل عليها ستستند إلى النموذج المُعيّن حديثاً.

    A screenshot showing the screen for adding a new deployment in Language Studio.

  4. حدد نموذجا مدربا من القائمة المنسدلة Model .

  5. حدد Deploy لبدء مهمة التوزيع.

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

ستستخدم اسم المشروع واسم التوزيع في القسم التالي.

التعرف على الأهداف من ميكروفون

اتبع هذه الخطوات لإنشاء تطبيق وحدة تحكم جديد وتركيب Speech SDK.

  1. إنشاء مشروع وحدة تحكم C++ جديد في Visual Studio Community 2022 المسمى SpeechRecognition.

  2. ركب Speech SDK في مشروعك الجديد باستخدام .Microsoft .NET CLI

    Install-Package Microsoft.CognitiveServices.Speech
    
  3. استبدال المحتويات بـ SpeechRecognition.cppالتعليمات البرمجية التالية:

    #include <iostream> 
    #include <stdlib.h>
    #include <speechapi_cxx.h>
    
    using namespace Microsoft::CognitiveServices::Speech;
    using namespace Microsoft::CognitiveServices::Speech::Audio;
    using namespace Microsoft::CognitiveServices::Speech::Intent;
    
    std::string GetEnvironmentVariable(const char* name);
    
    int main()
    {
        // This example requires environment variables named:
        // "LANGUAGE_KEY", "LANGUAGE_ENDPOINT", "SPEECH_KEY", and "SPEECH_REGION"
        auto languageKey = GetEnvironmentVariable("LANGUAGE_KEY");
        auto languageEndpoint = GetEnvironmentVariable("LANGUAGE_ENDPOINT");
        auto speechKey = GetEnvironmentVariable("SPEECH_KEY");
        auto speechRegion = GetEnvironmentVariable("SPEECH_REGION");
    
        auto cluProjectName = "YourProjectNameGoesHere";
        auto cluDeploymentName = "YourDeploymentNameGoesHere";
    
        if ((size(languageKey) == 0) || (size(languageEndpoint) == 0) || (size(speechKey) == 0) || (size(speechRegion) == 0)) {
            std::cout << "Please set LANGUAGE_KEY, LANGUAGE_ENDPOINT, SPEECH_KEY, and SPEECH_REGION environment variables." << std::endl;
            return -1;
        }
    
        auto speechConfig = SpeechConfig::FromSubscription(speechKey, speechRegion);
    
        speechConfig->SetSpeechRecognitionLanguage("en-US");
    
        auto audioConfig = AudioConfig::FromDefaultMicrophoneInput();
        auto intentRecognizer = IntentRecognizer::FromConfig(speechConfig, audioConfig);
    
        std::vector<std::shared_ptr<LanguageUnderstandingModel>> models;
    
        auto cluModel = ConversationalLanguageUnderstandingModel::FromResource(
            languageKey,
            languageEndpoint,
            cluProjectName,
            cluDeploymentName);
    
        models.push_back(cluModel);
        intentRecognizer->ApplyLanguageModels(models);
    
        std::cout << "Speak into your microphone.\n";
        auto result = intentRecognizer->RecognizeOnceAsync().get();
    
        if (result->Reason == ResultReason::RecognizedIntent)
        {
            std::cout << "RECOGNIZED: Text=" << result->Text << std::endl;
            std::cout << "  Intent Id: " << result->IntentId << std::endl;
            std::cout << "  Intent Service JSON: " << result->Properties.GetProperty(PropertyId::LanguageUnderstandingServiceResponse_JsonResult) << std::endl;
        }
        else if (result->Reason == ResultReason::RecognizedSpeech)
        {
            std::cout << "RECOGNIZED: Text=" << result->Text << " (intent could not be recognized)" << std::endl;
        }
        else if (result->Reason == ResultReason::NoMatch)
        {
            std::cout << "NOMATCH: Speech could not be recognized." << std::endl;
        }
        else if (result->Reason == ResultReason::Canceled)
        {
            auto cancellation = CancellationDetails::FromResult(result);
            std::cout << "CANCELED: Reason=" << (int)cancellation->Reason << std::endl;
    
            if (cancellation->Reason == CancellationReason::Error)
            {
                std::cout << "CANCELED: ErrorCode=" << (int)cancellation->ErrorCode << std::endl;
                std::cout << "CANCELED: ErrorDetails=" << cancellation->ErrorDetails << std::endl;
                std::cout << "CANCELED: Did you update the subscription info?" << std::endl;
            }
        }
    }
    
    std::string GetEnvironmentVariable(const char* name)
    {
    #if defined(_MSC_VER)
        size_t requiredSize = 0;
        (void)getenv_s(&requiredSize, nullptr, 0, name);
        if (requiredSize == 0)
        {
            return "";
        }
        auto buffer = std::make_unique<char[]>(requiredSize);
        (void)getenv_s(&requiredSize, buffer.get(), requiredSize, name);
        return buffer.get();
    #else
        auto value = getenv(name);
        return value ? value : "";
    #endif
    }
    
  4. في SpeechRecognition.cpp تعيين cluProjectName المتغيرين و cluDeploymentName إلى أسماء المشروع والتوزيع. للحصول على معلومات حول كيفية إنشاء مشروع CLU ونشره، راجع إنشاء مشروع Conversational Language Understanding.

  5. فيما يتعلق بتغيير لغة التعرف على الكلام، استبدل en-USبلغة أخرى معتمدة. على سبيل المثال، es-ES للغة الأسبانية (أسبانيا). اللغة الافتراضية هي en-US في حالة عدم تحديد لغة. للحصول على تفاصيل حول كيفية تحديد إحدى اللغات المتعددة التي قد يتم التحدث بها، يجب مراجعةتعريف اللغة.

قم بإنشاء وتشغيلتطبيق وحدة التحكم الجديد لبدء التعرف على الكلام من ميكروفون.

هام

تأكد من تعيين LANGUAGE_KEYLANGUAGE_ENDPOINTSPEECH_KEYمتغيرات البيئة و SPEECH_REGION كما هو موضح أعلاه. إذا لم تقم بتعيين هذه المتغيرات، فستفشل العينة مع ظهور رسالة خطأ.

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

Speak into your microphone.
RECOGNIZED: Text=Turn on the lights.
    Intent Id: HomeAutomation.TurnOn.
    Language Understanding JSON: {"kind":"ConversationResult","result":{"query":"turn on the lights","prediction":{"topIntent":"HomeAutomation.TurnOn","projectKind":"Conversation","intents":[{"category":"HomeAutomation.TurnOn","confidenceScore":0.97712576},{"category":"HomeAutomation.TurnOff","confidenceScore":0.8431633},{"category":"None","confidenceScore":0.782861}],"entities":[{"category":"HomeAutomation.DeviceType","text":"lights","offset":12,"length":6,"confidenceScore":1,"extraInformation":[{"extraInformationKind":"ListKey","key":"light"}]}]}}}.

ملاحظة

تمت إضافة دعم استجابة JSON ل CLU عبر خاصية LanguageUnderstandingServiceResponse_JsonResult في Speech SDK الإصدار 1.26.

يتم إرجاع الأهداف بترتيب الاحتمال الأقل احتمالا. فيما يلي إصدار منسق من إخراج JSON حيث topIntent يكون HomeAutomation.TurnOn مع درجة ثقة 0.97712576 (97.71٪). قد يكون HomeAutomation.TurnOff الهدف الثاني الأكثر احتمالا مع درجة ثقة 0.8985081 (84.31٪).

{
  "kind": "ConversationResult",
  "result": {
    "query": "turn on the lights",
    "prediction": {
      "topIntent": "HomeAutomation.TurnOn",
      "projectKind": "Conversation",
      "intents": [
        {
          "category": "HomeAutomation.TurnOn",
          "confidenceScore": 0.97712576
        },
        {
          "category": "HomeAutomation.TurnOff",
          "confidenceScore": 0.8431633
        },
        {
          "category": "None",
          "confidenceScore": 0.782861
        }
      ],
      "entities": [
        {
          "category": "HomeAutomation.DeviceType",
          "text": "lights",
          "offset": 12,
          "length": 6,
          "confidenceScore": 1,
          "extraInformation": [
            {
              "extraInformationKind": "ListKey",
              "key": "light"
            }
          ]
        }
      ]
    }
  }
}

الملاحظات

الآن بعد أن أكملت عملية التشغيل السريع، إليك بعض الاعتبارات الإضافية:

  • يستخدم هذا المثال عملية RecognizeOnceAsyncلنسخ الأقوال التي تصل إلى 30 ثانية، أو حتى يتم الكشف عن الصمت. للحصول على معلومات حول التعرّف المستمر على المقاطع الصوتية الأطول، بما يشمل المحادثات متعددة اللغات، راجع كيفية التعرّف على الكلام.
  • للتمكن من معرفة الكلام من ملف صوتي، يجب استخدامFromWavFileInput بدلا من FromDefaultMicrophoneInput:
    auto audioInput = AudioConfig::FromWavFileInput("YourAudioFile.wav");
    
  • بالنسبة للملفات الصوتية المضغوطة مثل MP4، ركب GStreamer واستخدم PullAudioInputStream أو PushAudioInputStream. لمزيد من المعلومات، يجب مراجعةكيفية استخدام صوت الإدخال المضغوط.

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

يمكنك استخدام مدخل Microsoft Azure أو واجهة سطر الأوامر Azure (CLI) لإزالة موارد اللغة والكلام التي أنشأتها.

الوثائق المرجعية | عينات إضافية على GitHub

لا يدعم Speech SDK ل Java التعرف على الهدف مع فهم لغة المحادثة (CLU). يرجى تحديد لغة برمجة أخرى أو مرجع Java والعينات المرتبطة من بداية هذه المقالة.

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