Cara mengenali niat dengan pencocokan pola bahasa sederhana

Layanan Azure AI Speech SDK memiliki fitur bawaan untuk memberikan pengenalan niat dengan pencocokan pola bahasa sederhana. Niat adalah sesuatu yang ingin dilakukan pengguna: menutup jendela, menandai kotak centang, menyisipkan beberapa teks, dll.

Dalam panduan ini, Anda menggunakan Speech SDK untuk mengembangkan aplikasi konsol C++ yang memperoleh niat dari ucapan pengguna melalui mikrofon perangkat Anda. Anda akan mempelajari cara untuk:

  • Membuat proyek Visual Studio yang mengacu pada paket Speech SDK NuGet
  • Membuat konfigurasi ucapan dan mendapatkan pengenal niat
  • Menambahkan niat dan pola melalui API Speech SDK
  • Mengenali ucapan dari mikrofon
  • Gunakan pengenalan berkelanjutan yang digerakkan oleh peristiwa dan asinkron

Kapan menggunakan pencocokan pola

Gunakan pencocokan pola jika:

  • Anda hanya tertarik untuk mencocokkan dengan ketat apa yang dikatakan pengguna. Pola-pola ini cocok lebih agresif daripada pemahaman bahasa percakapan (CLU).
  • Anda tidak memiliki akses ke model CLU, tetapi masih menginginkan niat.

Untuk informasi selengkapnya, lihat ringkasan pencocokan pola.

Prasyarat

Pastikan Anda memiliki item berikut sebelum memulai panduan ini:

Ucapan dan pola sederhana

Pola sederhana adalah fitur Speech SDK dan memerlukan sumber daya layanan Azure AI atau sumber daya Unified Speech.

Pola adalah frasa yang menyertakan Entitas di suatu tempat di dalamnya. Entitas didefinisikan dengan membungkus kata dalam kurung kurawal. Hal ini menentukan Entitas dengan ID "floorName" yang peka huruf besar-kecil:

    Take me to the {floorName}

Semua karakter khusus dan tanda baca lainnya diabaikan.

Niat ditambahkan menggunakan panggilan ke API IntentRecognizer-AddIntent>().

Membuat proyek

Buatlah proyek aplikasi konsol C# yang baru di Visual Studio 2019 dan instal SDK Speech.

Memulai dengan beberapa kode boilerplate

Mari buka Program.cs dan tambahkan beberapa kode yang berfungsi sebagai kerangka untuk proyek kita.

using System;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Intent;

namespace helloworld
{
    class Program
    {
        static void Main(string[] args)
        {
            IntentPatternMatchingWithMicrophoneAsync().Wait();
        }

        private static async Task IntentPatternMatchingWithMicrophoneAsync()
        {
            var config = SpeechConfig.FromSubscription("YOUR_SUBSCRIPTION_KEY", "YOUR_SUBSCRIPTION_REGION");
        }
    }
}

Membuat konfigurasi Ucapan

Sebelum dapat menginisialisasi IntentRecognizer objek, Anda perlu membuat konfigurasi yang menggunakan kunci dan lokasi untuk sumber daya prediksi layanan Azure AI Anda.

  • Ganti "YOUR_SUBSCRIPTION_KEY" dengan kunci prediksi layanan Azure AI Anda.
  • Ganti "YOUR_SUBSCRIPTION_REGION" dengan wilayah sumber daya layanan Azure AI Anda.

Sampel ini menggunakan metode FromSubscription() untuk membuat SpeechConfig. Untuk daftar lengkap metode yang tersedia, lihat Kelas SpeechConfig.

Menginisialisasi IntentRecognizer

Sekarang buat IntentRecognizer. Masukkan kode ini tepat di bawah konfigurasi Ucapan Anda.

using (var intentRecognizer = new IntentRecognizer(config))
{
    
}

Menambahkan beberapa niat

Anda perlu mengaitkan beberapa polaIntentRecognizer dengan memanggil AddIntent(). Kami akan menambahkan 2 niat dengan ID yang sama untuk mengubah lantai, dan niat lain dengan ID terpisah untuk membuka dan menutup pintu. Sisipkan kode ini di dalam blok using:

intentRecognizer.AddIntent("Take me to floor {floorName}.", "ChangeFloors");
intentRecognizer.AddIntent("Go to floor {floorName}.", "ChangeFloors");
intentRecognizer.AddIntent("{action} the door.", "OpenCloseDoor");

Catatan

Tidak ada batasan jumlah entitas yang dapat Anda deklarasikan, tetapi mereka akan dicocokkan secara longgar. Jika Anda menambahkan frasa seperti "{action} door" maka setiap teks sebelum kata "door" akan dicocokkan. Niat dievaluasi berdasarkan jumlah entitasnya. Jika dua pola cocok, pola dengan entitas yang lebih pasti akan ditampilkan.

Mengenali niat

Dari objek IntentRecognizer, Anda akan memanggil metode RecognizeOnceAsync(). Metode ini meminta layanan Ucapan untuk mengenali ucapan dalam satu frase, dan berhenti mengenali ucapan setelah frase diidentifikasi. Untuk mempermudah, mari menunggu ke depannya kembali selesai.

Masukkan kode ini di bawah niat Anda:

Console.WriteLine("Say something...");

var result = await intentRecognizer.RecognizeOnceAsync();

Menampilkan hasil pengenalan (atau kesalahan)

Ketika hasil pengenalan dikembalikan oleh layanan Ucapan, kita akan mencetak hasilnya.

Masukkan kode ini di bawah var result = await recognizer.RecognizeOnceAsync();:

string floorName;
switch (result.Reason)
{
    case ResultReason.RecognizedSpeech:
        Console.WriteLine($"RECOGNIZED: Text= {result.Text}");
        Console.WriteLine($"    Intent not recognized.");
        break;
    case ResultReason.RecognizedIntent:
        Console.WriteLine($"RECOGNIZED: Text= {result.Text}");
        Console.WriteLine($"       Intent Id= {result.IntentId}.");
        var entities = result.Entities;
        if (entities.TryGetValue("floorName", out floorName))
        {
            Console.WriteLine($"       FloorName= {floorName}");
        }
    
        if (entities.TryGetValue("action", out floorName))
        {
            Console.WriteLine($"       Action= {floorName}");
        }
    
        break;
    case ResultReason.NoMatch:
    {
        Console.WriteLine($"NOMATCH: Speech could not be recognized.");
        var noMatch = NoMatchDetails.FromResult(result);
        switch (noMatch.Reason)
        {
            case NoMatchReason.NotRecognized:
                Console.WriteLine($"NOMATCH: Speech was detected, but not recognized.");
                break;
            case NoMatchReason.InitialSilenceTimeout:
                Console.WriteLine($"NOMATCH: The start of the audio stream contains only silence, and the service timed out waiting for speech.");
                break;
            case NoMatchReason.InitialBabbleTimeout:
                Console.WriteLine($"NOMATCH: The start of the audio stream contains only noise, and the service timed out waiting for speech.");
                break;
            case NoMatchReason.KeywordNotRecognized:
                Console.WriteLine($"NOMATCH: Keyword not recognized");
                break;
        }
        break;
    }
    case ResultReason.Canceled:
    {
        var cancellation = CancellationDetails.FromResult(result);
        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 set the speech resource key and region values?");
        }
        break;
    }
    default:
        break;
}

Memeriksa kode Anda

Pada titik ini, kode Anda akan terlihat seperti ini:

using System;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Intent;

namespace helloworld
{
    class Program
    {
        static void Main(string[] args)
        {
            IntentPatternMatchingWithMicrophoneAsync().Wait();
        }

