基于deepspeech模型的推理库

deepspeech的Python项目详细描述


项目深度演讲

task status

DeepSpeech是一个开源的语音到文本引擎,它使用了一个基于百度DeepSpeech研究论文的机器学习技术训练的模型。DeepSpeech项目使用谷歌的TensorFlow来简化实现。

用法

可以使用pip3安装用于使用经过训练的模型执行推理的预构建二进制文件。建议使用虚拟环境进行正确的设置,您可以在下面的文档中找到

可使用预先培训的英语模型,并可使用以下说明下载。目前,python客户端仅支持16位16 kHz单声道wave音频文件。

安装完所有内容后,您就可以使用deepspeech二进制文件在短(大约5秒长)音频文件上进行语音到文本转换,如下所示:

pip3 install deepspeech
deepspeech --model models/output_graph.pbmm --alphabet models/alphabet.txt --lm models/lm.binary --trie models/trie --audio my_audio_file.wav

或者,可以使用linux上支持的nvidia gpu执行更快的推断。请参阅发行说明以查找支持哪些GPU。要在GPU上运行DeepSpeech,请安装GPU特定的软件包:

pip3 install deepspeech-gpu
deepspeech --model models/output_graph.pbmm --alphabet models/alphabet.txt --lm models/lm.binary --trie models/trie --audio my_audio_file.wav

请确保您拥有所需的cuda依赖项。

