论文部分内容阅读
中图分类号:TN97 文献标识码:A 文章编号:1009-914X(2016)16-0167-01
随着AlphaGo(围棋人工智能程序)在2016年初击败了世界围棋冠军后,人工智能技术的研发与讨论继续走向一个新的高峰,而语音识别技术则是其核心内容。
本文主要基于语音识别技术的语音解码模块进行讨论,从其涉及技术、设计、实现进行全面描述。运用解码器进行解码操作,通过搜索算法在解码端寻找最优词串,搭建和训练声学模型,并提高语音识别率。本项目基于一个完整的Android软件作为依托,但由于篇幅有限,本文重点讨论离线语音包、搭建语言模型、以及语音解码模块的设计过程。
1.项目背景
语音识别技术是能够将人的语音信号转换成机器可以识别的指令的一种方法,通过指令来控制机器的正常运转。语音识别的任务主要包括:孤立词识别、关键词识别、连续语音识别等。
市面上的离线语音识别一直不成熟,识别慢、识别率低等问题一直被人诟病。本项目离线语音识别部分是基于Sphinx-4自行训练得到的声学模型和语言模型,在小词汇量识别方面尽量提高其识别率。
2.需求分析
一个成熟的语音识别系统可以划分为特征提取、声学模型训练、语言模型训练和解码器四个重要组成部分;而离线端语音解码模块,包括了对原始语音进行信号处理、特征提取、通过Viterbi动态规划算法搜索最优结果、语义分析及输出文本结果等步骤。
1、 原始信号处理:获取通过麦克风按钮接收到的原始音频数据,过滤非必要信息以及背景噪音对语音前端点和后端点进行截取,对语音信号分割成若干个进行分析;
2、 特征提取:根据sphinxbase语音系统给出的接口,提取出语音信号的关键特征,并将其生成一个序列,以供解码处理时搜索这个隐式序列,得出结果;
3、 算法搜索最优序列:根据Viterbi算法设计出计算序列中出现概率最大的词串的方法,搜索出每一帧语音信号的最优路径,输出结果;
4、 语义分析及输出识别结果:根据孤立的关键词判断搜索出来的语音结果属于哪一个应用场景,如“打电话”、“发短信”、“上一频道”、“下一频道”等等孤立词;
离线语音解码模块流程如下图2-1所示:
3.系统设计
3.1.特征提取
特征提取的主要目的是减少语音噪声静音等无用的杂讯,获取必要的讯号数据,将数据转换成电脑可以识别的数字信号,以便作识别和语义分析。
本语音识别技术模块基于Sphinx4语音识别系统进行开发的,其中声音的预处理是利用MATLAB这一便于算法开发的软件来实现对语音信号进行数字处理与分析,也可称为特征处理。其包括对原语音信号进行预加重处理,然后需要进行分帧和加窗、采样和量化、端点检测等。
其中,包括:预加重处理、分帧、量化处理以及语音端点检测等过程。如下3-1所示:
3.2. 基于动态规划的Viterbi算法
动态规划算法的基本思想是将问题分解成若干个子问题,求解子问题,最后从子问题的解中得到原问题的解。通常利用动态规划算法解决问题的步骤是先找出最优解的性质,刻画最优解的结构特征,然后递归定义出最优解,用自底向上的方法计算出最优路径,最后根据计算出来的最优值信息,构造最优解。图下图3-2所示:
因此,基于动态规划的Viterbi算法的整体设计思路如下:
1、 对于每一个语音状态要设置一个三元组作为记录:(prob,v_path,v_prob),这里声明的prob是从最初状态的到当前状态的所有路径的出现概率相加的结果,其中最优的路径为viterbi路径,v_path代表的就是viterbi路径,而v_prob代表的则是此路径出现的概率;
2、 算法开始后,初始化一个Map集合,把每一种语音状态都映射进三元组中
3、 设置三重for循环,计算从当前语音状态到下一阶段的过渡概率会出现什么变化,所有下一状态判断完之后,从集合中遍历找出最优结果,即出现概率最大的路径;
4、 保留每一帧语音在某个状态的最优路径,输出结果。
4.总结
语音识别技术的核心是HMM技术(隐式马尔科夫模型),而本文主要基于语音识别技术的语音解码模块进行讨论,从其涉及技术、设计、实现进行全面描述,对离线解码模块中的特征提取、以及使用动态规划的Viterbi算法实现搜索最优序列进行了详细介绍。模块基本实现完成,但仍有很多值得提升和完善空间,今后可以使用更先进的算法进行优化。
参考文献
[1] 朱元涛.Android应用开发范例大全[M]. 清华大学出版社.2015.
[2] 郭霖. 第一行代码 Android [M]. 人民邮电出版社. 2014.
[3] 何红辉,关爱民.Android 源码设计模式解析与实战 [M]. 人民邮电出版社. 2015.
[4] Android Studio Applicati [M]. 进口原版图书.
[5] The Definitive Guide to Sqlite [M]. Apress.
[6] 李兴华.Android开发实战经典[M].清华大学出版社.2012.
[7] Android开发实战[M].清华大学出版社.2013.
[8] 赵卓君.Java语言程序设计高级教程[M].北京.清华大学出版社.2010.
[9] 朱少民.软件测试方法和技术(第2版)[M].北京.清华大学出版社.2010.
[10] UML和模式应用[M].机械工业出版社.2006.
[11] 钱乐秋、赵文耘、牛军钰.软件工程[M].北京.清华大学出版社.2007.
[12] 王晓东.计算机算法设计与分析[M].电子工业出版社.2012.
随着AlphaGo(围棋人工智能程序)在2016年初击败了世界围棋冠军后,人工智能技术的研发与讨论继续走向一个新的高峰,而语音识别技术则是其核心内容。
本文主要基于语音识别技术的语音解码模块进行讨论,从其涉及技术、设计、实现进行全面描述。运用解码器进行解码操作,通过搜索算法在解码端寻找最优词串,搭建和训练声学模型,并提高语音识别率。本项目基于一个完整的Android软件作为依托,但由于篇幅有限,本文重点讨论离线语音包、搭建语言模型、以及语音解码模块的设计过程。
1.项目背景
语音识别技术是能够将人的语音信号转换成机器可以识别的指令的一种方法,通过指令来控制机器的正常运转。语音识别的任务主要包括:孤立词识别、关键词识别、连续语音识别等。
市面上的离线语音识别一直不成熟,识别慢、识别率低等问题一直被人诟病。本项目离线语音识别部分是基于Sphinx-4自行训练得到的声学模型和语言模型,在小词汇量识别方面尽量提高其识别率。
2.需求分析
一个成熟的语音识别系统可以划分为特征提取、声学模型训练、语言模型训练和解码器四个重要组成部分;而离线端语音解码模块,包括了对原始语音进行信号处理、特征提取、通过Viterbi动态规划算法搜索最优结果、语义分析及输出文本结果等步骤。
1、 原始信号处理:获取通过麦克风按钮接收到的原始音频数据,过滤非必要信息以及背景噪音对语音前端点和后端点进行截取,对语音信号分割成若干个进行分析;
2、 特征提取:根据sphinxbase语音系统给出的接口,提取出语音信号的关键特征,并将其生成一个序列,以供解码处理时搜索这个隐式序列,得出结果;
3、 算法搜索最优序列:根据Viterbi算法设计出计算序列中出现概率最大的词串的方法,搜索出每一帧语音信号的最优路径,输出结果;
4、 语义分析及输出识别结果:根据孤立的关键词判断搜索出来的语音结果属于哪一个应用场景,如“打电话”、“发短信”、“上一频道”、“下一频道”等等孤立词;
离线语音解码模块流程如下图2-1所示:
3.系统设计
3.1.特征提取
特征提取的主要目的是减少语音噪声静音等无用的杂讯,获取必要的讯号数据,将数据转换成电脑可以识别的数字信号,以便作识别和语义分析。
本语音识别技术模块基于Sphinx4语音识别系统进行开发的,其中声音的预处理是利用MATLAB这一便于算法开发的软件来实现对语音信号进行数字处理与分析,也可称为特征处理。其包括对原语音信号进行预加重处理,然后需要进行分帧和加窗、采样和量化、端点检测等。
其中,包括:预加重处理、分帧、量化处理以及语音端点检测等过程。如下3-1所示:
3.2. 基于动态规划的Viterbi算法
动态规划算法的基本思想是将问题分解成若干个子问题,求解子问题,最后从子问题的解中得到原问题的解。通常利用动态规划算法解决问题的步骤是先找出最优解的性质,刻画最优解的结构特征,然后递归定义出最优解,用自底向上的方法计算出最优路径,最后根据计算出来的最优值信息,构造最优解。图下图3-2所示:
因此,基于动态规划的Viterbi算法的整体设计思路如下:
1、 对于每一个语音状态要设置一个三元组作为记录:(prob,v_path,v_prob),这里声明的prob是从最初状态的到当前状态的所有路径的出现概率相加的结果,其中最优的路径为viterbi路径,v_path代表的就是viterbi路径,而v_prob代表的则是此路径出现的概率;
2、 算法开始后,初始化一个Map集合,把每一种语音状态都映射进三元组中
3、 设置三重for循环,计算从当前语音状态到下一阶段的过渡概率会出现什么变化,所有下一状态判断完之后,从集合中遍历找出最优结果,即出现概率最大的路径;
4、 保留每一帧语音在某个状态的最优路径,输出结果。
4.总结
语音识别技术的核心是HMM技术(隐式马尔科夫模型),而本文主要基于语音识别技术的语音解码模块进行讨论,从其涉及技术、设计、实现进行全面描述,对离线解码模块中的特征提取、以及使用动态规划的Viterbi算法实现搜索最优序列进行了详细介绍。模块基本实现完成,但仍有很多值得提升和完善空间,今后可以使用更先进的算法进行优化。
参考文献
[1] 朱元涛.Android应用开发范例大全[M]. 清华大学出版社.2015.
[2] 郭霖. 第一行代码 Android [M]. 人民邮电出版社. 2014.
[3] 何红辉,关爱民.Android 源码设计模式解析与实战 [M]. 人民邮电出版社. 2015.
[4] Android Studio Applicati [M]. 进口原版图书.
[5] The Definitive Guide to Sqlite [M]. Apress.
[6] 李兴华.Android开发实战经典[M].清华大学出版社.2012.
[7] Android开发实战[M].清华大学出版社.2013.
[8] 赵卓君.Java语言程序设计高级教程[M].北京.清华大学出版社.2010.
[9] 朱少民.软件测试方法和技术(第2版)[M].北京.清华大学出版社.2010.
[10] UML和模式应用[M].机械工业出版社.2006.
[11] 钱乐秋、赵文耘、牛军钰.软件工程[M].北京.清华大学出版社.2007.
[12] 王晓东.计算机算法设计与分析[M].电子工业出版社.2012.