Share via


Desen eşleştirme nedir?

Desen eşleştirme, desen amaçlarını ve içindeki varlıkları gruplandırmak PatternMatchingModeliçin özelleştirilebilir. Bu gruplandırma kullanılarak, amaç tanımanızı daha kesin hale getirmenize yardımcı olan daha gelişmiş varlık türlerine erişmek mümkündür.

Desteklenen yerel ayarlar için buraya bakın.

Desenler ile Tam İfadeler Karşılaştırması

Desen eşleştiricisinde kullanılan iki tür dize vardır: "tam ifadeler" ve "desenler". Farklılıkları anlamak önemlidir.

Tam ifadeler, tam olarak eşleştirmek istediğiniz sözcüklerin dizeleridir. Örneğin:

"Beni 7. kata götür".

Desen, işaretli varlık içeren bir tümceciktir. Varlıklar, desenin içindeki yeri tanımlamak için "{}" ile işaretlenir ve "{}" içindeki metin varlık kimliğine başvurur. Önceki örnekte verilen "floorName" adlı varlığın kat adını ayıklamak isteyebilirsiniz. Bunu aşağıdaki gibi bir desenle yaparsınız:

"Beni {floorName} zemine götür"

PatternMatchingModel'in Ana Hattı

, PatternMatchingModel bu modele başvurmak için bir kimlik, bir nesne listesi PatternMatchingIntent ve bir nesne listesi PatternMatchingEntity içerir.

Desen Eşleştirme Amaçları

PatternMatchingIntent nesneleri, içindeki konuşmayı veya metni IntentRecognizerdeğerlendirmek için kullanılan tümcecik koleksiyonunu temsil eder. Tümcecikler eşleştirilirse, IntentRecognitionResult döndürülen ifadenin kimliği PatternMatchingIntent eşleştirilen kimliğine sahiptir.

Desen Eşleştirme Varlıkları

PatternMatchingEntity nesneleri tek bir varlık başvurusunu ve nasıl davranıldığını belirten IntentRecognizer ilgili özelliklerini temsil eder. Tüm PatternMatchingEntity nesnelerin bir tümcecikte bulunan bir kimliği olmalıdır, aksi takdirde eşleşmez.

Varlık Adlandırma kısıtlamaları

':' karakterleri içeren varlık adları bir varlığa rol atar.

Varlık Türleri

Herhangi Bir Varlık

"Any" varlığı, içerdiği metinden bağımsız olarak bu yuvada görünen tüm metinleri eşleştirir. Önceki örneğimizi "Beni {floorName}. kata götür" desenini kullanarak ele alırsak, kullanıcı şöyle bir şey söyleyebilir:

"Beni park yeri 2'ye götür

Bu durumda, "floorName" varlığı "parking 2" ile eşleşir.

Bu varlıklar, konuşmanın başında veya sonunda görünmediği sürece mümkün olduğunca az sözcük eşleştirmeye çalışan gecikmeli eşleşmelerdir. Aşağıdaki deseni göz önünde bulundurun:

"Beni {floorName1} {floorName2} zemine götürün"

Bu durumda, "Beni park alanına götür 2" ifadesi eşleşir ve floorName1 = "parking" ve floorName2 = "2" değerini döndürür.

Yakalanan ek metinleri işlemek zor olabilir. Belki de kullanıcı konuşmaya devam etti ve konuşma komutundan daha fazlasını yakaladı. "Beni park yeri 2'ye götür evet Janice bunu duydum." Bu durumda floorName1 doğru olacaktır, ancak floorName2 = "2 evet Janice bu let's hakkında duydum". Varlıkların eşleşme şeklinin farkında olmak ve senaryonuzu uygun şekilde ayarlamak önemlidir. Herhangi bir varlık türü, yapılan en temel ve en az kesin eşleştirme türüdür.

Liste Varlığı

"Liste" varlığı, altyapıya bunu nasıl eşleştirecekleri konusunda yol gösteren tümceciklerin bir listesinden oluşur. "Liste" varlığının iki modu vardır. "Katı" ve "Belirsiz".

Asansörümüzün kat listesinin olduğunu varsayalım. Konuşmayla ilgilendiğimiz için, sözcük biçimli biçimi kullanarak da girdiler ekleriz.

"1", "2", "3", "lobi", "zemin kat", "bir", "iki", "üç"

"Liste" türünde bir varlık "Katı" modunda kullanıldığında, altyapı yalnızca yuvadaki metin listede görünüyorsa eşleşir.

"beni birinci kata götür" eşleşir.

"Beni 5. kata götür" olmaz.

Yalnızca varlığın değil, Amacın tamamının eşleşmediğini unutmayın.

"Liste" türünde bir varlık "Benzer" modunda kullanıldığında, altyapı yine de amaçla eşleşir ve listede olmasa bile konuşmadaki yuvada görünen metni döndürür. Bu eşleşme, konuşma tanımayı daha iyi hale getirmek için arka planda kullanışlıdır.

Uyarı

Benzer liste varlıkları uygulanır, ancak konuşma tanıma bölümüyle tümleştirilmemiştir. Bu nedenle varlıklarla eşleşir, ancak konuşma tanımayı geliştirmez.

Önceden Oluşturulmuş Tamsayı Varlığı

