现如今ASR(语音识别技术)发展到什么阶段我不清楚,但识别率肯定是达不到100%的,识别率跟你所采用的识别模型,声音样本丰富程度,和语音文件的音质有关。 如果普通话标准,且语音文件质量可以的情况下,主流的几大厂商识别结果还是比较准确的,比如手机的语音输入法,语音控制,基本上可以达到97%的准确率。 但电话的语音识别比较尴尬,基本上现在运营商的通话线路都是压缩为8000Hz的采样率,再加上现场环境噪音,网络波动影响,口音问题等等,导致电话中的语音识别准确率普遍不高。
现实问题如此,那么有没有什么办法可以提高电话中识别的准确率呢? 我有一个不太聪明的办法。
现在普遍的电话语音识别,基本上都是根据识别结果,来匹配预设的关键词。(那些所谓标榜智能电话,用到NLP技术的,我就纳闷你连基本的识别准确度都还没解决呢,谈什么NLP。)
但是电话中的诸多影响因素导致识别准确度较低。比如:
1. “您好”, “你好” 这种的还算一个意思。
2. “我在仁和”,”我在人和”,这就完全是两个地方了,但这种的发音还是一样的。
3. “我要几家”,”我要寄件”,这两个既不是同一个意思,发音也不一样了,但总归发音还是有接近之处。
针对这三种情况,我的不太聪明的办法就是:
第一种,做同义词库
第二种,转拼音来匹配
第三种,转拼音后,计算拼音相似度,根据多个词最终相似度的对比,以及不同字数的关键词设置阈值,来计算出最符合的那一个结果。
把三种方法结合后:
例如语音说: “你好,我在人和,我想要联系快递点,有很多货要寄件”。
语音识别结果: 您好,我在仁和,我想要练习,快点,有很多活,要几家
关键词: 你好,人和,快递点,寄件,
1,先根据关键词的同义词库,来匹配一遍,得出命中关键词,你好。
2,把识别结果和关键词用中文分词库来分词(有一些开源的可选),将分词后的词都转为拼音。
3,用每一个关键词去匹配识别结果的分词,根据相似度计算出一个分数。由于字数多少的关键词匹配度不尽相同,例如 “很多家” 和“恒大” 这样的三个字和两个字我们要区别对待,一般来说,如果两个关键词匹配度一样,往往字数多的那一个更加贴合实际,所以我们要给不同字数来设定一个”系数”和”阈值”,系数用来参与计算最终符合的那个词,阈值用于决定达到多少相似度才算命中关键词。 例如我们给两个字的关键词设置阈值为85, 如果最终匹配的相似度不足85,则表示没有命中该关键词,具体不同字数的关键词的阈值,需要一些样本数据来统计。
4,实际场景中,由于关键词也有优先度,例如”寄件”属于业务词,可能重要级高于”几家”,再比如”不是的”肯定比”是的”更优先,虽然”不是的”包含了”是的”,但说话的意思是前一个。所以根据词的属性,例如 疑问词,肯定词,否定词,或者按照行业特性来分类的价格词,方案词,服务词。 我们给这些不同的词配一个权重值。
那么最终一个关键词的得分是 匹配度的得分*系数*权重,最后从命中关键词中选出得分最高的,即最符合实际意思的那一个或多个词。
嘛。。。现如今,总体感觉如下: