语音识别的基本概念

语音识别的基本概念​​​​​​​

​​​​​​​

言语是一种复杂的现象。人们很少了解它是如何产生和感知的。天真的想法常常是语音是由单词构成的,而每个单词又由音素组成。不幸的是,现实却大不相同。语音是一个动态过程,没有明确区分的部分。找一个声音编辑器并查看演讲录音并聆听它总是很有用的。例如,这是音频编辑器中的语音录音。

波形

所有现代的言语描述在某种程度上都是概率性的。这意味着单位之间或单词之间没有特定的界限。语音到文本的翻译和其他语音应用从来都不是 100% 正确的。对于通常使用确定性系统的软件开发人员来说,这个想法相当不寻常。它产生了许多仅针对语音技术的问题。

言语结构

在目前的实践中,语音结构的理解如下:

语音是连续的音频流,其中相当稳定的状态与动态变化的状态混合在一起。在这一系列状态中,人们可以定义或多或少相似的声音类别或音素。人们认为文字是由电话构成的,但这肯定不是事实。与电话相对应的波形的声学特性可能会因许多因素而有很大差异 - 电话环境、说话者、讲话风格等。所谓的协同发音使手机听起来与其“规范”的表现截然不同。接下来,由于单词之间的转换比稳定区域提供更多信息,因此开发人员经常谈论双音素- 两个连续电话之间的电话部分。有时开发人员会谈论亚音位单元 - 手机的不同子状态。通常可以找到三个或更多不同性质的区域。

数字三很容易解释:电话的第一部分取决于其前一个电话;中间部分稳定,接下来就看后续手机了。这就是为什么选择用于语音识别的手机通常具有三种状态的原因。

有时,电话是在上下文中考虑的。这种音素在上下文中被称为 三音素甚至五音素。例如,单词“bad”中带有左音素“b”和右音素“d”的“u”听起来与单词中带有左音素“b”和右音素“n”的同一个音素“u”听起来有点不同。 “禁止”。请注意,与双音素不同,它们的波形范围与普通音素相同。它们只是名称不同,因为它们描述的声音略有不同。

出于计算目的,检测三音素的部分而不是整个三音素很有帮助,例如,如果您想为三音素的开头创建一个检测器并在许多三音素之间共享它。声音检测器的全部种类可以用少量不同的短声音检测器来表示。通常我们使用4000个不同的短声检测器来组成三音素检测器。我们将这些探测器称为“senone”。senone 对上下文的依赖可能比左右上下文更复杂。它可以是由决策树或其他方式定义的相当复杂的函数。

接下来,手机构建子词单元,例如音节。有时,音节被定义为“还原稳定实体”。例如,当语音变快时,电话经常会改变,但音节保持不变。此外,音节与语调轮廓相关。还有其他方法可以构建子词 - 基于形态(在形态丰富的语言中)或基于语音。子词经常用于开放词汇语音识别。

子词形成单词。单词在语音识别中很重要,因为它们极大地限制了电话的组合。如果有 40 个音素,平均一个单词有 7 个音素,则必须有 40^7 个单词。幸运的是,即使是词汇量丰富的人在实践中也很少使用超过 20k 的单词,这使得识别方式更加可行。

单词和其他非语言声音,我们称之为填充词(呼吸、嗯、呃、咳嗽),形成话语。它们是暂停之间的独立音频块。它们不一定与句子匹配,句子是更多语义概念。

除此之外,还有一些对话行为,例如轮流,但它们超出了本文档的目的。

识别过程

识别语音的常见方法如下:我们获取一个波形,将其按静音分开,然后尝试识别每个话语中所说的内容。为此,我们希望采用所有可能的单词组合并尝试将它们与音频进行匹配。我们选择最佳的匹配组合。

在这个匹配过程中有一些重要的概念。首先是特征的概念。由于参数数量较多,我们正在尝试对其进行优化。根据语音计算得出的数字,通常通过将语音划分为帧来计算。然后,对于每帧(通常长度为 10 毫秒),我们提取代表语音的 39 个数字。这就是所谓的特征向量。生成参数数量的方法是一个积极研究的主题,但在简单的情况下,它是频谱的导数。

