【ChipIntelli 系列】4-命令词信息表[60000]{xxxx}.xls 文件详解

0. 背景知识

文件路径:%SDK_PATH%\projects\sample_xxx\firmware\user_file\cmd_info\[60000]{cmd_info}.xlsx

它的作用是可以控制命令词与播报语的匹配、播报语的组合随机播报的效果。

image

1. 什么是命令词信息表呢?

如下图所示,麦克风将语音转换为数字信号,送到NN做识别。

NN识别需要两个资源,声学模型和语言模型,NN识别后输出字符串。

然后,在命令词信息表里查找NN输出的字符串(如果查找到,就是有效识别,反之则为误识别,不处理。)

最后,根据索引找到对应的播报语,完成播报。

语音识别的流程及所需资源

2. 尝试去编辑命令词信息表文件吧!

将之前下载得到的(之前进行组件开发的文件)命令词信息表文件:”[60000]{xxxx}.xls”拷贝到路径:%SDK_PATH%\projects\sample_xxx\firmware\user_file\cmd_info\,替换原来的[60000]{xxx}.xls文件,

并按照项目逻辑做相关修改,主要是关联播报音,设置唤醒词,调整识别灵敏度等。

image

图4-1 命令词信息表文件

注解

  1. 模型名:用于设置当前这套命令词对应的模型名称,目前就2个:NN ID(声学模型文件ID)、ASR ID(语言模型文件ID)。
  2. 模型ID:用于设置当前这套命令词对应的模型ID号。填写0及大于0的数字均可,但需与文件前缀[ID]号匹配。例如,[3]asr_xxx_cmd.dat文件标识ID为3,ASR ID的模型ID就填3。
  3. 命令词:命令词字符串。
  4. 命令词ID:开发者自定义的命令词ID ,方便快速开发实现逻辑。默认不支持不同命令词使用相同的命令词ID,如果一定要可以修改脚本文件“cmd_info.bat”,cmd_info.exe 命令后添加“- -no-cmd-id-duplicate-check”。
  5. 命令词语义ID:语义ID,启英泰伦自定义的字符串语义ID,具有唯一性,如果产品考虑家庭组网的话,可以用此ID解决多个设备的命令词冲突问题。
  6. 置信度:用于调整命令词的识别灵敏度,解决误识别等。
  7. 唤醒词:用于指定唤醒词。
  8. 组合词:用于指定组合词,既是唤醒词,又是命令词,少了唤醒一步。
  9. 期望词:用在某些命令词特别不容易识别时使用。
  10. 不期望词:用在某些命令词特别容易识别,而不能识别另外一个相似的正确命令词,导致误识别。
  11. 特殊词计数:用于短的命令词截获具有相同内容的长命令词的情况。比如:“加热”和“加热三分钟”,可能说“加热三分钟”,也会得到“加热”的结果。解决方法是给“加热”命令词设置特殊词计数,在识别到“加热”后,再等待一会,看后续是否有相近命令结果,如果有就丢弃“加热”。也不能设置的太大,否则会明显增大“加热”的响应时间。
  12. 播报音类型:主要用于多个选择播报时,指定选择的方式。当前支持两种,“随机选择”(调用播报接口时,select_index设置为-1),“自定义选择”(调用播报接口时,select_index设置为要选择的值)。
  13. 播报音ID:播报音文件ID(也就是第4章中的音频序号),组合播报用‘+’连接(最多支持16个音频组合),如果有多个选择播报,则起到随机效果,每个选择项占一列,最多127列。
  14. 模型分组ID:用于多模型切换。SDK demo中默认0为命令词模型,1为唤醒词模型。

 

扩展:什么是声学模型,什么是语言模型

以一个问题引入——声学模型能识别出具体的字符串吗?

 

好的,这是一个非常核心的自然语言处理问题,尤其在语音识别领域。我来用一个通俗易懂的方式解释清楚。

一句话概括

  • 声学模型:负责回答“这段声音最可能对应哪个发音单元?” 它处理的是音频信号

  • 语言模型:负责回答“这几个词连在一起构成一句人话的可能性有多大?” 它处理的是文字序列的概率。

两者协同工作,才能将声音准确地转写成通顺的文本。


1. 声学模型

