lrn-oai-whisper-merge-2

182 阅读1小时+

OpenAI Whisper 学习指南(三)

原文:annas-archive.org/md5/498a61d068550a5ec9498fc70995a63b

译者:飞龙

协议:CC BY-NC-SA 4.0

第九章:利用 Whisper 进行个性化语音合成

欢迎来到第九章,在这一章中,我们将深入探讨个性化语音合成PVS)。这一领域涵盖了许多应用和技术,旨在根据个人偏好或需求创建合成语音。PVS 是一个多功能的过程,可以根据不同的目的进行定制,包括辅助技术、虚拟助手开发和数字内容创作。在这个背景下,OpenAI 的 Whisper 工具通过在预处理和注册过程中提供准确的语音数据转录,来实现语音合成。

在开始之前,我们需要区分语音克隆与 PVS。语音克隆涉及创建自然人的语音数字复制品。虽然这一技术有其有效的应用场景,但也带来了重大伦理问题。然而,PVS 专注于根据特定特征创造独特的声音,而不是直接复制某个人的声音。这一区别在讨论语音合成技术的伦理使用时至关重要。在本章中,我们将指导您如何利用 Whisper 的强大功能创建 PVS 模型,确保您掌握如何负责任地使用这项技术。

我们将首先探索语音合成文本转语音TTS)的基础知识。您将深入了解神经网络、音频处理和语音合成在这一领域中的作用。在此基础上,我们将指导您如何将音频文件转换为LJSpeech格式,这是一种在 TTS 任务中常用的标准化数据集结构。

接下来,我们将向您介绍深度学习艺术学校DLAS)工具包,这是一个强大的框架,用于微调 PVS 模型。在这里,您的学习旅程将真正开始。您将了解如何设置训练环境、准备数据集和配置模型架构。通过利用 Whisper 准确的转录结果,您可以将音频片段与相应的文本对齐,创建一个适合用于训练 PVS 模型的数据集。本教程不仅是一个指南,更是您掌握使用 Whisper 进行 PVS 艺术创作的入门通道。准备好迎接启发与激励吧!

通过实际示例和代码片段,您将获得微调预训练 PVS 模型的实战经验,使用您的 LJSpeech 数据集。您将学习如何定制训练过程、选择适当的超参数并评估模型的性能。

最后,我们将测试您微调后的 PVS 模型,合成真实且富有表现力的语音。您将学习如何通过向模型提供文本输入来生成自然的语音,使 PVS 语音栩栩如生。

在本章中,我们将涵盖以下主要内容:

  • 理解 PVS 中的 TTS

  • 将音频文件转换为 LJSpeech 格式

  • 使用 DLAS 工具包微调 PVS 模型

  • 使用微调后的 PVS 模型合成语音

到本章结束时,你将全面了解如何利用 Whisper 实现 PVS。你将具备预处理音频数据、微调语音模型并使用 PVS 框架生成真实语音的知识和技能。无论你是语音技术领域的研究人员、开发者还是爱好者,本章将为你提供宝贵的见解和实用技巧,帮助你释放 OpenAI Whisper 在 PVS 中的潜力。

技术要求

为了利用 OpenAI 的 Whisper 实现高级应用,本章使用 Python 和 Google Colab 以便于使用和访问。Python 环境的设置包括用于转录任务的 Whisper 库。

关键要求

  • Google Colab 笔记本:这些笔记本已设置为以最低所需内存和能力运行我们的 Python 代码。如果有 T4 GPU 运行类型可用,选择它可以获得更好的性能。

  • Python 环境:每个笔记本都包含加载所需 Python 库的指令。

  • Hugging Face 账户:某些笔记本需要 Hugging Face 账户和登录 API 密钥。Colab 笔记本中包含关于此主题的信息。

  • Audacity:Audacity 是一个免费的开源数字音频编辑和录音应用程序,支持 Windows、macOS、Linux 和其他类 Unix 操作系统。如果你想合成自己的声音,它是一个非常好的选择。

  • 麦克风和扬声器:一些笔记本实现了语音录音和音频播放功能。连接到计算机的麦克风和扬声器可能会帮助你体验互动语音功能。

  • GitHub 仓库访问:所有 Python 代码,包括示例,均可在本章的 GitHub 仓库中找到(github.com/PacktPublishing/Learn-OpenAI-Whisper/tree/main/Chapter09)。这些 Colab 笔记本已经准备好运行,提供了一种实用的动手学习方法。

通过满足这些技术要求,你将能够在不同的环境中探索 Whisper,同时享受 Google Colab 提供的简化体验和 GitHub 上的丰富资源。

了解语音合成中的文本到语音

TTS 是语音合成过程中的关键组成部分,它可以将书面文本转化为语音。了解 TTS 的基本原理对于理解语音合成的工作原理以及如何在各种场景中应用它至关重要。图 9.1 展示了 TTS 在语音合成中的工作原理的高层次概述,并没有深入探讨技术细节:

图 9.1 – TTS 语音合成流程

图 9.1 – TTS 语音合成流程

TTS 语音合成流程中有五个组件:

  1. 文本预处理

    1. 输入文本首先会进行标准化和预处理。

    2. 数字、缩写和特殊字符会被展开成完整的单词。

    3. 文本被划分为单独的句子、单词和音素(独立的音频单位)。

  2. 文本到频谱图

    1. 规范化的文本被转化为一系列语言特征,并编码成向量表示。

    2. 一个频谱图生成模型,通常是一个深度学习模型,接收这个编码的文本并生成频谱图。

    3. 频谱图直观地表示了语音声音的频率和强度随时间的变化。

  3. 从频谱图到波形

    然后,频谱图被输入到声码器模型中。声码器是一个生成模型,经过训练能够将频谱图转化为可听的波形。它根据频谱图中的频率信息重建语音信号。

  4. 语音合成

    为了合成特定人物的声音,TTS 模型会在该人物的语音数据集上进行微调。这使得模型能够学习该人物声音的独特特征、语气和韵律。通过足够的训练数据,生成的语音将模仿目标声音。

  5. 合成

    最终,生成的波形被输出为可听的合成语音。结果是一个合成的声音,能够朗读原始输入文本。

现代 TTS 系统能够生成非常自然的语音,具备适当的语调和表现力。TTS 流程,通过文本处理、声学建模和语音合成的复杂互动,构成了 PVS 转型技术的基础。在我们探索语音合成的细节时,理解如何利用 TTS 系统创造个性化语音至关重要。

一种强大的 TTS 实现是 TorToiSe-TTS-Fast,它是一个高性能的 TTS 系统,利用神经网络的力量生成真实且富有表现力的语音。接下来的部分将深入探讨 TorToiSe-TTS-Fast 的功能,并展示它如何以惊人的准确性和自然感合成声音。

介绍 TorToiSe-TTS-Fast

第五章 中,我们使用了 gTTS Python 库,它是 Google 翻译 TTS API 的接口。gTTS 允许你使用 Google 的 TTS 引擎将文本转化为语音。这一次,我们将探索 TorToiSe-TTS-Fast 项目,这是一个高性能的 TTS 系统,利用神经网络合成真实语音,而无需微调。接下来,我们将学习如何初始化 TextToSpeech 模型,它是 TTS 系统的核心组件。我们将深入了解 TextToSpeech 类及其在将文本转化为语音中的作用。

TorToiSe-TTS-Fast 项目的一个令人兴奋的特点是能够使用给定声音的不同音频片段生成语音。该项目提供了一系列预打包的声音,这些声音作为音频片段组织在单独的文件夹中。这些音频片段用于确定声音合成输出的许多属性,如声音的音高和音调、说话速度,甚至说话缺陷,如口吃或结巴。我们将深入选择该预存在的声音样本集中的一个声音。图 9.2展示了 TorToiSe-TTS-Fast 语音处理:

图 9.2 – TorToiSe-TTS-Fast 语音处理流水线

图 9.2 – TorToiSe-TTS-Fast 语音处理流水线

通过遵循图 9.2的步骤,您可以将额外的声音集成到 TorToiSe 中,增强其多功能性:

  1. 收集包含所需语音的音频样本。YouTube 上的访谈(可以使用youtube-dlpytube Python 库下载,就像我们在第六章中所做的那样)、有声读物和播客都是很好的信息源。我推荐Audacity工具作为录制您的声音和处理音频文件的可行选择。

  2. 将收集的音频分割成大约每个 10 秒的片段。至少需要 3 个片段,但建议使用更多片段以获得更好的结果。在测试过程中,我尝试了多达 5 个片段。

  3. 将音频片段转换为浮点编码和 22,050 Hz 的 WAV 格式。

  4. 稍后在本章中运行LOAIW_ch09_1_Synthesizing_voices_with_tortoise_tts_fast.ipynb笔记本后,您将看到一个名为/tortoise/voices/的目录结构,其中包含音频片段样本。这是 TorToiSe 用来存储和检索音频样本的默认文件夹。如果您创建自己的样本,请在该/tortoise/voices/目录中创建一个文件夹并将文件保存在那里。例如,我创建了/tortoise/voices/josue文件夹来存储我的音频文件。

  5. 将处理过的音频片段转移到新创建的子目录中。

  6. 要利用新的语音,请执行tortoise工具,并使用--voice标志,后面跟上您子目录的名称。

在探索 TorToiSe-TTS-Fast 流水线之后,可以明显感觉到高质量的音频数据是创造令人信服和自然音色的合成语音的基础。准备这些音频数据涉及创建新的录音或处理现有音频文件,以确保它们适合语音合成。这就是 Audacity 发挥作用的地方,作为音频创建、编辑和细化的强大工具。当然,我鼓励您使用其他您已经在音频处理中使用的工具;Audacity 和创建音频文件是可选的。

Audacity 是一个多功能工具,用于创建、编辑和处理音频文件,是语音合成流程中的关键步骤。它允许你录制语音样本、剪辑和分割音频片段、调整音频属性,如音调和速度,并导出多种兼容语音合成工具的格式。利用 Audacity 的功能,你可以准备适合语音合成要求的高质量音频数据。

使用 Audacity 进行音频处理

Audacity 的核心是一个多轨音频编辑器和录音机,支持许多操作系统,包括 Windows、macOS、GNU/Linux 和其他类 Unix 系统。它的开源特性确保它对所有用户免费,并培养了一个充满活力的开发者和音频爱好者社区,大家持续贡献其开发和改进。这种协作使 Audacity 拥有了各种功能,从基本的录音和编辑到更高级的特性,如噪声消除、频谱分析和支持多种音频格式。如果你偏好其他音频编辑软件,也可以选择它,使用 Audacity 是可选的。如果你决定安装,它这里有一步步的安装指南。

Audacity 的安装过程非常简单,无论你的操作系统是什么。详细的安装说明可以在 Audacity 网站上找到 (support.audacityteam.org/basics/downloading-and-installing-audacity)。在这里,我们将介绍将 Audacity 安装并运行在你的机器上的基本步骤。

安装 Audacity for Windows

按照以下步骤操作:

  1. 下载安装程序:访问 Audacity 官方网站 (www.audacityteam.org/),点击 Windows 版本的下载链接。网站会自动检测你的操作系统,但如果需要,你也可以手动选择版本。

  2. Downloads 文件夹中)并双击以启动安装。你可能会遇到一个安全提示,询问是否允许安装程序更改你的系统;点击继续。

  3. 按照安装向导操作:安装程序会引导你完成几个步骤。你将选择首选语言,同意许可协议,选择安装目录,并决定是否执行附加任务,如创建桌面快捷方式。

  4. 完成安装:配置好你的偏好设置后,点击安装开始安装。安装完成后,你可以直接从安装程序启动 Audacity,或者在开始菜单中找到它。

安装 Audacity for macOS

按照以下步骤操作:

  1. 下载 DMG 文件:访问 Audacity 官网并下载 macOS 版本。网站应自动提供与你系统匹配的版本。

  2. 将软件拖入Applications 文件夹进行安装。你可能需要使用管理员密码进行身份验证。

  3. Applications文件夹。macOS 可能会提示您确认是否信任该应用程序,特别是在第一次运行时。

在 Linux 上安装 Audacity

Linux 用户可以从 Audacity 网站下载 AppImage,或者使用其发行版的包管理器安装 Audacity。对于 AppImage,请按照以下步骤操作:

  1. 使 AppImage 文件可执行:下载后,右键单击文件,导航至属性 | 权限,并勾选使文件可执行的选项。

  2. 运行 Audacity:双击 AppImage 文件以启动 Audacity。

或者,使用命令如sudo apt install audacity(适用于基于 Debian 的发行版)或sudo yum install audacity(适用于 Fedora/RHEL)通过终端安装 Audacity。

使用 TorToiSe-TTS-Fast 运行笔记本

在更详细了解 Audacity 作为音频创建、编辑和管理工具后,让我们动手使用 TorToiSe-TTS-Fast 进行操作。请找到并打开名为LOAIW_ch09_1_Synthesizing_voices_with_tortoise_tts_fast.ipynb的 Colab 笔记本(github.com/PacktPublishing/Learn-OpenAI-Whisper/blob/main/Chapter09/LOAIW_ch09_1_Synthesizing_voices_with_tortoise_tts_fast.ipynb)。该笔记本基于 TorToiSe-TTS-Fast(github.com/152334H/tortoise-tts-fast)TTS 项目,该项目在不修改基础模型的情况下大幅提升了TorToiSegithub.com/neonbjb/tortoise-tts)的性能。

使用该笔记本,我们将通过初始化TextToSpeech模型和选择语音来从给定的文本中生成语音。此外,我们还将通过使用随机或自定义语音来探索 TorToiSe-TTS-Fast 项目的灵活性。我们可以通过上传和预处理 WAV 文件来为语音合成创建个性化的语音。

最后,我们将探索结合多种语音生成具有融合特征的语音的迷人能力。通过加载不同语音的样本和条件潜变量,我们可以创建独特而有趣的语音组合。

在本节结束时,您将对语音合成中的 TTS 有一个坚实的理解。您将掌握设置环境、初始化TextToSpeech模型、选择语音、生成语音以及使用 TorToiSe-TTS-Fast 项目创建自定义和组合语音的知识和实践技能。这个理解将为进一步探索语音合成的潜力及其在各个领域的应用打下基础。