其次,是模型的概念。模型描述了一些收集口语单词的共同属性的数学对象。实际上,对于 senone 的音频模型,它是三个状态的高斯混合 - 简而言之,它是最可能的特征向量。从模型的概念来看,存在以下问题:

  • 该模型对现实的描述效果如何,
  • 考虑到模型的内部问题以及模型是否可以做得更好
  • 如果条件发生变化,模型的适应性如何

语音模型称为隐马尔可夫模型或 HMM。它是描述黑盒通信通道的通用模型。在该模型中,过程被描述为以一定概率相互改变的一系列状态。该模型旨在描述任何顺序过程,例如语音。HMM 已被证明对于语音解码确实非常实用。

第三,它本身就是一个匹配过程。由于将所有特征向量与所有模型进行比较所需的时间比宇宙存在的时间更长,因此通常通过应用许多技巧来优化搜索。在任何时候,我们都会维护最佳匹配变体,并随着时间的推移扩展它们,为下一帧生成最佳匹配变体。

楷模

根据语音结构,语音识别中使用了三种模型进行匹配:

声学模型包含每个声学的声学属性。有包含属性(每个音素最可能的特征向量)的上下文无关模型和上下文相关模型(由具有上下文的 senone 构建)。

语音词典包含从单词到音素的映射。这种映射不是很有效。例如,其中只注明了两到三个发音变体。然而,大多数时候它足够实用。字典并不是将单词映射到音素的唯一方法。您还可以使用通过机器学习算法学习的一些复杂函数。

语言模型用于限制单词搜索。它定义了哪个单词可以跟在先前识别的单词之后(请记住,匹配是一个顺序过程),并通过剥离不可能的单词来帮助显着限制匹配过程。最常见的语言模型是n-gram语言模型;这些包含单词序列的统计数据以及有限状态语言模型;这些通过有限状态自动化定义语音序列,有时带有权重。为了达到良好的准确率,您的语言模型必须在搜索空间限制方面非常成功。这意味着它应该非常擅长预测下一个单词。语言模型通常将所考虑的词汇限制为其包含的单词。这就是名字识别的问题。为了解决这个问题,语言模型可以包含更小的块,例如子词甚至音素。

这三个实体在一个引擎中组合在一起来识别语音。如果您要将引擎应用于其他语言,则需要将此类结构落实到位。对于许多语言,都有声学模型、语音词典,甚至大词汇量语言模型可供下载。

使用的其他概念

格子是表示识别变体的有向图通常,获得最佳匹配是不切实际的。在这种情况下,点阵是表示识别结果的良好中间格式。

N 最佳变体列表就像格子,尽管它们的表示不如格子那么密集。

单词混淆网络(香肠)是格子,其中严格的节点顺序取自格子边缘。

语音数据库- 任务数据库中的一组典型录音。如果我们开发一个对话系统,它可能是用户录制的对话。对于听写系统,它可能正在阅读录音。语音数据库用于训练、调整和测试解码系统。

文本数据库- 为语言模型训练等而收集的样本文本。通常,文本数据库以样本文本形式收集。这种集合的问题是将现有文档(如 PDF、网页、扫描件)放入语音文本形式。也就是说,您需要删除标签和标题,将数字扩展为其口语形式,并扩展缩写。

优化了什么

当开发语音识别时,最复杂的问题是使搜索精确(考虑尽可能多的变体来匹配)并使其足够快而不会运行很长时间。由于模型并不完美,另一个挑战是使模型与语音相匹配。

通常,系统在测试数据库上进行测试,该数据库旨在正确表示目标任务。

使用以下特征:

单词错误率:假设我们有一个原始文本和一个长度为N 个单词的识别文本。I是插入的单词数。D是删除的单词数,S表示替换的单词数。据此,错误率可以计算为

WER = (I + D + S) / N

WER 通常以百分比来衡量。

准确率:与误词率几乎相同,但不考虑插入。

准确度 = (N - D - S) / N

对于大多数任务来说,准确性比 WER 更差,因为插入对于最终结果也很重要。然而,对于某些任务,准确性是解码器性能的合理衡量标准。

速度:假设音频文件的录制时间 (RT) 为 2 小时,解码需要 6 小时。那么速度算作3xRT。

