李宏毅NLP-4-语音识别part3-CTC

Connectionist Temporal Classification|CTC


基于连接主义时间分类(CTC)的语音识别架构,具体描述如下:

  1. 输入层:底部的 x 1 , x 2 , x 3 , x 4 x^1, x^2, x^3, x^4 x1,x2,x3,x4代表输入的语音信号分帧数据,是语音识别的原始输入。
  2. 编码器(Encoder):浅蓝色模块表示编码器(如循环神经网络 RNN),负责对输入的语音帧 x i x^i xi 进行特征提取和时序建模,输出隐藏状态 h 1 , h 2 , h 3 , h 4 h^1, h^2, h^3, h^4 h1,h2,h3,h4
  3. 分类器(Classifier):每个隐藏状态 h i h^i hi输入到分类器(灰色模块),通过矩阵 W W W 线性变换后,再经过 Softmax 函数,生成词汇表 V V V 大小的概率分布( token distribution \text{token distribution} token distribution),表示每个时刻对应词汇表中各 token 的预测概率。
  4. 在线流式处理说明:图下方文字 “For on - line streaming speech recognition, use uni - directional RNN” 指出,对于在线流式语音识别,采用单向 RNN,确保实时处理,不依赖未来帧的数据。

该架构通过 CTC 解决语音帧与文本标签的对齐问题,适用于端到端的语音识别任务,特别是需要实时处理的流式场景。
在这里插入图片描述介绍连接主义时间分类(CTC)的核心特性及处理规则:

  1. 输入输出特性
    • 输入 T T T 个声学特征,输出 T T T 个 tokens(忽略下采样),即输入与输出时间步一一对应。
  2. 输出处理规则
    • 输出 tokens 包含空白符 ϕ \phi ϕ,最终需通过“合并重复 tokens,去除 ( \phi )”得到最终结果。
  3. 示例说明
    • 英文示例:
      • ϕ ϕ d d ϕ e ϕ e ϕ p p \phi \ \phi \ d \ d \ \phi \ e \ \phi \ e \ \phi \ p \ p ϕ ϕ d d ϕ e ϕ e ϕ p p:合并重复的 d d d e e e p p p,去除 ϕ \phi ϕ,得到 d e e p d \ e \ e \ p d e e p
      • ϕ ϕ d d ϕ e e e e ϕ p p \phi \ \phi \ d \ d \ \phi \ e \ e \ e \ e \ \phi \ p \ p ϕ ϕ d d ϕ e e e e ϕ p p:合并重复的 d d d e e e p p p,去除 ϕ \phi ϕ,得到 d e p d \ e \ p d e p
    • 中文示例:
      • “好 好 棒 棒 棒 棒 棒”:合并重复的“好”“棒”,得到“好 棒”。
      • “好 ϕ \phi ϕ ϕ \phi ϕ ϕ ϕ \phi \ \phi ϕ ϕ”:合并重复的“棒”,去除 ϕ \phi ϕ,得到“好 棒 棒”。

通过这些规则,CTC 解决了语音帧与文本标签对齐的难题,适用于语音识别等序列建模任务。
在这里插入图片描述
展示连接主义时间分类(CTC)在训练中的应用,具体内容如下:

  • 左侧训练数据:标注为 “paired training data”,输入为 x 1 x^1 x1 x 4 x^4 x4的声学特征,对应标签为 “好棒”。红色文字 “much less than T T T, no ϕ \phi ϕ” 表明标签长度远小于输入时间步 T T T,且不含空白符 ϕ \phi ϕ,体现了 CTC 处理输入输出长度不对齐的特性。
  • 右侧模型架构
    • Encoder(编码器):处理输入$ x^1$到 x 4 x^4 x4,输出隐藏状态 h 1 h^1 h1 h 4 h^4 h4
    • Classifier(分类器):将每个 h i h^i hi转换为 token distribution \text{token distribution} token distribution(令牌分布),表示每个时间步对词汇单元的预测概率。
    • 交叉熵损失(cross - entropy):图中红色框标注,每个时间步的输出通过交叉熵与目标标签比较,指导模型训练。尽管标签长度短于输入时间步,CTC 仍能通过引入空白符 ϕ \phi ϕ、合并重复令牌等机制,解决输入与输出的对齐问题,实现端到端的训练。
      该图直观呈现了 CTC 在语音识别等序列任务中,处理输入输出不对齐数据的训练过程与架构。

