grxml法术和语音语法的表现

时间:2015-06-27 09:56:23

标签: speech-recognition grammar speech ivr vxml

以下语法执行得非常糟糕,我想知道语法本身是否有问题,如果是,可以如何改进,

这是古老的细微差别8.5,那么识别器的性能可能会如此?

使用nl-tool(相当于Nuance 9中的parsetool),我可以看到当我们在GUI工具中使用拼音和拼写时,我们得到两个解释(out),(我们应该只得到一个 - 不确定为什么?也许语法的语法也是错误的......)但是即使只是一个在命令行工具上提供单一解释的咒语也非常有效。

  <?xml version="1.0" encoding="UTF-8"?>
    <grammar xmlns="http://www.w3.org/2001/06/grammar" xml:lang="en-GB" version="1.0" root="TOPLEVEL" mode="voice">
      <rule id="TOPLEVEL" scope="public">
        <item repeat="0-1">
          <ruleref uri="#Preamble"/>
        </item>
        <one-of>
          <item> start again </item>
          <item repeat="2-15">
            <one-of>
              <item>
                <one-of>
                  <item>double</item>
                  <item>twice</item>
                  <item>two times</item>
                </one-of>
                <ruleref uri="#Spell_Alpha"/>
                <tag>assign(alphanum strcat($alphanum strcat($return  $return ))))</tag>
              </item>
              <item>
                <ruleref uri="#Spell_Alpha"/>
                <tag>assign(alphanum strcat($alphanum $return))</tag>
              </item>
            </one-of>
          </item>
        </one-of>
        <tag><![CDATA[<out $alphanum >]]></tag>
      </rule>
      <rule id="Prepositions" scope="public">
        <item>
          <one-of>
            <item repeat="0-1">for</item>
            <item repeat="0-1">as in</item>
            <item repeat="0-1">as</item>
            <item repeat="0-1">like</item>
          </one-of>
        </item>
      </rule>
      <rule id="Spell_Alpha" scope="public">
        <item>
          <one-of>
            <item weight="1.9">
              <item>
                <ruleref uri="#LETTERS"/>
              </item>
            </item>
            <item weight="0.6"><item repeat="0-1">the

     </item>



                        letter



                            <item repeat="1"><ruleref uri="#LETTERS"/></item>

    </item>
            <item weight="0.6">
              <item>
                <ruleref uri="#LETTERS"/>
              </item>
              <item repeat="1">
                <ruleref uri="#Prepositions"/>
              </item>
              <item>
                <ruleref uri="#PHONETICS_BASIC"/>
              </item>
            </item>
            <item>
              <item weight="2.0">
                <ruleref uri="#PHONETICS_BASIC"/>
              </item>
            </item>
          </one-of>
        </item>
        <tag> return($return)</tag>
      </rule>
      <rule id="LETTERS" scope="public">
        <item>
          <one-of>
            <item weight="1.584"> ay <tag> return("a") </tag></item>
            <item weight="1.584"> eh <tag> return("a") </tag></item>
            <item weight="1.584"> a <tag> return("a") </tag></item>
            <item weight="1.584"> be<tag> return("b") </tag></item>
            <item weight="1.166"> bee <tag> return("b") </tag></item>
            <item weight="1.222"> sea <tag> return("c") </tag></item>
            <item weight="1.222"> see  <tag> return("c") </tag></item>
            <item weight="1.229">dee<tag> return("d") </tag></item>
            <item weight="1.639">ee<tag> return("e") </tag></item>
            <item weight="1.072">eff<tag> return("f") </tag></item>
            <item weight="1.072"> ef<tag> return("f") </tag></item>
            <item weight="1.072">f<tag> return("f") </tag></item>
            <item weight="1.160"> gee <tag> return("g") </tag></item>
            <item weight="1.160">g <tag> return("g") </tag></item>
            <item weight="1.274">  h <tag> return("h") </tag></item>
            <item weight="1.274"> aych <tag> return("h") </tag></item>
            <item weight="1.274"> haych <tag> return("h") </tag></item>
            <item weight="1.384"> eye <tag> return("i") </tag></item>
            <item weight="1.040"> jay <tag> return("j") </tag></item>
            <item weight="1.146">  kay <tag> return("k") </tag></item>
            <item weight="1.146">  cay <tag> return("k") </tag></item>
            <item weight="1.459"> elle <tag> return("l") </tag></item>
            <item weight="1.459"> ell <tag> return("l") </tag></item>
            <item weight="1.459"> el <tag> return("l") </tag></item>
            <item weight="1.230">  m <tag> return("m") </tag></item>
            <item weight="1.230">  em <tag> return("m") </tag> </item>
            <item weight="1.510"> in <tag> return("n") </tag></item>
            <item weight="1.510"> en <tag> return("n") </tag></item>
            <item weight="1.510">n <tag> return("n") </tag></item>
            <item weight="1.510"> inn <tag> return("n") </tag></item>
            <item weight="1.489"> oh <tag> return("o") </tag></item>
            <item weight="1.489"> owe <tag> return("o") </tag></item>
            <item weight="1.107">  pea <tag> return("p") </tag></item>
            <item weight="1.107">  pee <tag> return("p") </tag></item>
            <item weight="1.004"> queue <tag> return("q") </tag></item>
            <item weight="1.004">  cue <tag> return("q") </tag></item>
            <item weight="1.534">  are <tag> return("r") </tag></item>
            <item weight="1.424">   s <tag> return("s") </tag></item>
            <item weight="1.331">   tea <tag> return("t") </tag></item>
            <item weight="1.331">  tee <tag> return("t") </tag></item>
            <item weight="1.139"> you <tag> return("u") </tag></item>
            <item weight="1.054"> vee <tag> return("v") </tag></item>
            <item weight="1.054"> v <tag> return("v") </tag></item>
            <item weight="1.166"> double you <tag> return("w") </tag></item>
            <item weight="1.166"> doubleyou<tag> return("w") </tag></item>
            <item weight="1.166"> w<tag> return("w") </tag></item>
            <item weight="1.010"> x <tag> return("x") </tag></item>
            <item weight="1.010"> ex <tag> return("x") </tag></item>
            <item weight="1.010"> ehks <tag> return("x") </tag></item>
            <item weight="1.147">  why <tag> return("y") </tag></item>
            <item weight="1.025">  z <tag> return("z") </tag></item>
            <item weight="1.025"> zee <tag> return("z") </tag></item>
            <item weight="1.025"> zed <tag> return("z") </tag></item>
          </one-of>
        </item>
      </rule>
      <rule id="PHONETICS_BASIC" scope="public">
        <item>
          <one-of>
            <item> alpha <tag> return("a") </tag></item>
            <item> alfa <tag> return("a") </tag></item>
            <item>alice<tag> return("a") </tag></item>
            <item> bravo <tag> return("b") </tag></item>
            <item> charlie <tag> return("c") </tag></item>
            <item> delta <tag> return("d") </tag></item>
            <item> echo <tag> return("e") </tag></item>
            <item> foxtrot <tag> return("f") </tag></item>
            <item> freddie <tag> return("f") </tag></item>
            <item> freddy <tag> return("f") </tag></item>
            <item> golf <tag> return("g") </tag></item>
            <item> hotel <tag> return("h") </tag></item>
            <item> indigo <tag> return("i") </tag></item>
            <item> india <tag> return("i") </tag></item>
            <item> juliet <tag> return("j") </tag></item>
            <item> john <tag> return("j") </tag></item>
            <item> kilo <tag> return("j") </tag></item>
            <item>lima <tag> return("l") </tag></item>
            <item> mike <tag> return("m") </tag></item>
            <item> mother <tag> return("m") </tag></item>
            <item> november <tag> return("n") </tag></item>
            <item> oscar <tag> return("o") </tag></item>
            <item>  oliver <tag> return("o") </tag></item>
            <item> papa <tag> return("p") </tag></item>
            <item> pappa <tag> return("p") </tag></item>
            <item> quebec <tag> return("q") </tag></item>
            <item> queen <tag> return("q") </tag></item>
            <item> romeo <tag> return("r") </tag></item>
            <item> roger <tag> return("r") </tag></item>
            <item> robert <tag> return("r") </tag></item>
            <item> sierra <tag> return("s") </tag></item>
            <item>sugar <tag> return("s") </tag></item>
            <item> tango <tag> return("t") </tag></item>
            <item>  uniform <tag> return("u") </tag></item>
            <item> victor <tag> return("v") </tag></item>
            <item> whiskey <tag> return("w") </tag></item>
            <item> william <tag> return("w") </tag></item>
            <item> ex ray <tag> return("x") </tag></item>
            <item> yankee <tag> return("y") </tag></item>
            <item> yellow <tag> return("y") </tag></item>
            <item> zulu <tag> return("z") </tag></item>
            <item> zero <tag> return("z") </tag></item>
            <item> zebra <tag> return("z") </tag></item>
          </one-of>
        </item>
      </rule>
      <rule id="Preamble">
        <one-of>
          <item weight="0.2">right</item>
          <item weight="0.2">alright my surname's mrs</item>
        </one-of>
      </rule>
    </grammar>

