热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

一、项目简介

  本项目以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.用户信息表


































序号字段字段类型字段描述
1user_idstring用户id
2user_accountstring用户账户名
3passwordstring用户密码
4notesstring备注

2.语料库信息表




























序号字段字段类型字段描述
1speech_files_idstring语音文件名
2user_accountstring上传用户账户名
3CN_text_idstring中文文本序列

 

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

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

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

七、总结

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

八、参考

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

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


推荐阅读
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • php支持中文文件名
    2019独角兽企业重金招聘Python工程师标准大家可能遇到过上传中文文件名的文件,或者读取中文目录时不能读取,出现错误的情况这种情况是因为php自动将中文字符转成了utf8 ... [详细]
  • 本文介绍了腾讯最近开源的BERT推理模型TurboTransformers,该模型在推理速度上比PyTorch快1~4倍。TurboTransformers采用了分层设计的思想,通过简化问题和加速开发,实现了快速推理能力。同时,文章还探讨了PyTorch在中间层延迟和深度神经网络中存在的问题,并提出了合并计算的解决方案。 ... [详细]
  • MVC设计模式的介绍和演化过程
    本文介绍了MVC设计模式的基本概念和原理,以及在实际项目中的演化过程。通过分离视图、模型和控制器,实现了代码的解耦和重用,提高了项目的可维护性和可扩展性。详细讲解了分离视图、分离模型和分离控制器的具体步骤和规则,以及它们在项目中的应用。同时,还介绍了基础模型的封装和控制器的命名规则。该文章适合对MVC设计模式感兴趣的读者阅读和学习。 ... [详细]
  • Learning to Paint with Model-based Deep Reinforcement Learning
    本文介绍了一种基于模型的深度强化学习方法,通过结合神经渲染器,教机器像人类画家一样进行绘画。该方法能够生成笔画的坐标点、半径、透明度、颜色值等,以生成类似于给定目标图像的绘画。文章还讨论了该方法面临的挑战,包括绘制纹理丰富的图像等。通过对比实验的结果,作者证明了基于模型的深度强化学习方法相对于基于模型的DDPG和模型无关的DDPG方法的优势。该研究对于深度强化学习在绘画领域的应用具有重要意义。 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 本博文基于《Amalgamationofproteinsequence,structureandtextualinformationforimprovingprote ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之六 || API项目整体搭建 6.1 仓储模式
    代码已上传Github+Gitee,文末有地址  书接上文:前几回文章中,我们花了三天的时间简单了解了下接口文档Swagger框架,已经完全解放了我们的以前的Word说明文档,并且可以在线进行调 ... [详细]
  • 程度|也就是_论文精读:Neural Architecture Search without Training
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了论文精读:NeuralArchitectureSearchwithoutTraining相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
happy王琦2010_190
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有