让我们打开笔记本并运行单元,以更好地理解 TorToiSe-TTS-Fast 项目中的语音合成流程:

  1. 环境设置:在这里,我们将安装并实例化几个库,每个库在项目设置中扮演着不同的角色:

    !git clone https://github.com/152334H/tortoise-tts-fast
    %cd tortoise-tts-fast
    !pip3 install -r requirements.txt --no-deps
    !pip3 install -e .
    !pip3 install git+https://github.com/152334H/BigVGAN.git
    !pip install transformers==4.29.2
    !pip install voicefixer==0.1.2
    %cd tortoise-tts-fast
    from huggingface_hub import notebook_login
    notebook_login()
    from huggingface_hub import whoami
    whoami()
    

    让我们简要回顾一下每个库的作用:

    • torch:这是 PyTorch 库,一个广泛使用的开源机器学习库,主要用于计算机视觉和自然语言处理应用。在本项目中,PyTorch 提供了构建和训练神经网络的基础框架,这些神经网络支撑了 TorToiSe-TTS-Fast 的语音合成功能。

    • torchaudio:作为 PyTorch 的扩展,torchaudio 提供了在 PyTorch 框架内轻松访问音频处理工具的能力。它用于加载和保存音频文件,并对音频数据进行转换和增强,这些都是语音合成中的关键任务。

    • huggingface_hub:这是 Hugging Face 提供的库,允许用户轻松地将模型和其他文件下载或上传到 Hugging Face Hub,其中可能包含 TextToSpeech 类所需的预训练模型或组件。huggingface_hub 库还提供了通过 notebook_login() 进行 Hub 认证的功能,并通过 whoami() 管理用户信息,方便访问 Hub 上存储的用于语音合成的模型和资源。

    • transformers (版本 4.29.2):这是 Hugging Face 提供的 transformers 库,提供了成千上万的预训练模型,涵盖各种自然语言处理任务,包括 TTS。此库支持 TorToiSe-TTS-Fast 项目中的 NLP 和 TTS 功能,提供访问最先进模型和工具的能力。

    • voicefixer (版本 0.1.2):该工具旨在修复和增强人声录音。voicefixer 在语音合成系统处理前改善语音样本的质量,确保合成语音的更高保真度。

    • BigVGAN:TTS 模型使用 BigVGAN 库,在语音合成过程中发挥作用,增强生成语音的真实感或质量。

    这些库每个都为 TorToiSe-TTS-Fast 项目的整体功能做出贡献,提供了机器学习、音频处理、模型管理和语音增强的基础工具和框架。这些工具使得人声合成的高效与实用成为可能。

  2. 用于合成语音的 TextToSpeech 模型。本节中的步骤旨在初始化 TTS 模型,使其能够处理文本输入并生成对应的语音输出,使用所选的声音:

    from tortoise.api import TextToSpeech
    from tortoise.utils.audio import load_audio, load_voice, load_voices
    # This will download all the models Tortoise uses from the HuggingFace hub.
    tts = TextToSpeech()
    

    以下是前面代码中概述的步骤:

    • TextToSpeech``TextToSpeech 类来自 tortoise.api 模块。该类是 TorToiSe-TTS-Fast 项目提供的 TTS 功能的主要接口。

    • TextToSpeech:导入该类后,通过简单调用类构造函数(不带任何参数)创建一个 TextToSpeech 实例。这个实例被分配给 tts 变量。

    • TextToSpeech,所需的模型会自动从 Hugging Face Hub 下载。此步骤确保所有用于语音合成的必要组件都已本地化。

    • TextToSpeech 类封装了将文本转换为语音所需的功能。初始化它是为语音合成任务做好准备的关键步骤。一旦模型初始化完成,它可以在后续步骤中用于使用各种语音从文本生成语音。

  3. 选择语音:此部分对于通过允许你选择各种预先存在的语音样本或上传的语音片段来个性化语音合成过程至关重要。

    import os
    from ipywidgets import Dropdown
    voices_dir = "tortoise/voices"
    # Get a list of all directories in the voices directory
    voice_names = os.listdir(voices_dir)
    voice_folder = Dropdown(
        options=sorted(voice_names),
        description='Select a voice:',
        value='tom',
        disabled=False,
        style={'description_width': 'initial'},
    )
    voice_folder
    import os
    from ipywidgets import Dropdown
    voices_dir = f"tortoise/voices/{voice_folder.value}"
    # Get a list of all directories in the voices directory
    voice_files = os.listdir(voices_dir)
    voice = Dropdown(
        options=sorted(voice_files),
        description='Select a voice:',
        # value='tom',
        disabled=False,
        style={'description_width': 'initial'},
    )
    Voice
    #Pick one of the voices from the output above
    IPython.display.Audio(filename=f'tortoise/voices/{voice_folder.value}/{voice.value}')
    

    选择特定语音进行合成的步骤如下:

    • os 模块用于与操作系统交互,并列出 tortoise/voices 目录下所有可用的语音文件夹。此步骤对于识别哪些语音可供合成至关重要。

    • Dropdown 类来自 ipywidgets 库。这个小部件允许你从可用的文件夹列表中选择一个语音文件夹。Dropdown 小部件配置了由语音文件夹列表填充的选项、描述提示("Select a voice:")以及其他设置,确保其可用性。

    • 使用 os.listdir 函数,以及 Dropdown 小部件再次向你展示这些选项。

    • IPython.display.Audio 类直接在 Colab 笔记本中播放选定的语音文件。此功能提供即时的听觉反馈,使你能够确认所选语音是否为期望的合成语音。

    这些步骤共同提供了一种用户友好且互动性强的方法,帮助你选择合成语音。它们确保你能够轻松浏览可用选项,并根据你的偏好或项目需求做出明智的选择。

  4. 生成带有选定语音的语音:此笔记本部分根据你之前指定的语音从文本生成语音:

    text = " Words, once silent, now dance on digital breath, speaking volumes through the magic of text-to-speech."
    preset = "ultra_fast"
    voice = voice_folder.value
    voice_samples, conditioning_latents = load_voice(voice)
    gen = tts.tts_with_preset(text, voice_samples=voice_samples, conditioning_latents=conditioning_latents, preset=preset)
    torchaudio.save(generated_filename, gen.squeeze(0).cpu(), 24000)
    IPython.display.Audio(generated_filename)
    

    本节的步骤旨在将你的输入文本转换为所选语音风格的口语。以下是代码中概述的步骤:

    • text。该文本将被合成成语音。

    • "ultra_fast""fast""standard""high_quality"。这些选项决定了生成速度与音频质量之间的权衡。

    • load_voice 函数来自 tortoise.utils.audio,用于加载选定的语音。此函数返回两个项:voice_samplesconditioning_latents。这些项将调整 TTS 模型,以生成符合所选语音风格的语音。

    • 调用 tts 对象(TextToSpeech 类的实例)中的 tts_with_preset 方法,并传入文本、语音样本、条件潜变量和预设。这一方法根据给定参数合成语音。

    • 使用 torchaudio.save 函数。然后通过 IPython.display.Audio 播放文件,允许你听到合成的语音。

    这些步骤使你能够使用所选语音的特定特征创建文本的语音版本,实质上使用 PVS 模型进行语音合成。

  5. voice_samplesconditioning_latents 设置为 None,这将使用随机语音生成语音:

    gen = tts.tts_with_preset(text, voice_samples=None, conditioning_latents=None, preset=preset)
    torchaudio.save(' synthetized_voice_sample.wav', gen.squeeze(0).cpu(), 24000)
    IPython.display.Audio('synthetized_voice_sample.wav')
    
  6. 使用自定义语音:以下代码允许用户上传他们的 WAV 文件(时长 6-10 秒)以创建自定义语音:

    CUSTOM_VOICE_NAME = "custom"
    import os
    from google.colab import files
    custom_voice_folder = f"tortoise/voices/{CUSTOM_VOICE_NAME}"
    os.makedirs(custom_voice_folder)
    for i, file_data in enumerate(files.upload().values()):
      with open(os.path.join(custom_voice_folder, f'{i}.wav'), 'wb') as f:
        f.write(file_data)
    # Generate speech with the custom voice.
    voice_samples, conditioning_latents = load_voice(CUSTOM_VOICE_NAME)
    gen = tts.tts_with_preset(text, voice_samples=voice_samples, conditioning_latents=conditioning_latents,
                              preset=preset)
    torchaudio.save(f'generated-{CUSTOM_VOICE_NAME}.wav', gen.squeeze(0).cpu(), 24000)
    IPython.display.Audio(f'generated-{CUSTOM_VOICE_NAME}.wav')
    

    它使用 os.makedirs 创建一个自定义语音文件夹,并将上传的文件保存在该文件夹中。然后加载自定义语音并用它来生成语音,类似于 步骤 4步骤 5

  7. load_voices 函数加载多个语音(在本例中为 'pat''william')。tts_with_preset 方法结合语音样本和条件潜变量,生成具有两种语音特征的语音:

    voice_samples, conditioning_latents = load_voices(['freeman', 'deniro'])
    gen = tts.tts_with_preset("Words, once silent, now dance on digital breath, speaking volumes through the magic of text-to-speech.",
                              voice_samples=voice_samples, conditioning_latents=conditioning_latents,
                              preset=preset)
    torchaudio.save('freeman_deniro.wav', gen.squeeze(0).cpu(), 24000)
    IPython.display.Audio('freeman_deniro.wav')
    

在对语音合成中的 TTS 基础知识有了初步了解,并探索了 TorToiSe-TTS-Fast 项目的强大功能后,我们将把注意力集中在为语音合成过程准备数据的关键步骤上:将音频文件转换为 LJSpeech 格式。

PVS 步骤 1 – 将音频文件转换为 LJSpeech 格式

本节及随附的笔记本 LOAIW_ch09_2_Processing_audio_to_LJ_format_with_Whisper_OZEN.ipynb 代表了本章中 PVS 三步过程的初步步骤。此步骤以目标语音的音频样本为输入,并将其处理成 LJSpeech 数据集格式。该笔记本演示了如何使用 OZEN 工具包和 OpenAI 的 Whisper 来提取语音、转录并根据 LJSpeech 结构整理数据。最终得到的 LJSpeech 格式数据集,由分段的音频文件和相应的转录组成,作为第二步 PVS 步骤 2 – 使用 DLAS 工具包微调离散变分自编码器 的输入,在这一过程中,PVS 模型将使用该数据集进行微调。

LJSpeech 格式的数据集在 TTS 模型中至关重要,因为它为组织音频文件及其相应的转录提供了标准化结构。通过遵循 LJSpeech 格式,研究人员和开发者可以确保与各种 TTS 工具兼容,并促进训练。

LJSpeech 格式的数据集指的是按照LJSpeech 数据集keithito.com/LJ-Speech-Dataset/)的结构和组织方式安排音频文件及其对应转录的特定结构。LJSpeech 数据集是一个公共领域的语音数据集,包含 13,100 个由单一发言人朗读七本非虚构书籍中的段落的短音频片段,每个片段都有相应的转录文本。这些音频片段的长度不一,总时长约为 24 小时。在为 TTS 模型训练准备 LJSpeech 格式的数据集时,建议使用以下结构:

  • 音频片段应分割成单独的文件,并为每个文件提供相应的转录内容。

  • 音频应使用 WAV 文件格式,以避免压缩伪影。

  • 音频片段及其转录内容会被保存在名为wavs的文件夹中。

  • 一个元数据文本文件将每个音频片段映射到其转录内容。该文件应具有通过特殊字符(通常是管道符号|)分隔的列,以区分音频文件名、转录文本和标准化转录文本。

  • 元数据文件中使用的分隔符不应出现在转录文本中。

  • 如果标准化转录不可用,则可以在两个列中使用相同的转录内容,后续流程中再进行标准化。

LJSpeech 格式数据集的文件夹结构如下所示:

/MyDataset
---├── train.txt
---├── valid.txt
---├── /wavs
---------├── 0.wav
---------├── 1.wav
        ...

文本文件中的条目将按如下格式进行组织:

wavs/0.wav|This is Josue Batista.
wavs/1.wav|I am the author of the book Learn OpenAI Whisper, Transform Your Understanding of Generative AI
wavs/2.wav|through robust and accurate speech processing solutions.
...

LJSpeech 格式被广泛使用,因为它受多种 TTS 工具的支持,例如 TorToiSe,它为 LJSpeech 数据集提供了相关工具。以这种方式格式化数据集,可以立即开始模型训练,而无需额外的格式化步骤。

现在我们了解了 LJSpeech 格式及其应用原因,接下来让我们将音频文件转换为这种格式。这样做将确保我们的数据集与各种 TTS 工具兼容,并为训练 PVS 模型做好准备。

一旦你有了想要合成的语音录音,下一步就是使用 OZEN 工具包预处理音频文件。该工具包简化了提取语音、使用 Whisper 转录并将结果保存为 LJSpeech 格式的过程。它可以处理单个音频文件或整个音频文件夹。

利用 OZEN 工具包和 Whisper,我们可以高效地将音频数据转换为 LJSpeech 格式。该工具包可以自动分割音频文件,生成相应的 WAV 文件,并创建必要的元数据文件(train.txtvalid.txt),将音频文件与它们的转录内容一一对应。

将音频文件转换为 LJSpeech 格式是语音合成流程中的一项关键技能,因为它确保了数据兼容性并促进了训练过程。掌握此技术将为你解决后续步骤,如微调 PVS 模型和语音合成,做好准备。

请查找并打开名为LOAIW_ch09_2_Processing_audio_to_LJ_format_with_Whisper_OZEN.ipynb的 Colab 笔记本(github.com/PacktPublishing/Learn-OpenAI-Whisper/blob/main/Chapter09/LOAIW_ch09_2_Processing_audio_to_LJ_format_with_Whisper_OZEN.ipynb)。该笔记本基于 OZEN Toolkit 项目(github.com/devilismyfriend/ozen-toolkit)。给定一个文件夹或单个音频文件,它将提取语音,使用 Whisper 进行转录,并以 LJ 格式保存(分段音频文件以 WAV 格式存放在wavs文件夹中,转录内容存放在trainvalid文件夹中)。让我们逐步解析代码,并提供代码示例:

  1. 克隆 OZEN Toolkit 仓库:以下命令从 GitHub 克隆 OZEN Toolkit 仓库,其中包含处理音频文件所需的脚本和工具:

    !git clone https://github.com/devilismyfriend/ozen-toolkit
    
  2. 安装所需的库:以下命令将安装音频处理、语音识别和文本格式化所需的库。安装完依赖项后,建议重启会话,以确保已安装的包正确初始化:

    !pip install transformers
    !pip install huggingface
    !pip install pydub
    !pip install yt-dlp
    !pip install pyannote.audio
    !pip install colorama
    !pip install termcolor
    ozen-toolkit directory:
    
    

    %cd ozen-toolkit

  3. 下载示例音频文件:如果你没有合成用的音频文件,可以使用此命令从指定的 URL 下载一个示例音频文件进行演示:

    /content/ozen-toolkit to store the uploaded files and saves them in that directory:
    
    

    import os

    from google.colab import files

    custom_voice_folder = "./myaudiofile"

    os.makedirs(custom_voice_folder, exist_ok=True)  # 如果目录不存在,则创建

    for filename, file_data in files.upload().items():

    使用with open(os.path.join(custom_voice_folder, filename), 'wb') as f:

    f.write(file_data)

    %ls -l "$PWD"/{,.}

  4. 使用configparser库处理"config.ini"文件。它定义了各种设置,如 Hugging Face API 密钥、Whisper 模型、设备、分段和分割模型、验证比例以及分段参数:

    import configparser
    config = configparser.ConfigParser()
    config['DEFAULT'] = {
        'hf_token': '<Your HF API key>',
        'whisper_model': 'openai/whisper-medium',
        'device': 'cuda',
        'diaization_model': 'pyannote/speaker-diarization',
        'segmentation_model': 'pyannote/segmentation',
        'valid_ratio': '0.2',
        'seg_onset': '0.7',
        'seg_offset': '0.55',
        'seg_min_duration': '2.0',
        'seg_min_duration_off': '0.0'
    }
    with open('config.ini', 'w') as configfile:
        config.write(configfile)
    
  5. 使用ozen.py脚本并将示例音频文件作为参数(或上传的文件):

    ozen.py requires Hugging Face’s pyannote/segmentation model. This is a gated model; you MUST request access before attempting to run the next cell. Thankfully, getting access is relatively straightforward and fast. Here are the steps:1.  You must already have a Hugging Face account; if you do not have one, see the instructions in the notebook for *Chapter 3*: `LOAIW_ch03_working_with_audio_data_via_Hugging_Face.ipynb` ([`github.com/PacktPublishing/Learn-OpenAI-Whisper/blob/main/Chapter03/LOAIW_ch03_working_with_audio_data_via_Hugging_Face.ipynb`](https://github.com/PacktPublishing/Learn-OpenAI-Whisper/blob/main/Chapter03/LOAIW_ch03_working_with_audio_data_via_Hugging_Face.ipynb))2.  Visit [`hf.co/pyannote/segmentation`](https://hf.co/pyannote/segmentation) to accept the user conditions:
    

图 9.3 – Hugging Face 上的 pyannote/segmentation 门控模型

图 9.3 – Hugging Face 上的 pyannote/segmentation 门控模型

  1. 在确保已访问 pyannote/segmentation 模型后运行该单元格。ozen.py脚本处理音频文件,提取语音,使用 Whisper 进行转录,并以 LJSpeech 格式保存输出。该脚本将 DJ 格式文件保存在名为ozen-toolkit/output/<音频文件名+时间戳>/的文件夹中。以下是预期文件结构的示例:
ozen-toolkit/output/
---├── Learn_OAI_Whisper_Sample_Audio01.mp3_2024_03_16-16_36/
------------------├── valid.txt
------------------├── train.txt
------------------├── wavs/
--------------------------├── 0.wav
--------------------------├── 1.wav
--------------------------├── 2.wav
  1. 挂载 Google Drive:以下代码行将你的 Google Drive 挂载到 Colab 环境中,允许访问 Google Drive 以保存检查点和加载数据集:

    from google.colab import drive
    drive.mount('/content/gdrive')
    
  2. ozen-toolkit/output 目录保存到 Google Drive。运行单元格后,使用网页浏览器打开 Google Drive,如 图 9.4 所示;你会看到一个名为 output 的目录,其中包含 DJ 格式的数据集文件:

    %cp -r /content/ozen-toolkit/output/ /content/gdrive/MyDrive/ozen-toolkit/output/
    

    以下是输出结果:

图 9.4 – 从 ozen.py 脚本中识别 DJ 格式文件的位置

图 9.4 – 从 ozen.py 脚本中识别 DJ 格式文件的位置

运行单元格后,使用网页浏览器打开 Google Drive;你会看到一个名为 output 的目录,其中包含 DJ 格式的数据集文件:

图 9.5 – Google Colab 中 DJ 格式输出文件夹示例

图 9.5 – Google Colab 中 DJ 格式输出文件夹示例

LOAIW_ch09_2_Processing_audio_to_LJ_format_with_Whisper_OZEN.ipynb 笔记本中的 Python 代码演示了如何设置环境、安装依赖项、配置 OZEN 工具包、使用 Whisper 处理音频文件并将输出保存为 LJSpeech 格式。它提供了一个简化的工作流程,用于为进一步分析或下游任务准备音频数据。

现在我们的音频数据已转换为 LJSpeech 格式,我们已经做好了准备,进入语音合成过程的下一个关键阶段:使用强大的 DLAS 工具包微调 PVS 模型。LOAIW_ch09_3_Fine-tuning_PVS_models_with_DLAS.ipynb 笔记本将在下一节详细介绍这个过程。通过利用 DLAS 工具包的全面功能和结构化的 LJSpeech 数据集,我们可以创建一个个性化的语音模型,精准且自然地捕捉目标语音的独特特征。

PVS 步骤 2 – 使用 DLAS 工具包微调 PVS 模型

微调 PVS 模型是创建个性化语音、捕捉语音独特特征的关键步骤。为了获得高质量的结果,必须使用一个强大的框架,利用最先进的技术,并提供灵活性来定制训练过程。DLAS 工具包成为微调 PVS 模型的综合解决方案,提供了多种功能和能力。

在开始微调过程之前,确保必要的组件和资源到位至关重要。这包括设置合适的训练环境,比如 Google Colab,它提供了强大的 GPU 和足够的 RAM 来处理 PVS 模型的计算需求。检查 NVIDIA GPU 的可用性和兼容性对于确保训练期间的最佳性能至关重要。

数据集准备阶段是微调 PVS 模型的另一个重要方面。DLAS 工具包要求具有特定仓库结构和依赖关系的数据集,必须在继续之前克隆和安装。此外,预训练模型检查点,如离散变分自编码器dVAE),在学习语音数据的离散潜在表示中发挥关键作用。验证这些检查点的完整性对加速微调过程和获得更好结果至关重要。

基于数据集大小选择适当的超参数对于微调 PVS 模型至关重要。DLAS 工具包为超参数提供智能建议,如批量大小、学习率衰减步数和验证频率,所有这些建议都考虑了数据集的特定特征。理解这些超参数如何计算以及它们对训练过程的影响对于实现最佳结果至关重要。

定制化是使用 DLAS 工具包微调 PVS 模型的另一个关键方面。研究人员和开发人员通常对训练设置有特定的需求和偏好,例如实验名称、数据集名称以及开启或关闭某些功能。DLAS 工具包提供了修改这些设置的灵活性,允许根据具体需求和目标进行定制化微调过程。

DLAS 工具包利用 YAML 配置文件来确保微调过程根据所需规范进行配置。该文件作为训练过程的蓝图,指定了各种参数和设置。工具包使用复杂的 sed 命令将定制的训练设置应用于 YAML 文件,确保微调过程按特定要求进行,并实现实验的可重现性(sed 代表流编辑器,是一种强大的命令行实用程序,用于使用简单、紧凑的编程语言解析和转换文本)。

配置文件准备就绪后,可以通过运行 DLAS 工具包提供的 train.py 脚本启动训练过程。此脚本利用 GPU 的强大计算能力有效地微调 PVS 模型,利用优化算法和损失函数指导学习过程。监控训练进度并使用适当的指标评估模型的性能对于确保微调 PVS 模型的质量至关重要。

最后,保存和导出经过微调的 PVS 模型对于将来的使用和部署至关重要。DLAS 工具包提供了便捷的方法来存储训练模型的检查点和实验文件,确保数据的持久性,并促进研究协作。对微调模型的适当管理和组织对于无缝集成到各种应用程序中至关重要,如虚拟助手、有声读物朗读和个性化语音界面。

研究人员和开发人员可以通过理解细化 PVS 模型时所涉及的组件、过程和注意事项,利用 DLAS 工具包创建个性化的语音,捕捉其中的细微差别和特点。定制训练过程、选择合适的超参数以及利用预训练的检查点,使用户能够实现高质量的结果,并探索语音合成中的令人兴奋的可能性。

请查找并打开名为 LOAIW_ch09_3_Fine-tuning_PVS_models_with_DLAS.ipynb 的 Colab 笔记本 (github.com/PacktPublishing/Learn-OpenAI-Whisper/blob/main/Chapter09/LOAIW_ch09_3_Fine-tuning_PVS_models_with_DLAS.ipynb)。

本笔记本使用 DLAS 工具包对 PVS 模型进行微调。它基于 TorToiSe fine-tuning with DLAS 项目,由 James Betker 开发 (github.com/152334H/DL-Art-School)。我克隆并修改了代码,使其能在 Google Colab 上运行,并利用 NVIDIA GPU 进行训练。

让我们逐步浏览 LOAIW_ch09_3_Fine-tuning_PVS_models_with_DLAS.ipynb 笔记本中的步骤:

  1. nvidia-smi 命令。如果连接了 GPU,它会打印出 GPU 的信息:

    gpu_info = !nvidia-smi
    gpu_info = '\n'.join(gpu_info)
    if gpu_info.find('failed') >= 0:
      print('Not connected to a GPU')
    else:
      print(gpu_info)
    
  2. psutil 库。如果它使用的是高内存的运行时,它会打印出一条消息:

    from psutil import virtual_memory
    ram_gb = virtual_memory().total / 1e9
    print('Your runtime has {:.1f} gigabytes of available RAM\n'.format(ram_gb))
    if ram_gb < 20:
      print('Not using a high-RAM runtime')
    else:
      print('You are using a high-RAM runtime!')
    
  3. 挂载 Google Drive:以下代码将您的 Google Drive 挂载,以便保存训练的检查点并加载数据集:

    from google.colab import drive
    drive.mount('/content/gdrive')
    
  4. 安装依赖项:它克隆了 DLAS 仓库,下载了预训练的模型检查点,并安装了所需的依赖项:

    !git clone https://github.com/josuebatista/DL-Art-School.git
    %cd DL-Art-School
    !wget https://huggingface.co/Gatozu35/tortoise-tts/resolve/main/dvae.pth -O experiments/dvae.pth
    !wget https://huggingface.co/jbetker/tortoise-tts-v2/resolve/main/.models/autoregressive.pth -O experiments/autoregressive.pth
    Dataset_Training_Path and ValidationDataset_Training_Path, click on Google Colab’s Files option and search Google Drive for the directory where the DJ-format datasets were stored in the previous notebook. *Figure 9**.6* shows an example of where the DJ-format dataset is found. Keep in mind that *Figure 9**.6* is just an example. Do not search for that literal name. Instead, you must search for the directory name you set while creating the DJ-formatted files:
    

图 9.6 – 在前一个笔记本创建的输出目录中搜索 DJ 格式数据集的示例

图 9.6 – 在前一个笔记本创建的输出目录中搜索 DJ 格式数据集的示例

以下是执行超参数计算的完整脚本。代码列出后将提供其工作原理的解释:

from pathlib import Path
from math import ceil
DEFAULT_TRAIN_BS = 64
DEFAULT_VAL_BS = 32
Dataset_Training_Path = "/content/gdrive/MyDrive/Generative_AI/Deep_Fakes_Voice/output/Learn_OAI_Whisper_Sample_Audio01.mp3_2024_03_16-16_36/train.txt" #@param {type:"string"}
ValidationDataset_Training_Path = "/content/gdrive/MyDrive/Generative_AI/Deep_Fakes_Voice/output/Learn_OAI_Whisper_Sample_Audio01.mp3_2024_03_16-
if Dataset_Training_Path == ValidationDataset_Training_Path:
  print("WARNING: training dataset path == validation dataset path!!!")
  print("\tThis is technically okay but will make all of the validation metrics useless. ")
  print("it will also SUBSTANTIALLY slow down the rate of training, because validation datasets are supposed to be much smaller than training ones.")
def txt_file_lines(p: str) -> int:
  return len(Path(p).read_text().strip().split('\n'))
training_samples = txt_file_lines(Dataset_Training_Path)
val_samples = txt_file_lines(ValidationDataset_Training_Path)
if training_samples < 128: print("WARNING: very small dataset! the smallest dataset tested thus far had ~200 samples.")
if val_samples < 20: print("WARNING: very small validation dataset! val batch size will be scaled down to account")
def div_spillover(n: int, bs: int) -> int: # returns new batch size
  epoch_steps,remain = divmod(n,bs)
  if epoch_steps*2 > bs: return bs # don't bother optimising this stuff if epoch_steps are high
  if not remain: return bs # unlikely but still
  if remain*2 < bs: # "easier" to get rid of remainder -- should increase bs
    target_bs = n//epoch_steps
  else: # easier to increase epoch_steps by 1 -- decrease bs
    target_bs = n//(epoch_steps+1)
  assert n%target_bs < epoch_steps+2 # should be very few extra
  return target_bs
if training_samples < DEFAULT_TRAIN_BS:
  print("WARNING: dataset is smaller than a single batch. This will almost certainly perform poorly. Trying anyway")
  train_bs = training_samples
else:
  train_bs = div_spillover(training_samples, DEFAULT_TRAIN_BS)
if val_samples < DEFAULT_VAL_BS:
  val_bs = val_samples
else:
  val_bs = div_spillover(val_samples, DEFAULT_VAL_BS)
steps_per_epoch = training_samples//train_bs
lr_decay_epochs = [20, 40, 56, 72]
lr_decay_steps = [steps_per_epoch * e for e in lr_decay_epochs]
print_freq = min(100, max(20, steps_per_epoch))
val_freq = save_checkpoint_freq = print_freq * 3
print("===CALCULATED SETTINGS===")
print(f'{train_bs=} {val_bs=}')
print(f'{val_freq=} {lr_decay_steps=}')
print(f'{print_freq=} {save_checkpoint_freq=}')

让我们分解这一部分的目的和步骤:

  • 代码导入了必要的库:pathlib 中的 Path 用于处理文件和目录,ceil 是内建 math 模块中的一个函数,用于将数字向上舍入到最接近的整数。

  • 它定义了默认的训练和验证批量大小值:DEFAULT_TRAIN_BS = 64 和 DEFAULT_VAL_BS = 32

  • 您需要提供训练和验证数据集的路径:Dataset_Training_PathValidationDataset_Training_Path

  • 代码检查训练和验证数据集路径是否相同。如果相同,它将打印出警告信息,指出验证指标将无用,并且训练速度将显著变慢。

  • 代码定义了一个辅助函数 txt_file_lines,它以文件路径作为输入,并返回文件中的行数。

  • 它通过调用 txt_file_lines 并传入相应的数据集路径来计算训练和验证样本。

  • 如果数据集的大小较小,代码会打印警告信息:训练样本小于 128,验证样本小于 20。

  • 它定义了一个辅助函数 div_spillover,该函数以样本数量(n)和批次大小(bs)作为输入,并返回调整后的批次大小,以最小化每个 epoch 中剩余样本的数量。

  • 代码根据训练样本的数量计算训练批次大小(train_bs)。如果训练样本数量小于 DEFAULT_TRAIN_BS,则将 train_bs 设置为训练样本数量并打印警告信息。否则,它会调用 div_spillover,并使用训练样本数量和 DEFAULT_TRAIN_BS 来计算调整后的批次大小。

  • 类似地,它根据验证样本的数量计算验证批次大小(val_bs)。如果验证样本数量小于 DEFAULT_VAL_BS,则将 val_bs 设置为验证样本数量。否则,它会调用 div_spillover,并使用验证样本数量和 DEFAULT_VAL_BS 来计算调整后的批次大小。

  • 代码通过将训练样本数量除以训练批次大小来计算每个 epoch 的步数(steps_per_epoch)。

  • 它通过 lr_decay_epochs = [20, 40, 56, 72] 定义学习率衰减应该发生的 epochs。

  • 代码通过将 steps_per_epochlr_decay_epochs 中的每个值相乘来计算学习率衰减的相应步数(lr_decay_steps)。

  • 它根据每个 epoch 的步数计算打印训练进度的频率(print_freq),最小为 20,最大为 100。

  • 代码将验证频率和保存检查点的频率(val_freqsave_checkpoint_freq)设置为 print_freq 值的三倍。

  • 最后,代码打印计算出的设置:train_bsval_bsval_freqlr_decay_stepsprint_freqsave_checkpoint_freq

  • 来自 DLAS 训练器的创建者,print_freqval_freqsave_checkpoint_freq 的值应该根据数据集的大小进行调整。Python 代码给出了推荐值:val_freq == save_checkpoint_freq == print_freq*3print_freq == min(epoch_steps,100)。再次强调,这些是建议值;我鼓励你尝试不同的值并比较结果,以找到最佳的超参数设置。

通过计算这些超参数,代码旨在提供可以用于训练 PVS 模型的合理默认值。然而,如果需要,我们可以在后续的部分覆盖这些计算出的值。

  1. 训练设置:这一部分允许我们根据需求和可用资源自定义训练设置。它提供了灵活性,可以命名实验、指定数据集名称、开启或关闭某些功能,并覆盖计算得出的设置。代码中还包括了注释和警告,指导你根据系统的存储和计算能力做出合适的选择:

    Experiment_Name = "Learn_OAI_Whisper_20240316"
    Dataset_Training_Name= "TestDataset"
    ValidationDataset_Name = "TestValidation"
    SaveTrainingStates = False
    Keep_Last_N_Checkpoints = 0
    Fp16 = False
    Use8bit = True
    TrainingRate = "1e-5"
    TortoiseCompat = False
    TrainBS = ""
    ValBS = ""
    ValFreq = ""
    LRDecaySteps = ""
    PrintFreq = ""
    SaveCheckpointFreq = ""
    def take(orig, override):
      if override == "": return orig
      return type(orig)(override)
    train_bs = take(train_bs, TrainBS)
    val_bs = take(val_bs, ValBS)
    val_freq = take(val_freq, ValFreq)
    lr_decay_steps = eval(LRDecaySteps) if LRDecaySteps else lr_decay_steps
    print_freq = take(print_freq, PrintFreq)
    save_checkpoint_freq = take(save_checkpoint_freq, SaveCheckpointFreq)
    assert len(lr_decay_steps) == 4
    gen_lr_steps = ', '.join(str(v) for v in lr_decay_steps)
    

    让我们来分解这一部分的目的和步骤:

    • 你可以指定以下训练设置:

      • Experiment_Name: 用于命名实验的字符串。

      • Dataset_Training_Name: 用于命名训练数据集的字符串。

      • ValidationDataset_Name: 用于命名验证数据集的字符串。

      • SaveTrainingStates: 一个布尔值,用于指示是否保存训练状态。

      • Keep_Last_N_Checkpoints: 一个整数滑块,用于指定要保留的检查点数量。将其设置为 0 表示保留所有保存的模型。

    • 代码提供了注释和警告:

      • 它提到,如果保持所有保存的模型(将Keep_Last_N_Checkpoints设置为 0),可能会导致存储不足的问题。

      • 没有训练状态时,Fp16: 一个布尔值,用于开启或关闭 16 位浮点精度。

      • Use8bit: 一个布尔值,用于开启或关闭 8 位精度。

      • TrainingRate: 用于指定学习率的字符串。

      • TortoiseCompat: 一个布尔值,用于开启或关闭与 TorToiSe 模型的兼容性。建议在训练过程中开启它以引入破坏性更改,然后禁用它以重现旧的模型。

    • 计算得出的设置覆盖:

      • 你可以通过指定TrainBSValBSValFreqLRDecayStepsPrintFreqSaveCheckpointFreq的值来手动覆盖前一单元格中计算得出的设置。

      • 如果为空,则使用前一单元格中计算得出的默认值。

    • 代码定义了一个take函数,用于覆盖计算得出的设置。如果覆盖值为空字符串,它将返回原始值;否则,返回覆盖后的值。

    • 代码将覆盖后的值或默认值分配给相应的变量:train_bsval_bsval_freqlr_decay_stepsprint_freqsave_checkpoint_freq

    • 最后,代码提示你在编辑设置后运行该单元格。

  2. sed命令:

    %cd /content/DL-Art-School
    # !wget https://raw.githubusercontent.com/152334H/DL-Art-School/master/experiments/EXAMPLE_gpt.yml -O experiments/EXAMPLE_gpt.yml
    !wget https://raw.githubusercontent.com/josuebatista/DL-Art-School/master/experiments/EXAMPLE_gpt.yml -O experiments/EXAMPLE_gpt.yml
    import os
    %cd /content/DL-Art-School
    !sed -i 's/batch_size: 128/batch_size: '"$train_bs"'/g' ./experiments/EXAMPLE_gpt.yml
    !sed -i 's/batch_size: 64/batch_size: '"$val_bs"'/g' ./experiments/EXAMPLE_gpt.yml
    !sed -i 's/val_freq: 500/val_freq: '"$val_freq"'/g' ./experiments/EXAMPLE_gpt.yml
    !sed -i 's/500, 1000, 1400, 1800/'"$gen_lr_steps"'/g' ./experiments/EXAMPLE_gpt.yml
    !sed -i 's/print_freq: 100/print_freq: '"$print_freq"'/g' ./experiments/EXAMPLE_gpt.yml
    !sed -i 's/save_checkpoint_freq: 500/save_checkpoint_freq: '"$save_checkpoint_freq"'/g' ./experiments/EXAMPLE_gpt.yml
    !sed -i 's+CHANGEME_validation_dataset_name+'"$ValidationDataset_Name"'+g' ./experiments/EXAMPLE_gpt.yml
    !sed -i 's+CHANGEME_path_to_validation_dataset+'"$ValidationDataset_Training_Path"'+g' ./experiments/EXAMPLE_gpt.yml
    if(Fp16==True):
      os.system("sed -i 's+fp16: false+fp16: true+g' ./experiments/EXAMPLE_gpt.yml")
    !sed -i 's/use_8bit: true/use_8bit: '"$Use8bit"'/g' ./experiments/EXAMPLE_gpt.yml
    !sed -i 's/disable_state_saving: true/disable_state_saving: '"$SaveTrainingStates"'/g' ./experiments/EXAMPLE_gpt.yml
    !sed -i 's/tortoise_compat: True/tortoise_compat: '"$TortoiseCompat"'/g' ./experiments/EXAMPLE_gpt.yml
    !sed -i 's/number_of_checkpoints_to_save: 0/number_of_checkpoints_to_save: '"$Keep_Last_N_Checkpoints"'/g' ./experiments/EXAMPLE_gpt.yml
    !sed -i 's/CHANGEME_training_dataset_name/'"$Dataset_Training_Name"'/g' ./experiments/EXAMPLE_gpt.yml
    !sed -i 's/CHANGEME_your_experiment_name/'"$Experiment_Name"'/g' ./experiments/EXAMPLE_gpt.yml
    !sed -i 's+CHANGEME_path_to_training_dataset+'"$Dataset_Training_Path"'+g' ./experiments/EXAMPLE_gpt.yml
    if (not TrainingRate=="1e-5"):
      os.system("sed -i 's+!!float 1e-5 # CHANGEME:+!!float '" + TrainingRate + "' #+g' ./experiments/EXAMPLE_gpt.yml")
    

    让我们来分解这一部分的目的和步骤:

    • 代码使用%cd魔法命令将当前目录更改为/content/DL-Art-School

    • 它使用wget命令从 GitHub 仓库152334H/DL-Art-School下载一个名为EXAMPLE_gpt.yml的全新 YAML 配置文件,并将其保存在experiments目录中。

    • 代码接着使用一系列sed命令,根据用户定义的设置修改EXAMPLE_gpt.yml文件中的值:

      • 它用分别存储在$train_bs$val_bs变量中的值替代训练和验证的batch_size值。

      • 它将val_freq值更新为存储在$val_freq中的值。

      • 它用 $gen_lr_steps 中存储的值替换学习率衰减步骤。

      • 它用 $print_freq$save_checkpoint_freq 中存储的相应值更新 print_freqsave_checkpoint_freq 的值。

    • 该代码将 YAML 文件中的占位符替换为用户定义的值。

    • 最后,如果 TrainingRate 不等于默认值 1e-5,代码会使用 sed 将 YAML 文件中的 CHANGEME: 占位符替换为用户定义的 TrainingRate 值。

    通过修改 YAML 文件中的用户指定值,训练过程可以根据您的需求进行定制。这确保了训练过程是基于您的偏好和数据集规格配置的。

  3. 使用配置好的 YAML 文件的 train.py 脚本。如果您对结果满意并看到以下输出,按下该单元格的停止按钮:

    INFO:base:Saving models and training states
    

    图 9.7 显示了输出示例和 Google Colab 文件界面中 60_gtp.pht 检查点的样子:

图 9.7 – 60 轮训练时检查点文件的示例

图 9.7 – 60 轮训练时检查点文件的示例

如果您的训练过程保存了很多模型,可能会超过 Google Colab 运行时的存储限制。为防止这种情况,请尝试在训练过程中通过文件资源管理器面板删除 /content/DL-Art-School/experiments/$Experiment_Name/(models|training_state)/ 中的旧检查点。训练崩溃后恢复训练需要编辑配置文件,因此尽量避免这种情况发生:

%cd /content/DL-Art-School/codes
!python3 train.py -opt ../experiments/EXAMPLE_gpt.yml
  1. experiments 文件夹上传到 Google Drive 以确保数据持久性:

    Experiment_Name variable:
    

图 9.8 – Google Drive 中包含 DLAS 检查点文件的文件夹示例

图 9.8 – Google Drive 中包含 DLAS 检查点文件的文件夹示例

您将在 <Experiment_Name>/models 文件夹中找到模型检查点——也就是带有 .pth 扩展名的文件:

图 9.9 – DLAS 检查点文件示例。在接下来的步骤中,您将需要一个检查点文件来合成经过微调的 PVS 模型

图 9.9 – DLAS 检查点文件示例。在接下来的步骤中,您将需要一个检查点文件来合成经过微调的 PVS 模型。

这就结束了我们对使用 DLAS 工具包微调 PVS 的概述。那个 .pth 文件就是我们刚刚用 DLAS 创建的微调 PVS 模型。在接下来的步骤中,我们将使用该文件通过 TorToiSe-TTS-Fast 合成语音。

微调 PVS 模型 – 超参数与数据集大小

在微调 PVS 模型时,考虑超参数与数据集大小之间的关系至关重要。Google Colab 训练笔记本会根据提供的数据集大小自动建议合适的超参数,以确保最佳性能和结果。

需要记住的一个关键点是每个 epoch 的步数(epoch_steps)是根据dataset_size // batch_size计算得出的。训练器会丢弃部分批次,因此选择一个能够整除数据集的批次大小非常重要。

如果您的数据集相对较小(50-500 个样本),请考虑调整以下超参数:

- 减小批次大小:为了最小化丢弃样本,选择一个能够整除数据集大小的批次大小。

gen_lr_steps应小于epoch_steps * 10。实验表明,如果在第 20 个 epoch 没有衰减,损失可能会增加。

根据数据集的大小调整print_freqval_freqsave_checkpoint_freq。推荐的设置是val_freq == save_checkpoint_freq == print_freq*3print_freq == min(epoch_steps,100)

通过根据数据集大小精确调节这些超参数,您可以优化微调过程,并在 PVS 模型中获得更好的结果。

成功使用 DLAS 工具包微调我们的 PVS 模型后,我们现在准备通过合成语音来测试我们的个性化语音,以捕捉目标语音的精髓。在下一部分中,我们将探索使用微调后的模型生成真实且富有表现力的语音,将合成的语音赋予生命,并开启各种令人兴奋的应用潜力。

PVS 步骤 3 – 使用微调后的 PVS 模型合成语音

使用微调后的 PVS 模型合成语音是语音合成过程的高潮,此时个性化的语音被赋予生命。它是微调模型进行测试的阶段,生成真实且自然的语音。能够使用微调后的 PVS 模型合成语音,打开了各种应用场景,从创建虚拟助手、电子书旁白到个性化语音界面。

在开始语音合成之旅时,有几个关键组件和考虑因素需要注意。首先,必须具备适合的计算环境,能够处理语音合成的计算需求。这通常涉及到利用 GPU 的强大计算能力,特别是 NVIDIA GPU,这可以显著加速合成过程。检查 GPU 的可用性和兼容性对于确保语音生成的顺利和高效至关重要。

除了硬件要求外,语音合成过程还依赖于强大的软件堆栈。TorToiSe-TTS-Fast 项目是一个高性能的 TTS 系统,成为了一个强大的工具。为了使用 TorToiSe-TTS-Fast,必须克隆项目仓库并安装所需的依赖项,确保所有必要的库和包都已准备就绪。

加载经过微调的 PVS 模型是语音合成过程中的关键步骤。在微调阶段,我们将模型存储在Google Drive中作为检查点文件或序列化模型对象。微调模型的存储位置和格式可能会根据您在微调过程中使用的具体位置有所不同。

在加载完经过微调的 PVS 模型后,下一步是准备将要合成成语音的文本输入。根据所需的输出,文本输入可以是一个单句、一个段落或一份脚本。确保文本输入格式正确,并且没有任何可能影响合成语音质量的错误或不一致性是至关重要的。

语音合成过程包括将文本输入馈送到经过微调的 PVS 模型,并生成相应的音频输出。在这个过程中,模型运用其学到的知识将文本转化为模仿我们作为基础使用的声音的语音。合成过程可能涉及多种技术,如神经声码器,以生成高质量的音频波形。

根据具体要求和偏好,在语音合成过程中可以调整各种参数和设置。这些参数可能包括说话速率、音调、音量和生成语音的情感语气。微调这些参数可以更好地控制最终输出,并有助于实现合成语音的期望表现力和自然度。

一旦语音合成过程完成,生成的音频可以保存为适合播放的文件格式,如 WAV 或 MP3。这使我们能够轻松地将合成语音集成到各种应用和平台中。在选择输出文件格式时,需要考虑期望的音频质量和兼容性——即,"ultra_fast""fast"(默认)、"standard""high_quality"

最后,评估合成语音的质量和自然性是过程中的关键步骤。这可以包括主观评估,例如由人工评估人员进行的听力测试,以及衡量生成语音各个方面的客观指标,如清晰度、自然性和与目标声音的相似度。根据评估结果进行迭代优化和微调,可以帮助提高合成语音的整体质量。

研究人员和开发者通过了解合成语音所涉及的组件、考虑事项和步骤,可以释放个性化语音生成的潜力。创造出能够捕捉声音本质的逼真且富有表现力的语音,为多个领域带来了激动人心的可能性,从娱乐和教育到无障碍技术及更多。通过正确的工具、技巧和对细节的关注,使用微调 PVS 模型的语音合成过程可以成为语音和音频处理领域中一项强大而具有变革性的技术。

请找到并打开名为 LOAIW_ch09_4_Synthesizing_speech_using_fine-tuned_PVS_models.ipynb 的 Colab 笔记本(github.com/PacktPublishing/Learn-OpenAI-Whisper/blob/main/Chapter09/LOAIW_ch09_4_Synthesizing_speech_using_fine-tuned_PVS_models.ipynb)。

本笔记本演示了如何检查 GPU 和 RAM,安装必要的库,加载微调的 PVS 模型,使用该模型合成语音,并播放生成的音频。代码依赖于 tortoise-TTS-Fast 项目来实现高性能的语音合成。接下来我们将逐步讲解 LOAIW_ch09_4_Synthetizing_speech_using_fine-tuned_PVS_models.ipynb 文件中的代码,包括解释和代码示例:

  1. nvidia-smi 命令。它会打印 GPU 信息,如果连接了 GPU,则显示相关信息;否则,会提示没有连接 GPU:

    gpu_info = !nvidia-smi
    gpu_info = '\n'.join(gpu_info)
    if gpu_info.find('failed') >= 0:
      print('Not connected to a GPU')
    else:
      print(gpu_info)
    
  2. psutil 库。它会打印可用的 RAM 数量(单位为 GB),并指示是否使用高内存运行时:

    from psutil import virtual_memory
    ram_gb = virtual_memory().total / 1e9
    print('Your runtime has {:.1f} gigabytes of available RAM\n'.format(ram_gb))
    if ram_gb < 20:
      print('Not using a high-RAM runtime')
    else:
      print('You are using a high-RAM runtime!')
    
  3. 从 GitHub 获取 tortoise-tts-fast 仓库并使用 pip3 安装所需的依赖项:

    !git clone **https://github.com/152334H/tortoise-tts-fast**
    %cd tortoise-tts-fast
    !pip3 install -r requirements.txt --no-deps
    transformers, voicefixer, and BigVGAN, using pip3:
    
    

    !pip3 install transformers==4.29.2

    !pip3 uninstall voicefixer

    !pip3 install voicefixer==0.1.2

    !pip3 install git+github.com/152334H/Big…

  4. 挂载 Google Drive:我们必须挂载 Google Drive 以加载之前创建的微调 PVS 模型:

    from google.colab import drive
    drive.mount('/content/gdrive')
    
  5. gpt_path) 和需要合成的文本(text):

    gpt_path = '/content/gdrive/MyDrive/<filepath/ filename_gpt.pth'
    .pth checkpoint file in Google Colab’s Copy Path:
    

图 9.10 – 在 Google Colab 中通过 DLAS 创建的检查点文件示例

图 9.10 – 在 Google Colab 中通过 DLAS 创建的检查点文件示例

  1. 使用指定的参数运行 tortoise_tts.py 脚本,包括用于推理速度的 --preset 选项、用于微调模型路径的 --ar_checkpoint 选项、用于输出文件名的 -o 选项,以及需要合成的文本:

    tortoise-tts-fast/scripts/results/ directory. You will find the generated audio from the voice synthesis model in that directory. We use IPython to display and play the synthesized audio file.
    
    

    import IPython

    IPython.display.Audio('/content/tortoise-tts-fast/scripts/results/random_00_00.wav')

    
    *Figure 9**.11* shows an example of the directory structure and files created by TorToiSe-TTS-Fast:
    

图 9.11 – 使用微调的 PVS 模型检查点 .pth 文件通过 TorToiSe-TTS-Fast 创建的音频文件示例

图 9.11 – 使用微调的 PVS 模型检查点 .pth 文件通过 TorToiSe-TTS-Fast 创建的音频文件示例

我鼓励你仔细检查并运行本章中的所有笔记本。它们提供了利用微调 PVS 模型进行高质量、高效 TTS 合成的端到端实践理解。这些知识将使你能够创建 PVS 应用,并通过本书中学到的技术与 TorToiSe-TTS-Fast 项目相结合,探索个性化语音生成的潜力。

总结

在本章中,我们探索了使用 OpenAI 的 Whisper 进行 PVS。我们发现了如何利用其强大功能,创建捕捉声音独特特征或完全新声音的定制语音模型,开辟了广泛的激动人心的应用场景。

我们首先探索了语音合成中的 TTS 基础,深入了解了神经网络、音频处理和语音合成的作用。我们学习了如何使用 OZEN 工具包和 Whisper 将音频文件转换为 LJSpeech 格式,这是一种在 TTS 任务中常用的标准化数据集结构。这一实践经验为语音合成过程中的后续步骤奠定了坚实的基础。

接下来,我们深入研究了 DLAS 工具包,这是一个强大的框架,用于微调 PVS 模型。我们学习了如何设置训练环境、准备数据集和配置模型架构。通过利用 Whisper 的精准转录,我们将音频片段与相应的文本对齐,创建了一个适合训练个性化 PVS 模型的数据集。

通过实践示例和代码片段,我们获得了微调预训练 PVS 模型的实战经验,使用了我们的 LJSpeech 数据集。我们发现了如何定制训练过程、选择合适的超参数并评估模型的性能。这一经验使我们具备了创建高质量个性化 PVS 模型的知识和技能。

最后,我们通过合成逼真且富有表现力的语音来测试微调后的 PVS 模型。我们学习了如何通过向模型提供文本输入来生成自然的语音,赋予我们合成的声音生命。创建个性化语音的能力打开了广泛的应用场景,从虚拟助手和有声书解说到个性化语音界面。

随着本章的结束,我们展望了第十章与 Whisper 共同塑造未来。在这一最终章中,我们将探索 ASR 领域的演变,以及 Whisper 在塑造未来中的作用。我们将深入研究未来趋势、预期功能、伦理考量以及语音技术的整体发展方向,包括先进的语音 TTS 微调技术。这一前瞻性的视角将为我们提供知识和远见,以为 ASR 和语音技术的未来做好准备和适应。

第十章:与 Whisper 一起塑造未来

欢迎来到本书的最后一章,我们将在这一章深入探讨 ASR 的未来及其令人激动的可能性。本章将探索塑造 ASR 领域的进展和趋势,并阐明 OpenAI 开创性的 Whisper 模型可能带来的影响,激发对未来的期待。

我们将从探索提升 Whisper 准确性和鲁棒性的持续努力开始。这包括增加训练数据、领域特定微调和模型架构优化等技术。这些理论努力对 Whisper 在不同语言、口音和声学条件下的性能具有实际意义,我们将在本章中深入探讨。

此外,本章还将强调在开发和部署 ASR 技术中,伦理考量和负责任的人工智能实践的关键作用。我们将探讨确保公平性、缓解偏见、保护用户隐私以及为负责任地使用 Whisper 和其他 ASR 系统建立指导方针的策略。

最后,我们将展望 ASR 的未来以及不断发展的语音技术领域。你将了解新兴架构、训练技术,以及多模态接口和无文本自然语言处理(NLP)在革新我们与语音语言互动方式方面的潜力。

本章将涵盖以下主题:

  • 预测 Whisper 的未来趋势、功能和改进

  • 考虑 ASR 技术的伦理影响

  • 为不断发展的 ASR 和语音技术领域做准备

在本章结束时,作为一名 ASR 专业人士、研究人员和爱好者,你将全面了解 ASR 领域的前沿进展和未来发展方向。这将使你能够利用 Whisper 和其他最先进的模型,构建创新、包容和负责任的语音启用应用程序。准备好塑造 ASR 的未来,并在令人激动的语音技术世界中解锁新的可能性。

预测未来的趋势、功能和改进

本节将探讨提高 OpenAI Whisper 准确性、鲁棒性和性能的持续努力。我们将讨论诸如增加训练数据、利用领域特定微调、优化模型架构以及实施应对偏见和公平性挑战的策略等技术。这些进展提升了 Whisper 的能力,使其成为各种自动语音识别(ASR)应用中更强大的工具。

提高准确性和鲁棒性

OpenAI Whisper 已经展示了在跨多种语言的语音转录和翻译方面的卓越能力。然而,在准确性、鲁棒性和效率方面,总是有改进的空间。本节将探讨可以提升 Whisper 性能的关键领域,包括优化模型架构和推理过程,以提供更加精确和可靠的结果。

优化模型架构和推理

在 Whisper 的编码器-解码器变换器模型的基础上,研究人员正在探索新的架构和技术,这些方法有可能在降低计算成本的同时进一步提升模型性能。

一个显著的架构优化实例是 Hugging Face 的工作,他们通过两项关键技术提升,已将 Whisper 推理代码的速度提高了多达 40%:

首先,他们将原生缩放点积注意力SDPA)集成到了 Whisper 的架构中。SDPA 是一种基于变换器的神经网络(如 Whisper)处理语音输入的机制。通过优化 Whisper 在原生 SDPA 集成中的计算负载,Hugging Face 使得模型在不牺牲准确性的情况下更加高效地处理语音数据。

其次,Hugging Face 转而使用高度优化的 Torch 后端来计算短时傅里叶变换STFT),这是语音识别音频信号预处理中的一个关键组件。利用 Torch 后端能够在 GPU 上更快地计算 STFT,从而进一步提升整体速度。

这些优化的影响体现在 Whisper 的large-v3模型的实时因子(RTF)从 10.3 降低到 7.45,而distil-v2模型的 RTF 则从 4.93 提升至 2.08。通过简化计算过程并利用更高效的算法,这些优化提升了 Whisper 的性能,并使其在大规模部署时更加可及且具成本效益。

采用量化技术,即降低模型权重和激活的精度,可以在不影响准确性的前提下进一步提升 Whisper 的效率。通过智能压缩模型参数,量化技术允许更快速的推理时间和更小的内存占用,使得 Whisper 能够在更多设备和平台上部署。

增强标点符号、话者分离和非语音检测

基于 Whisper 基础的更先进模型正在开发中,旨在提供更精确和可靠的标点符号预测。这些模型通过结合上下文理解、语言规则以及诸如词性标注、依赖句法分析和语言建模等技术,旨在生成更加贴近人类句子结构和可读性的转录文本。因此,这些先进的模型能够更好地理解转录文本的句法和语义结构,使得它们能够预测出更准确、符合上下文的标点符号,这对于生成易于理解的转录文本至关重要,并且对后续应用程序十分有用。

此外,正在进行的研究致力于改进 Whisper 的说话人分离能力,使其能够准确识别并区分单个音频记录中的多个说话者。这一进展对转录会议、采访和多人对话特别有价值,因为在这些场合下,将语音归属于正确的说话者对清晰性和语境至关重要。

增强 Whisper 对非语音声音(如笑声、音乐或背景噪音)的检测和处理能力,有助于提高生成转录的整体鲁棒性。通过准确识别和标注这些非语音元素,Whisper 可以提供更全面和细致的音频内容呈现,使转录文本在分析和解读时更具价值。

解决偏差和公平性挑战

在我们努力提高 Whisper 的准确性和鲁棒性的同时,解决可能出现的偏差和公平性问题至关重要。为了确保 Whisper 的性能提升能够惠及所有用户,必须优先收集多样化和具有代表性的训练数据集。

这涉及积极地寻求并包括来自不同人口群体、口音和语言背景的语音数据。通过将多样化的声音和语音模式纳入训练数据,Whisper 可以更准确地识别和转录不同人群的语音。

数据增强、分层抽样和集成方法可以减轻偏差并促进 Whisper 预测的公平性:

  • 数据增强通过对现有数据应用各种变换(如音调转换、速度变化或添加背景噪音)来创造额外的训练样本。这有助于增加训练数据的多样性和鲁棒性。

  • 分层抽样确保训练数据能代表不同的人口群体和语言变异。通过仔细平衡训练集的构成,Whisper 可以学会在不同子群体中公平地进行表现。

  • 集成方法涉及将多个在不同数据子集上训练的模型或使用其他架构结合起来。通过汇总多个模型的预测,集成方法有助于减轻单个模型的偏差,并提高整体准确性和公平性。

通过积极解决这些偏差和公平性问题,我们可以开发出一个高度准确、鲁棒、包容和公平的 ASR 系统。这对于确保 Whisper 的进展能够为所有用户提供利益,不论其背景或语言特征如何,是至关重要的。

虽然 Whisper 在多语言 ASR 方面取得了显著进展,但它在扩展语言支持方面仍有巨大的潜力。提高模型准确转录和翻译更多语言的能力对于让 ASR 技术在全球范围内更加包容和易于访问至关重要。

扩展 OpenAI Whisper 的语言支持

OpenAI Whisper 已经展示了令人印象深刻的多语言能力,支持多种语言的转录和翻译。然而,特别是在低资源和代表性不足的语言方面,仍然有很大的改进和扩展空间。

增加低资源语言的训练数据

影响 Whisper 在某一语言中准确性和表现的主要因素之一是训练数据的可用性。如在研究论文*《通过大规模弱监督实现稳健的语音识别》(即Whisper 论文*)(cdn.openai.com/papers/whisper.pdf)中所述,模型的表现与训练数据量密切相关。Whisper 约三分之一的训练数据来自非英语语言,其中大多数语言的数据量不到 1,000 小时,而英语的数据量则远高于此。这一差异限制了模型在低资源语言中的潜力。

在过去的一年中,增加低资源语言训练数据的有针对性努力对于解决性能差异并提高 Whisper 在更广泛语言范围内的准确性至关重要。通过积极收集和整理来自这些语言的多样化语音数据,Whisper 可以学习并适应它们独特的语言模式、音素、语法结构、口音和方言。这一训练数据的扩展将提升模型的性能,使其更具鲁棒性、公平性和包容性,确保自动语音识别(ASR)技术的好处能够惠及更广泛的语言社区。

利用迁移学习和自监督预训练

除了增加训练数据外,迁移学习和自监督预训练等先进技术也能显著提升 Whisper 在低资源语言上的表现。迁移学习涉及利用从高资源语言中获得的知识来提高模型对低资源语言的理解。通过识别共享的语言特征和模式,Whisper 可以在有限的监督数据下更高效地学习并适应新语言。

另一方面,自监督预训练使 Whisper 能够从大量未标记的语音数据中学习。通过将模型暴露于多样化的语音样本而无需明确的转录,它可以发现可跨语言转移的内在结构和表示。这种无监督学习方法对于低资源语言尤其宝贵,因为标注数据稀缺,它使 Whisper 能够捕捉语言无关的特征,进而提高其整体语言理解能力。

开发更具包容性和多样性的数据集

为了确保 Whisper 的语言扩展既广泛又不偏不倚、具有强健性,优先发展包容性和多样化的数据集至关重要。这涉及到积极寻找并整合来自不同来源、口音和领域的语音数据。通过训练多样化的语音和语言变体,Whisper 可以学会更准确地识别和转录不同人群和地区方言的语音。

像 Mozilla 的 Common Voice 项目这样的倡议,在通过众包多语言语音数据集实现语音技术普及方面至关重要。通过动员全球语言社区和志愿者,这些努力旨在创建代表人类语音丰富多样性的规模庞大的开源数据集。将这些数据集纳入 Whisper 的训练管道,可以显著提高其语言覆盖面和公平性。

优化多语言模型架构

随着 Whisper 扩展以支持数百种甚至数千种语言,优化其模型架构变得越来越重要。研究人员正在探索各种技术,以提高多语言模型的效率和性能,例如高效的参数架构、特定语言组件和增强的跨语言表示。

一种有前景的方法是使用适配器模块,这些轻量级神经网络可以插入到预训练模型中,专门针对特定语言或任务进行优化。通过在保持核心模型参数不变的情况下微调这些适配器,Whisper 可以在不进行广泛再训练的情况下,更高效地适应新语言。这种模块化方法使得语言扩展更加快速且具有可扩展性。

另一个研究方向是开发特定语言的组件,例如语言嵌入或语言相关的注意力机制。这些组件使 Whisper 能够更有效地捕捉每种语言独特的特征和细微差别,从而提高识别准确性和语言理解能力。

增强语言识别和代码切换

在现实世界的多语言环境中,识别口语语言和处理代码切换(在口语中混合多种语言)是关键挑战。为了使 Whisper 在这些场景中更加实用和有价值,持续的研究旨在增强其语言识别能力,并提高其对代码切换的鲁棒性。

利用语音和韵律特征的先进语言识别技术能够使 Whisper 准确判断一句话的语言,甚至适用于短语音片段。通过结合声学和语言学线索,Whisper 能够更可靠地在语言之间快速切换,确保在多语言对话中的无缝转录和翻译。

此外,为了有效处理语言混合,开发专门的模型和训练策略来处理代码切换语音可以显著提升 Whisper 的表现。通过向模型展示各种代码切换示例,并结合语言特定的约束和转换概率,Whisper 可以更有效地应对多语言语音的复杂性。

扩展语言支持的重要性

扩展 Whisper 的语言支持是一个技术挑战,也是将语音识别技术推广到全球的重要步骤。全球有超过 7000 种语言,其中大部分当前未得到现有语音技术的充分支持,而 Whisper 有潜力弥合这一语言鸿沟。通过支持更多语言,Whisper 可以为多语言人群提供更多的信息、服务和沟通渠道,推动教育、医疗、政府服务和娱乐等领域的关键应用。此外,Whisper 的语言扩展工作可以促进跨语言交流,打破语言障碍,促进不同语言背景的人们之间更自然、更无缝的互动,推动全球文化交流、合作与理解。此外,多语言 Whisper 模型为其他高级语音 AI 任务提供了基础,如语言理解、对话系统和语音对语音翻译,推动自然语言处理领域的创新与进步。

基于扩展版 Whisper 模型的语音接口可以改善受限读写能力人士或更愿意使用母语与技术互动的人的可访问性。这种包容性确保了语音识别技术的好处不仅仅限于高资源语言的使用者,而是能够惠及全球各地的社区。通过在多种语言中提供高质量的语音识别能力,Whisper 促进了更复杂、更具包容性的语音应用的开发,解锁了语音技术在全球用户中的全部潜力。

生成准确且易读的转录文本不仅仅是将语音转换为文本。随着 Whisper 扩展其语言支持并提升处理多样语言结构的能力,准确的标点、大写字母和说话者分段变得更加重要。这些元素在创建能够捕捉不同语言和文化背景下口语细微差别的可读输出中发挥着至关重要的作用。通过增强 Whisper 在这些方面的能力,我们可以确保扩展语言支持的好处得到充分实现,从而为全球更广泛的用户创造高质量、可访问的转录文本。

在 OpenAI Whisper 中实现更好的标点、格式化和说话者分段

OpenAI Whisper 在多种语言的语音转录中展现了出色的能力。虽然当前版本的 Whisper 在标点、说话者分段和非语音检测方面已经表现出一定的能力,但仍需进一步改进,以缩小原始语音识别输出和人类可读转录文本之间的差距。增强这些能力至关重要,原因有几个。首先,它极大地提高了转录文本的可读性和可用性,因为标点符号传达了语音的结构、语调和意图,使得转录文本更容易被人类读者理解和跟踪。其次,准确的说话者分段能够清晰地解释对话中谁说了什么,提供了转录内容的关键上下文。最后,检测并妥善处理非语音元素,如笑声、沉默或背景噪音,有助于更全面、细致的音频表现。本节将探讨为完善 Whisper 在处理这些关键方面的能力而开发的基本技术和方法,提升其准确性和鲁棒性。

增强标点和大写字母

准确的标点和大写字母使得转录文本更易读、易懂,并且对下游任务更有价值。实现这一目标的一种方法是将独立的标点和大写字母模型作为后处理步骤,在 Whisper 生成初步转录之后进行集成。这些模型可以恢复标点符号,如句号、逗号、问号和感叹号,正确地大写专有名词,并且开始句子。

然而,需要注意的是,单纯依赖文本的模型有时可能会产生比直接从音频中提取的标点更不理想的输出。未来的研究旨在开发更加复杂的方法,利用文本和声学线索实现更加准确和具有上下文相关性的标点。

提高时间戳的准确性,以便更好地对齐

Whisper 会输出每个转录语音段的时间戳,表示对应的音频片段。然而,这些时间戳可能会有几秒钟的提前或延迟,这会对说话人分离造成负面影响。像 WhisperX 和 stable-ts 这样的工具正在开发中,旨在通过使用基于音素的模型(如 wav2vec2.0)来强制对齐转录和音频,以解决这个问题。通过实现更精确的单词级时间戳,这些技术能够更准确地将说话人标签映射到转录的语音段上。

增强说话人嵌入和聚类

说话人分离涉及在对话中识别并将语音段分配给各个说话人。在获取精确的时间戳之后,下一步是将每个语音段映射到一个说话人标签。这个过程通常涉及使用像 TitaNet 这样的模型提取说话人嵌入,然后通过聚类将嵌入分组,以便将相同说话人的语音段归为一类。

当前的研究集中于改进说话人嵌入模型和聚类算法,以实现更低的分离错误率。通过利用更强大且更具区分性的说话人表示,Whisper 能够更准确地区分说话人,并为每个语音段分配正确的标签。

处理说话人重叠和打断

多个说话人重叠的语音仍然是分离系统面临的一个重大挑战。当多个说话人同时讲话或互相打断时,很难准确地将语音归属于正确的个体。未来的研究旨在开发先进的方法来检测打断点,并更有效地处理说话人重叠。

一种有前景的方法是采用源分离技术,将每个说话人的音频流隔离开来。通过将重叠的语音分离到不同的通道,Whisper 可以更容易地识别并转录每个说话人的贡献。这项功能将在现实场景中非常有价值,尤其是在对话经常涉及动态轮流发言和打断时。

利用标点符号进行说话人切换检测

Whisper 预测的标点符号可以为优化说话人分离提供有价值的线索。由于说话人变化通常发生在自然停顿或句子边界处,标点符号的出现可以指示潜在的说话人切换点。通过根据标点符号重新对齐分离输出,可以修正轻微的错误,从而得到更连贯、更准确的说话人分割。

首先,准确的说话人分离可以更精确地将语音映射到单个说话人,这对于情感分析、对话摘要和说话人归属的机器翻译等下游任务至关重要。通过正确识别谁说了什么,Whisper 可以提供更丰富、更有上下文的对话表示。

此外,改进的标点符号和格式化有助于将转录文本划分为连贯的句子和段落。这种语义结构增强了各种自然语言处理(NLP)模型的性能,例如用于信息提取、命名实体识别和机器翻译的模型。

最后,具有准确标点符号、大小写和发言者标签的转录文本更容易进行自动化处理和分析。通过减少对人工后期编辑的需求,Whisper 能够节省大量时间和精力,从而在各种应用中更快、更高效地利用语音数据。

随着 OpenAI Whisper 的不断发展,集成高级技术,如标点恢复、时间戳对齐、发言者嵌入和重叠处理,将显著提升其转录文本的质量和可用性。结合这些改进,Whisper 旨在生成能够捕捉对话语音所有细微差别和动态的转录文本,架起原始语音识别输出与可读文档之间的桥梁。

准确的标点符号、格式化和发言者区分不可过分强调。这些元素对于释放语音数据的真正潜力至关重要,能够促进更复杂的分析、摘要和翻译任务。随着 Whisper 在这些领域推动技术边界,它将为各种应用提供支持,从虚拟助手、客户服务到媒体分析和教育内容创作。

在标点建模、发言者区分及相关领域的持续研究和开发工作为 Whisper 的未来和更广泛的自动语音识别(ASR)领域带来了巨大前景。通过走在这些进展的前沿,Whisper 有望彻底改变我们与语音数据互动和利用的方式,使其比以往任何时候都更加易于访问、可操作和有价值。

随着即时语音识别需求在各类应用中的增长,提升 OpenAI Whisper 的速度和实时性能已成为关键的关注点。加速 Whisper 的推理并实现流畅、低延迟的语音转文本转换,将为互动性和时效性要求高的用例开辟新的可能性。

加速 OpenAI Whisper 的性能并实现实时能力

随着即时语音识别需求在各类应用中的增长,提升 OpenAI Whisper 的速度和实时性能已成为关键的关注点。本节将探讨为加速 Whisper 的推理并实现流畅、低延迟的语音转文本转换所开发的基本技术和优化方法。

实现流式推理以进行实时转录

为了实现准确的实时语音识别,Whisper 必须支持流式推理,这是一个至关重要的新兴能力。在流式推理中,模型处理音频片段时不再等待整个音频文件的到达,而是随着音频片段的到来进行处理。这可以在最小的延迟下生成转录,并与说话者的语速同步。优化片段大小、采样率和缓冲区管理,确保实时性能的平稳和不中断。通过仔细平衡这些参数,Whisper 可以在响应速度和准确性之间找到最佳平衡,大大提高其效率和实时能力。

通过压缩技术减少模型大小

加速 Whisper 推理速度的另一种有效策略是使用量化、蒸馏和参数共享来压缩模型大小。量化通过降低模型权重和激活的精度来减少模型的大小,而蒸馏则涉及训练一个更小、更高效的学生模型,模拟较大教师模型的行为。参数共享则旨在识别并利用模型架构中的冗余。通过减少模型的内存占用和计算复杂度,这些压缩技术可以显著加速推理,并使得在资源有限的边缘设备上进行实时应用部署变得更可行。

利用硬件加速

利用专用硬件的强大计算能力,如 GPU、TPU 和专门的 AI 加速器,可以显著加速 Whisper 神经网络的计算。通过为特定硬件架构优化模型,并使用 NVIDIA TensorRT 或 Intel OpenVINO 等框架,可以实现显著的性能提升。这些硬件加速技术通过并行处理、混合精度算术和定制指令集等技术,最大化吞吐量并最小化延迟。将 Whisper 部署在高性能计算基础设施上,可以实现比实时还要快的转录和快速处理大量音频数据。

在挑战性环境中提高准确性和鲁棒性

尽管速度对于实时语音识别至关重要,但它不应以牺牲准确性和鲁棒性为代价。在噪声环境、不同口音和自发性语音等具有挑战性的现实条件下提升 Whisper 的性能,对于可靠的实时操作至关重要。像谱增强这样的技术,在训练过程中向音频频谱引入随机扰动,可以提高模型对噪声的抗干扰能力。语音适应方法,如对少量特定说话人数据进行微调,可以帮助 Whisper 更好地处理个体语音模式的变化。此外,结合上下文语言模型,利用周围的文本来优化预测,可以提升在复杂语言场景中的准确性。

加速 Whisper 的性能并实现实时能力的重要性不言而喻。它为各个领域带来了广泛的变革性应用。在无障碍领域,实时转录使聋人或听力障碍者能够充分参与讲座、会议和现场活动。对于语音助手和聊天机器人等对话式 AI 界面,瞬时语音识别是实现自然、类人交互的关键。实时 ASR 使得时间敏感型应用成为可能,包括直播字幕、紧急响应转录和同声传译,在这些场景中,即便几秒钟的延迟也可能产生破坏性影响。

此外,比实时性能更快的表现带来了显著的计算效率和可扩展性优势。通过减少音频数据在缓冲区中停留的时间,大规模转录任务的整体延迟和处理成本可以显著降低。这对于处理海量音频内容的组织尤为重要,因为它能够加速索引、搜索和分析过程。

展望未来,Whisper 在速度和实时能力上的进展将为无缝、无处不在的语音交互开辟新的时代。随着边缘计算的普及,能够在智能手机、智能音响和物联网传感器等设备上执行实时语音识别,将实现保护隐私的离线语音界面。这种去中心化的自动语音识别(ASR)方法将开启全新的环境计算应用,让语音命令和对话可以在本地处理,无需依赖云端连接。

总之,持续优化 Whisper 架构、压缩模型大小、利用硬件加速,并提升其在复杂环境下的准确性,对于实现实时、低延迟的语音识别至关重要。随着这些进展的实现,Whisper 将成为一个更加强大和多功能的工具,推动在无障碍、对话式 AI、实时翻译和边缘计算等领域的广泛变革应用。语音交互的未来是即时、准确且无处不在的语音识别成为常态,而 OpenAI Whisper 正站在实现这一愿景的前沿。

Whisper 在速度和实时能力上的进展,加上其扩展的语言支持,开辟了无缝多语言通信的激动人心的可能性。随着 Whisper 能够即时转录和翻译多种语言的语音,它能够打破语言障碍,促进更加自然高效的跨语言互动。将 Whisper 与其他 AI 技术,如机器翻译和自然语言理解结合,能够进一步增强其弥合语言差距的能力,并推动更复杂的多语言应用。

加强 Whisper 与其他 AI 系统的集成

随着人工智能的快速发展,将 OpenAI Whisper 与其他前沿 AI 技术结合,正成为未来发展的关键领域之一。通过将 Whisper 最先进的语音识别能力与其他 AI 模型结合,研究人员和开发人员旨在创建更强大、更加多功能且用户友好的应用程序,能够以越来越自然和富有上下文的方式理解和响应人类的语言。

将 Whisper 与大型语言模型结合

将 Whisper 与其他 AI 系统结合的一个最有前景的途径是与大型语言模型的结合,如 GPT-4、Mistral、Claude 和 Llama。这些先进的语言模型已经展现出了卓越的自然语言理解、生成和推理能力,使其成为 Whisper 语音识别功能的理想搭档。

将 Whisper 与这些语言模型结合,使得创建端到端的语音识别-文本转化-动作执行流程成为可能,这些流程能够处理口语输入、理解其含义,并生成适当的响应或动作。例如,Whisper 可以将用户的语音转录,然后将其输入 GPT-3 来总结内容、提取相关行动项、生成连贯的回复,甚至将消息翻译成另一种语言。这种语音识别与语言理解的紧密结合,使得开发更自然和高效的基于语音的界面成为可能,能够真正理解用户意图并提供有帮助的、与上下文相关的帮助。

通过 Whisper 实现多模态 AI 应用

Whisper 与其他 AI 系统结合的另一个令人兴奋的前沿领域是多模态 AI 应用。通过将 Whisper 的语音识别能力与计算机视觉模型(用于图像和视频理解)、机器人传感器融合模型以及其他专业 AI 组件相结合,开发人员能够创建能够同时处理并理解多种输入模式的智能系统。

例如,由 Whisper 和计算机视觉 AI 驱动的虚拟助手,可以理解和响应语音命令,并解释用户的视觉提示和手势,从而实现更直观、沉浸的互动体验。类似地,配备 Whisper 和传感器融合 AI 的自动驾驶汽车,可以处理乘客的语音指令,同时分析来自摄像头和激光雷达的实时视觉和空间数据,以安全高效地导航。

将 Whisper 与多模态 AI 技术集成,为创造能够更类人地感知、理解和与世界互动的智能系统开辟了广阔的可能性。通过利用不同 AI 模型在各种模态中的优势,这些系统能够提供更全面、上下文感知的帮助,从而提升用户体验并在复杂的现实场景中改善决策过程。

通过 Whisper 和对话模型为对话式 AI 提供支持

对话式 AI 是 Whisper 与其他 AI 模型集成的另一个重要领域,具有巨大的潜力。研究人员和开发者可以通过将 Whisper 的精准语音转文本功能与先进的对话管理模型、意图识别系统和自然流畅的文本转语音引擎结合,创造出高度复杂的对话代理,进行流畅、上下文相关且类人的互动。

Whisper 与这些对话式 AI 组件的集成,使得语音助手、聊天机器人和其他对话界面的开发成为可能,这些系统不仅能够高精度地理解并转录用户语音,还能解释其潜在意图,保持连贯的对话上下文,并生成自然、动态适应的回应。这种集成水平使得人机互动更加引人入胜和富有成效,用户可以通过自然语音表达需求、提问和指令,并获得智能的、个性化的帮助作为回馈。

将 Whisper 与其他 AI 系统集成的重要性

将 Whisper 与其他 AI 技术集成,对于实现语音界面的最大潜力至关重要,并为各个领域的广泛变革性应用打开了大门。通过结合多个互补的 AI 模型的优势,开发者能够创造出更强大、自然且用户友好的系统,这些系统能够以越来越复杂且与上下文相关的方式理解、处理和响应人类语音。

Whisper 与其他 AI 模型的紧密集成的一个关键好处是能够实现多模态 AI 应用,这些应用能够处理并结合语音、视觉、语言及其他输入模态,以更加类人的方式理解和与世界互动。这样的多模态智能对于开发能够在复杂的现实环境中有效运作,并为用户提供全面、上下文感知帮助的 AI 系统至关重要。

此外,将 Whisper 与语言模型和机器翻译系统的结合为实时语音到语音的翻译应用铺平了道路,这些应用能够打破语言障碍,促进更加自然的跨语言交流。这些集成系统可以通过无缝地将一种语言的口语转换为另一种语言,促进在日益全球化的世界中更好的理解、合作和文化交流。

将 Whisper 与其他 AI 模型集成的另一个显著优势是提高效率,减少延迟和计算成本。通过优化不同 AI 组件之间的互动和数据流,开发人员可以创建更简化且资源高效的流程,以处理语音输入并生成响应,最大限度地减少延迟,从而使强大的 AI 应用在现实世界部署中更具可行性。

将 OpenAI Whisper 与其他前沿 AI 技术相结合对于开发更先进、自然和可访问的基于语音的界面至关重要。通过将 Whisper 的最先进语音识别能力与语言模型、计算机视觉、对话系统及其他 AI 组件相结合,研究人员和开发人员可以创建理解、处理并以日益复杂和具有上下文相关性的方式回应人类语音的智能系统。随着 Whisper 不断发展并与其他 AI 模型更紧密地融合,它将在塑造人机互动的未来中发挥关键作用,启用一系列能够提升全球人们生产力、可访问性和生活质量的变革性应用。

考虑伦理影响

随着像 OpenAI Whisper 这样的自动语音识别(ASR)技术日益成熟并广泛采用,解决与其开发和部署相关的伦理问题至关重要。本节将深入探讨确保公平性、减少偏见、保护用户隐私和数据安全,以及为其负责任使用制定准则和保护措施等关键问题。通过积极建立负责任的 ASR 部署框架,我们可以在利用这些技术带来益处的同时,减少潜在的风险和负面后果。

确保 ASR 的公平性并减少偏见

像 Whisper 这样的 ASR 系统可能在某些类型的语音上表现出偏差,比如非母语口音、方言、年龄群体和性别。研究表明,这些偏差可能导致更高的错误率和不平等的用户体验,进而导致对服务不足人群的歧视。解决不同人群间的性能差异是确保公平性和减轻 ASR 偏见的主要伦理考虑之一,这对于提供公平的访问和防止歧视至关重要。开发包容性和多样化的训练数据集对于减少这些性能差异至关重要。通过在训练数据中加入多种口音、方言和人群,ASR 模型可以学会更准确地识别和转录不同用户群体的语音。此外,实施数据增强和迁移学习等技术可以帮助提高 ASR 模型在处理多样化语音模式时的鲁棒性。

负责任的数据收集和使用实践

负责任的数据收集和使用实践确保了 ASR 系统的公平性。模型可能会放大训练数据中的偏见,导致性能偏差并延续社会不平等。为了解决这一问题,必须优先考虑数据收集过程中的多样性、包容性和隐私保护。

一个重要的伦理考虑是,在尊重用户同意和数据保护的前提下,获取各类人群的代表性语音数据。这涉及实施透明的数据收集政策,获取参与者的知情同意,并确保敏感语音数据的安全存储和处理。通过遵循负责任的数据实践,ASR 开发者可以构建更具包容性和无偏见的模型,以满足不同用户群体的需求。

促进透明性和责任性

透明性和责任性是开发和部署像 Whisper 这样的 ASR 系统中的关键伦理考虑。清晰的开发过程、训练数据以及 ASR 模型潜在局限性的文档能够帮助做出知情决策,并建立用户的信任。

为了促进透明性,提供有关 ASR 系统的适当使用案例、不同人群的性能特征以及已知偏差的详细信息至关重要。这使得用户和利益相关者能够了解技术的能力和局限性,并就其部署做出明智的决策。

责任机制,如定期审计和公平性评估,对于识别和减轻 ASR 模型中的偏见至关重要。这些评估应包括多方利益相关者,包括 AI 研究人员、伦理学家、政策制定者和受影响的社区,以全面理解系统对不同用户群体的影响。

促进跨学科合作

解决 ASR 中的公平性问题和减轻偏差需要合作和跨学科的方法。与各方利益相关者合作,包括人工智能研究人员、伦理学家、政策制定者以及受影响的社区,有助于发现盲点、理解社会影响并开发包容性解决方案。

关于偏差减轻策略的跨学科研究,如数据增强、模型选择技术和公平性约束,对于这一领域的进展至关重要。通过汇聚计算机科学、语言学、社会学和伦理学等各个领域的专家,我们可以更全面地理解这些挑战,并制定实际解决方案,确保 ASR 系统中的公平性。

确保公平性并减少像 OpenAI Whisper 这样的自动语音识别(ASR)系统中的偏差是一个多方面的挑战,需要解决性能差异、负责任的数据实践、透明度和问责制,以及跨学科的合作。通过优先考虑这些伦理问题,我们可以构建更加包容和公平的 ASR 技术,造福所有用户,同时坚持公平和社会正义的原则。

在开发和部署 ASR 系统时,另一个关键的伦理问题是保护用户隐私和数据安全。随着 Whisper 和其他 ASR 技术的普及,处理敏感语音数据的强有力保护措施和最佳实践变得至关重要。

保护隐私和数据

训练像 Whisper 这样的 ASR 系统需要大量的语音数据,这可能引发关于收集、存储和使用可能敏感音频记录的隐私问题。保护数据隐私、获得知情同意并实施强有力的数据保护措施是至关重要的伦理优先事项。联邦学习被提议作为一种保护隐私的 ASR 模型训练方法。

获得知情同意并确保透明度

在使用如 OpenAI Whisper 等 ASR 系统时,保护隐私和数据的一个关键伦理问题是获得被收集语音数据的个人的知情同意。知情同意包括充分披露数据收集的范围、语音数据的使用目的,以及可访问这些数据的各方。这样的透明度让用户能够做出知情决定,是否同意他们的语音数据被 ASR 系统收集和使用。

为了确保透明度,ASR 系统提供商应在其隐私政策中传达他们的数据实践。这些政策应该易于访问,并且采用通俗易懂的语言,让用户理解他们的语音数据将如何处理。通过在数据实践中保持透明并获得知情同意,ASR 系统提供商可以与用户建立信任,并展示他们致力于维护用户隐私权的承诺。

实施强有力的数据安全措施

保护 ASR 系统收集的语音数据隐私需要实施强大的数据安全措施。语音数据可能是敏感的,可能揭示个人信息、生物识别细节以及个人生活中的私密方面。因此,必须采取措施保护这些数据,防止未授权访问、滥用或泄露。

ASR 系统提供商应采用诸如数据加密、安全存储和访问控制等技术,以确保用户语音数据的机密性和完整性。加密有助于保护数据在传输和存储过程中的安全,使其对未授权方不可读。安全存储包括使用受保护的数据库和服务器,并实施严格的访问控制,确保只有授权人员可以访问数据。

定期进行安全评估和更新数据保护措施对于应对不断变化的威胁并保持符合隐私法规至关重要。这包括进行漏洞扫描、渗透测试和安全审计,以识别和解决系统安全防护中的潜在弱点。通过实施强大的数据安全措施,ASR 系统提供商可以最大程度地减少数据泄露的风险,并保护用户隐私。

遵守数据最小化和目的限制原则

在 ASR 系统中,负责任的数据管理涉及遵守数据最小化和目的限制的原则。

数据最小化意味着只收集和保留为特定、合法目的所需的最低限度语音数据。ASR 系统应设计成仅收集功能所需的数据,避免收集过多或不相关的信息。

目的限制涉及明确定义收集和使用语音数据的目的,并确保在未获得用户同意的情况下,数据不会用于其他目的。这有助于防止语音数据的滥用,并与用户的期望保持一致。ASR 系统提供商应对收集和使用语音数据的具体目的保持透明,并应获得用户同意以将数据用于其他目的。

通过遵守数据最小化和目的限制原则,ASR 系统提供商可以展示其对负责任数据管理的承诺,并保护用户隐私。这种做法有助于建立与用户的信任,并确保遵守数据保护法规。

赋予用户控制其数据的权力

给予用户对其语音数据的控制权对保护 ASR 系统中的隐私至关重要。用户应能够访问、审查、修正或删除其数据。这使用户能够管理其个人信息,并确保他们控制语音数据的使用方式。

ASR 系统提供商应实施机制,允许用户行使其数据权利,例如提供便于访问和管理数据的用户友好界面。用户还应能够随时选择退出数据收集或撤回同意。这使得用户能够做出有关隐私偏好的知情决策,并赋予他们控制语音数据的权力。

尊重用户权利(如 GDPR 下的被遗忘权)是赋权用户的另一个重要方面。ASR 系统提供商应有流程来尊重用户的数据删除请求,并确保在不再需要或用户未请求时,语音数据能够安全地被删除。

通过让用户掌控他们的语音数据并尊重他们的数据权利,ASR 系统提供商可以展示他们对用户隐私的承诺,并与用户群体建立信任。这种做法符合伦理原则和保护个人数据的法律要求。

在 ASR 系统(如 OpenAI Whisper)的背景下保护隐私和数据是一个重要的伦理考虑。获得知情同意、实施强有力的数据安全措施、遵守数据最小化和目的限制原则,以及赋予用户控制其数据的权力,都是保护用户隐私的重要策略。

通过优先考虑这些伦理原则,ASR 系统提供商可以减轻隐私风险,遵守数据保护法规,并促进这些技术的负责任开发和部署。确保用户语音数据的隐私和安全是伦理义务,也是 ASR 系统在各个领域广泛采用和有益使用的关键。

随着 ASR 技术的不断进步和普及,开发者、研究人员和组织必须时刻关注隐私问题,并实施数据保护的最佳实践。通过这样做,我们可以在尊重个人隐私权的同时,利用像 Whisper 这样的 ASR 系统的强大功能,并促进这些技术的负责任使用,以造福社会。

除了应对公平性和隐私问题外,像 Whisper 这样的自动语音识别(ASR)系统的负责任开发和部署需要明确的指导方针和保障措施。建立一个技术伦理使用框架对于防止滥用、保护弱势群体以及确保透明度和问责制至关重要。

建立负责任使用的指导方针和保障措施

通过主动建立负责任的 ASR 部署框架,我们可以在减轻潜在风险和负面后果的同时,充分利用这些技术的好处。

确定适当的使用场景并防止滥用

制定负责任的 ASR 使用指南的主要目标之一是定义适当的使用场景,并防止滥用或恶意应用。清晰的指南应概述可以使用 ASR 系统(如 Whisper)的预期目的,例如转录、语言学习或无障碍服务。这些指南还应明确禁止将 ASR 用于未经授权的录音、监控或生成虚假音频内容。

为了防止滥用,ASR 系统提供商应实施访问控制和身份验证措施,以确保只有授权用户能够使用该技术。这可能需要用户注册、API 密钥身份验证或其他形式的访问管理。此外,提供商应教育用户有关 ASR 技术的伦理界限和负责任的使用,强调获取同意和尊重隐私权的重要性。

实施透明度和问责制措施

透明度和问责制是负责任使用 ASR 的重要组成部分。ASR 系统提供商应对其技术的能力、局限性和潜在偏见保持透明。用户应了解其语音数据如何被收集、处理和保护。这种透明度帮助用户做出是否使用 ASR 系统的知情决策,并让他们理解参与的意义。

为确保问责制,ASR 系统提供商应建立监督机制和定期审计,以验证是否遵守伦理原则和法律要求。这可能涉及第三方评估、公开报告或建立伦理委员会来监督和审查 ASR 实践。问责制措施有助于与用户和利益相关者建立信任,展示对负责任和伦理的 ASR 部署的承诺。

保护弱势群体

负责任使用 ASR 的指南必须优先考虑保护弱势群体,如儿童、老年人和残障人士。应特别考虑从这些群体获得知情同意,因为他们在理解 ASR 技术的影响时可能面临独特的需求或挑战。

ASR 系统应在设计时考虑可访问性和包容性,确保不同能力和背景的个人都能够使用它们。这可能涉及加入诸如语音命令、文本转语音输出或为非母语者提供语言支持等功能。通过优先考虑弱势群体的需求,ASR 指南可以帮助防止伤害、歧视和排斥。

推动伦理创新文化

最后,制定负责任的 ASR 使用指南应伴随推动 ASR 社区内伦理创新文化的努力。这包括鼓励研究人员和开发人员在设计、开发和部署过程中优先考虑伦理问题。

ASR 系统提供商应提供培训和资源,帮助他们的团队应对伦理挑战,并做出负责任的决策。分享最佳实践、案例研究和经验教训可以帮助建立对负责任使用 ASR 的集体理解。通过培养伦理创新的文化,ASR 社区可以积极应对潜在风险,确保技术的开发和使用能造福社会。

为了确保像 OpenAI Whisper 这样的 ASR 系统得到道德和有益的部署,建立使用这些技术的指南和保障措施至关重要。通过定义适当的使用案例、实施透明性和问责措施、保护弱势群体、促进合作并推动伦理创新文化,ASR 社区可以降低风险,实现这些强大工具的最大潜力。随着 ASR 的不断进步并融入我们生活的各个方面,优先考虑负责任的使用将对建立信任、保护权利和推动积极的社会影响至关重要。

为不断发展的 ASR 和语音技术领域做好准备

ASR 领域正在迅速发展,新架构、训练技术和应用以空前的速度涌现。为了在这个动态的环境中处于领先地位,组织必须采用能够使其利用最新进展并为未来突破做好准备的策略。本节将讨论专注于数据质量和多样性、接受新兴架构和训练技术,以及为多模态界面和无文本 NLP 做好准备的重要性。通过投资这些领域,组织可以构建稳健、灵活、未来可持续的 ASR 系统,适应用户和行业需求的变化。

专注于数据质量和多样性

任何成功的 ASR 系统的基础都在于其训练数据的质量和多样性。Whisper 在方言、背景噪音和技术语言方面的卓越鲁棒性,可以归因于其训练使用了包含 680,000 小时多语言、多任务监督数据的庞大数据集。为了实现类似的性能,组织必须优先收集高质量的语音数据,涵盖各种讲者(性别、年龄、种族、社会经济地位)、口音和方言(母语和非母语、地区变异)、领域(对话、朗读、自发、命令和控制)、声学环境(清晰的录音室、嘈杂的环境、远场)以及语言(高资源和低资源语言、语言家族)。这一多样化的数据收集对于开发能够准确转录多种真实场景中语音的 ASR 模型至关重要。例如,Mozilla 的 Common Voice 项目通过让志愿者用他们的母语录制语音样本,众包收集了一个多样化的数据集。同时,Switchboard 和 Fisher 是包含来自美国各地区讲者的对话式电话语音语料库。

确保负责任和道德的数据做法

数据质量和多样性无可厚非,但确保数据收集和使用遵循负责任和道德的做法同样至关重要。Whisper 的开发作为一个警示案例,表明在没有适当同意或署名的情况下使用网页抓取的数据进行训练,可能引发重大道德问题,特别是在处理少数语言和社区时。组织必须制定明确的数据收集指南,尊重知识产权,获取必要的权限,并在整个过程中保持透明度。在处理敏感语言数据时,与相关利益相关者互动并遵循原住民数据主权IDSov)原则至关重要。这包括以下内容:

  • 定义精确的数据需求、质量指标和文档标准

  • 实施验证和清理流程以捕捉错误

  • 进行人工抽查和听力测试

  • 监控质量关键绩效指标(KPI)并及时解决问题

例如,MALACH 语料库中的大屠杀幸存者访谈展示了实施严格质量保证流程的重要性,以确保语音数据集的准确性和完整性。通过结合自动检查、人工抽查和听力测试,MALACH 语料库的创建者展示了他们在处理敏感音频内容时对数据质量和负责任做法的承诺。这一多步骤的质量保证流程有助于识别并修正音频与转录文本对齐中的错误。它展示了组织如何在其自动语音识别(ASR)开发过程中优先考虑数据质量和道德问题。

IDSov

IDSov 在为不断发展的 ASR 和语音技术领域做好准备时至关重要。IDSov 指的是原住民拥有、控制、访问和拥有关于他们、他们的社区、土地和资源的相关数据的权利。以下是关于 IDSov 及其与 ASR 和语音技术相关性的一些关键点:

  • IDSov 提供了一个框架,确保原住民能够受益并控制关于他们的数据如何在 ASR 系统中被收集和使用。随着语音技术越来越多地捕捉和分析语音数据,原住民社区必须拥有关于是否以及如何纳入他们的声音和语言的主权。

  • 为 ASR 训练准备语音数据集需要仔细考虑 IDSov 原则,如集体所有权、知情同意和社区驱动的原住民数据资产治理。简单地将原住民语音数据视为开放数据且不加限制,违反了 IDSov。

  • IDSov 还扩展到语音中嵌入的原住民知识治理。ASR 系统必须具备保护文化敏感信息的保障措施,并维护原住民对传统知识的知识产权。

  • 为了在 ASR 开发过程中落实 IDSov,必须让原住民作为决策者和共同开发者参与,而不仅仅是数据主体。新兴的方法如 CARE 原则(原住民数据治理原则) 指导我们将原住民的权利和利益置于核心位置。

最终,IDSov 是关于原住民固有的自决和自治权,包括数据自决权。负责任地为 ASR 的未来做准备意味着承诺支持 IDSov,并将关于原住民数据的权力从殖民机构转回原住民社区。

IDSov 在自动语音识别(ASR)和语音技术迅速发展的背景下至关重要。拥抱 IDSov 及其对原住民权利、集体福祉以及社区对数据的控制权的重视,对于开发具有包容性、道德性并符合原住民自决权的 ASR 系统至关重要。ASR 领域必须与原住民社区合作,共同设计数据治理框架,实施 IDSov 原则。

实施全面的数据质量程序

强大的数据质量是成功开发和部署 ASR 系统的先决条件。组织应采用以流程为驱动和数据为驱动的策略来保持高标准。以流程为驱动的策略涉及重新设计和控制数据收集与标注工作流,以最小化错误和不一致性。另一方面,数据驱动策略专注于分析和清理现有数据集,以识别和解决质量问题。通过建立明确的数据质量维度,如完整性、及时性、准确性和一致性,以及自动化的数据分析和监控功能,可以帮助确保语音数据集的完整性和可靠性。

利用数据增强技术

除了收集多样化的语音数据,组织还可以通过利用数据增强技术进一步增强其 ASR 模型的鲁棒性。这些技术通过对现有音频样本应用各种转换来人工扩展数据集。方法包括添加背景噪声、应用音频效果和使用语音合成技术,这些都可以在人为增加训练数据的数量和多样性方面发挥作用。Whisper 的多语言训练方法还表明,即使是未直接针对的多语言语音数据,也能提升整体性能。然而,必须仔细验证增强数据,确保它符合所需的质量和多样性标准。

专注于数据质量和多样性对于构建能够准确转录各种发言人、口音和环境下语音的 ASR 系统至关重要。OpenAI Whisper 的成功凸显了在大规模、多样化数据集上训练的重要性,同时也强调了负责任和伦理的数据实践的必要性。通过优先考虑数据收集、实施全面的质量程序、利用数据增强技术并遵循伦理准则,组织可以开发出强大且可靠的 ASR 解决方案,能够应对现实世界语音的复杂性。

要保持在快速发展的 ASR 领域的前沿,必须拥抱新兴的架构和训练技术。OpenAI Whisper 展示了基于变换器模型和自监督学习的潜力,为 ASR 性能树立了新的标准。

拥抱新兴架构和训练技术

OpenAI Whisper 为 ASR 性能设立了新的标准,展示了新兴架构和训练技术的潜力。Whisper 利用变换器模型,这已成为 ASR 的主流架构,因为它们能够捕捉长距离依赖关系并并行化计算。为了保持竞争力,组织必须紧跟快速发展的领域中的新进展。Conformer 模型就是一种新兴架构的典型例子,它结合了变换器和卷积神经网络(CNN)的优势。Conformer 架构专门为语音识别任务而开发,使用卷积层捕捉局部特征,使用自注意力层建模长距离依赖关系,并通过前馈层进一步处理学习到的表示。通过充分利用 CNN 和变换器的互补优势,Conformer 模型在各种语音识别基准上达到了最先进的性能,超越了基于递归神经网络(RNN)、单独变换器或 CNN 的先前方法。

Conformer 模型的成功突显了探索新型架构设计的重要性,这些设计可以有效捕捉语音信号的独特特征。它通过卷积和自注意力层建模局部和全局依赖的能力,已被证明在语音识别中尤其有优势。随着组织寻求拥抱新兴架构并保持 ASR 技术的前沿,考虑像 Conformer 这样的模型可以在准确性和效率方面提供竞争优势。

让我们探索在 Whisper 和 ASR 系统的背景下拥抱这些创新的三个额外准备策略。

利用自监督预训练

自监督学习是指模型通过对大量未标记数据进行预训练,学习通用表示,这已成为提高 ASR 性能的强大技术。Whisper 的鲁棒性可归因于其在多样化的多语言网络数据上进行预训练。组织可以通过以下方式利用自监督:

  • 收集覆盖多个语言、讲者和领域的大规模、多样化的数据集

  • 设计鼓励学习有意义语音表示的预训练任务,例如对比预测编码或掩蔽语言建模

  • 在目标数据集上使用监督目标(如 CTC 或序列到序列损失)对预训练模型进行微调

Whisper 使用的 Wav2vec 2.0 通过对未标记语音进行掩蔽和重建输入片段进行预训练,从而学习可以良好迁移到下游 ASR 任务的表示。

探索多任务和多语言训练

同时在多个任务和语言上训练 ASR 模型可以提高泛化能力和数据效率。Whisper 的多语言训练使其能够在 99 种语言中进行零-shot 转录。组织可以通过以下方式探索多任务和多语言方法:

  • 联合训练语音识别、说话人分离、语言识别及其他相关任务

  • 将来自同一语言家族或具有共享语言特征的多种语言的数据结合起来

  • 使用与语言无关的输入表示,例如发音特征或音素

  • 应用元学习算法,利用少量示例使模型适应新语言

微软的 UniSpeech 模型通过在多个语言的未标记数据上进行预训练,并使用统一的损失函数进行微调,实现在 51 种语言上的竞争性性能。

应用高效的微调技术

虽然 Whisper 展示了令人印象深刻的零-shot 能力,但通过在高质量、特定领域的数据集上对模型进行微调,可以进一步提高其准确性和适应性。通过将 Whisper 暴露于来自特定行业或领域的数据集,如医疗、法律或技术领域,模型可以学习并专注于这些领域中独特的词汇、术语和语言细微差别。这种方法使得模型能够提供更精确、与上下文更相关的转录,成为各种行业应用的强大工具。然而,微调大型模型可能需要昂贵的计算资源。为了解决这个挑战,组织可以采用高效的微调技术,例如以下几种:

  • 适配器模块,在冻结的预训练权重之间插入小的可训练层,减少内存占用

  • 低秩适应LoRA),通过学习对预训练权重的低秩更新,实现高效适应

  • 前缀微调,在输入序列前添加少量可调节的标记,保持预训练参数固定

  • 蒸馏方法,通过将知识从大型预训练模型转移到更小、更高效的学生模型

在目标数据集上微调预训练模型对于适应特定领域和优化性能至关重要。whisper-small 模型通过在微调过程中提炼知识,表现与更大的 whisper-medium 模型相当,从而降低推理成本。

拥抱新兴架构和训练技术的重要性

基于 Transformer 的模型已成为 ASR 的黄金标准,始终优于以前的 HMM 和 RNN 方法。自监督预训练使模型能够从大量未标记的数据中学习,减少了对昂贵的人工转录语料库的需求。多任务和多语言训练则提高了模型对新领域和语言的泛化能力和适应性。

此外,随着 Whisper 等模型的规模和复杂性不断增长,高效的微调技术对于实际部署变得至关重要。没有这些创新,组织可能会在性能和可扩展性方面落后。

采用这些新兴架构和训练技术有助于提高自动语音识别(ASR)的质量。这为实时转录、低资源语言支持和语音到语音翻译等应用开辟了新的可能性。随着各行业对准确、可靠的 ASR 的需求日益增长,投资于这些前沿方法的组织将能更好地满足客户和利益相关者的需求。

随着 ASR 技术的不断发展,预见并为多模态接口和无文本自然语言处理(NLP)的兴起做好准备是至关重要的。这些新兴趋势有可能彻底改变我们与语音语言交互和处理的方式,为更直观、高效的沟通开辟了新的可能性。

为多模态界面和无文本 NLP 做好准备

无文本 NLP 指的是在不依赖中间文本表示的情况下处理和理解口语语言。与其将语音转换成文本并应用传统的 NLP 技术,无文本 NLP 旨在直接学习和处理语音信号。这种方法有可能捕捉到语音中丰富的声学和韵律信息,这些信息通常在基于文本的表示中丢失。通过消除对准确语音转文本转换的需求,无文本 NLP 可以实现更高效且与语言无关的口语内容处理。让我们探讨四种主要的准备策略,以利用无文本 NLP 和多模态界面在不断发展中的潜力和未来突破。

投资可扩展基础设施

一个关键的准备策略是投资可扩展的云基础设施,以处理大型多模态 AI 模型(如 Whisper)的计算需求。像 Azure OpenAI Service 这样的云平台现在提供 Whisper 模型,能够高效处理时间敏感的工作负载。利用托管服务,开发人员可以大规模转录音频,而无需维护复杂的基础设施。随着多模态模型在规模和能力上的增长,依赖可扩展的云基础设施将是将其部署到生产应用中的关键。

收集多样化的训练数据

另一个关键策略是策划大型多样化的数据集,用于训练和微调多模态 AI 模型。OpenAI Whisper 的强大性能源于其训练数据的广度,涵盖了多种语言、口音和技术领域。为了构建能够在实际场景中表现良好的包容性模型,必须收集跨不同人群、方言和学科领域的代表性数据。当将自动语音识别(ASR)扩展到低资源语言或细分垂直领域时,数据多样性尤为关键。像 Common Voice 这样的项目正在通过众包的方式收集多语言音频数据集,以使 ASR 技术变得更加易于获得。对于特定领域的应用,通过音频数据增强和弱监督收集定制训练数据,可以帮助根据个别用例调整模型。投资于可扩展的数据管道以持续提升模型性能,是一个关键的竞争优势。

设计多模态用户体验

为了迎接多模态界面的时代,用户体验UX)设计需要发生范式转变。设计师不应将语音、文本等模态视为孤立的输入方式,而是要创造出能融合多种互动模式的统一体验。这要求研究不同模态的优缺点,并理解每种模态在不同用户情境中的最适应用。

多模态用户体验(UX)设计原则强调在不同模态之间切换时尽量减少摩擦,并通过感官通道提供反馈。例如,虚拟助手可以在用户讲话时,视觉高亮显示转录中的关键词,然后无缝过渡到文本聊天界面进行澄清或后续跟进。通过与不同用户群体测试新的互动模式,并衡量任务完成度和认知负荷等指标,将有助于随着时间的推移改进这些体验。

探索表示学习技术

无文本 NLP 旨在直接从原始音频信号中学习语言表示,这是一个快速发展的研究领域,对低资源语言具有重要意义。OpenAI 的 Whisper 在这一方向上展示了有希望的成果,证明了其在跨语言转移性能方面的优势,并能够直接将语音翻译成英语,而无需依赖中间的文本表示。

需要更多的工作来研究无监督表示学习技术,这些技术可以从未标注的音频数据中揭示语言结构,从而实现无文本自然语言处理(NLP)的全部潜力。研究人员正在探索对比预测编码、离散单元发现和自监督预训练等方法,以学习捕捉语音和语义信息的压缩语音表示。将这些无文本表示与其他模态(如视觉)结合起来,可能会为有针对性的语言学习和视觉引导的语音处理开辟新的应用。

总结

在本章的最后部分,我们探讨了 ASR 的未来,以及塑造这一领域的激动人心的进展,重点介绍了 OpenAI 开创性的 Whisper 模型。我们考察了正在进行的努力,以提高 Whisper 的性能,包括提升准确性和鲁棒性、扩展语言支持、实现更好的标点和发言人区分,并加速实时能力的表现。此外,我们还深入探讨了开发和部署 ASR 技术时至关重要的伦理考虑和负责任的人工智能实践,确保这些强大的工具在尊重个人权利和促进公平的同时,造福社会。

本章深入探讨了可以提升 Whisper 性能的前沿技术和策略,包括增加训练数据、针对特定领域的微调和优化模型架构。我们研究了通过收集多样化的数据集、应用迁移学习和支持低资源语言等方法,使自动语音识别(ASR)更加包容。我们还探索了用于标点恢复、时间戳对齐和发言人归属的最新方法,以生成更易读且可操作的转录文本。

此外,我们强调了可扩展基础设施、有效的微调技术以及新兴架构(如多模态接口和无文本自然语言处理)在应对不断变化的 ASR 领域中的重要性。通过采用这些应对策略,并优先考虑公平性、隐私和负责任的使用,组织可以充分利用语音技术的巨大潜力,同时构建强大、可靠和包容性的 ASR 系统。

在我们结束这次关于 OpenAI Whisper 和 ASR 世界的旅程时,我想向你,亲爱的读者,表达我诚挚的感激之情。你对学习和探索这项变革性技术的热情,确实令人鼓舞。我希望你在本书中获得的知识和见解能够赋能你,塑造语音应用的未来,开启新的可能性,并积极影响我们在数字世界中与口语语言的互动方式。感谢你与我一同踏上这段激动人心的冒险旅程,祝你在未来的 ASR 及其他相关领域的努力中一切顺利。

下次再见,干杯!