在当今快节奏的工作环境里,企业总是寻求能够提高员工生产力的工具。据调查显示,92%的员工表示,能够提高工作效率的工具可以提升工作满意度。FastDS正是这样一款工具,它旨在为初学者、数据科学爱好者以及寻求改善Git和数据版本控制体验的雇主提供帮助。FastDS是一个结合了Git和DVC功能的开源工具,它为数据专业人员提供了代码和数据集的版本控制。通过fds命令,用户可以轻松地自动化提交和推送任务,从而减少人为错误,提高工作效率。
FastDS与传统方法的对比
FastDS提供了Git和DVC命令的快捷方式,以最小化人为错误的可能性,自动化重复性任务,并为初学者提供一个友好的环境。在本文中,将学习FastDS的各种特性以及如何利用它们来克隆、监控和保存项目文件。FastDS的关键特性包括初始化、状态检查、添加文件/文件夹、提交更改、克隆仓库、推送更改以及保存项目更改等。这些功能可以帮助用户更高效地管理代码和数据集的版本。
FastDS的关键特性
在使用Git和DVC时,曾经犯过很多错误,这让花费了很长时间来理解它们之间的关系。即使现在,仍然会犯同样的错误,这可能会导致项目延误。FastDS通过自动化重复性任务来解决这些问题。在本节中,将了解fds的各种特性以及它们如何帮助克隆、监控和保存项目文件。
乌尔都语自动语音识别项目
设置FastDS
首先,需要在DagsHub上创建一个仓库并添加所需的详细信息。存储包括Git、DVC和MLflow远程链接,可以使用它们来上传文件、数据集和机器学习实验。然后,在本地机器上,可以运行以下脚本来克隆仓库,或者如果在Colab上工作,可以在每个脚本的开头使用`!`。fds通常会拉取Git和DVC文件,但目前仓库是空的。
pip install fastds
fds clone https://dagshub.com/kingabzpro/Urdu-ASR-SOTA.git
cd Urdu-ASR-SOTA
建议尽早添加dvc用户名和密码。可以点击DVC远程的“?”来查看DVC凭据。
dvc remote modify origin --local auth basic
dvc remote modify origin --local user
dvc remote modify origin --local password
在运行训练笔记本之前,需要将数据集和所需文件移动到本地目录,然后安装所有需要微调模型的包。可以在这里查看列表。
FastDS训练
不会深入训练过程,而是专注于生成模型文件并使用fds将它们添加到Git和DVC。如果对微调过程感兴趣,请阅读XLSR-Wav2Vec2低资源ASR指南。将使用Hugging Face数据集库拉取本地音频数据,并使用transformer下载并微调facebook/wav2vec2-xls-r-300m。还将集成DagHub日志和MLflow来跟踪所有实验。
提交
在运行笔记本并保存模型检查点到Model文件夹后,将使用`fds add .`。这将触发一个自动响应,要求将大文件/文件夹添加到DVC。之后,它将把这些文件夹添加到.gitignore中,以避免Git冲突。现在,可以通过运行以下脚本来提交Git和DVC,并将文件推送到DagsHub远程存储。
fds commit "first try"
fds push
结果
运行了多次实验;有些失败了,有些没有定论,有些给出了最佳结果。可以在实验标签下访问所有实验。最后,通过在四个V100S GPU(OVH云)上训练模型200个周期,获得了最佳结果。这个模型非常重要,不可能在Google Colab上运行。通常,在Google Colab上,训练一个模型30个周期可能需要14-27小时,具体取决于可用的GPU。如果想评估结果,请在基础目录下运行以下脚本。它将生成WER和CER以及目标和预测TXT文件。
python3 eval.py --model_id Model --dataset Data --config ur --split test --chunk_length_s 5.0 --stride_length_s 1.0 --log_outputs
语言模型
为了提升模型性能,添加了一个语言模型。如果对n-grams感兴趣,并希望将语言模型添加到ASR模型中,请查看这个教程:Boosting Wav2Vec2 with n-grams in Transformers。让通过运行`fds save`脚本保存所有更改并推送到远程。
fds save "language model added"
sh run_eval.sh
from datasets import load_dataset, Audio
from transformers import pipeline
model = "Model"
data = load_dataset("Data", "ur", split="test", delimiter="t")
def path_adjust(batch):
batch["path"] = "Data/ur/clips/" + str(batch["path"])
return batch
data = data.map(path_adjust)
sample_iter = iter(data.cast_column("path", Audio(sampling_rate=16_000)))
sample = next(sample_iter)
asr = pipeline("automatic-speech-recognition", model=model)
prediction = asr(
sample["path"]["array"], chunk_length_s=5, stride_length_s=1)
prediction
# => {'text': 'اب یہ وesign لمہاتانکھاr دلمیں میںفوث کریلیا اجائ'}