有关使用deepspeech的更多信息,请参见deepspeech-h的输出。(如果在运行DeepSpeech时遇到问题,请检查所需的运行时依赖项。

目录

先决条件

获取代码

手动或通过系统上可用的包管理器安装git大文件存储。然后正常克隆deepspeech存储库:

git clone https://github.com/mozilla/DeepSpeech

使用预先培训的模型

使用深度语音推断有三种方法:

  • python包
  • 使用node js包rel="nofollow">node.js包
  • 使用命令行客户端rel="nofollow">命令行客户端

运行deepspeech可能需要在系统上安装一些运行时依赖项。无论您使用的是哪种绑定,都需要以下内容:

  • libsox2
  • libstdc++6
  • libgomp1
  • libpthread

请参阅系统文档,了解如何安装这些依赖项。

CUDA依赖性

具有GPU能力的构建(Python、NodeJS、C++等)依赖于相同的CUDA运行时作为上游张量流。目前TensorFlow 1.13依赖于CUDA 10.0和CUDNN V7.5。

获取预先训练的模型

如果您想使用预先训练好的英语模型来执行语音到文本,您可以从deepspeech发布页面下载它(以及其他重要的推理材料)。或者,可以运行以下命令下载并解压缩当前目录中的模型文件:

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模型进行版本控制,以防止在对代码进行中断性更改后尝试使用与新客户端不兼容的图形。如果您收到一个错误,说您的模型文件版本对客户端来说太旧,您应该升级到新的模型版本,使用较新版本的代码从检查点重新导出您的模型,或者如果您需要使用旧模型但无法重新导出,则降级您的客户端。

使用python包

可以使用pip3安装可用于使用经过训练的模型执行推理的预构建二进制文件。然后,您可以使用deepspeech二进制文件在音频文件中进行语音到文本转换:

对于python绑定,强烈建议您在python 3.5或更高版本的虚拟环境中执行安装。您可以在本文档中找到有关这些文档的更多信息

我们将继续假设您已经正确设置了系统以创建新的虚拟环境。

创建DeepSpeech虚拟环境

在创建虚拟环境时,您将创建一个包含python3binary和运行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控制盘。您可以使用pip3 list检查deepspeech是否已安装

要执行安装,只需使用pip3这样:

$ pip3 install deepspeech

如果已经安装了DeepSpeech,则可以对其进行更新:

$ pip3 install --upgrade deepspeech

或者,如果您在Linux上有受支持的NVIDIA GPU,则可以按如下方式安装特定于GPU的软件包:

$ pip3 install deepspeech-gpu

请参阅发行说明以查找支持哪些GPU。请确保您拥有所需的cuda依赖项。

您可以更新deepspeech gpu如下:

pip3 install deepspeech
deepspeech --model models/output_graph.pbmm --alphabet models/alphabet.txt --lm models/lm.binary --trie models/trie --audio my_audio_file.wav
0

在这两种情况下,pip3应该负责安装所有必需的依赖项。安装完成后,您应该可以从命令行调用deepspeech

注意:下面的命令假设您下载了预先训练的模型。

pip3 install deepspeech
deepspeech --model models/output_graph.pbmm --alphabet models/alphabet.txt --lm models/lm.binary --trie models/trie --audio my_audio_file.wav
1

参数--lm--trie是可选的,表示语言模型。

有关如何以编程方式使用包的示例,请参见

使用node.js包

您可以使用npm下载node.js绑定:

pip3 install deepspeech
deepspeech --model models/output_graph.pbmm --alphabet models/alphabet.txt --lm models/lm.binary --trie models/trie --audio my_audio_file.wav
2

请注意,到目前为止,我们只支持node.js版本4、5和6。一旦swig有了支持,我们就可以为新版本构建了。

或者,如果您使用的是Linux,并且有一个受支持的NVIDIA GPU,则可以按如下方式安装特定于GPU的软件包:

pip3 install deepspeech
deepspeech --model models/output_graph.pbmm --alphabet models/alphabet.txt --lm models/lm.binary --trie models/trie --audio my_audio_file.wav
3

请参阅发行说明以查找支持哪些GPU。请确保您拥有所需的cuda依赖项。

有关如何使用绑定的示例,请参见。或者下载wav示例

使用命令行客户端

< P>下载预编译的二进制文件,用于<代码> Debug Stutials>代码行(编译C++)客户端,使用<代码> UTI/TASKCopy.Py < /C> >:

pip3 install deepspeech
deepspeech --model models/output_graph.pbmm --alphabet models/alphabet.txt --lm models/lm.binary --trie models/trie --audio my_audio_file.wav
4

或者如果您在macos上:

pip3 install deepspeech
deepspeech --model models/output_graph.pbmm --alphabet models/alphabet.txt --lm models/lm.binary --trie models/trie --audio my_audio_file.wav
5

此外,如果您需要一些不同于当前主文件的二进制文件,如v0.2.0-alpha.6,则可以使用--branch

pip3 install deepspeech
deepspeech --model models/output_graph.pbmm --alphabet models/alphabet.txt --lm models/lm.binary --trie models/trie --audio my_audio_file.wav
6

脚本taskcluster.py将下载native_client.tar.xz(其中包括deepspeech二进制和相关库)并将其提取到当前文件夹中。此外,默认情况下,taskcluster.py将下载Linux/x86_64的二进制文件,但您可以使用--arch参数覆盖该行为。有关详细信息,请参阅python util/taskcluster.py-h中的帮助信息。还可以指定deepspeech或tensorflow的特定分支。

注意:下面的命令假设您下载了预先训练的模型。

pip3 install deepspeech
deepspeech --model models/output_graph.pbmm --alphabet models/alphabet.txt --lm models/lm.binary --trie models/trie --audio my_audio_file.wav
7

有关详细信息,请参见/deepspeech-h的帮助输出和native client readme

从SO安装绑定URCE < /H3>

如果预构建的二进制文件不适用于您的系统,则需要从头安装它们。请遵循以下安装说明

第三方绑定

除了上述绑定之外,第三方开发人员还开始提供其他语言的绑定:

培训自己的车型

安装培训先决条件

使用pip3

安装所需的依赖项
pip3 install deepspeech
deepspeech --model models/output_graph.pbmm --alphabet models/alphabet.txt --lm models/lm.binary --trie models/trie --audio my_audio_file.wav
8

您还需要安装python包。ds_ctcdecoder用于将deepspeech声学模型的输出解码为文本。您可以将util/taskcluster.py--decoder标志一起使用,以获得适合您的平台和python版本的解码器包二进制文件的url:

pip3 install deepspeech
deepspeech --model models/output_graph.pbmm --alphabet models/alphabet.txt --lm models/lm.binary --trie models/trie --audio my_audio_file.wav
9

此命令将下载并安装ds\u ctcdecoder包。如果您喜欢从源代码构建二进制文件,请参见native_client自述文件。如果需要ARM7(--arch arm)或ARM64(--arch arm64)的包,可以使用--arch覆盖平台。

建议

如果您有一个能够(nvidia,至少8gb的vram)gpu,强烈建议安装tensorflow和gpu支持。训练将比使用cpu快得多。要启用GPU支持,您可以执行以下操作:

pip3 install deepspeech-gpu
deepspeech --model models/output_graph.pbmm --alphabet models/alphabet.txt --lm models/lm.binary --trie models/trie --audio my_audio_file.wav
0

请确保您拥有所需的cuda依赖项。

通用语音训练数据

公共语音语料库包括通过Mozilla的公共语音倡议捐赠的语音样本。 您可以在这里下载单个CommonVoice v2.0语言数据集。 提取此类数据集后,您将发现以下内容:

  • corporateCreator为下载的语言输出的*.tsv文件
  • 它们在子目录中引用的MP3音频文件。

要将这些数据转换成DeepSpeech能够理解的形式,您必须运行CommonVoice v2.0导入程序(bin/import_cv2.py):

pip3 install deepspeech-gpu
deepspeech --model models/output_graph.pbmm --alphabet models/alphabet.txt --lm models/lm.binary --trie models/trie --audio my_audio_file.wav
1

提供过滤字母表是可选的。它将排除其文本包含不在指定字母表中的字符的所有样本。 使用-h运行导入程序将显示一些附加选项。

导入完成后,clips子目录将为每个所需的.mp3包含一个附加的.wav文件。 它还将添加以下.csv文件:

  • 剪辑/train.csv
  • 剪辑/dev.csv
  • 剪辑/test.csv

这些csv文件中的所有条目都以绝对路径引用其示例。因此,移动此子目录将需要另一个导入或相应地调整csv文件。

要在培训、验证和测试期间使用常见的语音数据,请将它们的文件名(以逗号分隔的组合)传递到--train_files--dev_files--test_files参数中。

例如,如果将通用语音语言en提取为。/data/cv/en/deepspeech.py可以这样调用:

pip3 install deepspeech-gpu
deepspeech --model models/output_graph.pbmm --alphabet models/alphabet.txt --lm models/lm.binary --trie models/trie --audio my_audio_file.wav
2

培训模型

中心(python)脚本是项目根目录中的deepspeech.py。对于其命令行选项列表,您可以调用:

pip3 install deepspeech-gpu
deepspeech --model models/output_graph.pbmm --alphabet models/alphabet.txt --lm models/lm.binary --trie models/trie --audio my_audio_file.wav
3

要以稍微好一点的格式获得输出,您还可以查看选项definitions to pdeepspeech.py

为了执行预先配置的培训场景,在bin文件夹中有一组方便脚本。它们中的大多数是根据它们配置的语料库命名的。请记住,其他的语音语料库都是非常大的,大约有几千万字节,有些是不免费的。下载和预处理它们可能需要很长时间,在没有快速GPU(推荐GTX 10系列)的情况下对它们进行培训需要更长时间。

如果在训练时遇到GPU OOM错误,请尝试使用--train_batch_size--dev_batch_size--test_batch_size参数减小批大小。

作为一个简单的第一个例子,您可以打开一个终端,切换到deepspeech签出的目录并运行:

pip3 install deepspeech-gpu
deepspeech --model models/output_graph.pbmm --alphabet models/alphabet.txt --lm models/lm.binary --trie models/trie --audio my_audio_file.wav
4

这个脚本将在一个名为ldc93s1的小样本数据集上进行训练,该数据集可以在几分钟内过度安装在gpu上,以供演示。从这里开始,您可以根据使用的数据集、运行的训练迭代次数和网络参数的默认值来更改任何变量。

您还可以随意向这些脚本传递附加(或重写)的deepspeech.py参数。然后,运行脚本来训练修改后的网络。

每个数据集在bin/中都有相应的导入程序脚本,可用于下载(如果可以免费获得)和预处理数据集。有关如何导入和预处理大型数据集以进行DeepSpeech培训的示例,请参见bin/import-librivox.py

如果运行了旧导入程序(在util/importers/中),它们可能已经删除了新导入程序运行所需的源文件。在这种情况下,只需删除提取的文件夹,让导入程序从头提取和处理数据集,一切就应该正常了。

检查点

在模型训练期间,所谓的检查点将存储在磁盘上。这是在一个可配置的时间间隔发生的。检查点的目的是允许中断(也在某些意外故障的情况下)和以后继续培训,而不损失几个小时的培训时间。通过使用与前一次跑步相同的检查点目录开始训练,自动从检查点恢复。

但是,请注意,检查点仅对从中生成的相同模型几何图形有效。换句话说:如果某些张量的错误消息具有不兼容的维度,这很可能是由于不兼容的模型更改。一种常见的解决方法是在开始培训之前清除检查点目录中的所有检查点文件或更改它。

导出模型进行推理

如果提供了--export_dir参数,则将在培训期间导出到此目录。 有关构建和运行可使用导出模型的客户端的信息,请参阅相应的readme.md

导出tflite的模型

如果要尝试使用tf-lite引擎,则需要导出与其兼容的模型,然后使用--nouse-seq-length--export-tflite标志。如果您已经有一个经过训练的模型,那么您可以通过再次运行deepspeech.py并指定与您用于训练的相同的checkpoint dir来为tflite重新导出它,并传递--nouse-seq-length--export-tflite--export-dir/model/export/destination

制作一个可用于推理的mmap模型

在上述步骤中生成的output_graph.pb模型文件将加载到内存中,以便在运行推理时进行处理。 这将导致额外的加载时间和内存消耗。避免这种情况的一种方法是直接从磁盘读取数据。

tensorflow有工具来实现这一点:它需要构建目标//tensorflow/contrib/util:convert_graphdef_memmapped_format(二进制文件由我们的taskcluster为一些系统(包括linux/amd64和macos/amd64)生成),使用util/taskcluster.py工具来下载d,将tensorflow指定为源,并将convert_graphdef_memmapped_format指定为工件。

生成mmap-able模型非常简单:

pip3 install deepspeech-gpu
deepspeech --model models/output_graph.pbmm --alphabet models/alphabet.txt --lm models/lm.binary --trie models/trie --audio my_audio_file.wav
5

成功运行后,它应报告非零个节点的转换。如果它报告正在转换0节点,则有问题:请确保您的模型是冻结的,并且您没有应用任何不兼容的更改(这包括量化权重)。

从发布模型继续培训

如果您想使用Mozilla发布的一个预先训练的模型来引导您的训练过程(传输学习、微调),您可以使用deepspeech.py中的--checkpoint\u dir标志来启动。指定从版本中下载检查点的路径,培训将从预先培训的模型中恢复。

例如,如果要使用my train.csvmy-dev.csvmy test.csv中的自己的数据微调整个图形,对于三个阶段,您可以执行如下操作,根据需要调整超参数:

pip3 install deepspeech-gpu
deepspeech --model models/output_graph.pbmm --alphabet models/alphabet.txt --lm models/lm.binary --trie models/trie --audio my_audio_file.wav
6

注意:已发布的模型使用--n_hidden 2048进行训练,因此在从发布模型初始化时需要使用相同的值。

贡献指南

这个存储库由Mozilla的行为准则和礼仪指南管理。有关更多详细信息,请阅读Mozilla社区参与指南。

在发出拉取请求之前,请使用棉绒检查更改是否存在基本错误和样式问题。我们在这个存储库中设置了cardboardlinter,因此,例如,如果您已经做了一些更改,并且只想在更改的代码上运行linter,您可以使用以下命令:

pip3 install deepspeech-gpu
deepspeech --model models/output_graph.pbmm --alphabet models/alphabet.txt --lm models/lm.binary --trie models/trie --audio my_audio_file.wav
7

这将比较代码与master,并对所有更改运行linter。我们计划在将来引入更多的未经验证的检查(例如C++)。要将其作为git预提交挂钩自动运行,请执行以下操作:

pip3 install deepspeech-gpu
deepspeech --model models/output_graph.pbmm --alphabet models/alphabet.txt --lm models/lm.binary --trie models/trie --audio my_audio_file.wav
8

这将只对提交中所做的更改运行linter。

联系/获取帮助

有多种方法可以联系我们或获得帮助:

  1. 常见问题解答-我们在我们的常见问题解答中列出了常见问题及其答案。当J刚开始时,最好先查看"常见问题解答" rel="nofollow",看看您的问题是否得到了解决。

  2. 话语论坛-如果您的问题未在中解决,则/c/deep speech" rel="nofollow">下一个要看的地方是讨论论坛。它们包含关于使用深度语音的一般主题、使用深度语音的对话。ent/21077" rel="nofollow">深度语音开发

  3. irc-如果您的问题没有通过常见问题解答" rel="nofollow">或讨论论坛",您可以通过Mozilla IRC上的>机器学习频道与我们联系;那里的人们可以尝试回答/帮助

  4. 问题-最后,如果所有其他问题都失败,您可以在我们的回购协议中打开问题。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
javagae/JPA/Datastore如何查询无主列表   java从xml中读取未知元素   java如何在控制台上显示MavReplugin单元测试覆盖率报告   java什么被认为是遍历LDAP DIT的正确方法?   Eclipse(Java)在创建了一个新包之后,我无法向其中添加源文件   java new REngine启动并立即停止   java Android:如何从保存在SQLite数据库中的listview中删除项目?   找不到java Gradle DSL方法:“compile()”错误   java使用POI获取具有特定列名的每一行中的值   java解析JSON文件   java中断for循环,返回4个结果,而不是2个   LDAP处理过程中发生java未分类异常;嵌套的异常是javax。命名。NamingException   当表单在基于spring3注释的控制器中验证失败时,java引用数据将丢失   java Android,从web获取数据并更新UI(多线程和MVC设计模式)   用于OS X Yosemite的java优化Swing程序