DeepSpeech 项目
DeepSpeech 是一个开源的语音到文本的引擎,它使用了基于百度深度语音研究论文的机器学习技术训练的模型。DeepSpeech 项目使用 Google 的 TensorFlow 项目来简化实施。
可以使用 pip3 安装预先构建的二进制文件,以便使用经过训练的模型执行推理。建议使用虚拟环境进行适当的设置,您可以在
一个预先培训的英语模型可供使用,可以根据以下指令下载。目前,Python 客户机只支持16位、16千赫、单通道的 WAVE 音频文件。
安装好之后,就可以使用 deepspeech 二进制文件对短(大约5秒)的音频文件进行语音到文本的转换:
pip install deepspeech deepspeech models/output_graph.pb my_audio_file.wav models/alphabet.txt
另外,可以使用 Linux 上支持的 NVIDIA GPU 执行更快的推断。请参阅发布说明,了解支持哪些 gpu。要在 GPU 上运行深度语音,请安装 GPU 特定的包:
pip install deepspeech-gpu deepspeech models/output_graph.pb my_audio_file.wav models/alphabet.txt
请确保您具有所需的 CUDA 依赖。
有关使用 deepspeech 的更多信息,请参阅 deepspeech -h 的输出。 (如果您在运行 deepspeech 时遇到问题,请检查所需的运行时依赖项)。
先决条件
- Python 3.6
- Git Large File Storage
- Mac 或 Linux 环境
- 转到 构建自述文件,开始从源代码为 Windows 构建 DeepSpeech。
获取代码
手动安装 Git Large File Storage ,如果系统上可用,也可以通过包管理器安装。然后正常克隆 DeepSpeech 库
git clone https://github.com/mozilla/DeepSpeech
使用预先训练的模型
有三种方法可以使用 DeepSpeech 推断:
运行deepspeech可能需要在系统上安装一些运行时依赖项。 无论您使用哪种绑定,都需要以下内容:
- libsox2
- libstdc++6
- libgomp1
- libpthread
请参阅有关如何安装这些依赖项的系统文档。
CUDA 依赖
GPU 支持的构建(Python、NodeJS、c++ 等)依赖于与上游 TensorFlow 相同的 CUDA 运行时。目前在 TensorFlow 1.14 中,它依赖于 CUDA 10.0 和 CuDNN v7.5。
获得预先训练的模型
如果您想使用预先训练好的英语模型来执行语音到文本的转换,您可以从DeepSpeech releases 页面下载它(以及其他重要的推理材料)。或者,您可以运行以下命令下载并解压缩当前目录中的模型文件:
wget https://github.com/mozilla/DeepSpeech/releases/download/v0.5.1/deepspeech-0.5.1-models.tar.gz tar xvfz deepspeech-0.5.1-models.tar.gz
模型兼容性
对 DeepSpeech 模型进行版本控制是为了防止您在对代码进行破坏性更改之后,尝试使用与新客户机不兼容的 graph。如果您收到错误消息,说明您的模型文件版本对于客户端而言太旧,则应升级到较新的型号版本,使用较新版本的代码从检查点重新导出模型,或者在需要使用旧模型、无法重新导出时降级客户端。
使用 Python包
可以使用 pip3 安装预先构建的二进制文件,这些二进制文件可用于使用经过训练的模型执行推理。然后,您可以使用 deepspeech 二进制文件对音频文件进行语音到文本的转换:
对于 Python 绑定,强烈建议您在 Python 3.5 或更高版本的虚拟环境中执行安装。 您可以在此文档中找到有关这些内容的更多信息。
我们将继续假设您已经正确地设置了系统来创建新的虚拟环境。
创建 DeepSpeech 虚拟环境
在创建虚拟环境时,您将创建一个包含 python3 二进制文件和运行 deepspeech 所需的所有内容的目录。你可以使用你想要的任何目录。出于文档的目的,我们将使用 $HOME/tmp/deepspeech-venv 。您可以使用以下命令创建它:
$ virtualenv -p python3 $HOME/tmp/deepspeech-venv/
这个命令成功完成后,就可以激活环境了。
激活环境
每次需要使用 DeepSpeech 时,都必须激活此虚拟环境。 这是通过这个简单的命令完成的:
$ source $HOME/tmp/deepspeech-venv/bin/activate
安装 DeepSpeech Python 绑定
一旦你的环境已经被设置和加载,你可以使用 pip3 在本地管理包。在 virtualenv 的新设置中,必须安装 DeepSpeech wheel。您可以通过查看 pip3 list 的输出来检查它是否已安装。要执行安装,只需使用 pip3:
$ pip3 install deepspeech
如果它已经安装,您也可以更新它:
$ pip3 install --upgrade deepspeech
另外,如果您在 Linux 上拥有受支持的 NVIDIA GPU,您可以按照以下方式安装 GPU 特定软件包:
$ pip3 install deepspeech-gpu
请参阅发行说明,了解支持哪些 GPU。请确保您拥有所需的 CUDA 依赖项。
您可以按照以下方式更新 deepspeech-gpu:
$ pip3 install --upgrade deepspeech-gpu
在这两种情况下,pip3 都应该负责安装所有必需的依赖项。安装完成后,您应该能够从命令行调用 deepspeech。
注意:以下命令假定您下载了预先训练好的模型。
deepspeech --model models/output_graph.pbmm --alphabet models/alphabet.txt --lm models/lm.binary --trie models/trie --audio my_audio_file.wav
参数 --lm 和 --trie 是可选的,它们表示一个语言模型。
有关如何编程使用包的示例,请参见 client.py。
使用命令行客户端
要下载预构建的二进制文件,请使用 util/taskcluster.py :
python3 util/taskcluster.py --target .
或者如果您使用的是 macOS:
python3 util/taskcluster.py --arch osx --target .
这将下载 native_client.tar.xz ,其中包含 deepspeech 二进制文件和相关库,并将其解压缩到当前文件夹中。 taskcluster.py 会默认下载 Linux/x86_64 的二进制文件,但您可以使用 -arch 参数覆盖该行为。有关更多详细信息,请参阅 python util/taskcluster.py -h 的帮助信息。
注意:以下命令假定您下载了预先训练好的模型。
./deepspeech --model models/output_graph.pbmm --alphabet models/alphabet.txt --lm models/lm.binary --trie models/trie --audio audio_input.wav
使用 ./deepspeech -h 和本机客户端自述文件查看帮助输出以获取更多详细信息。
使用 Node.JS 包
您可以使用 npm 下载 Node.JS 绑定:
npm install deepspeech
或者,如果您使用的是 Linux 并且具有受支持的 NVIDIA GPU(请参阅发行说明以查找哪些 GPU 支持),则可以按照以下方式安装 GPU 特定软件包:
npm install deepspeech-gpu
有关如何使用绑定的示例,请参阅 client.js 。
从源代码安装绑定
如果预构建的二进制文件对您的系统不可用,则需要从头开始安装它们。遵循这些本地客户端安装说明。
第三方绑定
除了上面的绑定外,第三方开发者已经开始提供与其他语言的绑定:
- Asticode 在其 go-astideepspeech 存储库中提供 Golang 绑定。
- RustAudio 提供 Rust 绑定, 其安装和使用在其 deepspeech-rs 仓库中进行了描述。
- stes 提供了初步的 PKGBUILDs 以在 Arch Linux 上安装 arch-deepspeech 存储库。
- gst-deepspeech provides a GStreamer 插件,可以从任何语言使用 GStreamer 绑定。
训练自己的模型
安装训练的先决条件
使用 pip3 安装所需的依赖项::
cd DeepSpeech pip3 install -r requirements.txt
您还需要安装 ds_ctcdecoder Python 包。将 deepspeech 模型的输出解码为文本需要 ds_ctcdecoder。您可以使用 utiltaskcluster.py 和 --decoder 标志来获得一个指向适合您的平台和 Python 版本的解码器包二进制文件的 URL
pip3 install $(python3 util/taskcluster.py --decoder)
这个命令将下载并安装 ds_ctcdecoder 包。如果希望从源代码构建二进制文件,请参阅本机客户机README文件。如果您想要 ARM7(-arch arm)或 ARM64(—arch ARM64)的包,可以使用--arch 覆盖平台。如果您想要 ARM7(--arch arm) 或 ARM64(--arch ARM64) 的包,可以使用 --arch 覆盖平台。
推荐
如果你有一个能够支持 NVRAM(Nvidia,至少8GB VRAM)的 GPU,强烈建议安装支持 GPU 的 TensorFlow。培训可能会比使用 CPU 快得多。要启用 GPU 支持,您可以执行:
pip3 uninstall tensorflow pip3 install 'tensorflow-gpu==1.14.0'
通用语音训练数据
通用语音语料库包含通过 通用语音 捐赠的语音样本。 我们提供一个进口商,可以自动完成下载和准备语料库的整个过程。 您只需指定一个目标目录,即所有通用语音内容应该去的目录。 如果您已经从 此处下载了公共语音语料库归档文件,则只需在语料库所在的目录上运行导入脚本即可。 进口商将跳过下载并立即进行解包和导入。 要开始导入过程,您可以调用:
bin/import_cv2.py --filter_alphabet path/to/some/alphabet.txt /path/to/extracted/language/archive
请注意,这需要至少70GB的可用磁盘空间,并且需要相当长的时间才能得出结论。 由于此过程会创建大量小文件,因此强烈建议使用SSD驱动器。 如果导入脚本被中断,它将尝试从下次运行时停止的位置继续。 不幸的是,有些情况下需要重新开始。 导入完成后,该目录将包含一堆 CSV 文件。
以下文件是用于培训,验证和测试的官方用户验证集:
clips/train.csv
clips/dev.csv
clips/test.csv
cv-invalid.csv 包含用户标记为无效的所有示例。
名为 cv_corpus_{version} 的子目录包含从名为 cv_corpus_{version} .tar.gz 的存档中提取的 mp3 和 wav 文件。 CSV文件中的所有条目都通过绝对路径引用它们的样本。因此,移动此子目录需要另外导入或相应地调整 CSV 文件。
为了在训练、验证和测试过程中使用通用语音数据,您将它们的文件名(以逗号分隔的组合)传递到 DeepSpeech.py 的 --train_files, --dev_files, --test_files 参数。
例如,如果将公共语音语言 en 提取到 ../data/CV/en/, DeepSpeech.py 可以这样调用:
./DeepSpeech.py --train_files ../data/CV/en/clips/train.csv --dev_files ../data/CV/en/clips/dev.csv --test_files ../data/CV/en/clips/test.csv
训练模型
中心(Python)脚本是项目根目录中的 DeepSpeech.py。对于其命令行选项列表,您可以调用
./DeepSpeech.py --help
要以稍微更好的格式获得输出,您还可以查看 DeepSpeech.py 的选项定义。
为了执行预配置的训练场景,在 bin 文件夹中有一组便捷脚本。他们大多以他们配置的语料库命名。请记住,其他语音语料库非常大,大小为几十千兆字节,有些不是免费的。下载并预处理它们可能需要很长时间,并且在没有快速GPU(GTX 10系列推荐)的情况下进行培训需要更长的时间。
如果您在训练时遇到 GPU OOM 错误,请尝试使用 --train_batch_size, --dev_batch_size 和 --test_batch_size 参数。
作为一个简单的第一个例子,你可以打开一个终端,切换到 DeepSpeech 签出的目录并运行:
./bin/run-ldc93s1.sh
该脚本将训练一个名为 LDC93S1 的小样本数据集,为了演示目的,它可以在几分钟内在 GPU 上过度配置。从这里,您可以根据使用的数据集,运行多少次训练迭代以及网络参数的默认值来更改任何变量。 也可以自由地将其他(或覆盖) DeepSpeech.py 参数传递给这些脚本。 然后,运行脚本来训练修改过的网络。
每个数据集在 bin/ 中都有相应的导入脚本,可用于下载(如果可以自由使用)并预处理数据集。请参阅 bin/import_librivox.py 以获取如何导入和预处理大型数据集以用 Deep Speech 进行训练的示例。
如果您运行了旧的导入程序(在 util/importers/中),它们可能已经删除了新导入程序运行所需的源文件。在这种情况下,只需删除提取的文件夹,让导入器从头开始提取和处理数据集,事情就应该起作用。
点检查
在模型训练期间,所谓的检查点将被存储在磁盘上。这发生在一个可配置的时间间隔。检查点的目的是允许中断(也可以在出现意外故障的情况下)以及后续的继续培训而不会丢失培训时间。从检查点恢复,只需(重新)开始使用前一次运行的 --checkpoint_dir 开始训练即可自动发生。
然而,请注意,检查点只对生成的相同模型几何图形有效。换句话说:如果某些 Tensors 的错误消息具有不兼容的维度,这很可能是由于模型更改不兼容导致的。一种常见的解决方法是在开始训练之前清除检查点目录中的所有检查点文件或更改它。
导出推理模型
如果提供了 --export_dir 参数,则在训练期间将会将模型导出到此目录。 有关构建和运行可以使用导出模型的客户端的信息,请参阅相应的 README.md 。
请注意,为了能够运行该帮助示例,您至少需要两个具有CUDA功能的GPU(2名工作人员乘以1个GPU)。该脚本使用 DeepSpeech.py 的环境变量 CUDA_VISIBLE_DEVICES 来查看每个工作人员提供的 GPU 数量。 该脚本旨在成为一个模板为您自己的分布式计算仪器。请相应地修改不同服务器(工作人员和参数服务器)的启动代码。您可以使用SSH或类似的东西在远程主机上运行它们。
继续从冻结图形进行训练
如果您想使用由 Mozilla 发布的预训练模型来引导您的训练过程(传输学习,微调),您可以使用 DeepSpeech.py 中的 --initialize_from_frozen_model 标志。为了获得最佳效果,请确保在从冻结模型恢复时传递空的 --checkpoint_dir 。
例如,如果你想在 my-train.csv,my-dev.csv 和 my-test.csv 中使用自己的数据微调整个图形,对于三个时期,你可以像下面这样,将超参数调整为需要:
mkdir fine_tuning_checkpoints python3 DeepSpeech.py --n_hidden 2048 --checkpoint_dir path/to/checkpoint/folder --epochs 3 --train_files my-train.csv --dev_files my-dev.csv --test_files my_dev.csv --learning_rate 0.0001
注意:发布的模型是用 --n_hidden 2048 训练的,因此从发布模型初始化时需要使用相同的值。
代码文档
代码的文档(不完整)可以在这里找到: http://deepspeech.readthedocs.io/en/latest/
联系/获取帮助
有几种方式可以联系我们或获得帮助:
- FAQ -我们列出了常见问题及其答案,请参阅我们的 FAQ. 刚开始时,最好先检查 FAQ 看看您的问题是否已解决。
- Discourse Forums - If your question is not addressed in the FAQ, the Discourse Forums is the next place to look. They contain conversations on General Topics, Using Deep Speech, and Deep Speech Development.
-
IRC - 如果您的问题未在 FAQ 或 Discourse Forums未能解决,你可以通过Mozilla IRC
#machinelearning
频道联系我们;那里的人可以尝试回答/帮助。 - Issues -- 最后,如果一切都失败了,您可以在我们的存储库打开问题。