        private static async Task IntentPatternMatchingWithMicrophoneAsync()
        {
            var config = SpeechConfig.FromSubscription("YOUR_SUBSCRIPTION_KEY", "YOUR_SUBSCRIPTION_REGION");
            using (var intentRecognizer = new IntentRecognizer(config))
            {
                intentRecognizer.AddIntent("Take me to floor {floorName}.", "ChangeFloors");
                intentRecognizer.AddIntent("Go to floor {floorName}.", "ChangeFloors");
                intentRecognizer.AddIntent("{action} the door.", "OpenCloseDoor");

                Console.WriteLine("Say something...");

                var result = await intentRecognizer.RecognizeOnceAsync();

                string floorName;
                switch (result.Reason)
                {
                    case ResultReason.RecognizedSpeech:
                        Console.WriteLine($"RECOGNIZED: Text= {result.Text}");
                        Console.WriteLine($"    Intent not recognized.");
                        break;
                    case ResultReason.RecognizedIntent:
                        Console.WriteLine($"RECOGNIZED: Text= {result.Text}");
                        Console.WriteLine($"       Intent Id= {result.IntentId}.");
                        var entities = result.Entities;
                        if (entities.TryGetValue("floorName", out floorName))
                        {
                            Console.WriteLine($"       FloorName= {floorName}");
                        }

                        if (entities.TryGetValue("action", out floorName))
                        {
                            Console.WriteLine($"       Action= {floorName}");
                        }

                        break;
                    case ResultReason.NoMatch:
                    {
                        Console.WriteLine($"NOMATCH: Speech could not be recognized.");
                        var noMatch = NoMatchDetails.FromResult(result);
                        switch (noMatch.Reason)
                        {
                            case NoMatchReason.NotRecognized:
                                Console.WriteLine($"NOMATCH: Speech was detected, but not recognized.");
                                break;
                            case NoMatchReason.InitialSilenceTimeout:
                                Console.WriteLine($"NOMATCH: The start of the audio stream contains only silence, and the service timed out waiting for speech.");
                                break;
                            case NoMatchReason.InitialBabbleTimeout:
                                Console.WriteLine($"NOMATCH: The start of the audio stream contains only noise, and the service timed out waiting for speech.");
                                break;
                            case NoMatchReason.KeywordNotRecognized:
                                Console.WriteLine($"NOMATCH: Keyword not recognized");
                                break;
                        }
                        break;
                    }
                    case ResultReason.Canceled:
                    {
                        var cancellation = CancellationDetails.FromResult(result);
                        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 set the speech resource key and region values?");
                        }
                        break;
                    }
                    default:
                        break;
                }
            }
        }
    }
}

Membuat dan menjalankan aplikasi Anda

Sekarang, Anda siap untuk membuat aplikasi Anda dan menguji pengenalan ucapan kami menggunakan layanan Ucapan.

  1. Mengompilasi kode - Dari bilah menu Visual Studio, pilih Buat>Buat Solusi.
  2. Memulai aplikasi Anda - Dari bilah menu, pilih Debug>Mulai Menelusuri Kesalahan atau tekan F5.
  3. Mulai pengenalan - Hal ini akan meminta Anda untuk mengatakan sesuatu. Bahasa defaultnya adalah bahasa Inggris. Ucapan Anda dikirim ke layanan Ucapan, ditranskripsikan sebagai teks, dan dirender di konsol.

Misalnya jika Anda mengatakan "Bawa saya ke lantai 7", outputnya akan menjadi seperti ini:

Say something ...
RECOGNIZED: Text= Take me to floor 7.
  Intent Id= ChangeFloors
  FloorName= 7

Membuat proyek

Buatlah proyek aplikasi konsol C++ yang baru di Visual Studio 2019 dan instal SDK Speech.

Memulai dengan beberapa kode boilerplate