ROC 曲线:当我们谈论检测任务时,存在误报和命中/未命中的情况。为了说明这些,使用了ROC曲线。这样的曲线是描述误报数量与命中数量的关系图。它试图找到误报数量很少且命中数量匹配 100% 的最佳点。

还有其他属性通常不被考虑,但对于许多实际应用仍然很重要。您的首要任务应该是建立这样的措施并在系统开发过程中系统地应用它。您的第二个任务是收集测试数据库并测试应用程序的性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/582104.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring AI聊天功能开发

一、引入依赖 继承父版本的springboot依赖&#xff0c;最好是比较新的依赖。 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.4</version><relativePat…

JS实现对用户名、密码进行正则表达式判断,按钮绑定多个事件,网页跳转

目标&#xff1a;使用JS实现对用户名和密码进行正则表达式判断&#xff0c;用户名和密码正确时&#xff0c;进行网页跳转。 用户名、密码的正则表达式检验 HTML代码&#xff1a; <button type"submit" id"login-btn" /*onclick"login();alidate…

Spring Boot | Spring Boot 实现 “Redis缓存管理“

目录 : Spring Boot 实现 "Redis缓存管理" :一、Spring Boot 支持的 "缓存组件" &#xff08; 如果 “没有” 明确指定使用自定义的 "cacheManager "或 "cacheResolver" &#xff0c;此时 SpringBoot会按照“预先定义的顺序” 启动一个…

免费SSL证书和付费SSL证书区别在哪

SSL证书免费和付费的区别有&#xff1a; 1.证书类型不同&#xff0c;免费SSL证书只有域名验证性型&#xff0c;付费SSL证书有域名验证型、企业验证型和组织验证型&#xff1b; 2.使用限制不同&#xff0c;免费SSL证书只能绑定单个域名、不支持通配符域名、多域名等&#xff0…

4.28java项目小结

这几天完成了用户修改资料模块的功能&#xff0c;实现了修改用户头像&#xff0c;昵称等信息&#xff0c;并且对数据库进行了操作&#xff0c;大致画了好友资料的页面的内容&#xff0c;这两天尽量完成表的创建&#xff0c;建立多对多的关系&#xff0c;实现好友的添加功能。

代码随想录:二叉树29-30

目录 701.二叉搜索树中的插入操作 题目 代码&#xff08;迭代法走一边&#xff09; 代码&#xff08;递归法走一边&#xff09; 450.删除二叉搜索树中的节点 题目 代码&#xff08;递归法走一边&#xff09; 701.二叉搜索树中的插入操作 题目 给定二叉搜索树&#xff…

centos7 openresty lua 自适应webp和缩放图片

目录 背景效果图准备安装cwebp等命令&#xff0c;转换文件格式安装ImageMagick&#xff0c;压缩文件下载Lua API 操控ImageMagick的依赖包 代码参考 背景 缩小图片体积&#xff0c;提升加载速度&#xff0c;节省流量。 效果图 参数格式 &#xff1a; ?image_processformat,…

在IDEA中使用.env文件导入系统配置的图文教程

JetBrains的IDEA是一款功能强大的集成开发环境&#xff0c;为开发人员提供了丰富的功能和工具。使用.env文件来管理配置信息在IDEA中非常简单。 旧版本默认支持&#xff0c;新版本idea需要安装插件才可以。 这里我们可以安装EnvFile插件&#xff0c;步骤如下&#xff1a; 在弹…

centos 7 安装 JDK 和Rockmq

1、版本说明 CentOS版本&#xff1a;使用 cat /etc/redhat-release 命令查看centos版本。 本次版本是&#xff1a;CentOS Linux release 7.9.2009 (Core) JDK版本是&#xff1a;jdk-8u401-linux-x64.tar.gz RockeqMQ版本&#xff1a;rocketmq-all-4.9.2-bin-release.zip …

Vue 组件单元测试深度探索:细致解析与实战范例大全

Vue.js作为一款广受欢迎的前端框架&#xff0c;以其声明式的数据绑定、组件化开发和灵活的生态系统赢得了广大开发者的心。然而&#xff0c;随着项目规模的增长&#xff0c;确保组件的稳定性和可靠性变得愈发关键。单元测试作为软件质量的守护神&#xff0c;为Vue组件的开发过程…

