0

私はTellMeベースのエンジンを使用しています。私は、ユーザーが同じと見なされるいくつかの異なることの1つを言うことができる文法の例を見てきました。ただし、私が見たすべての例は、インライン文法(使用しているvxmlエンジンでは機能しません)のものです。これを行うために.grxmlファイルを変更する方法を知りたいです。これはファイルです:

<?xml version="1.0"?>
<!-- created by Matthew Murdock. Grammars for speech rec menus -->
<grammar xmlns="http://www.w3.org/2001/06/grammar" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/06/grammar      http://www.w3.org/TR/speech-grammar/grammar.xsd" xml:lang="en" version="1.0" mode="voice" scope="dialog" tag-format="semantics/1.0.2006">
   <rule id="keep">
      <one-of>
         <item>exit</item>
         <item>exit the system</item>
         <item>another</item>
         <item>another mailbox</item>
         <item>play</item>
         <item>play back</item>                      
      </one-of>
   </rule>
</grammar>

6つのアイテムではなく、3つのアイテムが必要です。各アイテムには2つの可能な発話があります。これをどのように行うことができるかについてのアイデアはありますか?

4

3 に答える 3

2

よりコンパクトなフォーム:

  <rule id="exit">
    exit <item repeat="0-1">the system</item>
    <tag>out.result = "exit"</tag>
  </rule>
  <rule id="play">
    play <item repeat="0-1">back</item>
    <tag>out.result = "play"</tag>
  </rule>
于 2010-08-24T17:29:45.677 に答える
0

必要な答えは、入力パスに意味を付加するためのメカニズムを提供するSISR仕様にあります。例を書き直します:

<?xml version="1.0"?>
<grammar xmlns="http://www.w3.org/2001/06/grammar" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/06/grammar      http://www.w3.org/TR/speech-grammar/grammar.xsd" xml:lang="en" version="1.0" mode="voice" scope="dialog" tag-format="semantics/1.0-literals">
   <rule id="keep">
      <one-of>
       <item>
        <one-of>
         <item>exit</item>
         <item>exit the system</item>
        </one-of>
        <tag>exit</tag>
        </item>

       <item>
        <one-of>
         <item>another</item>
         <item>another mailbox</item>
        </one-of>
        <tag>another</tag>
       </item>

       <item>
        <one-of>
         <item>play</item>
         <item>play back</item>                      
        </one-of>
        <tag>play</tag>
       </item>
      </one-of>
   </rule>
</grammar>

知っておくべきいくつかのこと:

  • リテラルのタグ形式を選択しました(文法要素のtag-format属性に注意してください)。「semantics/1.0」を使用して実装することもでき、タグの内容は次のようになります。out = "exit";
  • TellMeタグ形式の値は異なる必要がある場合がありますが、開発ガイドでは、標準に準拠していることを示しています。
  • 動作させたら、フィラー文法を作成することを躊躇しないでください(SRGSで言えば、ルール)。フィラールールは、SIがない(タグ要素がない)ルールであり、人々が応答に追加する一般的なフレーズが含まれています。たとえば、文法の最後に追加できる末尾のルールは次のとおりです。
      </one-of>
      <item repeat="0-1"><ruleref uri="#trailing"/></item>
   </rule>

   <rule id="trailing>
      <one-of>
         <item>please</item>
         <item>thank you</item>

      </one-of>
   </rule>

</grammar>

これにより、より自然なタイプの応答がサポートされます。これは、呼び出し元によって重要な場合と重要でない場合があります。フィラーの文法は非常に大きくなる可能性がありますが、再利用性が高い傾向があります。入力の最初にフィラーを追加することもできます。リッチスピーチアプリケーションでは、チューニングプロセスで最も重要な利点は、開発者またはVUIデザイナーが話したと思ったものに対して、発信者が話した実際のフレーズを含むように文法を更新することです。

于 2010-07-08T12:14:04.883 に答える
0

私はそれを考え出した。文法を次のように変更しました。

<?xml version="1.0"?>
<grammar xmlns="http://www.w3.org/2001/06/grammar" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/06/grammar      http://www.w3.org/TR/speech-grammar/grammar.xsd" xml:lang="en" version="1.0" mode="voice" scope="dialog" tag-format="semantics/1.0-literals">
   <rule id="keep">
      <one-of>
         <item><ruleref id="#exit"/></item>
         <item><ruleref id="#play"/></item>
      </one-of>
   </rule>
   <rule id="exit">
      <one-of>
         <item>exit</item>
         <item>exit the system</item>
      </one-of>
      <tag>out.result = "exit"</tag>
   </rule>
   <rule id="play">
      <one-of>
         <item>play</item>
         <item>play back</item>
      </one-of>
      <tag>out.result = "play"</tag>
   </rule>
</grammar>

次に、callerInput(タグで指定された変数)に基づいてアクションを実行する代わりに、スクリプトに戻ります。これは、文法<field>の要素に割り当てられたものを含むxmlを保持するcallerInput$.interpretationに基づいています。<tag>

発信者の文字通りの入力ではなく、「解釈」に基づいてアクションを実行することは理にかなっていると思います。

注:独自のvxmlエンジンを使用しているため、xmlから解釈値を抽出するためのメソッドを作成できました。

于 2010-07-13T16:46:59.103 に答える