Mari buka helloworld.cpp dan tambahkan beberapa kode yang berfungsi sebagai kerangka untuk proyek kita.

    #include <iostream>
    #include <speechapi_cxx.h>

    using namespace Microsoft::CognitiveServices::Speech;
    using namespace Microsoft::CognitiveServices::Speech::Intent;

    int main()
    {
        std::cout << "Hello World!\n";

        auto config = SpeechConfig::FromSubscription("YOUR_SUBSCRIPTION_KEY", "YOUR_SUBSCRIPTION_REGION");
    }

Membuat konfigurasi Ucapan

Sebelum dapat menginisialisasi IntentRecognizer objek, Anda perlu membuat konfigurasi yang menggunakan kunci dan lokasi untuk sumber daya prediksi layanan Azure AI Anda.

  • Ganti "YOUR_SUBSCRIPTION_KEY" dengan kunci prediksi layanan Azure AI Anda.
  • Ganti "YOUR_SUBSCRIPTION_REGION" dengan wilayah sumber daya layanan Azure AI Anda.

Sampel ini menggunakan metode FromSubscription() untuk membuat SpeechConfig. Untuk daftar lengkap metode yang tersedia, lihat Kelas SpeechConfig.

Menginisialisasi IntentRecognizer

Sekarang buat IntentRecognizer. Masukkan kode ini tepat di bawah konfigurasi Ucapan Anda.

    auto intentRecognizer = IntentRecognizer::FromConfig(config);

Menambahkan beberapa niat

Anda perlu mengaitkan beberapa polaIntentRecognizer dengan memanggil AddIntent(). Kami akan menambahkan 2 niat dengan ID yang sama untuk mengubah lantai, dan niat lain dengan ID terpisah untuk membuka dan menutup pintu.

    intentRecognizer->AddIntent("Take me to floor {floorName}.", "ChangeFloors");
    intentRecognizer->AddIntent("Go to floor {floorName}.", "ChangeFloors");
    intentRecognizer->AddIntent("{action} the door.", "OpenCloseDoor");

Catatan

Tidak ada batasan jumlah entitas yang dapat Anda deklarasikan, tetapi mereka akan dicocokkan secara longgar. Jika Anda menambahkan frasa seperti "{action} door" maka setiap teks sebelum kata "door" akan dicocokkan. Niat dievaluasi berdasarkan jumlah entitasnya. Jika dua pola cocok, pola dengan entitas yang lebih pasti akan ditampilkan.

Mengenali niat

Dari objek IntentRecognizer, Anda akan memanggil metode RecognizeOnceAsync(). Metode ini meminta layanan Ucapan untuk mengenali ucapan dalam satu frase, dan berhenti mengenali ucapan setelah frase diidentifikasi. Untuk mempermudah, mari menunggu ke depannya kembali selesai.

Masukkan kode ini di bawah niat Anda:

    std::cout << "Say something ..." << std::endl;
    auto result = intentRecognizer->RecognizeOnceAsync().get();

Menampilkan hasil pengenalan (atau kesalahan)

Ketika hasil pengenalan dikembalikan oleh layanan Ucapan, kita akan mencetak hasilnya.

Masukkan kode ini di bawah auto result = intentRecognizer->RecognizeOnceAsync().get();:

