中文语音预训练模型,wav2vec 2.0和HuBERT的开源实现
chinese_speech_pretrain项目开源了基于WenetSpeech数据集训练的中文语音预训练模型。项目包含wav2vec 2.0和HuBERT的BASE与LARGE版本,均使用1万小时多样化中文语音数据训练。模型在自动语音识别任务中表现优异,尤其适合低资源场景。项目提供模型下载及使用指南,可用于语音识别、语音合成等研究领域。
我们使用 WenetSpeech [1] train_l 集的 1 万小时中文数据作为无监督预训练数据。数据主要来源于 YouTube 和 Podcast,涵盖了各种类型的录制场景、背景噪声、说话方式等,其领域主要包括有声书、解说、纪录片、电视剧、访谈、新闻、朗读、演讲、综艺和其他等10大场景。我们基于 Fairseq 工具包 [2] 分别训练了 wav2vec 2.0 [3] 和 HuBERT [4] 模型,遵循 [3,4] 中的模型配置,每个预训练模型包括 BASE 和 LARGE 两种规模。对于 BASE 模型,我们使用 8 张 A100 显卡,梯度累计为 8,模拟 64 张显卡进行训练。对于 LARGE 模型,我们使用 16 张 A100 显卡,梯度累计为 8,模拟 128 张显卡进行训练。
为了方便下载,在 huggingface 模型库中提供了 fairseq 模型,例如 chinese-wav2vec2-base 中的 chinese-wav2vec2-base-fairseq-ckpt.pt。
(我们还在 huggingface 模型链接中提供了 fairseq 检查点,例如 chinese-wav2vec2-base 中的 chinese-wav2vec2-base-fairseq-ckpt.pt)
模型 | 预训练数据 | fairseq 模型下载(百度网盘) | huggingface & fairseq 模型下载 |
---|---|---|---|
chinese-wav2vec2-base | WenetSpeech train L | chinese-wav2vec2-base 提取码: d2hq | chinese-wav2vec2-base |
chinese-wav2vec2-large | WenetSpeech train L | chinese-wav2vec2-large 提取码: 7p8r | chinese-wav2vec2-large |
chinese-hubert-base | WenetSpeech train L | chinese-hubert-base 提取码: xjiy | chinese-hubert-base |
chinese-hubert-large | WenetSpeech train L | chinese-hubert-large 提取码: hhn7 | chinese-hubert-large |
为了验证预训练模型在下游 ASR 任务的效果,我们遵循 ESPnet [5,6,7] 工具包中的 Conformer [8] 模型实验配置,即将预训练模型作为特征提取器,对于输入语音提取预训练模型各隐层表征进行加权求和,得到的语音表征将替换传统 FBank 特征作为 Conformer ASR 模型的输入。
我们使用 Aishell 178 小时训练集作为有监督数据进行训练,分别对比了使用 FBank 特征、wav2vec 2.0 BASE/LARGE 模型特征和 HuBERT BASE/LARGE 模型特征的字错误率(Character Error Rate, CER)结果。同时,我们额外对比了使用 WenetSpeech train_l 集 1 万小时中文数据进行训练时,其在 Aishell 测试集上的效果。训练数据使用了变速(0.9、1.0、1.1 倍)和 SpecAugment 数据增广技术,解码方式为 beam search,使用了基于 Transformer 的语言模型进行 rescoring。具体实验结果见下表:
输入特征 | 训练数据 | Dev | Test |
---|---|---|---|
FBank [6] | 178h | 4.4 | 4.7 |
FBank [1] | 1wh | / | 3.9 |
Wav2vec 2.0 BASE | 178h | 4.2 | 4.7 |
Wav2vec 2.0 LARGE | 178h | 3.8 | 4.1 |
HuBERT Base | 178h | 4.1 | 4.3 |
HuBERT LARGE | 178h | 3.1 | 3.3 |
我们使用 WenetSpeech train_s 100h 数据集作为有监督数据进行训练,分别对比了使用 FBank 特征、wav2vec 2.0 模型特征和 HuBERT 模型特征的字错误率(Character Error Rate, CER)结果。同时,额外对比了使用 train_m 集 1000h 和 train_l 集 1wh 中文数据 FBank 特征训练的模型结果。训练数据没有使用变速或 SpecAugment 数据增广技术,解码方式为 beam search,没有使用语言模型 rescoring。具体实验结果见下表:
输入特征 | 训练数据 | Dev 集 | Test_Net 集 | Test_Meeting 集 |
---|---|---|---|---|
FBank | 100h | 17.4 | 22.6 | 32.7 |
FBank | 1000h | 11.6 | 14.6 | 22.4 |
FBank | 1wh | 9.7 | 8.9 | 15.9 |
wav2vec 2.0 BASE | 100h | 13.1 | 16.1 | 25.5 |
wav2vec 2.0 LARGE | 100h | 11.7 | 13.8 | 25.5 |
HuBERT BASE | 100h | 12.6 | 14.7 | 21.3 |
HuBERT LARGE | 100h | 10.0 | 10.2 | 14.5 |
# 此模型没有分词器,因为它只在音频上进行了预训练。 # 为了将此模型用于语音识别,应创建一个分词器并在带标签的文本数据上对模型进行微调。 # python 包 # transformers==4.16.2 # fairseq 使用 import torch import torch.nn.functional as F import soundfile as sf from fairseq import checkpoint_utils device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model_path="" wav_path="" def postprocess(feats, normalize=False): if feats.dim() == 2: feats = feats.mean(-1) assert feats.dim() == 1, feats.dim() if normalize: with torch.no_grad(): feats = F.layer_norm(feats, feats.shape) return feats print("从 {} 加载模型".format(model_path)) models, saved_cfg, task = checkpoint_utils.load_model_ensemble_and_task( [model_path], suffix="", ) print("从 {} 加载模型完成".format(model_path)) print(f"normalize: {saved_cfg.task.normalize}") model = models[0] model = model.to(device) model = model.half() model.eval() wav, sr = sf.read(wav_path) feat = torch.from_numpy(wav).float() feat = postprocess(feat, normalize=saved_cfg.task.normalize) feats = feat.view(1, -1) padding_mask = ( torch.BoolTensor(feats.shape).fill_(False) ) inputs = { "source": feats.half().to(device), "padding_mask": padding_mask.to(device), } with torch.no_grad(): logits = model.extract_features(**inputs) # huggingface 使用 import torch import torch.nn.functional as F import soundfile as sf from fairseq import checkpoint_utils from transformers import ( Wav2Vec2FeatureExtractor, Wav2Vec2ForPreTraining, Wav2Vec2Model, ) from transformers.models.wav2vec2.modeling_wav2vec2 import _compute_mask_indices model_path="" wav_path="" mask_prob=0.0 mask_length=10 feature_extractor = Wav2Vec2FeatureExtractor.from_pretrained(model_path) model = Wav2Vec2Model.from_pretrained(model_path) # 对于预训练:Wav2Vec2ForPreTraining # model = Wav2Vec2ForPreTraining.from_pretrained(model_path) model = model.to(device) model = model.half() model.eval() wav, sr = sf.read(wav_path) input_values = feature_extractor(wav, return_tensors="pt").input_values input_values = input_values.half() input_values = input_values.to(device) # 对于 Wav2Vec2ForPreTraining # batch_size, raw_sequence_length = input_values.shape # sequence_length = model._get_feat_extract_output_lengths(raw_sequence_length) # mask_time_indices = _compute_mask_indices((batch_size, sequence_length), mask_prob=0.0, mask_length=2) # mask_time_indices = torch.tensor(mask_time_indices, device=input_values.device, dtype=torch.long) with torch.no_grad(): outputs = model(input_values) last_hidden_state = outputs.last_hidden_state # 对于 Wav2Vec2ForPreTraining # outputs = model(input_values, mask_time_indices=mask_time_indices, output_hidden_states=True) # last_hidden_state = outputs.hidden_states[-1]
Welcome to use our Chinese speech pre-training model for research work. Let's explore the applications of speech pre-training models in Chinese and various related scenarios together.
<p align="center"> <br> <img src="https://yellow-cdn.veclightyear.com/835a84d5/7bd5bd30-6b9a-4d5f-b32d-bb86ac5aff87.png" width="300"/><img src="https://yellow-cdn.veclightyear.com/835a84d5/2a47034f-8fbf-467e-bea2-b9f0990eb1ef.png" width="300"/> <br> </p> <p align="center"> <br> <img src="https://yellow-cdn.veclightyear.com/835a84d5/2790d58d-5f14-491c-a9f4-f16c10381e3b.jpeg" width="500"/><img src="https://yellow-cdn.veclightyear.com/835a84d5/22c0b481-0b44-4f05-87b6-52c5799fd4d3.jpeg" width="200"/> <br> </p>The following projects have used our model
Project | Project Link |
---|---|
GPT-SoVITS | GPT-SoVITS |
@misc{TencentGameMate,
title={chinese_speech_pretrain},
author = {Pengcheng Guo and Shixing Liu},
year = {2022},
url = {https://github.com/TencentGameMate/chinese_speech_pretrain},
}
[1] Binbin Zhang, Hang Lv, Pengcheng Guo, Qijie Shao, Chao Yang, Lei Xie, Xin Xu, Hui Bu, Xiaoyu Chen, Chenhen Zeng, Di Wu, and Zhendong Peng, "WenetSpeech: A 10000+ hours multi-domain Mandarin corpus for speech recognition," in Proc. ICASSP, 2021
[2] Myle Ott, Sergey Edunov, Alexei Baevski, Angela Fan, Sam Gross, Nathan Ng, David Grangier, and Michael Auli, "fairseq: A fast, extensible toolkit for sequence modeling," in Proc. NAACL, 2019.
[3] Alexei Baevski, Henry Zhou, Abdelrahman Mohamed, and Michael Auli, "wav2vec 2.0: A framework for self-supervised learning of speech representations," in Proc. NeurIPS, 2020.
[4] Wei-Ning Hsu, Benjamin Bolte, Yao-Hung Hubert Tsai, Kushal Lakhotia, Ruslan Salakhutdinov, and Abdelrahman Mohamed, "HuBERT: Self-supervised speech representation learning by masked prediction of hidden units," IEEE/ACM Transactions of Audio, Speech, and Language Processing, vol. 29, pp. 3451-3460, 2021
[5] Shinji Watanabe, Takaaki Hori, Shigeki Karita, Tomoki Hayashi, Jiro Nishitoba, Yuya Unno, Nelson Enrique Yalta Soplin, Jahn Heymann, Matthew Wiesner, Nanxin Chen, Adithya Renduchintala, and Tsubasa Ochiai, "ESPnet: End-to-end speech processing toolkit," in Proc. Interspeech, 2018, pp. 2207–2211
[6] Pengcheng Guo, Florian Boyer, Xuankai Chang, Tomoki Hayashi, Yosuke Higuchi, Hirofumi Inaguma, Naoyuki Kamo, Chenda Li, Daniel Garcia-Romero, Jiatong Shi, Jing Shi, Shinji Watanabe, Kun Wei, Wangyou Zhang and Yuekai Zhang, "Recent development on ESPnet tookit boosted by Conformer," in Proc. ICASSP, 2021
[7] Xuankai Chang, Takashi Maekaku, Pengcheng Guo, Jing Shi, Yen-Ju Lu, Aswin Shanmugam Subramanian, Tianzi Wang, Shu-wen Yang, Yu Tsao, Hung-yi Lee, and Shinji Watanabe, "An exploratino of self-supervised pretrained representations for end-to-end speech recognition," in Proc. ASRU, 2021
[8] Anmol Gulati, James Qin, Chung-Cheng Chiu, Niki Parmar, Yu Zhang, Jiahui Yu, Wei Han, Shibo Wang, Zhengdong Zhang, Yonghui Wu, and Ruoming Pan, "Conformer: Convolution-augmented Transformer for speech recognition," in Proc. Interspeech, 2020, pp.5036–5040
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自 动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支 持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
高分辨率纹理 3D 资产生成
Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。
一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。
3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号