软件系统设计方案——基于匹配算法的连续中文语音识别系统

一、项目简介

  本项目以DFCNN+CTC作为声学模型,采用N-Gram或基于RNN的语言模型,实现一个连续中文语音识别系统。用户可在交互界面录入中文语音,得到中文文本序列;用户也可上传语音和对应文本序列,作为语料库来源的一部分。

二、软件结构特点

1.设计架构

 

  本项目是典型的人机交互系统,采用MVC架构实现。

  M是指模型(Model),用来封装核心数据和功能,是具体的业务代码层,独立于特定的输出表示和输入行为,并不关心具体任务由什么形式呈现给用户。模型只有纯粹的功能性接口,也就是一系列的公开方法,这些方法有的是取值方法,让系统其他部分可以得到模型的内部状态,有的是写入更新数据的方法,允许系统的其他部分更改模型的内部状态。

  V是指视图(View),用来向用户显示信息,他获得来自模型的数据,决定模型以什么样的方式展现给用户。同一模型可以对应于多个视图,这样对视图而言,模型就是可重用的代码。一般来说,模型内部必须保留所有对应视图的相关信息,以便在模型的状态发生改变时,可以通知所有的视图进行更新。

  C是指控制器(Controller),负责根据用户从视图输入的指令,选取模型中的数据,然后对其进行相应的操作,产生最终结果。控制器是和视图联合使用的,它捕捉鼠标移动、鼠标点击和键盘输入等事件,将其转化成服务请求,然后再传给模型或者视图。软件的用户是通过控制器来与系统交互的,它通过控制器来操纵模型,从而向模型传递数据,改变模型的状态,并最后导致视图的更新。

  本项目中,模型封装DFCNN+CTC声学模型和N-Gram/基于RNN的语言模型,通过提供获取语音音频的接口,来对相应音频进行处理;视图提供模型与用户的交互界面,获取模型的反馈结果,并展示给用户,也可将用户输入的音频和中文序列交由控制器处理;控制器则是模型和视图的桥梁。

2.接口API

接口地址 说明
register() 用户注册函数接口
login(user,password) 用户登录函数接口
logout() 用户退出登录函数接口
upload(file_wav_url,file_txt_url) 用户上传音频和中文文本函数接口
predict(file) 预测中文文本函数接口
model(model) 管理员对模型管理函数接口
user_management(username) 管理员对用户管理函数接口

 

 三、运行环境和技术选型说明

开发语言:Python

开发工具:Visual Studio Code、Tensorflow框架

语音识别算法:声学模型:DFCNN+CTC; 语言模型:N-Gram/基于RNN的语言模型

技术选型说明:

  (1)DFCNN+CTC声学模型:CNN是一类包含卷积计算且具有深度结构的前馈神经网络,其核心是卷积运算,是一种可以有效利用长时上下文语境信息的模型。DFCNN是在CNN基础上的一种新的语音识别框架。直接对语谱图作出处理,省去了传统特征提取中滤波器的处理环节,能够避免时域和频域上的信息损失。CTC模型能够自动去掉音素序列中连续重复的字符和分隔符,以得到最终可作为语言模型输入的音素序列,直接将语音在时间上的帧序列和相应的转录文字序列在模型训练过程中自动对齐,无需对每个字符或音素的起止时间段作标注,省去了传统算法较为复杂的对齐操作。

  (2)N-Gram语言模型是目前非常成熟的语言模型,其本质是基于预测词之前N个词做出预测,将语料库中这N个词之后出现概率最大的词作为预测结果。该语言模型准确率尚有不足,因此会采用基于RNN的语言模型作为对比。RNN即循环神经网络,基于RNN的语言模型能更充分地利用上下文信息对当前此做出预测,其准确率应当更高。

四、系统架构的不同视图

1.分解视图

  分解是构建软件架构模型的关键步骤,分解视图也是描述软件架构模型的关键视图,一般分解视图呈现为较为清晰的分解结构特点。分解视图用软件模块勾划出系统结构,往往会通过不同抽象层级的软件模块形成层次化的结构。

 

