知物由学 | 多级建模方法提升汉语语音识别效果,获ISCSLP大赛认可

news2024/12/23 5:09:16

导读:语音是人类信息沟通的重要途径,同时也是人机交互的重要桥梁,自动语音识别可以表述为通过计算机将人类语音信号转录为书面形式的文字输出的过程。本文分享了网易易盾提出的多级建模单元的端到端汉语语音识别方法及具体的落地实践。

1.语音识别简介

语音是人类信息沟通的重要途径,同时也是人机交互的重要桥梁,自动语音识别(Automatic Speech Recognition,ASR)可以表述为通过计算机将人类语音信号转录为书面形式的文字输出的过程。

自 20 世纪 50 年代以来,自动语音识别问题就一直是机器学习界的一个重要研究课题。在过去几十年里,语音识别经历了从基于 GMM-HMM 的传统语音识别技术到端到端语音识别技术的发展历程。在传统的语⾳识别框架中,整个自动语音识别系统由多个模块组成,包括声学模型、发音词典和语言建模。端到端语音识别系统使用单个序列到序列模型,直接将输入的声学特征序列映射到文本序列,与传统的 GMM-HMM 混合系统相比,端到端语音识别方法具有训练流程简单、系统组成简单、识别效果好等优点,是目前学术研究和工业落地的热点。

2.为什么要用多级建模?

选择建模单元是构建 ASR 系统的重要一环,目前端到端汉语语音识别系统通常选择汉字作为模型的建模单元。然而,建模单元的选择不仅仅是涉及到网络的输出,也应该跟语言特性相关。汉语具有一定的语言特性,我们常说英语表音,汉语表意,看到一个英文,也许并不认识这个单词,但我们可以读出来,而看到一个汉字如果不认识的话,也许能猜出它的意思,但不能知道知道汉字的读音。也就是说汉字是一种文字符号,本身与发音无关。因此直接选择汉字作为端到端汉语语音识别系统的建模单元,模型很难学习到声学特征和发音单元之间的映射知识,同时由于语音和汉字之间没有“发音”关联性,模型直接学习从语音映射到汉字会变得困难。

针对上述问题,我们提出了一种多级建模的端到端汉语语音识别方法,除了汉字(Character-level)建模单元,我们还在模型中引入了音节(Syllable-level)作为建模单元。具体地,多级建模方法基于 Encoder-Decoder 的架构,使用多任务学习 hybrid CTC/Attention[1] 方式进行训练,其中 CTC 分支使用音节作为建模单元,使得模型可以学习到从语音特征序列到音节序列的映射信息,而 Attention 分支使用汉字作为建模单元,利用序列上下文信息和声学特征将音节转换为最终输出的汉字。多级建模单元使得模型在训练的过程中能够融合学习多级信息,包括音韵学信息和序列上下文信息,从而提升汉语语音识别的性能。

3.多级建模方法

模型架构

我们的模型使用了两级建模单元,包括汉字建模单元和音节建模单元。在训练阶段,使用语音特征序列和标注文本组成的数据对(X, Y)来训练网络,每个汉字可以由一个带调的音节表示,文本序列 Y 通过开源工具 Python-pinyin[2] 可以得到音节序列 S_Y,例如“北 京 天 安 门”转换成音节序列“bei3 jing1 tian1 an1 men2”。统计训练数据中出现的汉字并编号得到汉字词典,统计训练数据中出现的音节并编号得到音节词典。

下图展示了我们的多级建模系统架构。整个模型主要由前置的卷积模块, Encoder 模块和 Decoder 模块构成。前置的卷积模块提取输入序列的局部特征,并对序列进行下采样,减小后续的计算开销。Encoder 可以是 Conformer[3] 网络或者 Transformer[4] 网络。其中,Conformer 编码器层主要由四个子层构成:一个前馈网络层、自注意力模块、卷积模块和第二个前馈网络层。Transformer 编码器层主要由两个子层构成,分别是自注意力模块和前馈网络模块。解码器层由堆叠在一起的三个子模块组成:自注意力模块、多头注意力模块和前馈网络模块。

在这里插入图片描述

多级建模方法核心点在于:

音节建模:CTC 分支使用音节作为建模单元,特征序列X经过卷积模块和 Encoder 模块得到声学特征向量,通过一个全连接层将特征映射成音节字典大小的向量,再进行softmax归一化得到每一帧的概率分布,联合目标音节序列 S_Y 计算 CTC loss。

汉字建模:Attention 分支使用汉字作为建模单元。Decoder 模块接收音节embedding 向量和 Encoder 模块输出的声学特征向量作为输入,Decoder 的输出通过一个全连接层将特征映射成汉字字典大小的向量,再进行 Softmax 归一化得到概率分布,联合目标汉字序列 Y 计算 CE loss。

在多级建模方法中,Deocder 模块接收音节 Embedding 和声学特征向量作为输入,输出汉字序列,承担了将音节转换为汉字(Syllable-to-character)的任务。相对于利用之前时间步的汉字序列信息和声学特征预测下一个时间步的汉字(Character-to-character),将音节序列转换为汉字序列是一个更具有挑战性的任务。因此,我们在 Decoder 模块引入了中间层的辅助任务来促进从音节到汉字的转换,从而提升系统的性能,我们将辅助任务模块命名为 InterCE。

