首页 > 解决方案 > 语音识别中如何处理同音字?

问题描述

对于那些不熟悉同音字是什么的人,我提供以下示例:

在使用 iOS 附带的Speech API时,我遇到了用户可能会说出其中一个词的情况,但它并不总是会返回我想要的词。

我查看了[alternativeSubstrings]( link ) 属性,想知道这是否有帮助,但是在我对上述单词的测试中,它总是返回空。

我还查看了Natural Language API,但在其中找不到任何看起来有用的东西。

我知道当用户添加更多单词时,Speech API 可以开始推断上下文并纠正这些,但是我的用例不能很好地处理这个问题,因为它通常最多只需要一个或两个单词,从而限制了语境。

上下文处理的示例:

单独使用上面的话,我得到了这些结果:

但是,如果我将以下句子放在一起,您会发现它们都是错误的:

我对我们的梯子太高了

理想情况下,我要么得到一个包含[are, our], [to, too, two], [hi, high]每个转录片段的列表,要么有办法将字符串与支持同音字的函数进行比较。

这方面的一个例子是:

if myDetectedWord == "to" then { ... }

myDetectedWord可以在哪里[to, too, two],并且此函数将为其中的每一个返回 true。

标签: iosswiftstringnlpspeech-recognition

解决方案


这是一个常见的 NLP 困境,我不太确定在这个应用程序中你想要的输出是什么。但是,如果可能的话,您可能希望在您的设计/架构过程中绕过这个问题。否则,这个问题就会变成挑战。


话虽如此,如果你想真正进入它,我喜欢你的这个想法:

对函数的字符串

这可能更高效且性能友好。

一种方法是,我希望通过 RegEx 处理来解决这个问题,而不是使用无限循环和数组。您可以从原型循环和数组开始,看看它是如何工作的,然后您可能想要使用正则表达式来获得性能。

例如,您可以在正则表达式中定义固定数组并快速检查您的字符串(逐字逐句,可能使用反向引用),并且您可以根据需要在表达式中添加许多边界以进行字符串处理。

在此处输入图像描述

您的固定数组也可以根据字符串某些部分中某些单词出现的概率来设计。例如,

^I 

对比

^eye
  • 成为第一个词的概率I远高于eye
  • 的概率I在字符串的任何部分都高于 ,的概率eye

您可能希望基于此对单词进行加权。

我想说的关键是,如果你希望有一个好的/有效的应用程序,你会尽可能集中缩小你想要的输出范围并提高准确性,[如果可能的话,甚至可以使用 100 个单词]。

好项目,我希望你喜欢/享受挑战。


推荐阅读