grxml拼写和语音语法的表现

Performance of grxml spell and phonetic grammar

下面的语法执行的很烂,我想知道是不是语法本身有什么问题,如果是如何改进,

这是古老的 Nuance 8.5,识别器的性能可能是这样?

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

  <?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>

您要求识别引擎执行一些它做得不太好的任务。高度可变的短词列表(在本例中为字母)。根据我的经验,Nuance 引擎在这方面做得不是很好。我不确定现在可用的引擎(如果有的话)会更好,但我还没有进行足够的试验。一些较新的、独立于说话者的听写引擎可能有更好的机会。

一些可能有帮助的事情:

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