switch (result->Reason)
{
case ResultReason::RecognizedSpeech:
        std::cout << "RECOGNIZED: Text = " << result->Text.c_str() << std::endl;
        std::cout << "NO INTENT RECOGNIZED!" << std::endl;
        break;
case ResultReason::RecognizedIntent:
    std::cout << "RECOGNIZED: Text = " << result->Text.c_str() << std::endl;
    std::cout << "  Intent Id = " << result->IntentId.c_str() << std::endl;
    auto entities = result->GetEntities();
    if (entities.find("floorName") != entities.end())
    {
        std::cout << "  Floor name: = " << entities["floorName"].c_str() << std::endl;
    }

    if (entities.find("action") != entities.end())
    {
        std::cout << "  Action: = " << entities["action"].c_str() << std::endl;
    }

    break;
case ResultReason::NoMatch:
{
    auto noMatch = NoMatchDetails::FromResult(result);
    switch (noMatch->Reason)
    {
    case NoMatchReason::NotRecognized:
        std::cout << "NOMATCH: Speech was detected, but not recognized." << std::endl;
        break;
    case NoMatchReason::InitialSilenceTimeout:
        std::cout << "NOMATCH: The start of the audio stream contains only silence, and the service timed out waiting for speech." << std::endl;
        break;
    case NoMatchReason::InitialBabbleTimeout:
        std::cout << "NOMATCH: The start of the audio stream contains only noise, and the service timed out waiting for speech." << std::endl;
        break;
    case NoMatchReason::KeywordNotRecognized:
        std::cout << "NOMATCH: Keyword not recognized" << std::endl;
        break;
    }
    break;
}
case ResultReason::Canceled:
{
    auto cancellation = CancellationDetails::FromResult(result);

    if (!cancellation->ErrorDetails.empty())
    {
        std::cout << "CANCELED: ErrorDetails=" << cancellation->ErrorDetails.c_str() << std::endl;
        std::cout << "CANCELED: Did you set the speech resource key and region values?" << std::endl;
    }
}
default:
    break;
}

Memeriksa kode Anda

Pada titik ini, kode Anda akan terlihat seperti ini:

#include <iostream>
#include <speechapi_cxx.h>

using namespace Microsoft::CognitiveServices::Speech;
using namespace Microsoft::CognitiveServices::Speech::Intent;

int main()
{
    auto config = SpeechConfig::FromSubscription("YOUR_SUBSCRIPTION_KEY", "YOUR_SUBSCRIPTION_REGION");
    auto intentRecognizer = IntentRecognizer::FromConfig(config);

    intentRecognizer->AddIntent("Take me to floor {floorName}.", "ChangeFloors");
    intentRecognizer->AddIntent("Go to floor {floorName}.", "ChangeFloors");
    intentRecognizer->AddIntent("{action} the door.", "OpenCloseDoor");

    std::cout << "Say something ..." << std::endl;

    auto result = intentRecognizer->RecognizeOnceAsync().get();

    switch (result->Reason)
    {
    case ResultReason::RecognizedSpeech:
        std::cout << "RECOGNIZED: Text = " << result->Text.c_str() << std::endl;
        std::cout << "NO INTENT RECOGNIZED!" << std::endl;
        break;
    case ResultReason::RecognizedIntent:
        std::cout << "RECOGNIZED: Text = " << result->Text.c_str() << std::endl;
        std::cout << "  Intent Id = " << result->IntentId.c_str() << std::endl;
        auto entities = result->GetEntities();
        if (entities.find("floorName") != entities.end())
        {
            std::cout << "  Floor name: = " << entities["floorName"].c_str() << std::endl;
        }

        if (entities.find("action") != entities.end())
        {
            std::cout << "  Action: = " << entities["action"].c_str() << std::endl;
        }

        break;
    case ResultReason::NoMatch:
    {
        auto noMatch = NoMatchDetails::FromResult(result);
        switch (noMatch->Reason)
        {
        case NoMatchReason::NotRecognized:
            std::cout << "NOMATCH: Speech was detected, but not recognized." << std::endl;
            break;
        case NoMatchReason::InitialSilenceTimeout:
            std::cout << "NOMATCH: The start of the audio stream contains only silence, and the service timed out waiting for speech." << std::endl;
            break;
        case NoMatchReason::InitialBabbleTimeout:
            std::cout << "NOMATCH: The start of the audio stream contains only noise, and the service timed out waiting for speech." << std::endl;
            break;
        case NoMatchReason::KeywordNotRecognized:
            std::cout << "NOMATCH: Keyword not recognized." << std::endl;
            break;
        }
        break;
    }
    case ResultReason::Canceled:
    {
        auto cancellation = CancellationDetails::FromResult(result);

        if (!cancellation->ErrorDetails.empty())
        {
            std::cout << "CANCELED: ErrorDetails=" << cancellation->ErrorDetails.c_str() << std::endl;
            std::cout << "CANCELED: Did you set the speech resource key and region values?" << std::endl;
        }
    }
    default:
        break;
    }
}