"PrebuiltInteger" varlığı, bu yuvada bir tamsayı almayı beklediğiniz zaman kullanılır. Tamsayı bulunamazsa amaçla eşleşmez. Dönüş değeri, sayının dize gösterimidir.

Geçerli eşleşme ve dönüş değerleri örnekleri

"İki bin yüz elli beş" -> "2155"

"first" -> "1"

"a" -> "1"

"dört oh yedi bir" -> "4071"

Sayı olarak tanınamayan metinler varsa, varlık ve amaç eşleşmez.

Geçersiz eşleşme örnekleri

"üçüncü"

"sanırım birinci kat"

"ikinci artı üç"

"otuz üç ve neyse"

Asansör örneğimizi düşünün.

"Beni {floorName} zemine götür"

"floorName" önceden oluşturulmuş bir tamsayı varlığıysa, yuvanın içindeki metin bir tamsayıyı temsil eder. Burada bir kat numarası iyi eşleşir, ancak "lobi" gibi bir adı olan bir zemin eşleşmez.

Gerekli ve isteğe bağlı öğeleri gruplandırma

Desende, ifadede "bulunabilecek" sözcüklerin veya varlıkların eklenmesine izin verilir. Bu özellikle "the", "a" veya "an" gibi belirleyiciler için kullanışlıdır. Bu, birçok bileşimin sabit kodlamasından işlevsel bir farka sahip değildir, ancak gerekli desenlerin sayısını azaltmaya yardımcı olabilir. İsteğe bağlı öğeleri "[" ve "]" ile belirtin. Gerekli öğeleri "(" ve ")" ile belirtin. Birden çok öğeyi '|' karakteriyle ayırarak aynı gruba ekleyebilirsiniz.

Bunun gereken desen sayısını nasıl azaltacağını görmek için aşağıdaki kümeyi göz önünde bulundurun:

"Beni {floorName} konumuna götür"

"Bana {floorName}"

"Beni {floorName} alın"

"Beni {floorName} adresine götürün lütfen"

"Bana {floorName} alın lütfen"

"Beni {floorName} alın lütfen"

"Bana {floorName} getirin lütfen"

"Beni {floorName} konumuna getirin lütfen"

Bunların tümü gruplandırma ve isteğe bağlı öğelerle tek bir desene düşürülebilir. İlk olarak, "to" ve "the" sözcüklerini şu şekilde isteğe bağlı sözcükler olarak gruplandırmak mümkündür: "[to | the]" ve second biz de "please" seçeneğini isteğe bağlı hale getirebiliyoruz. Son olarak, "getir" ve "al" öğesini gerektiği gibi gruplandırabiliriz.

"(Getir | Al) beni [to | the] {floorName} [please]"

İsteğe bağlı varlıklar da dahil etmek mümkündür. Birden fazla park seviyesi olduğunu ve {floorName} tarihinden önceki sözcükle eşleştirmek istediğinizi düşünün. Bunu aşağıdaki gibi bir desenle yapabilirsiniz:

"Beni [{floorType}] {floorName}" adresine götür

Anahtar sözcük tanıma ve konuşarak gönderme işlevi kullanıyor olabilirsiniz, isteğe bağlı öğeler de yararlıdır. Bu, bazen anahtar sözcüğün mevcut olduğu ve bazen de bulunmayacağı anlamına gelir. Anahtar sözcüğünüzün "bilgisayar" olduğunu varsayarsak deseniniz şuna benzer olacaktır.

"[Bilgisayar] Beni {floorName}' adresine götür"

Not

İsteğe bağlı öğeleri kullanmak yararlı olsa da, desen çakışması olasılığını artırır. Burada iki desen aynı konuşma tümceciğiyle eşleşebilir. Bu durum oluşursa, bazen isteğe bağlı öğeler ayrı desenlere ayrılarak çözülebilir.

Varlık rolleri

Desenin içinde, aynı varlığı birden çok kez kullanmak istediğiniz bir senaryo olabilir. Bir şehirden diğerine uçuş rezervasyonu senaryoyu göz önünde bulundurun. Bu durumda şehir listesi aynıdır, ancak kullanıcının hangi şehirden geldiğini ve hedefin hangi şehir olduğunu bilmek gerekir. Bunu başarmak için ,':' kullanarak bir varlığa atanan rolü kullanabilirsiniz.

"{city:from} - {city:destination} uçuş rezervasyonu yapın"

Bunun gibi bir desen verildiğinde, sonuçta "city:from" ve "city:destination" etiketli iki varlık olacaktır, ancak ikisi de eşleşen amaçlar için "şehir" varlığına başvurur.

Amaç Eşleştirme Önceliği

Bazen birden çok desen aynı konuşmayla eşleşer. Bu durumda altyapı, desenlere aşağıdaki gibi öncelik verir.

  1. Tam tümcecikler.
  2. Daha fazla Varlık içeren desenler.
  3. Tamsayı Varlıkları olan desenler.
  4. Liste Varlıkları içeren desenler.
  5. Herhangi Bir Varlık içeren desenler.
  6. Daha fazla bayt eşleştirilen desenler.
    • Örnek: "Soldaki {something} öğesini seçin" deseni "{something} öğesini seçin" deseninden daha yüksek öncelikli olacaktır.

Sonraki adımlar