在这里插入图片描述
穷举所有的alignment作为训练数据
训练原理:CTC 在训练时考虑所有可能的对齐路径(即不同的 ϕ 插入方式),对这些路径的概率进行求和,通过最大化目标标签的总概率来更新模型参数。这种方式解决了语音识别等任务中输入(如声学特征)与输出(如文本标签)长度不一致的难题,无需精确对齐每一个时间步,只需利用插入 ϕ 的多种对齐方式进行训练,使模型学习到更鲁棒的序列映射关系。

在这里插入图片描述
整体通过展示 CTC 模型在语音识别任务中对目标 token / 单词的高概率预测,直观证明了 CTC 在序列建模中有效,能够准确捕捉并输出目标序列。

在这里插入图片描述

在这里插入图片描述
CTC 模型中解码器(Decoder)存在的问题具体如下:

  • 假设与模型结构

    • 假设前三个帧对应字符 “c”。图中下方的 “Encoder” 生成隐藏状态 h 1 , h 2 , h 3 , h 4 h^1, h^2, h^3, h^4 h1,h2,h3,h4,传递给上方的解码器(灰色模块)。
    • 解码器特性标注为 “Only attend on one vector”(仅关注一个向量)和 “Each output is decided independently”(每个输出独立决定),即每次仅基于单个输入向量独立生成输出,不考虑前后文依赖。
  • 输出问题示例

    • 输出序列中出现 “c - ϕ \phi ϕ - c”。第一个对话框 “後面不可以再輸出 c 了” 表明,由于前三个帧已对应 “c”,后续不应再输出 “c”,但解码器独立决策未考虑此约束。
    • 第二个对话框 “我不知道前面發生甚麼事?” 体现解码器独立生成输出,缺乏对前文信息的记忆与关联,导致重复或不合理输出(如再次输出 “c”)。

综上, CTC 解码器因独立输出、不考虑前后文依赖而产生的问题,即无法利用序列的历史信息进行全局优化决策。

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

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

相关文章

如何构建类似云数据仓库 Snowflake 的本地数据仓库?

目录 一、Snowflake 架构的三大核心价值 二、本地数据仓库要“像 Snowflake”,关键在数据服务化 三、SQL2API:本地数据服务共享的核心引擎 ✅ 什么是 SQL2API? ✅ 为什么是构建本地类 Snowflake 架构的关键? 四、QuickAPI&a…

设计模式 - 单例模式

一个类不管创建多少次对象,永远只能得到该类型一个对象的实力 常用到的,比如日志模块,数据库模块 饿汉式单例模式:还没有获取实例对象,实例对象就已经产生了 懒汉式单例模式:唯一的实例对象,…

【Windows Cmake工程配置Boost库】

Windows Cmake工程配置Boost库 背景配置流程1. 下载Boost库2. 配置环境变量3. 修改CmakeLists背景 Windows环境下使用cmake开发程序,如图需要用到boost库,但是从官网下载的boost库源码没有编译成功,于是从网上下载boost预编译库,直接配置。 配置流程 1. 下载Boost库 官…

长期坚持的本质,看重休息,看轻自律

01 你有没有这样的经历, 年初立下减肥20斤、读完100本书、旅行10次等目标, 年中发现进度太慢, 于是降低年初目标, 但年终完成度仍然不及格。 只好跨年时将希望寄托于来年, 明年复明年,明年何其多。 …

Python实现贪吃蛇三

上篇文章Python实现贪吃蛇一,实现了一个贪吃蛇的基础版本。后面第二篇文章Python实现贪吃蛇二修改了一些不足,但最近发现还有两点需要优化: 1、生成食物的时候有概率和记分牌重合 2、游戏缺少暂停功能 先看生成食物的时候有概率和记分牌重合的…

LSTM概述

一、LSTM的背景与动机 1.1 为什么需要LSTM? 在深度学习中,普通的神经网络(如全连接网络或卷积神经网络)在处理序列数据时表现不佳,因为它们无法捕捉数据中的时间依赖关系。循环神经网络(RNN)被设计来处理序列数据,通过隐藏状态在时间步之间传递信息。然而,传统RNN存…

DDS信号发生器设计

一、基本概述 1.1 DDS简介 DDS信号发生器即直接数字频率合成(Direct Digital Frequency Synthesis,简称DDS)是一种利用数字技术生成信号的方法。它通过数字信号处理技术,将数字信号转换为模拟信号,从而生成高质量的正…

生成式AI:如何用大模型呼叫系统提升销售转化率?

生成式AI技术正以惊人的速度重塑商业版图。从智能助手到自动化营销,从数据分析到客户洞察,生成式AI正在颠覆传统商业模式,云蝠智能以大模型、智能体为核心技术,致力于为百万企业提供语音互动智能体平台与解决方案,为企业在销售转化…

OOP丨《Java编程思想》阅读笔记Chapter 6 : 访问权限控制

《Java编程思想》Chapter 6 : 访问权限控制 1. 前言 1.1. 访问权限控制的等级1.2. package关键字的引入 2. 包:库单元 2.1. 代码组织2.2. 包名的创建 3. Java访问权限修饰词 3.1. 包访问权限3.2. public: 接口访问权限3.3. private: 你无法访问3.4. protected: 继承…

reconic 天空 模型

目录 推理代码: EnvLight 代码: 推理代码: sky_model self.models["Sky"]outputs["rgb_sky"] sky_model(image_info)outputs["rgb_sky_blend"] outputs["rgb_sky"] * (1.0 - outputs["opa…

从服务器多线程批量下载文件到本地

1、客户端安装 aria2 下载地址:aria2 解压文件,然后将文件目录添加到系统环境变量Path中,然后打开cmd,输入:aria2c 文件地址,就可以下载文件了 2、服务端配置nginx文件服务器 server {listen 8080…

C++ | 可变模板参数

1. 为什么需要可变模板参数? 在C11之前,若想实现一个接受任意数量参数的函数,只能依赖va_list等C风格可变参数,但这种方式类型不安全且难以调试。例如printf函数: printf("%d %f %s", 10, 3.14, "hel…

【机器学习】每日一讲-朴素贝叶斯公式

文章目录 **一、朴素贝叶斯公式详解****1. 贝叶斯定理基础****2. 从贝叶斯定理到分类任务****3. 特征独立性假设****4. 条件概率的估计** **二、在AI领域的作用****1. 文本分类与自然语言处理(NLP)****2. 推荐系统****3. 医疗与生物信息学****4. 实时监控…

AI Agents系列之AI代理的类型

在本文中,我们将探讨不同类型的 AI 代理,包括它们的实现、实际应用、优势和局限性。从简单反射代理到多代理系统,我们将了解这些模型如何推动自动化、决策制定和智能问题解决。 文章目录 1. AI代理的类型1.1 简单反射代理1.1.1 实现**1.1.2 优势****1.1.3 局限性**1.2 基于…

C# --- IEnumerable 和 IEnumerator

C# --- IEnumerable 和 IEnumerator IEnumerableIEnumeratorIEnumerable 和 IEnumerator 的作用手动实现 IEnumerableIEnumerable vs. IQueryable为什么有了ienumerator还需要ienumerable IEnumerable 在C#中,IEnumerable 是一个核心接口,用于表示一个可…

镜舟科技助力某大型电网企业破解数据架构升级难题,打造国产化湖仓标杆

在 “十四五” 规划全面推进国产化替代的背景下,某大型电网企业联合镜舟科技与腾讯云,基于全球领先的开源分析型数据库 StarRocks 及腾讯 TBDS 大数据平台,构建电力行业国产化湖仓一体架构。该项目实现 PB 级电力数据的统一管理,为…

Spark-SQL核心编程3

数据加载与保存 通用方式: SparkSQL 提供了通用的保存数据和数据加载的方式。这里的通用指的是使用相同的API,根据不同的参数读取和保存不同格式的数据,SparkSQL 默认读取和保存的文件格式为parquet 数据加载方法: spark.read.lo…

使用HTML + CSS + JS,编写一个台球追分计分器

目录 一.代码 二.效果展示 三.该计分器的优点 一.代码 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…

LLM小白自学笔记:1.两种指令微调

一、LoRA 简单来说&#xff0c;LoRA不直接调整个大模型的全部参数&#xff08;那样太费资源&#xff09;&#xff0c;而是在模型的某些层&#xff08;通常是注意力层&#xff09;加个“旁路”——两个小的矩阵&#xff08;低秩矩阵&#xff09;。训练时只更新这俩小矩阵&#x…

2026《数据结构》考研复习笔记一(C++基础知识)

C基础知识复习 一、数据类型二、修饰符和运算符三、Lambda函数和表达式四、数学函数五、字符串六、结构体 一、数据类型 1.1基本类型 基本类型 描述 字节&#xff08;位数&#xff09; 范围 char 字符类型&#xff0c;存储ASCLL字符 1&#xff08;8位&#xff09; -128…