2.依赖视图

  依赖视图展现了软件模块之间的依赖关系。比如一个软件模块A调用了另一个软件模块B,那么我们说软件模块A直接依赖软件模块B。如果一个软件模块依赖另一个软件模块产生的数据,那么这两个软件模块也具有一定的依赖关系。依赖视图在项目计划中有比较典型的应用。比如它能帮助我们找到没有依赖关系的软件模块或子系统,以便独立开发和测试,同时进一步根据依赖关系确定开发和测试软件模块的先后次序。依赖视图在项目的变更和维护中也很有价值,比如它能有效帮助我们理清一个软件模块的变更对其他软件模块带来影响范围。

  如上图,语言模型系统依赖于声学模型系统;用户信息系统依赖于用户交互系统;用户交互系统依赖于模型系统;模型系统依赖于语料库管理系统。

3.泛化视图

  泛化视图展现了软件模块之间的一般化或具体化的关系,典型的例子就是面向对象分析和设计方法中类之间的继承关系。值得注意的是,采用对象组合替代继承关系,并不会改变类之间的泛化特征。因此泛化是指软件模块之间的一般化或具体化的关系,不能局限于继承概念的应用。而且泛化视图有助于描述软件的抽象层次,从而便于软件的扩展和维护。比如通过对象组合或继承很容易形成新的软件模块与原有的软件架构兼容。

  如依赖视图中的模型系统即为声学模型系统和语言模型系统的泛化;后台管理系统即为用户信息管理系统和语料库管理系统的泛化。

4.执行视图

  执行视图展示了系统运行时的时序结构特点,比如流程图、时序图等。执行视图中的每一个执行实体,一般称为组件,都是不同于其他组件的执行实体。如果有相同或相似的执行实体那么就把他们合并成一个。执行实体可以最终分解到软件的基本元素和软件的基本结构,因而与软件代码具有比较直接的映射关系。在设计与实现过程中,我们一般将执行视图转换为伪代码之后,再进一步转换为实现代码。

5.实现视图

  实现视图是描述软件架构与源文件之间的映射关系。比如软件架构的静态结构以包图或设计类图的方式来描述,但是这些包和类都是在哪些目录的哪些源文件中具体实现的呢?一般我们通过目录和源文件的命名来对应软件架构中的包、类等静态结构单元,这样典型的实现视图就可以由软件项目的源文件目录树来呈现。
  本项目还没有全部搭建完成,已完成的部分如下图所示:

Controller文件夹 实现语料库管理系统、用户信息管理系统、用户登录注册等功能
sp_data_manage_system文件夹 语料库管理
user_data_manage_system文件夹 用户数据管理
__init__.py 语音识别系统初始化文件
add_to_sp.py 是否将用户上传音频和文本加入语料库
login.py 登录
logout.py 登出
register.py 注册
upload.py 用户上传音频和文本
Model文件夹 存放模型相关文件
based_RNN.py 基于RNN的语言模型
DFCNN_CTC.py 声学模型
N_gram.py 基于N_gram的语言模型
View文件夹 存放视图相关文件
gui.py 图形化交互界面

五、数据库设计

1.用户信息表

序号 字段 字段类型 字段描述
1 user_id string 用户id
2 user_account string 用户账户名
3 password string 用户密码
4 notes string 备注

2.语料库信息表

序号 字段 字段类型 字段描述
1 speech_files_id string 语音文件名
2 user_account string 上传用户账户名
3 CN_text_id string 中文文本序列

 

六、系统概念原型的核心工作机制

  概念原型是一种虚拟的、理想化的软件产品形式概念原型 = 用例+数据模型

  以本工程实践项目为例,概念原型的核心工作机制如下:用户登录并实时录入或外部导入语音文件,系统返回识别的中文文本序列。用户觉得识别有误,可上传相应的语音文件和中文文本。开发人员判断语音文件和中文文本匹配无误后,可将其加入训练语料库中。

七、总结

  本篇博客主要是学习如何去完成工程实践项目的软件系统方案的设计。由于项目目前处于对模型构建调优的阶段,对于具体的业务层没有展开深入的讨论,因此业务功能实现写的较为简单,本人对软件系统设计也尚缺乏足够的认识,如有不足之处请多多指正,谢谢。

八、参考

https://gitee.com/mengning997/se/blob/master/README.md 软件科学基础概论

https://www.cnblogs.com/hyyang5543/p/14141043.html 需求分析和概念原型——基于匹配算法的连续中文语音识别系统

posted @ 2020-12-30 21:23  hyyang5543  阅读(611)  评论(0编辑  收藏  举报