人脸识别系统架构

目录 1. 系统架构 1.1 采集子系统 1.2 解析子系统 1.3 存储子系统 1.4 比对子系统 1.5 决策子系统 1.6 管理子系统 1.7 应用开放接口 2. 业务流程 2.1 人脸注册 2.2 人脸验证 2.2.1 作用 2.2.2 特点 2.2.3 应用场景 2.3 人脸辨识 2.3.1 作用 2.3.2 特点 2.3.3…

学习STM32第二十天

低功耗编程 一、修改主频 STM32F4xx系列主频为168MHz&#xff0c;当板载8MHz晶振时&#xff0c;系统时钟HCLK满足公式 H C L K H S E P L L N P L L M P L L P HCLK \frac{HSE \times PLLN}{PLLM \times PLLP} HCLKPLLMPLLPHSEPLLN​&#xff0c;在文件stm32f4xx.h中可修…

HTML 学习笔记

html 超文本标记语言&#xff08;英语&#xff1a;HyperText Markup Language&#xff0c;简称&#xff1a;HTML&#xff09;是一种用于创建网页的标准标记语言。 1.HTML文档的后缀名 (1) .html (2) .htm 这里更推荐使用 ".html "&#xff0c;命名应该遵从含义清…

FPGA 以太网概念简单学习

1 MAC和PHY 从硬件的角度来说&#xff0c;以太网接口电路主要由 MAC &#xff08; Media Access Control &#xff09;控制器和物理层接口 PHY&#xff08;Physical Layer &#xff0c; PHY &#xff09;两大部分构成。 MAC 指媒体访问控制子层协议&#xff0c;它和 PHY 接…

SpringMVC进阶(自定义拦截器以及异常处理)

文章目录 1.自定义拦截器1.基本介绍1.说明2.自定义拦截器的三个方法3.流程图 2.快速入门1.Myinterceptor01.java2.FurnHandler.java3.springDispatcherServlet-servlet.xml配置拦截器4.单元测试 3.拦截特定路径1.拦截指定路径2.通配符配置路径 4.细节说明5.多个拦截器1.执行流程…

刷代码随想录有感(49):找树左下角的值

题干&#xff1a; 用层序遍历方便些&#xff0c;因为只需要把res不断替换成每一层第一个节点值即可&#xff0c;代码如下&#xff1a; class Solution { public:int findBottomLeftValue(TreeNode* root) {queue<TreeNode*>que;if(root ! NULL)que.push(root);int res …

逆向案例三十——webpack登录某游戏

网址&#xff1a;aHR0cHM6Ly93d3cuZ205OS5jb20v 步骤&#xff1a; 进行抓包分析&#xff0c;找到登录接口&#xff0c;发现密码有加密 跟栈分析&#xff0c;从第三个栈进入&#xff0c;打上断点&#xff0c;再次点击登录 明显找到password,它由o赋值&#xff0c;o由a.encode(…

【哈希】Leetcode 面试题 01.02. 判定是否互为字符重排

题目讲解 面试题 01.02. 判定是否互为字符重排 算法讲解 直观的想法&#xff1a;我们找到一个字符串的全排列&#xff0c;然后对比当前的排列是否等于另一个字符串。如果两个字符串如果互为排列&#xff0c;所以我们知道两个字符串对应的字符出现的个数相同&#xff0c;那么…

在config.json文件中配置出来new mars3d.graphic.PolylineCombine({大量线合并渲染类型的geojson图层

在config.json文件中配置出来new mars3d.graphic.PolylineCombine({大量线合并渲染类型的geojson图层 问题场景&#xff1a; 1.浏览官网示例的时候图层看到大量线数据合并渲染的示例 2.矢量数据较大量级的时候&#xff0c;这种时候怎么在config.json文件中尝试配置呢&#x…

高并发内存池: 介绍

一.功能介绍 功能: 用于实现高效的多线程内存管理(替代系统的内存分配相关的函数(malloc, free)) 性能的提升: 池化技术, 锁竞争的减小处理内存碎片: 内碎片, 外碎片 池化技术: 概念:预先向系统申请过量的资源, 自己管理.->提高性能(每次申请资源都有较大的开销, 提前申…