CCL 2024 | 前沿技术讲习班 | 文本-语音大模型(第1部分)_哔哩哔哩_bilibili
文本-语音大模型
东北大学-肖桐, 小牛翻译; 许晨, 哈工程
传统 NLP 泛式是有监督学习模型, 参数较少, 为特定任务设计; 大模型实现多种任务的大一统
近期工作
Wav2Vec, 参考 BERT 的 Mask, 提取通用的语音表征, 来自 Meta
Whisper, 语音->文本, 来自 OpenAI
USM, 对标 Whisper, 更大规模, 来自谷歌
Seamless, 更大规模, 双向转换来自 Meta
ChatTTS, 文本->语音, 实现模拟人类声调
SealessM4T 扩展, SeamlessExpressive, 实现翻译中的语音风格翻译 (比如多语言即时翻译)
SpeechGen: Prompt 激发 LLM 激发能力, 支持多种语音生成任务
Muzic: 音乐理解与生成
文本与语音的关系
-
文本是离散信号, 语音是连续信号
连续信号如何变成离散信号? 对连续信号采样, 得到连续信号的离散表示
-
语音长度显著更长
-
模态粒度差异
例如一个人说话快, 粒度会更大
-
语音有模糊的边界切分, 语言有标点符号的明确边界切分
-
语音的噪声问题
这导致语音合成数据的有效性低
-
语音多样性
文本的多样性小于语音 (如风格, 一词多义), 语音多样性 (生理差异, 语言方言, 情感表达, 环境背景, 录取设备)
语音翻译的工作中, 文本模态辅助, 因为文本模型的多样性显著小于语音
文本-语音大模型的挑战
-
语音特征提取
语音信号密度低, 噪声多
-
语音建模
如何进行长序列语音高效建模
-
语音合成
-
模态对齐
肖桐认为, 文本-语音的联合优化比文本-图像更难
语音基础
语音特征提取
-
信号处理方法
MFCC, FBank
-
监督模型
Whisper
-
自监督模型
Wav2vec,HuBERT
信号处理方法, 与数字信号处理有关
- 时域特征, 信息量大, 波动大, 噪声多, 如Wav2Vec2
- 频域特征, 适合处理复杂信号, 如Whisper
- 时域到频域的转换, 傅里叶变换
下面是监督与自监督模型的发展
语音信号离散化
-
问题: 语音高度非平稳性
-
先验假设: 短时平稳
-
采样步长: 如 10ms, 25ms
-
常用特征: FBank, MFCC
依然存在问题: 序列太长, 帧间信息重复; 存在压缩空间
因此, 语音建模的基础范式: Fbank + CNN 下采样, 一秒钟有 25 个单元
语音高级特征
语音的发展实现了从跟跑语音到跟跑文本的转变 (:doge)
文本高级特征: 预训练模型提取上下文表示, 取代 Embedding 作为下游任务的输入
想训练语音编码器, 标注数据集匮乏, 成本是很高的
“语音的训练起手十几万小时, demo要两万”
文本怎么处理数据缺乏的问题的?
- 使用大量无标注数据进行自监督预训练
- 使用下游任务少量标注数据进行微调
于是参考 BERT, 诞生 Wav2vec, 实现了输入原始音频而非信号特征作为输入. 但是由于语音信号的连续表征特点, 语音不能简单 mask 操作 (不能 MLM 训练, 回归任务尤为明显)
举个栗子, HuBERT 利用 K-means 聚类得到离散化音频表示, 每个簇认为是一个 token, 然后用 MLM 范式训练
语音建模
核心问题: 长序列问题
- 上下文信息依赖问题
- 计算复杂度高
如何解决长序列问题?
- Transformer 捕捉全局信息, CNN捕捉局部信息
- 相对位置注意力机制
- Efficient Transformer
细粒度问题
注意力稀疏问题
如何解决细粒度问题?
信息聚合
-
暴力下采样对语音特征连续压缩, 不过这样是粗粒度的离散提取语音特征
-
所以后续有渐进式聚合方法, 实现 “一边降维一边编码”, 实现细粒度的离散提取语音特征, 这样达到与文本相似的粒度
-
多尺度聚合
引入 NLP 先验, 比如 Word 尺度, Charactor 尺度, Sentence 尺度, “用转录文本的多尺度信息指导语音特征进行渐进式压缩”, 同时实现 “音频特征的语义高质量对齐”.