当前位置: 首页 > news >正文

语音识别的基本概念

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

​​​​​​​

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

波形

所有现代的言语描述在某种程度上都是概率性的。这意味着单位之间或单词之间没有特定的界限。语音到文本的翻译和其他语音应用从来都不是 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% 的最佳点。

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

相关文章:

语音识别的基本概念

语音识别的基本概念​​​​​​​ ​​​​​​​ 言语是一种复杂的现象。人们很少了解它是如何产生和感知的。天真的想法常常是语音是由单词构成的,而每个单词又由音素组成。不幸的是,现实却大不相同。语音是一个动态过程,没有明确区分的…...

OpenCV Radon变换探测直线(拉东变换)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 Radon变换可以将原始图像中直线特征的处理问题转化为变换域图像中对应点特征的处理问题,其中对应特征点的横坐标表示原始图像的旋转角度,一般来讲原始图像中的噪声不会分布在直线的特征上。因此,Radon变换在探测…...

六、Redis五种常用数据结构-zset

zset是Redis的有序集合数据类型,但是其和set一样是不能重复的。但是相比于set其又是有序的。set的每个数据都有一个double类型的分数,zset正是根据这个分数来进行数据间的排序从小到大。有序集合中的元素是唯一的,但是分数(score)是可以重复的…...

FPGA第一篇,FPGA现场可编程门阵列,从0开始掌握可编程硬件开发(FPGA入门指南)

简介:FPGA全称Field-Programmable Gate Array,是一种可编程逻辑器件,它通过可编程的逻辑单元和可编程的连接网络实现了灵活的硬件实现。与固定功能的集成电路(ASIC)相比,FPGA具有更高的灵活性和可重新配置性…...

C#实现简单音乐文件解析播放——Windows程序设计作业2

1. 作业内容 编写一个C#程序,要求实现常见音乐文件的播放功能,具体要求如下:     1). 播放MP3文件: 程序应能够读取MP3文件,并播放其中的音频。     2). 播放OGG文件: 应能够播放ogg文件。     …...

Python数据爬取超简单入门

## 什么是网络爬虫? 网络爬虫是一种自动浏览器程序,能够自动地从互联网获取数据。爬虫的主要任务是访问网页,分析网页内容,然后提取所需的信息。爬虫广泛应用于数据收集、数据分析、网页内容监控等领域。 ## 爬虫的基本步骤 1.…...

Dreamweaver 2021 for Mac 激活版:网页设计工具

在追求卓越的网页设计道路上,Dreamweaver 2021 for Mac无疑是您的梦幻之选。这款专为Mac用户打造的网页设计工具,集强大的功能与出色的用户体验于一身。 Dreamweaver 2021支持多种网页标准和技术,让您能够轻松创建符合现代网页设计的作品。其…...

【Git】Git学习-15:分支简介和基本操作

学习视频链接:【GeekHour】一小时Git教程_哔哩哔哩_bilibili​编辑https://www.bilibili.com/video/BV1HM411377j/?vd_source95dda35ac10d1ae6785cc7006f365780https://www.bilibili.com/video/BV1HM411377j/?vd_source95dda35ac10d1ae6785cc7006f365780 git bran…...

浏览器提示网站“不安全”原因及解决方法

是否经常会遇到访问的网站被浏览器提示访问不安全?那么,浏览器提示网站不安全通常有哪些原因又该如何处理这种不安全提醒,以下总结了几个原因及相应的处理办法: 一、网站管理者原因排查及处理办法: 1、网站没有部署S…...

Jmeter详细学习思路和教程

目录 1、JMeter环境准备 1.1、介绍 1.2、与LoadRunner比较 1.3、前提条件 1.4、安装配置 2、JMeter脚本 2.1、测试计划 2.2、线程组 2.3、Sampler 2.4、HTTP请求 2.5、查看结果树 2.6、HTTP Cookie管理器 2.7、HTTP信息头管理器 2.8、响应断言 2.9、参数化 3、JM…...

钉钉开放平台创建企业内部H5微应用或者小程序

前言: 在当今企业数字化转型的浪潮中,创建企业内部H5微应用或小程序已成为提升工作效率和促进内部沟通的重要举措。发话不多说本文将介绍如何利用钉钉平台快速创建这些应用,让企业内部的工作更加便捷高效。 步骤 1.在浏览器打开链接…...

Linux中每当执行‘mount’命令(或其他命令)时,自动激活执行脚本:输入密码,才可以执行mount

要实现这个功能,可以通过创建一个自定义的mount命令的包装器(wrapper)来完成。这个包装器脚本会首先提示用户输入密码,如果密码正确,则执行实际的mount命令。以下是创建这样一个包装器的步骤: 创建一个名为…...

【网络协议】----IPv6协议报文、地址分类

【网络协议】----IPv6协议简介 【网络协议】----IPv6协议简介IPv6特点IPv4 和 IPv6报文结构IPv6报文格式-拓展报头 IPv6地址分类IPv6地址表示IPv6单播地址可聚合全球单播地址链路本地地址唯一本地地址特殊地址补充 接口标识(主机位)生成方法通过EUI-64规…...

Llama改进之——SwiGLU激活函数

引言 今天介绍LLAMA模型引入的关于激活函数的改进——SwiGLU1,该激活函数取得了不错的效果,得到了广泛地应用。 SwiGLU是GLU的一种变体,其中包含了GLU和Swish激活函数。 GLU GLU(Gated Linear Units,门控线性单元)2引入了两个不同的线性层…...

在数据分析中所需要运用到的概率论知识

数据分析 前言一、总体二、样本三、统计抽样抽取的基本准则 四、随机抽样抽签法随机数法 五、分层抽样六、整群抽样七、系统抽样八、统计参数常用的分布函数参数 九、样本统计量十、样本均值和样本方差十一、描述样本集中位置的统计量样本均值样本中位数样本众数 十二、描述样本…...

韩顺平0基础学Java——第6天

p87-p109 运算符(第四章) 四种进制 二进制用0b或0B开头 十进制略 八进制用0开头 十六进制0x或0X开头,其中的A—F不区分大小写 10转2:将这个数不断除以2,直到商为0,然后把每步得到的余数倒过来&#…...

react18子组件设置接收默认值和值类型验证

父组件传值 import ChildCom from ./components/ChildCom export default function Person {return(<div><ChildCom name"alan-ben" age{18} score{[98, 97, 100]} /></div>) } 子组件接收并验证类型 import React from react import PropTypes…...

Java 高级面试问题及答案(二)

Java高级面试问题及答案 1. 在Java中&#xff0c;什么是强引用、软引用、弱引用和虚引用&#xff0c;它们有什么区别&#xff1f; 答案&#xff1a; 在Java中&#xff0c;引用类型决定了对象的生命周期&#xff0c;主要有以下四种&#xff1a; 强引用&#xff1a;最常见的引…...

数据统计:词频统计、词表生成、排序及计数、词云图生成

文章目录 &#x1f4da;输入及输出&#x1f4da;代码实现 &#x1f4da;输入及输出 输入&#xff1a;读取一个input.txt&#xff0c;其中包含单词及其对应的TED打卡号。 输出 output.txt&#xff1a;包含按频率降序排列的每个单词及其计数&#xff08;这里直接用于后续的词云…...

W801学习笔记二十四:NES模拟器游戏

之前已经实现了NES模拟器玩游戏。W801学习笔记九&#xff1a;HLK-W801制作学习机/NES游戏机(模拟器) 现在要在新版本掌机中移植过来。 1、把NES文件都拷贝到SD卡中。 这回不会受内存大小限制了。我这里拷贝了4个&#xff0c;还可以拷贝更多。 2、应用初始化中&#xff0c;加载…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

C++_哈希表

本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、基础概念 1. 哈希核心思想&#xff1a; 哈希函数的作用&#xff1a;通过此函数建立一个Key与存储位置之间的映射关系。理想目标&#xff1a;实现…...

UE5 音效系统

一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类&#xff0c;将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix&#xff0c;将上述三个类翻入其中&#xff0c;通过它管理每个音乐…...