深度学习 - 16 ASR 整体架构
06|ASR 整体架构:Encoder、Decoder、Predictor、Joiner 与 Logits1. 核心概念上一章解决了一个根本问题:ASR 是把长度较长的声学序列转换成长度较短的文本序列,而且输入和输出之间存在未知的时间对齐关系。这一章进一步回答:这个转换在模型内部到底是怎么完成的?现代 ASR 的整体结构可以抽象成:Speech │ ▼ Acoustic Features │ ▼ Acoustic Encoder │ ▼ Acoustic Representation │ ▼ Encoder Output │ ├───────────────┐ │ │ ▼ ▼ Decoder Predictor │ │ └───────┬───────┘ ▼ Joiner │ ▼ Logits │ ▼ Vocabulary Tokens但这个图不能直接套到所有模型上。例如:CTC:通常是Encoder → Projection → LogitsRNN-T:Encoder + Predictor → Joiner → LogitsAttention Encoder-Decoder:Encoder + Decoder → Vocabulary Projection → Logits因此:“ASR 整体架构”不是一个固定网络,而是一组具有共同数据流的架构范式。其中最稳定的主线是:语音 ↓ Encoder ↓ 声学表示 ↓ 某种 Sequence Transduction / Prediction ↓ Vocabulary logits ↓ Token理解这条主线之后,Conformer、Zipformer、Whisper、CTC、RNN-T 就不再是互相割裂的知识点。2. 为什么需要这样的架构2.1 为什么不能直接 Waveform → Token理论上当然可以建立一个:waveform ↓ neural network ↓ token但模型必须同时解决几个不同层次的问题:第一层是:从复杂的声学信号中提取稳定的语音信息。第二层是:建模长时间范围内的上下文。第三层是:将声学时间轴转换成文本 token 轴。第四层是:根据当前已有信息判断应该输出哪个 vocabulary token。把这些问题全部压成一个简单分类层,不利于模型结构设计,也不利于控制计算复杂度和推理方式。因此现代 ASR 通常会把功能拆开:Encoder → 负责把语音变成高层声学表示 Prediction / Decoder → 负责建模输出序列上下文 Joiner / Projection → 负责把表示映射到 vocabulary logits并不是说这些模块之间完全独立,而是:不同模块承担不同的建模职责。2.2 为什么 Encoder 是 ASR 的核心基础语音输入是连续时间信号,原始 waveform 包含大量与最终文字无关的信息,例如:声学频谱结构;音高;能量;说话人特征;环境噪声;麦克风特性;混响。模型真正需要的是:与语言内容高度相关、同时又尽量具有说话人和环境不变性的时序表示。所以 Encoder 的目标不是简单地“提取特征”,而是:把低层声学观测逐步转换成适合序列识别的高层表示。这就是 Acoustic Representation 的来源。3. 原理与底层机制3.1 从输入 Tensor 到 Encoder Output考虑一个常见的 ASR 输入。经过 Fbank 之后:X∈RB×T×F X \in \mathbb{R}^{B \times T \times F}X∈RB×T×F其中:BBB:batch size;TTT:声学时间步;FFF:feature dimension,例如 80。例如:[B, 1000, 80]经过 subsampling 后可能变成:[B, 250, 256]再经过 Encoder:[B, 250, 512]于是:H∈RB×T′×D H \in \mathbb{R}^{B \times T' \times D}H∈RB×T′×D这里的HHH就是 Encoder 输出。其中:T′T'T′:subsampling 后的时间长度;DDD:hidden dimension。注意:Encoder Output 仍然是一个序列。它并没有直接变成一句话。例如:Encoder Output h1 h2 h3 h4 ... h250每个hth_tht​都是一个高维向量。3.2 Hidden State 到底是什么在实际工程和面试中,“Hidden State”这个词很容易泛化使用。最准确的理解是:Hidden State 是模型内部用于表示当前序列状态的信息向量。对于 RNN:ht=f(xt,ht−1) h_t=f(x_t,h_{t-1})ht​=f(xt​,ht−1​)这里的hth_tht​是一个真正具有递归状态意义的 hidden state。而对于 Transformer / Conformer,情况有所不同。例如:x1 x2 x3 ... xT ↓ ↓ ↓ Transformer ↓ ↓ ↓ h1 h2 h3 ... hT这里的hth_tht​通常更准确地叫:hidden representation / contextual representation而不是传统 RNN 意义上的“递归状态”。所以面试时最好区分:场景Hidden State 含义RNN/LSTM随时间递归传递的状态Transformer每个位置经过多层网络后的隐藏表示Conformer融合 attention / convolution 上下文后的隐藏表示RNN-T Predictor输出历史对应的内部序列状态因此:“hidden state”是一个统称,具体语义取决于架构。3.3 Acoustic Representation 是什么Acoustic Representation 可以理解为:模型对输入语音形成的高层、可用于识别的时序表示。例如 Encoder 输入:[B, T, 80]经过若干层:[B, T', 512]这些 512 维向量不再是简单的 Fbank。一个 Encoder representation 通常同时包含:当前局部声学信息;邻近帧上下文;更长范围的语音上下文;发音相关信息;对后续 token 预测有用的信息。例如 Conformer 中,一个位置的表示会受到:multi-head self-attention;convolution module;feed-forward layers;等组件影响。所以可以把:ht h_tht​理解为:模型在时间位置ttt对当前语音上下文形成的内部语义/声学表示。它不一定已经是某个具体 token。3.4 Context 为什么重要ASR 中的 Context 不是单独一种 Tensor,而是一种信息概念。假设模型当前正在识别某一段声音。如果只看:xt x_txt​可能无法确定它对应什么发音。但如果看整个上下文:x1:T x_{1:T}x1:T​模型就可以根据前后声音判断。所以 Encoder 输出的:ht h_tht​本质上可以看作:ht=f(x1:T) h_t=f(x_{1:T})ht​=f(x1:T​)或者在有限感受野模型中:ht=f(xt−k:t+k) h_t=f(x_{t-k:t+k})ht​=f(xt−k:t+k​)具体范围取决于模型。这也是为什么:Context 是 Encoder Representation 与原始 Acoustic Feature 最重要的区别之一。Fbank 更接近:“这一小段声音长什么样”而 contextual representation 更接近:“结合前后上下文,这一小段声音意味着什么”3.5 Encoder 的真正作用:不是分类,而是 Representation Transformation一个很容易出现的错误理解是:Encoder 就是在预测 token。实际上,Encoder 更多是在做:X→H X\rightarrow HX→H也就是:Acoustic Input ↓ Feature Transformation ↓ Contextual Representation它的输出:H=(h1,…,hT′) H=(h_1,\dots,h_{T'})H=(h1​,…,hT′​)仍然位于 acoustic time axis 上。真正把:H转成:Vocabulary logits的是后面的预测 / 映射模块。因此可以把整个流程分成:Encoder: X → H Prediction: 历史输出 → P Fusion / Projection: H + P → Z Vocabulary: Z → logits这就是为什么理解 Encoder 和 Decoder/Joiner 的职责边界非常重要。3.6 Decoder 是什么在 ASR 中,“Decoder”这个词存在一个很大的语义问题:Decoder 可以指模型架构里的 neural decoder,也可以指最终推理阶段的 search decoder。两者必须区分。Neural Decoder它是模型的一部分,例如 Whisper 的 Transformer Decoder。主要任务是:根据已经生成的 token 历史以及 encoder representation,计算下一个 token 的概率分布。Search Decoder例如:beam search;greedy search;CTC prefix beam search;RNN-T beam search。它的任务是:根据模型输出的概率分布寻找最终 token sequence。所以:Neural Decoder与:Beam Search Decoder不是同一个概念。面试时这是非常值得主动澄清的一点。3.7 Attention-based Decoder 的工作过程以 Whisper / Transformer Encoder-Decoder 为例:Speech ↓ Encoder ↓ H start ↓ Decoder ↓ P(y1 | H) ↓ y1 ↓ Decoder ↓ P(y2 | y1, H) ↓ y2 ↓ ...它是自回归的。第uuu个 token:yu∼P(yu∣yu,H) y_u\sim P(y_u|y_{u},H)yu​∼P(yu​∣yu​,H)

