dataspeech仓库处理语音数据

概述

中英文数据处理结果查看

https://huggingface.co/datasets/foreveronly12/test_qwen_wenet

https://huggingface.co/datasets/foreveronly12/test_giga_des

仓库地址:

https://github.com/huggingface/dataspeech/tree/main

dataspeech仓库提供了完整代码以及运行脚本来为语音数据集打标签。总体而言将处理过程分为三个阶段,第一个阶段基于原始数据集,为每一段音频计算诸如"音高,讲话速度,信噪比"等等的特征。第二阶段使用第一阶段生成的特征将原本特征的数值映射到一个个区间中。例如:讲话速度由第一阶段的速度值变为第二阶段处理完后的"相当慢-相当快"等七个区间(区间个数可预设)。第三阶段通过接入LLM,使用第二阶段的特征生成prompt,让LLM生成每一段音频的文本描述。例如:"一个男性以略低音调、相当慢的速度讲话,他的声音在相当封闭的空间里显得相当单调,同时伴随着适中环境声音。"

第二阶段映射音高时,考虑到男女音高天然的差异,源代码是基于每段音频的speaker_id和性别进行统计映射,某些数据集可能没有speaker_id和性别列,因此使用file_name代替speaker_id,引入w2v2-age-gender-how-to仓库为每一段音频预测性别。因此预测性别需在第二阶段前完成。

官方仓库的第二阶段运行脚本还提供了一个 --avoid_pitch_computation命令参数,如果觉得音高特征不甚重要,可以使用该参数避免计算音高。

w2v2-age-gender-how-to仓库地址:

https://github.com/audeering/w2v2-age-gender-how-to/tree/master

准备工作

基于有一个本地数据集,使用dataspeech仓库进行处理的准备工作。仓库建议构建一个包含完整音频路径的csv文件,即csv最初有三列,一列file_name,一列text(即音频文件的文本内容),一列audio(先用音频路径代替,后面转成音频)。然后使用依次使用DatasetDict.from_csv(),cast_column(),push_to_hub()方法。数据集较大时可以省去push_to_hub()推送步骤,直接save_to_disk() 保存在本地。

这一步骤记得将原始存储在服务器上音频数据路径保留下来!

准备工作链接:

https://github.com/huggingface/dataspeech#how-do-i-use-datasets-that-i-have-with-this-repository

第一阶段

英文数据将仓库中的第一阶段运行脚本中的推送到hf参数删除即可,代码中只需要修改一些加载数据集和模型的方法和路径即可。

中文数据修改运行脚本同上,代码除了同上,由于源代码是用来处理英文数据的,因此第一阶段在计算说话速度的方法中引入的g2p库(语音转音素)并不适用于中文数据,需要定位到计算速度部分,引入中文拼音库,进行修改。

由于预测性别需要使用到音频数据,但是源代码中处理完了第一个阶段之后音频数据就可有可无了,所以会有一行将音频数据删除的代码。因此处理过程中可以将预测性别并入到第一阶段一起处理。

第二阶段

英文数据将仓库中运行脚本的 --avoid_pitch_computation,--path_to_bin_edges两个参数删除,第一个参数用于避免计算音高特征,第二个参数则是提供一个特征的区间边界json文件。例如:{"speaking_rate": [3.508771929824561, 6.187242299296628, 8.865712668768696, 11.544183038240764, 14.22265340771283, 16.901123777184896, 19.579594146656966, 22.258064516129032],.....}这八个值分别代表了speaking_rate七个区间的左右边界值。我们的处理过程需要重新计算这些边界值而不是用预设好的。代码同理需要修改一些加载数据集和模型的方法和路径,其次就是映射音高特征部分的代码,像前面说的一样,由于数据集缺失speaker_id列,因此用file_name进行替代,需要定位到该方法进行修改。

中文数据运行脚本的修改和代码的修改同上。此外就是代码中一些英文区间改成中文区间的修改,例如quite slow

改为相当慢。

第三阶段

第三阶段比较耗时,考虑到数据集过大,因此第三个阶段可以先将数据集根据大小和计算资源进行合理的切割。

但是第一二阶段最好不要切割数据集,因为第二阶段的特征映射是需要对完整数据进行评估才更合理。

有python普通运行方式和accelerate运行两种方式,后者好像下载安装accelerate后还需要进一步的配置。

英文数据可以直接使用仓库中建议的"mistralai/Mistral-7B-Instruct-v0.2"模型来生成文本描述。脚本改动不大参考前两个阶段。代码需要基于前两个阶段生成的特征改动一下prompt定义和使用部分。

中文数据需要选择中文大模型来稍微调试一下代码,最后选择的是"Qwen/Qwen2-7B-Instruct",同理修改一下prompt定义和使用部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值