声学模型是语音识别系统的“耳朵”。它的核心任务是将输入的声音信号映射到最基本的发音单位(比如音素、音节等)。

  • 输入:一段音频的声学特征(例如MFCC,滤波器组特征等),这些特征代表了声音的频谱、能量等信息。

  • 输出:给出这段音频对应一系列音素(或状态)的概率分布。例如,它可能会判断:“当前这个声音片段,有80%的概率是音素 /sh/,15%的概率是 /s/,5%的概率是 /ch/。”

声学模型不能直接识别出具体的字符串(如“苹果”),它只能识别出类似“/p/ /i/ /ng/ /g/ /u/ /o/”这样的发音序列。 它就像一个刚学说话、只懂发音但不懂词义的小孩。

技术实现:传统上使用隐马尔可夫模型,现在主流是深度学习模型,如循环神经网络(RNN)、Transformer等。

2. 语言模型

语言模型是语音识别系统的“大脑”。它的核心任务是学习一种语言中词汇之间的组合规律,判断一个词序列是否通顺、合理。

  • 输入:一个词序列(例如,“今天 天气 很好”)。

  • 输出:这个序列出现的概率。语言模型会根据海量的文本数据(如新闻、书籍、网页)进行训练,学习到语言的统计规律。

    • “今天 天气 很好”的概率会非常高。

    • “天气 很好 今天”的概率会低一些。

    • “苹果 吃 我”的概率会更低。

    • “菠 筐 绿 史”的概率几乎为零。

语言模型的作用就是纠正声学模型可能产生的发音上的错误,并选择最符合语言习惯的文本作为最终结果。

技术实现:早期使用N-gram模型,现在普遍使用神经网络语言模型,如基于Transformer的GPT系列模型就是极其强大的语言模型。


两者如何协同工作?

语音识别过程可以看作一个搜索问题:在所有可能的句子中,找到那个最符合声学特征同时又最符合语言规律的句子。

我们用经典的“盘子/盆子” 例子来说明:

假设你说了一句“窗台上放着一个pén子”。

  1. 声学模型分析:声学模型分析音频后,发现“pén”这个发音,它可能对应两个音素序列:

    • /p/ /en/ /z/ /i/ -> 对应汉字“盆子”

    • /p/ /an/ /z/ /i/ -> 对应汉字“盘子”

    • 从纯发音上看,两者概率可能非常接近,声学模型无法决断。

  2. 语言模型介入:这时,语言模型开始工作。它根据上下文“窗台上放着一个____子”来计算:

    • P(“窗台上放着一个盆子”) 和 P(“窗台上放着一个盘子”)

    • 虽然“盆子”和“盘子”都是合理的词,但语言模型通过分析海量文本数据可能会发现,在“窗台上放着”这个语境下,“盘子”出现的概率远高于“盆子”(因为人们更常说窗台上放盘子而不是盆子)。

  3. 综合决策:识别系统(通常使用解码器)会综合声学模型给出的发音概率和语言模型给出的词序列概率,最终选择总得分最高的那个序列作为识别结果。因此,即使你的发音更接近“pén”,系统也可能输出更符合语境的“盘子”。


回到你的问题:声学模型能识别出具体的字符串吗?

答案是:不能直接识别。

声学模型就像一个语音学家,它只关心声音本身的物理属性,并将其转换为发音符号。它不认识“苹果”这个词,它只知道 /p/ /i/ /ng/ /g/ /u/ /o/ 这一串音素。

是声学模型和语言模型结合在一起,才最终输出了“苹果”这个具体的字符串。 声学模型提供了候选的发音路径,语言模型则在这些路径中挑选出最像“人话”的那一条。

现代端到端模型

值得注意的是,随着深度学习的发展,出现了端到端的语音识别模型(如LAS模型)。这种模型将声学模型和语言模型融合在一个统一的神经网络中,直接学习从音频特征到文本序列的映射。在这种模型里,声学和语言信息的界限变得模糊,但它的内部机制仍然隐式地包含了这两种功能。

启英泰伦中的声学模型和语言模型

声学模型如下:可见声学模型不是自定义的,而是固定的。(在表格中被称为ASR)

image

文件格式如下:后缀为 .fefixbinxxxx

image

 

语言模型是用户自定义的,在表格中被称为DNN (全称是 Deep Neural Network 深度神经网络)

文件格式如下:后缀为dat

image

 

posted @ 2025-06-18 21:47  FBshark  阅读(27)  评论(0)    收藏  举报