InterCE loss 的计算是使用 Decoder 模块中间层的输出,经过线性层和 Softamx 得到概率分布,最后计算和标注文本的交叉熵。整个网络的目标函数是基于音节的 CTC loss,基于汉字的 CE loss 和中间层 InterCE loss 的加权和。

模型推理

模型训练完成后,在推理阶段,Encoder 模块提取声学特征,Encoder 的输出通过线性层和 Softmax 函数得到每一帧在音节词典上的概率分布,通过 CTC prefix beam search 得到最优 N-best 的音节序列。Decoder 模块利用音节 Embedding 和声学特征向量作为输入,输出最终的汉字序列。模型推理的计算过程如下图所示。

在这里插入图片描述

实验验证

我们在汉语开源数据集 AISHELL-1[5] 上验证了多级建模方案的实验效果,AISHELL-1 包含来自 400 个说话人的 178 小时中文语音数据。我们分别使用 Conformer 网络和 Transformer 网络验证多级建模方案的效果。

在不使用语言模型的情况下,基于 Transformer 网络,多级建模方法在 AISHELL-1 上取得了 5.2% 的 CER,性能优于基于汉字建模和基于音节建模的基准模型。基于 Conformer 网络,多级建模方案在 Aishell-1 上取得了 4.6% 的 CER,优于最近发表的基于汉字建模的基准模型,实验结果表明多级建模方法提升了汉语语音识别性能。

在这里插入图片描述
在这里插入图片描述

我们通过消融实验来分析 InterCE loss 带来的性能提升。首先,我们在基于汉字建模的模型中增加 InterCE loss 辅助任务,结果显示 InterCE loss 辅助任务只能带来轻微的性能提升。其次,我们将 InterCE loss 从多级建模的框架中移除,结果显示在验证集和测试集上性能有 0.1% 的下降。消融实验结果表明在一个端到端模型中使用音节和汉字两级建模单元可以提升汉语语音识别的性能,除此之外,在多级建模的框架下增加辅助任务 InterCE loos 可以带来额外的性能提升。

在这里插入图片描述

4.总结

在本文中,我们提出了一种多级建模单元的端到端汉语语音识别方法,通过多级建模的方式,模型可以融合学习多级信息。此外,我们引入了辅助任务 InterCE loss 来进一步提升模型的准确性。在推理阶段,输入的特征序列通过 Encoder 以及后续的 CTC 分支生成音节序列,随后 Decoder 模块将音节序列转换成汉字,整个解码过程通过一个端到端模型完成,无需引入额外的转换模型,从而避免了多个模型带来的累积错误。我们的模型在广泛使用的中文 Benchmark 数据集 AISHELL-1 上取得了具有竞争力的效果,并且优于最近发表的文献结果。

更多细节请参考 Paper 链接:https://arxiv.org/abs/2205.11998。

引用内容

[1] Watanabe S, Hori T, Kim S, et al. Hybrid CTC/attention architecture for end-to-end speech recognition[J]. IEEE Journal of Selected Topics in Signal Processing, 2017, 11(8): 1240-1253.

[2] Gulati A, Qin J, Chiu C C, et al. Conformer: Convolution-augmented transformer for speech recognition[J]. arXiv preprint arXiv:2005.08100, 2020.

[3] Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need[J]. Advances in neural information processing systems, 2017, 30.

[4] https://github.com/mozillazg/python-pinyin

[5] Bu H, Du J, Na X, et al. Aishell-1: An open-source mandarin speech corpus and a speech recognition baseline[C]//2017 20th conference of the oriental chapter of the international coordinating committee on speech databases and speech I/O systems and assessment (O-COCOSDA). IEEE, 2017: 1-5.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是虹科weeve边缘计算软件平台?

一、前言 随着越来越多的企业希望进入物联网领域,他们在构建和部署物联网项目时面临着前所未有的挑战。根据思科的一项调查表明,超过60%的受访者承认他们严重低估了管理自己的物联网计划的复杂性。更令人震惊的是,同一调查还发现…

MongoDB副本集搭建和读写分离配置

MongoDB副本集(Replication Set)由一组mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点.客户端数据写入Primary节点。Secondary节点从Primary节点同步数据。以保持副本集内所有成员存储相同的数据集。Primary节点故障时会自动选…

C++ 居然超过了 Python?

很难想象,从 1983 年被正式命名开始算起,已经走过整整四十年光阴的 C,居然力挫 C、Python,摘得了 TIOBE 2022 年度编程语言的桂冠。据 TIOBE 官网显示,在过去一年里,C 因为涨幅最大,为 4.62%&am…

论文投稿指南——中文核心期刊推荐(海洋学)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…

javaWeb大体了解

Web:全球广域网,也称为万维网(www),能够通过浏览器访问的网站 JavaWeb: 是用 Java技术来解决相关web互联网领域的技术栈。 JavaWeb 技术栈 B/S 架构: Browser/Server,浏览器/服务器 架构模式&#xff0…