相关新闻

【Dify】网页知识库自动采集进行知识库构建应用

【Dify】网页知识库自动采集进行知识库构建应用

自动化网页内容采集和知识库构建,正在成为高效信息管理的重要途径。借助智能化工具,可以快速实现网页数据的提取、清洗与归档,为信息利用与知识沉淀提供便捷手段。 本文介绍一种基于Dify的网页内容自动采集与知识库写入流程,实现从原始网页到结构化内容的全自动转化。包含…

2026/9/24 13:52:26 阅读更多 →
Altair 数据过滤实战:深入解析 transform_filter 与四大谓词机制

Altair 数据过滤实战:深入解析 transform_filter 与四大谓词机制

数据可视化 【免费下载链接】altair Declarative visualization library for Python 项目地址: https://gitcode.com/gh_mirrors/al/altair 点击查看 免费下载 导读 Altair 的 Filter 数据变换(Filter Transform)用于依据过滤表达式、字段谓…

2026/9/24 13:52:26 阅读更多 →
PowerInfer 多模态推理实战:LLaVA v1.5 的本地部署、llava-cli 使用与 GGUF 模型转换指南

PowerInfer 多模态推理实战:LLaVA v1.5 的本地部署、llava-cli 使用与 GGUF 模型转换指南

PowerInfer 多模态推理实战:LLaVA v1.5 的本地部署、llava-cli 使用与 GGUF 模型转换指南 【免费下载链接】PowerInfer High-speed Large Language Model Serving for Local Deployment 项目地址: https://gitcode.com/gh_mirrors/po/PowerInfer 导读&#xf…