Membuat dan menjalankan aplikasi Anda

Sekarang, Anda siap untuk membuat aplikasi Anda dan menguji pengenalan ucapan kami menggunakan layanan Ucapan.

  1. Mengompilasi kode - Dari bilah menu Visual Studio, pilih Buat>Buat Solusi.
  2. Memulai aplikasi Anda - Dari bilah menu, pilih Debug>Mulai Menelusuri Kesalahan atau tekan F5.
  3. Mulai pengenalan - Hal ini akan meminta Anda untuk mengatakan sesuatu. Bahasa defaultnya adalah bahasa Inggris. Ucapan Anda dikirim ke layanan Ucapan, ditranskripsikan sebagai teks, dan dirender di konsol.

Misalnya jika Anda mengatakan "Bawa saya ke lantai 7", outputnya akan menjadi seperti ini:

Say something ...
RECOGNIZED: Text = Take me to floor 7.
  Intent Id = ChangeFloors
  Floor name: = 7

Dokumentasi referensi | Sampel Tambahan pada GitHub

Dalam mulai cepat ini, Anda menginstal Speech SDK untuk Java.

Persyaratan platform

Pilih lingkungan target Anda:

Speech SDK untuk Java kompatibel dengan Windows, Linux, dan macOS.

Di Windows, Anda harus menggunakan arsitektur target 64-bit. Windows 10 atau yang lebih baru diperlukan.

Instal Microsoft Visual C++ Redistributable untuk Visual Studio 2015, 2017, 2019, dan 2022 untuk platform Anda. Memasang paket ini untuk pertama kalinya mungkin memerlukan menghidupkan ulang.

Speech SDK untuk Java tidak mendukung Windows di ARM64.

Pasang Java Development Kit seperti Azul Zulu OpenJDK. Microsoft Build of OpenJDK atau JDK pilihan Anda juga harus berfungsi.

Menginstal Speech SDK untuk Java

Beberapa instruksi menggunakan versi SDK tertentu seperti 1.24.2. Untuk memeriksa versi terbaru, cari repositori GitHub kami.

Pilih lingkungan target Anda:

Panduan ini menunjukkan cara menginstal Speech SDK untuk Java pada Java Runtime.

Sistem operasi yang didukung

Paket Java Speech SDK tersedia untuk sistem operasi berikut:

Ikuti langkah-langkah berikut untuk menginstal Speech SDK untuk Java menggunakan Apache Maven:

  1. Menginstal Apache Maven.

  2. Buka prompt perintah tempat Anda menginginkan proyek baru, dan buat file pom.xml baru.

  3. Salin konten XML berikut ke dalam pom.xml:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.microsoft.cognitiveservices.speech.samples</groupId>
        <artifactId>quickstart-eclipse</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <build>
            <sourceDirectory>src</sourceDirectory>
            <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                <source>1.8</source>
                <target>1.8</target>
                </configuration>
            </plugin>
            </plugins>
        </build>
        <dependencies>
            <dependency>
            <groupId>com.microsoft.cognitiveservices.speech</groupId>
            <artifactId>client-sdk</artifactId>
            <version>1.37.0</version>
            </dependency>
        </dependencies>
    </project>
    
  4. Jalankan perintah Maven berikut untuk menginstal SDK Azure Cognitive Service untuk Ucapan dan dependensi.

    mvn clean dependency:copy-dependencies
    

Memulai dengan beberapa kode boilerplate

  1. Buka Main.java dari src dir.

  2. Mengganti isi file dengan yang berikut:

package quickstart;
import java.util.Dictionary;
import java.util.concurrent.ExecutionException;

import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.intent.*;

