如何处理语音识别中的同音字?
How to handle homophones in speech recognition?
对于那些不熟悉什么是 homophone 的人,我提供以下示例:
- 我们的 & 是
- 高和高
- 到&太&两个
在使用 iOS 中包含的 Speech API 时,我遇到这样的情况:用户可能会说出这些词之一,但它并不总是 return 我想要的词。
我查看了 [alternativeSubstrings]
(link) 属性 想知道这是否有帮助,但在我对上述单词的测试中,它总是返回空的。
我也查看了 Natural Language API,但在那里找不到有用的东西。
我知道当用户添加更多单词时,语音 API 可以开始推断上下文并纠正这些单词,但我的用例不会很好地处理这个,因为它通常只需要一个或最多两个词,限制上下文的有效性。
上下文处理示例:
单独使用上面的词,我得到了这些结果:
- 是
- 嗨
- 到
但是,如果我把下面这句话放在一起,你会发现它们都是错误的:
I am too high for our ladder
理想情况下,我会得到一个包含每个转录片段 [are, our], [to, too, two], [hi, high]
的列表,或者有办法将字符串与支持同音字的函数进行比较。
这方面的一个例子是:
if myDetectedWord == "to" then { ... }
其中 myDetectedWord
可以是 [to, too, two]
,并且此函数对于其中的每一个都 return 为真。
这是一个常见的 NLP 难题,我不太确定您在此应用程序中想要的输出是什么。但是,如果可能的话,您可能希望在 design/architecture 过程中绕过这个问题。否则,这个问题就是变成一个挑战。
话说回来,如果你想真正投入其中,我喜欢你的这个想法:
string against a function
这可能更高效且性能更友好。
一种方法,我想通过 RegEx 处理来解决这个问题,而不是使用无限循环和数组。您可以先制作循环和数组的原型,看看它是如何工作的,然后您可能想使用正则表达式来提高性能。
例如,您可以在正则表达式中定义固定数组并快速检查您的字符串(逐字逐句,可能使用 back-referencing)并且您可以在 expressions 中添加许多边界以进行字符串处理, 如你所愿。
您的固定数组也可以根据特定单词在字符串的特定部分出现的概率来设计。例如,
^I
对
^eye
I
是第一个词的概率比eye
高很多。
I
在字符串任何部分出现的概率也高于eye
。
您可能希望基于此对单词进行加权。
I'd say the key would be that you'd narrow down your desired outputs as focused as possible and increase accuracy, [maybe even with 100 words if possible], if you wish to have a good/working application.
虽然是个好项目,但我希望你like/enjoy能够接受挑战。
对于那些不熟悉什么是 homophone 的人,我提供以下示例:
- 我们的 & 是
- 高和高
- 到&太&两个
在使用 iOS 中包含的 Speech API 时,我遇到这样的情况:用户可能会说出这些词之一,但它并不总是 return 我想要的词。
我查看了 [alternativeSubstrings]
(link) 属性 想知道这是否有帮助,但在我对上述单词的测试中,它总是返回空的。
我也查看了 Natural Language API,但在那里找不到有用的东西。
我知道当用户添加更多单词时,语音 API 可以开始推断上下文并纠正这些单词,但我的用例不会很好地处理这个,因为它通常只需要一个或最多两个词,限制上下文的有效性。
上下文处理示例:
单独使用上面的词,我得到了这些结果:
- 是
- 嗨
- 到
但是,如果我把下面这句话放在一起,你会发现它们都是错误的:
I am too high for our ladder
理想情况下,我会得到一个包含每个转录片段 [are, our], [to, too, two], [hi, high]
的列表,或者有办法将字符串与支持同音字的函数进行比较。
这方面的一个例子是:
if myDetectedWord == "to" then { ... }
其中 myDetectedWord
可以是 [to, too, two]
,并且此函数对于其中的每一个都 return 为真。
这是一个常见的 NLP 难题,我不太确定您在此应用程序中想要的输出是什么。但是,如果可能的话,您可能希望在 design/architecture 过程中绕过这个问题。否则,这个问题就是变成一个挑战。
话说回来,如果你想真正投入其中,我喜欢你的这个想法:
string against a function
这可能更高效且性能更友好。
一种方法,我想通过 RegEx 处理来解决这个问题,而不是使用无限循环和数组。您可以先制作循环和数组的原型,看看它是如何工作的,然后您可能想使用正则表达式来提高性能。
例如,您可以在正则表达式中定义固定数组并快速检查您的字符串(逐字逐句,可能使用 back-referencing)并且您可以在 expressions 中添加许多边界以进行字符串处理, 如你所愿。
您的固定数组也可以根据特定单词在字符串的特定部分出现的概率来设计。例如,
^I
对
^eye
I
是第一个词的概率比eye
高很多。I
在字符串任何部分出现的概率也高于eye
。
您可能希望基于此对单词进行加权。
I'd say the key would be that you'd narrow down your desired outputs as focused as possible and increase accuracy, [maybe even with 100 words if possible], if you wish to have a good/working application.
虽然是个好项目,但我希望你like/enjoy能够接受挑战。