读书笔记-《ON JAVA 中文版》-摘要10[第十一章 内部类]

文章目录1. 创建内部类2. 链接外部类3. 使用 .this 和 .new4. 内部类与向上转型5. 内部类方法和作用域6. 匿名内部类7. 嵌套类7.1 嵌套类7.2 接口内部的类7.3 从多层嵌套类中访问外部类的成员8. 为什么需要内部类8.1 为什么需要内部类8.2 闭包与回调8.3 内部类与控制框架9. 继承…

智慧农业远程监控系统解决方案

我国是一个农业大国,农作物种植在全国范围内都非常广泛,农作物病虫害防治工作的好坏、及时与否对于农作物的产量、质量影响至关重要。因种植面积广,分布不均,农业工作人员不能够做到在灾害发生时及时出现在现场,所以农…

【Linux】理解缓冲区

文章目录一.引入二.认识缓冲区1.为什么2.刷新策略3.在哪里三、理解缓冲区一.引入 我们发现 printf 和 fwrite (库函数)都输出了2次,而 write 只输出了一次(系统调用)。为什么呢?肯定和fork有关!…

C++职工管理系统,eof()函数,选择排序

目录 1.创建管理类 1.1头文件实现,在workerManager.h中设计管理类 1.2源文件实现,在workerManager.cpp中将构造和析构函数的空实现补全 2.菜单功能 2.1在管理类workerManager.h中添加菜单成员函数 2.2在管理类workerManager.cpp中写实现 3.退出功能 …

Pycharm基础安装教程:搭建python环境+安装pycharm

嗨害大家好鸭!我是小熊猫~ 之前有的小伙伴总说小熊猫发的内容不够基础… 这次小熊猫就来给大家做一个简单的安装介绍吧~ 这里给大家准备了社区版pycharm2021.2 (最新版部分库不稳定,不建议下载) 第一次安装的小伙伴实在不会下载…

【JavaSE系列】第十节 —— 带你吃透抽象类

(6)当一个抽象类 继承一个抽象类的时候,可以不用来重写 当作父类的那个抽象类的抽象方法:提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、抽象类的概念 二、…

二叉苹果树 【树形dp(背包)】

来源:牛客网 题目链接:https://ac.nowcoder.com/acm/contest/25022/1006 题目描述 有一棵二叉苹果树,如果数字有分叉,一定是分两叉,即没有只有一个儿子的节点。这棵树共N个节点,标号1至N,树根编…

rollup.js配置环境变量

场景: 由于项目是通过svelte.js rollup.js框架搭建起来的, 并没有使用到cli脚手架, 没有办法配置不同环境的变量一. 使用cross-env添加环境变量安装cross-env,它可根据不同的系统设置环境变量npm install cross-env --save-dev在 package.json 中:"…

MongoDB索引

介绍 增加查询效率,不必每次都全表扫描单字段索引:在用户单个字段上创建升序/降序索引复合索引:在多个字段上添加索引;如{name:1, age:-1},关注field顺序其他索引:地理空间索引,文本索引&#x…

浙大MBA复试经验和真题分享——知己知彼胜率更高

前段时间跟朋友吃饭的时候,问我在浙大读MBA是什么体验?其实说实话,当时选择浙大,主要还是为了学历,觉得自己一个普通的二本学历真的平平无奇,公司里面新进的员工虽然年纪轻,但学历却很有来头&am…

PySpark任务提交spark-submit参数设置一文详解

目录 前言 一、PySpark集群运行原理 二、spark-submit参数详解 1.指定运行目录 2.--deploy-mode 3.--master 4.驱动程序和执行器资源 5.--files和--verbose 6.Spark提交配置 三.PySpark程序提交配置选项 1.构建一套虚拟环境 2. 模块依赖问题原因 参阅 前言 之前我们已…

MySQL 笔记

文章目录安装MySQL 语法格式MySQL数据类型命令操作数据库CRUD查询创建表删除表修改表操作数据增改删查基础查询条件查询模糊查询排序查询分组查询分页查询聚合函数约束约束分类安装 软件安装|macOS下超详细的MySQL安装 MySQL 语法格式 每条语句以分号;结尾&#…

LeetCode150.逆波兰表达式

LeetCode刷题记录 文章目录📜题目描述💡解题思路⌨C代码📜题目描述 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意 有效的算符为 、-、* 和/。…

如何mock当前类的私有方法

背景 基础知识 mockito单元测试:它的做法是mock掉当前类的所有外部依赖,保障自己的代码没有问题。举个例子,如果数据库查询的语句出了问题,单元测试不会测试出来。因为它直接mock掉了,不会去真的去查数据库。从这点来…

电压放大器在大功率脉冲电能源研究中的应用

实验名称:大功率脉冲电能源高精度测试技术研究 研究方向:仪器仪表测试 测试目的: 传统的测量精度校准的方法是对传感器单一频率下的刻度因子进行校准,校准方法通常选用同轴分流器串联于放电回路中,通过测量同轴分流器两…