public class Program {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        IntentPatternMatchingWithMicrophone();
    }

    public static void IntentPatternMatchingWithMicrophone() throws InterruptedException, ExecutionException {
        SpeechConfig config = SpeechConfig.fromSubscription("YOUR_SUBSCRIPTION_KEY", "YOUR_SUBSCRIPTION_REGION");
    }
}

Membuat konfigurasi Ucapan

Sebelum dapat menginisialisasi IntentRecognizer objek, Anda perlu membuat konfigurasi yang menggunakan kunci dan lokasi untuk sumber daya prediksi layanan Azure AI Anda.

  • Ganti "YOUR_SUBSCRIPTION_KEY" dengan kunci prediksi layanan Azure AI Anda.
  • Ganti "YOUR_SUBSCRIPTION_REGION" dengan wilayah sumber daya layanan Azure AI Anda.

Sampel ini menggunakan metode FromSubscription() untuk membuat SpeechConfig. Untuk daftar lengkap metode yang tersedia, lihat Kelas SpeechConfig.

Menginisialisasi IntentRecognizer

Sekarang buat IntentRecognizer. Masukkan kode ini tepat di bawah konfigurasi Ucapan Anda.

try (IntentRecognizer intentRecognizer = new IntentRecognizer(config)) {
    
}

Menambahkan beberapa niat

Anda perlu mengaitkan beberapa polaIntentRecognizer dengan memanggil addIntent(). Kami akan menambahkan 2 niat dengan ID yang sama untuk mengubah lantai, dan niat lain dengan ID terpisah untuk membuka dan menutup pintu. Sisipkan kode ini di dalam blok try:

intentRecognizer.addIntent("Take me to floor {floorName}.", "ChangeFloors");
intentRecognizer.addIntent("Go to floor {floorName}.", "ChangeFloors");
intentRecognizer.addIntent("{action} the door.", "OpenCloseDoor");

Catatan

Tidak ada batasan jumlah entitas yang dapat Anda deklarasikan, tetapi mereka akan dicocokkan secara longgar. Jika Anda menambahkan frasa seperti "{action} door" maka setiap teks sebelum kata "door" akan dicocokkan. Niat dievaluasi berdasarkan jumlah entitasnya. Jika dua pola cocok, pola dengan entitas yang lebih pasti akan ditampilkan.

Mengenali niat

Dari objek IntentRecognizer, Anda akan memanggil metode recognizeOnceAsync(). Metode ini meminta layanan Ucapan untuk mengenali ucapan dalam satu frase, dan berhenti mengenali ucapan setelah frase diidentifikasi. Untuk mempermudah, mari menunggu ke depannya kembali selesai.

Masukkan kode ini di bawah niat Anda:

System.out.println("Say something...");

IntentRecognitionResult result = intentRecognizer.recognizeOnceAsync().get();

Menampilkan hasil pengenalan (atau kesalahan)

Ketika hasil pengenalan dikembalikan oleh layanan Ucapan, kita akan mencetak hasilnya.

Masukkan kode ini di bawah IntentRecognitionResult result = recognizer.recognizeOnceAsync().get();:

if (result.getReason() == ResultReason.RecognizedSpeech) {
    System.out.println("RECOGNIZED: Text= " + result.getText());
    System.out.println(String.format("%17s", "Intent not recognized."));
}
else if (result.getReason() == ResultReason.RecognizedIntent) {
    System.out.println("RECOGNIZED: Text= " + result.getText());
    System.out.println(String.format("%17s %s", "Intent Id=", result.getIntentId() + "."));
    Dictionary<String, String> entities = result.getEntities();

    if (entities.get("floorName") != null) {
        System.out.println(String.format("%17s %s", "FloorName=", entities.get("floorName")));
    }
    if (entities.get("action") != null) {
        System.out.println(String.format("%17s %s", "Action=", entities.get("action")));
    }
}
else if (result.getReason() == ResultReason.NoMatch) {
    System.out.println("NOMATCH: Speech could not be recognized.");
}
else if (result.getReason() == ResultReason.Canceled) {
    CancellationDetails cancellation = CancellationDetails.fromResult(result);
    System.out.println("CANCELED: Reason=" + cancellation.getReason());

    if (cancellation.getReason() == CancellationReason.Error)
    {
        System.out.println("CANCELED: ErrorCode=" + cancellation.getErrorCode());
        System.out.println("CANCELED: ErrorDetails=" + cancellation.getErrorDetails());
        System.out.println("CANCELED: Did you update the subscription info?");
    }
}