2026/9/24 13:52:26 阅读更多 →

最新新闻

C# WinForms+OpenCvSharp实现实时图像与TCP检测结果同窗显示

C# WinForms+OpenCvSharp实现实时图像与TCP检测结果同窗显示

简介:针对相机无法通过SDK直接取图、只能从本地文件读取场景,这份C#工程源码提供了一套图像与通信联动的检测可视化方案。程序基于System.Drawing与System.Net.Sockets实现两路并行:定时扫描本地文件夹并实时绘制最新图像,同时监听…

2026/9/24 18:10:58 阅读更多 →
JavaWeb电子相册毕设项目:JSP+Servlet+JDBC+MySQL实战全解析

JavaWeb电子相册毕设项目:JSP+Servlet+JDBC+MySQL实战全解析

简介:这份基于JavaWeb的电子相册毕设项目,是一套完整的网络相册管理系统源码包,面向计算机相关专业准备毕业设计的学生及需要项目实战的Java初学者,可直接作为毕设使用。系统采用B/S结构,前台支持用户注册登录、网站介…

2026/9/24 18:10:58 阅读更多 →
基于Python和CNN的人脸表情识别课程设计全流程解析

基于Python和CNN的人脸表情识别课程设计全流程解析

简介:这是一份基于深度学习的人脸表情识别系统完整实现,面向高校课程设计、毕业设计及计算机视觉初学者,解决从数据集处理、模型训练到实时表情识别落地的全流程问题。压缩包共19个文件、约10.81MB,其中10个Python脚本为核心源码&…

2026/9/24 18:10:58 阅读更多 →
Python+Django实战:高校学生违纪管理系统开发与数据建模

Python+Django实战:高校学生违纪管理系统开发与数据建模

简介:这套基于Python的高校学生违纪信息管理系统,面向教育信息化开发者、高校管理人员及需要搭建同类Web管理系统的技术人群,系统围绕学生违纪数据的录入、分类统计、处罚记录、报表导出、权限管理和预警通知等核心功能展开,能够显…

2026/9/24 18:10:58 阅读更多 →
JavaEE二手图书交易平台源码实战:分层架构与部署避坑指南

JavaEE二手图书交易平台源码实战:分层架构与部署避坑指南

简介:这是一套面向高校计算机相关专业学生的JavaEE课程设计完整资源,以二手图书交易平台为选题,适合作为期末大作业、课程设计或毕业设计参考,新手也能快速上手。资源包共173个文件,约25.68MB,涵盖21个Java…

2026/9/24 18:10:58 阅读更多 →
JavaEE二手图书交易平台实战:Spring+MyBatis从零搭建与避坑指南

JavaEE二手图书交易平台实战:Spring+MyBatis从零搭建与避坑指南

简介:这是一套面向高校计算机相关专业学生的JavaEE课程设计完整项目,以二手图书交易平台为主题,适合作为期末大作业、课程设计或毕业设计参考。项目采用Java语言开发,功能覆盖用户注册登录、图书发布、分类浏览、订单管理等核心业…

2026/9/24 18:09:58 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →