Apa itu pencocokan pola?

Pencocokan pola dapat disesuaikan untuk mengelompokkan niat pola dan entitas di dalam PatternMatchingModel. Dengan menggunakan pengelompokan ini, Dimungkinkan untuk mengakses jenis entitas yang lebih canggih yang membantu membuat pengenalan niat Anda lebih tepat.

Untuk lokal yang didukung, lihat di sini.

Pola vs. Frasa Persis

Ada dua jenis string yang digunakan dalam pencocok pola: "frasa persis" dan "pola". Penting untuk memahami perbedaannya.

Frasa yang tepat adalah string dari kata-kata persis yang ingin Anda cocokkan. Misalnya:

"Bawa saya ke lantai tujuh".

Pola adalah frasa yang berisi entitas yang ditandai. Entitas ditandai dengan "{}" untuk menentukan tempat di dalam pola dan teks di dalam "{}" mereferensikan ID entitas. Sesuai dengan contoh sebelumnya, mungkin Anda perlu mengekstrak nama lantai dalam entitas bernama "floorName". Anda akan melakukannya dengan pola seperti ini:

"Bawa saya ke lantai {floorName}"

Kerangka PatternMatchingModel

PatternMatchingModel berisi ID untuk mereferensikan model tersebut berdasarkan daftar objek PatternMatchingIntent, dan daftar objek PatternMatchingEntity.

Niat Pencocokan Pola

PatternMatchingIntent objek mewakili kumpulan frasa yang digunakan untuk mengevaluasi ucapan atau teks di IntentRecognizer. Jika frasa dicocokkan, maka yang IntentRecognitionResult dikembalikan memiliki ID PatternMatchingIntent yang cocok.

Entitas Pencocokan Pola

Objek PatternMatchingEntity mewakili referensi entitas individu dan properti yang sesuai yang memberi tahu IntentRecognizer cara memperlakukannya. Semua PatternMatchingEntity objek harus memiliki ID yang ada dalam frasa atau tidak cocok.

Pembatasan Penamaan Entitas

Nama entitas yang berisi karakter ':' menetapkan peran ke entitas.

Jenis Entitas

Entitas Apa Pun

Entitas "Apa pun" cocok dengan teks apa pun yang muncul di slot tersebut terlepas dari teks yang dikandungnya. Jika kita mempertimbangkan contoh sebelumnya menggunakan pola "Bawa saya ke lantai {floorName}", pengguna mungkin mengatakan sesuatu seperti:

"Bawa saya ke lantai tempat parkir 2

Dalam hal ini, entitas "floorName" akan cocok dengan "tempat parkir 2".

Entitas ini adalah kecocokan malas yang mencoba mencocokkan kata-kata seserang mungkin kecuali muncul di awal atau akhir ungkapan. Pertimbangkan pola berikut:

"Bawa saya ke lantai {floorName1} {floorName2}"

Dalam hal ini, ucapan "Bawa saya ke lantai tempat parkir 2" akan dicocokkan dan mengembalikan floorName1 = "tempat parkir" dan floorName2 = "2".

Mungkin sulit untuk menangani teks ekstra yang diambil. Mungkin pengguna terus berbicara dan ucapan itu mengambil lebih dari perintah mereka. "Bawa saya ke lantai tempat parkir 2 ya Janice saya mendengarnya ayo". Dalam hal ini floorName1 benar, tetapi floorName2 akan menangkap = "2 ya Janice saya mendengarnya ayo". Penting untuk mengetahui cara entitas cocok, dan menyesuaikan skenario Anda dengan tepat. Jenis entitas Apa pun adalah jenis pencocokan yang paling mendasar dan paling tidak tepat yang dilakukan.

Entitas Daftar

Entitas "Daftar" terdiri dari daftar frasa yang memandu mesin tentang cara mencocokkannya. Entitas "Daftar" memiliki dua mode. "Ketat" dan "Fuzzy".

Mari kita asumsikan kita memiliki daftar lantai untuk lift kita. Karena kita berurusan dengan ucapan, kita menambahkan entri menggunakan format leksikal juga.

"1", "2", "3", "lobi", "lantai dasar", "satu", "dua", "tiga"

Saat entitas jenis ID "Daftar" digunakan dalam mode "Ketat", mesin hanya cocok jika teks di slot muncul dalam daftar.

"bawa saya ke lantai satu" akan cocok.

"bawa saya ke lantai 5" tidak akan cocok.

Penting untuk dicatat bahwa seluruh Niat tidak akan cocok, bukan hanya entitas.

Ketika entitas jenis ID "Daftar" digunakan dalam mode "Fuzzy", mesin masih cocok dengan niat, dan mengembalikan teks yang muncul di slot dalam ungkapan, bahkan jika tidak ada dalam daftar. Kecocokan ini berguna di balik layar untuk membantu membuat pengenalan ucapan lebih baik.

Peringatan

Entitas daftar fuzzy diterapkan, tetapi tidak diintegrasikan ke dalam bagian pengenalan ucapan. Oleh karena itu, mereka akan mencocokkan entitas, tetapi tidak meningkatkan pengenalan ucapan.

Entitas Integer Bawaan

Entitas "PrebuiltInteger" digunakan ketika Anda ingin mendapatkan integer di slot tersebut. Ini tidak akan cocok dengan niat jika bilangan bulat tidak dapat ditemukan. Nilai pengembalian adalah representasi string dari angka.

Contoh nilai kecocokan dan pengembalian yang valid

"Dua ribu seratus lima puluh lima" -> "2155"

"first" -> "1"

"a" -> "1"

"empat nol tujuh satu" -> "4071"

Jika ada teks yang tidak dapat dikenali sebagai angka, entitas dan niat tidak akan cocok.

Contoh kecocokan yang tidak valid

"yang ketiga"

"lantai pertama mungkin"

"kedua plus tiga"

"tiga puluh tiga dan pokoknya"

Pertimbangkan contoh lift kami.

"Bawa saya ke lantai {floorName}"

Jika "floorName" adalah entitas bilangan bulat bawaan, harapannya adalah bahwa teks apa pun di dalam slot mewakili bilangan bulat. Di sini nomor lantai akan cocok dengan baik, tetapi lantai dengan nama seperti "lobi" tidak akan.

Pengelompokan yang diperlukan dan item opsional

Dalam pola, diperbolehkan untuk menyertakan kata atau entitas yang "mungkin" ada dalam ungkapan. Ini sangat berguna untuk kata sandang seperti "the", "a", atau "an". Ini tidak memiliki perbedaan fungsional dari pengodean permanen dari banyak kombinasi, tetapi dapat membantu mengurangi jumlah pola yang dibutuhkan. Tunjukkan item opsional dengan "[" dan "]". Menunjukkan item yang diperlukan dengan "(" dan ")". Anda bisa menyertakan beberapa item dalam grup yang sama dengan memisahkannya dengan karakter '|'.

Untuk melihat bagaimana hal ini akan mengurangi jumlah pola yang diperlukan, pertimbangkan set berikut:

"Take me to {floorName}"

"Take me the {floorName}"

"Take me {floorName}"

"Take me to {floorName} please"

"Take me the {floorName} please"

"Take me {floorName} please"

"Bring me {floorName} please"

"Bring me to {floorName} please"

Ini semua dapat dikurangi menjadi satu pola dengan pengelompokan dan item opsional. Pertama, dimungkinkan untuk mengelompokkan "ke" dan "the" bersama-sama sebagai kata opsional seperti itu: "[to | the]", dan kedua kita dapat membuat opsional "please" juga. Terakhir, kita dapat mengelompokkan "bring" dan "take" sesuai kebutuhan.

"(Bring | Take) me [to | the] {floorName} [please]"

Anda juga dapat menyertakan entitas opsional. Bayangkan ada beberapa tingkat tempat parkir dan Anda ingin mencocokkan kata sebelum {floorName}. Anda bisa melakukannya dengan pola seperti ini:

"Take me to [{floorType}] {floorName}"

Opsional juga berguna jika Anda mungkin menggunakan pengenalan kata kunci dan fungsi push-to-talk. Ini berarti kadang-kadang kata kunci ada, dan kadang-kadang tidak akan. Dengan asumsi kata kunci Anda adalah "computer", pola Anda akan terlihat seperti ini.

"[Computer] Take me to {floorName}"

Catatan

Meskipun sangat membantu untuk menggunakan item opsional, itu meningkatkan kemungkinan tabrakan pola. Di sinilah dua pola dapat cocok dengan frasa yang diucapkan sama. Jika ini terjadi, terkadang dapat diselesaikan dengan memisahkan item opsional menjadi pola terpisah.

Peran entitas

Di dalam pola, mungkin ada skenario di mana Anda ingin menggunakan entitas yang sama beberapa kali. Pertimbangkan skenario pemesanan penerbangan dari satu kota ke kota lain. Dalam hal ini daftar kota sama, tetapi perlu untuk mengetahui kota mana pengguna berasal dan kota mana yang menjadi tujuan. Untuk mencapai hal ini, Anda dapat menggunakan peran yang ditetapkan ke entitas menggunakan ':'.

"Pesan penerbangan dari {city:from} ke {city:destination}"

Dengan pola seperti ini, akan ada dua entitas dalam hasil berlabel "city:from" dan "city:destination", tetapi keduanya akan merujuk entitas "kota" untuk tujuan pencocokan.

Prioritas Pencocokan Niat

Terkadang beberapa pola cocok dengan ucapan yang sama. Dalam hal ini, mesin memberikan prioritas pada pola sebagai berikut.

  1. Frasa Persis.
  2. Pola dengan lebih banyak Entitas.
  3. Pola dengan Entitas Integer.
  4. Pola dengan Entitas Daftar.
  5. Pola dengan Entitas Apa Pun.
  6. Pola dengan lebih banyak byte yang cocok.
    • Contoh: Pola "pilih {something} di sebelah kiri" akan menjadi prioritas yang lebih tinggi daripada "pilih {something}".

Langkah berikutnya