Memeriksa kode Anda

Pada titik ini, kode Anda akan terlihat seperti ini:

package quickstart;
import java.util.Dictionary;
import java.util.concurrent.ExecutionException;

import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.intent.*;

public class Main {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        IntentPatternMatchingWithMicrophone();
    }

    public static void IntentPatternMatchingWithMicrophone() throws InterruptedException, ExecutionException {
        SpeechConfig config = SpeechConfig.fromSubscription("YOUR_SUBSCRIPTION_KEY", "YOUR_SUBSCRIPTION_REGION");

        try (IntentRecognizer intentRecognizer = new IntentRecognizer(config)) {
            intentRecognizer.addIntent("Take me to floor {floorName}.", "ChangeFloors");
            intentRecognizer.addIntent("Go to floor {floorName}.", "ChangeFloors");
            intentRecognizer.addIntent("{action} the door.", "OpenCloseDoor");

            System.out.println("Say something...");

            IntentRecognitionResult result = intentRecognizer.recognizeOnceAsync().get();
            if (result.getReason() == ResultReason.RecognizedSpeech) {
            System.out.println("RECOGNIZED: Text= " + result.getText());
            System.out.println(String.format("%17s", "Intent not recognized."));
            }
            else if (result.getReason() == ResultReason.RecognizedIntent) {
                System.out.println("RECOGNIZED: Text= " + result.getText());
                System.out.println(String.format("%17s %s", "Intent Id=", result.getIntentId() + "."));
                Dictionary<String, String> entities = result.getEntities();

                if (entities.get("floorName") != null) {
                    System.out.println(String.format("%17s %s", "FloorName=", entities.get("floorName")));
                }
                if (entities.get("action") != null) {
                    System.out.println(String.format("%17s %s", "Action=", entities.get("action")));
                }
            }
            else if (result.getReason() == ResultReason.NoMatch) {
                System.out.println("NOMATCH: Speech could not be recognized.");
            }
            else if (result.getReason() == ResultReason.Canceled) {
                CancellationDetails cancellation = CancellationDetails.fromResult(result);
                System.out.println("CANCELED: Reason=" + cancellation.getReason());

                if (cancellation.getReason() == CancellationReason.Error)
                {
                    System.out.println("CANCELED: ErrorCode=" + cancellation.getErrorCode());
                    System.out.println("CANCELED: ErrorDetails=" + cancellation.getErrorDetails());
                    System.out.println("CANCELED: Did you update the subscription info?");
                }
            }
        }
    }
}

Membuat dan menjalankan aplikasi Anda

Sekarang Anda siap membangun aplikasi dan menguji pengenalan niat menggunakan layanan ucapan dan pencocokan pola yang disematkan.

Pilih tombol jalankan di Eclipse atau tekan ctrl+F11, lalu tonton output untuk "Ucapkan sesuatu..." Prompt. Setelah muncul, ucapkan sesuatu dan perhatikan outputnya.

Misalnya jika Anda mengatakan "Bawa saya ke lantai 7", outputnya akan menjadi seperti ini:

Say something ...
RECOGNIZED: Text= Take me to floor 7.
  Intent Id= ChangeFloors
  FloorName= 7

Langkah berikutnya

Tingkatkan pencocokan pola Anda dengan menggunakan entitas kustom.