1 个答案:

答案 0 :(得分:1)

你要求识别引擎执行一些它不能做得很好的任务。高度可变长度的短词列表(在这种情况下为字母)。根据我的经验,Nuance引擎并没有做得很好。我不确定今天哪些引擎(如果有的话)会更好,但我还没有经过足够的实验。一些较新的,独立于扬声器的听写引擎可能有更好的机会。

可能有所帮助的一些事情:

  • 如果文本背后有一些逻辑模式或逻辑(即单词,名称),并且您有足够的样本,则统计语言模型(SLM)可能会更好。鉴于您可能支持某个名称,这是我之前使用过的方法。准确性仍然明显低于普通语法,但它给你一个战斗机会(我建立一个名字和姓氏捕获...一个作为拼写的静态语法,并说出名称和另一个作为拼写名称的SLM两者都是根据相同的人口普查数据构建的。两者都具有相似的准确性。如果我使用一个然后使用另一个作为后备,我使用稍微旧版本的Nuance识别引擎获得大约75%的任务成功率)
  • 如果您可以让用户使用单词(即alpha)而不是字母,则可以增加可用于匹配正确输入的声音数量。
  • 减少长度的变化。发动机不仅难以将短音与噪音分开,而且你会发现识别器使用的CPU比正常的短输入声音要多得多。
  • 如果您可以构建本机语法并调整本机调整参数,则可以使用系统中的调整权衡来使用更多的CPU和时间来更好地识别。对于您目前构建解决方案的方式,我认为任何数量的额外资源都不足以满足引擎的运行方式。
  • 删除一些发音。我怀疑你并没有使用它们获得准确性,但是无论有没有扩展的语法/发音选项,我都必须运行样本。