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 选项。
下面的语法执行的很烂,我想知道是不是语法本身有什么问题,如果是如何改进,
这是古老的 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 选项。