原文towardsdatascience.com/seamless-in-depth-walkthrough-of-metas-new-open-source-suite-of-translation-models-b3f22fd2834b本文与 Rafael Guedes 共同撰写。简介一个组织的增长并不局限于其国家边界。有些组织只在外部市场销售或运营。这种全球化带来了几个挑战其中之一是如何处理不同的语言并使从产品标签到促销材料的变化成本更低。最近的人工智能发展非常方便因为它们不仅允许快速且成本低廉的文本翻译还包括音频材料的翻译。将人工智能融入日常活动的组织总是比竞争对手领先一步尤其是在为新市场准备好产品周围的所有组件时。时机与产品质量或服务质量一样重要因此能够成为第一个到达的人至关重要而像语音到语音和文本到文本翻译这样的技术将帮助您缩短进入新市场所需的时间。在本文中我们探讨了 Seamless这是由 Meta 开发的三模型家族旨在解锁跨多语言通信。我们详细解释了每个模型的架构以及它们的工作原理。最后我们通过 Python 使用 HuggingFace 进行实际实现并展示如何克服它们的一些局限性。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/83b09a0cad85b792d1c063ada59e85a1.png图 1Seamless一个能理解超过 100 种语言的模型家族作者与 DALL-E 共同创作如往常一样代码可在我们的GitHub上找到。Seamless一个解锁跨语言通信的模型家族Seamless [1] 是第一个试图消除语言障碍并实时解锁跨语言表达的系统。它由多个 Seamless 家族模型组成例如 SeamlessM4T v2 [1]、SeamlessExpressive [1] 和 SeamlessStreaming [1]这些模型允许在 101 种输入语言和 36 种输出语言之间进行语音到语音和文本到文本翻译。每个模型将在以下章节中详细解释。SeamlessM4T v2Seamless 家族的基础模型SeamlessM4T [2] 是一个大规模多语言和多模态机器翻译模型支持语音到语音S2ST、语音到文本S2TT、文本到语音T2ST、文本到文本翻译T2TT和自动语音识别ASR。其架构由以下部分组成1.**w2v-BERT 2.0[3]**是由 Google 创建的语音编码器模型它学习如何通过嵌入表示语音。架构如下语音编码器由两个 2D 卷积层组成从给定的原始声学输入中提取潜在的语音表示。然后这个潜在表示被随机掩码并通过一个线性投影层传递以产生由对比模块CM和掩码预测模块MPM使用的上下文向量。同时它经过量化过程生成量化向量和它们的 token ID这些将成为 CM 和 MPM 的目标。对比模块学习如何从一组K干扰项中识别给定上下文的量化向量即一组量化向量其中只有一个是由给定上下文向量生成的真实量化向量。通过最小化这个对比损失语音编码器可以提高产生的嵌入质量。掩码预测模块是模型的另一个可学习部分。基于上下文向量它学习如何预测掩码 token ID从而有助于提高产生的语音嵌入的质量。w2v-BERT 被训练同时解决两个自监督任务。要最小化的最终训练损失由对比损失和掩码预测损失的加权和定义。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/8c08eafe29d7d9f45e65940c466b7c02.png图 2使用 w2v-BERT 训练语音编码器作者提供w2v-BERT 的 Feature Encoder 在 SeamlessM4T 中随后被用来创建语音嵌入这些嵌入被输入到解码器中以生成翻译。然而预训练文本解码器期望接收的输入与预训练语音编码器可以产生的输入之间存在差距。为了弥合语音和文本之间的模态差距以改善翻译作者使用了一个长度适配器[4]一个基于 Transformer 的模块来适配语音表示以适应文本这会缩短语音序列并产生用于语音到文本翻译的特征通过建模语音序列的全局和局部依赖关系。其架构包括一个语音编码器后面跟着长度适配器和文本解码器目标是使生成的文本与实际文本之间的差异最小化。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/3c9d3bf51dbd8a5caf0194055e0fa9ea.png图 3长度适配器训练过程作者提供2.**NLLB 编码器[5]**是一个基于编码器-解码器 Transformer 架构的序列到序列多语言机器翻译模型的编码器它给定一个文本序列和源语言产生一个嵌入序列。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/d18f1ee93bd0db5fa00f66d348c82bd7.png图 4NLLB 编码器作者提供3.NLLB 解码器 [5]是与同一模型相同的解码器它接受 NLLB 编码器生成的嵌入和目标语言生成翻译文本。对于 SeamlessM4T 的具体情况NLLB 解码器还可以接收由 w2v-BERT 生成的语音嵌入如图 5 所示。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/b742268ac194a5b671add0028897fe40.png图 5NLLB 解码器可以接收来自 w2v-BERT 或 NLLB 编码器的嵌入并将其翻译成目标语言图片由作者提供4.文本到单元 (T2U) [6]是一个多语言编码器-解码器 Transformer 模型经过训练可以将文本转换为离散声学单元这些单元可以被单元声码器模型消费以生成目标语言中的最终语音。SeamlessM4T v1 和 v2 之间的区别在于这个模型。作者试图解决当离散声学单元和文本标记之间存在长度不匹配时出现的幻觉和输出截断问题。为此他们实现了一个非自回归的 T2U 解码器来执行字符到单元的对齐并基于输出长度进行解耦生成这不仅解决了问题还通过 3 倍提高了推理时间实现了实时翻译。T2U 编码器接收 NLLB 文本解码器的输出并将其编码为子词长度的嵌入。问题是这种嵌入表示不包含解码到离散声学单元所需的所有必要的声学细节。因此作者将表示上采样到字符长度然后到单元长度。在子词到字符上采样之后编码器模型接收字符长度的序列并预测每个声学单元的持续时间以便与 T2U 解码器一起使用单元长度嵌入来生成最终的离散声学单元。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/10e9efb843c6f8bd8d52de62aa430d44.png图 6文本到单元从文本到离散声学单元图片由作者提供5.HiFi-GAN [7]正如其名所示是一个具有生成器和判别器的生成对抗网络包含两个模块。生成器是一个卷积神经网络它以离散的声音信息单元作为输入。一旦它接收这些声音单元它就会执行一系列称为转置卷积的操作。这些方法允许它增加输入数据的大小这个过程称为上采样。这种上采样的目的是确保生成器产生的最终输出与原始音频信号的详细时间结构相匹配通常称为时间分辨率。这确保了生成的音频与自然声波的复杂性和细微差别非常接近。HiFi-GAN 有两个损失函数一个是通过更新样本质量以被分类为真实来欺骗判别器另一个是 Mel 频谱波形生成的波形与真实波形之间的距离。多周期判别器用于评估周期性信号多尺度判别器用于评估生成器产生的音频的连续模式和长期依赖性。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/958031fd6684ed7a11e3c3c20b8e0c88.png图 7SeamlessM4T 中 HiFi-GAN 的训练过程除了声学单元外模型还接收目标语言作者图片这 5 个组件如图 8 所示连接在一起。该模型可以通过 w2v-BERT 或 NLLB 编码器接收音频或转换为语音嵌入的文字。NLLB 解码器接收这些语音或文字嵌入。它将原始输入翻译成目标语言的文字实现了语音到文字和文字到文字的翻译正如所承诺的那样。至于语音到语音和文字到语音的翻译翻译后的文字被发送到 T2U经过PRETSSEL编码预测并调整每个单元的时长然后解码 HiFi-GAN 的输入声学单元以生成最终的音频。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/14038dabbe58e106616a5b023aa1481c.png图 8SeamlessM4T v2 架构作者图片SeamlessExpressiveSeamlessExpressive 的创建是为了模拟韵律因为其在人类交流中的重要性。人们说话的方式可以改变相同句子的含义例如语音的响度和持续时间被人类用来在不同情况下表达自己。SeamlessExpressive 的基础模型是 SeamlessM4T v2以实现高质量的翻译。然而它对原始模型进行了两项修改。T2U 模型增加了一个表达性编码器以节奏、说话速度和停顿来引导声学单元的生成。HiFi-GAN 语音合成器在通过PRETSSEL后接收 T2U 的输出。PRETSSEL是一个受源语音条件限制的表达性单元到语音生成器用于将音调、情感表达和语音风格转移到波形生成。SeamlessExpressive 仅在 6 种语言英语、法语、西班牙语、德语、普通话和意大利语中可用。Prosody T2U中的表达性编码器接收源语言的原始语音作为输入****并将其编码成一个包含高级副语言表示的 512 维嵌入向量。这个表达性嵌入向量被连接到子词长度嵌入之前如图 9 所示。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/949a3abfaf50402ea5f539edcfcc9b5d.png图 9SeamlessM4T v2 的 T2U 与 SeamlessExpressive 的韵律 T2U 之间的差异图片由作者提供PRETSSEL根据 Prosody T2U 的输出和表达性嵌入向量生成要输入 HiFi-GAN 的离散声学单元。这两个输入由一个无文本声学模型处理该模型是一个具有四个组件的非自回归 Transformer 模型。内容编码器从 Prosody T2U 输出中提取高级上下文表示。局部韵律编码器使用表达性嵌入向量预测局部韵律特征和能量轮廓并将它们添加到上下文编码器输出中。之后采用高斯上采样器将单元级别上采样到帧级别使用单元持续时间。最后梅尔解码器从上采样序列生成梅尔滤波器组特征。梅尔滤波器组是一种信号处理概念尤其在语音和音频处理中应用广泛。它由模拟人类耳朵基于梅尔音阶一种反映听众感知音高差异的感知音高尺度的声响应的滤波器组成。这种方法比线性频带更好地匹配人类听觉因此在声音特征提取方面非常有效。随后PostNet 处理这些生成的特征通过补偿解码器无法捕捉的残留信号预测更自然的梅尔滤波器组。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/4198c6fc7e7c497861aeeb761ec0cbf7.png图 10PRETSSEL 架构和 SeamlessExpressive 架构的全貌图片由作者制作SeamlessStreamingSeamlessStreaming 在 SeamlessM4T v2 的基础上增加了实时语音到语音和语音到文本翻译功能。它保留了 SeamlessM4T v2 的核心架构但对文本解码器组件进行了重大更新引入了高效的单调多头注意力EMMA。EMMA 结合了 Transformer 模型的先进处理能力同时关注保持翻译的序列完整性。作者采用EMMA作为他们的同时策略负责决定是否预测下一个标记或暂停预测以获取更多上下文。换句话说它是一个逐步概率函数给定部分输入和部分输出预测生成下一个工作预测或暂停以接收更多上下文的概率。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/5b99cba6c5319dc31b61289e0cd7ce9b.png图 11SeamlessStreaming 架构其中 EMMA 在文本解码器中用作同时策略而文本解码器只接收语音嵌入图片由作者提供Seamless S2ST自动翻译您的视频广告在本节中我们将实现 SeamlessM4T v2 用于语音到语音翻译。我们录制了一段关于ZAAI我们的 AI 咨询公司的英文视频并希望将其翻译成葡萄牙语。ZAAI用 AI 塑造商业的未来我们首先导入库并设置DEVICE为 cuda如果可用fromIPython.displayimportAudiofrommoviepy.video.io.ffmpeg_toolsimportffmpeg_extract_subclipimportutilsfromtransformersimportAutoProcessor,pipeline,SeamlessM4Tv2Modelimporttorchaudioimporttorchimportnumpyasnpimportscipy DEVICEcuda:0iftorch.cuda.is_available()elsecpu之后我们从 HuggingFace (HF) 加载 SeamlessM4T v2 模型及其数据处理器“facebook/seamless-m4t-v2-large:”processorAutoProcessor.from_pretrained(facebook/seamless-m4t-v2-large)modelSeamlessM4Tv2Model.from_pretrained(facebook/seamless-m4t-v2-large).to(DEVICE)理想情况下我们会加载视频的音频将其采样率转换为 16 kHz 以匹配训练数据的采样率然后通过 2 行代码执行 S2ST。问题在于模型没有准备好接收长输入音频正如您在我们的示例中看到的它将 30 秒的音频转换成了 11 秒的翻译音频其中时间减少并不是由于缺少语音。# convert video to wavutils.convert_to_wav(data/ZAAI_intro.mp4)# load audioaudio,orig_freqtorchaudio.load(data/ZAAI_intro.wav)# convert into 16 kHz waveform array to match the training dataaudiotorchaudio.functional.resample(audio,orig_freqorig_freq,new_freq16_000)# encode the speech into a speech embeddingaudio_inputsprocessor(audiosaudio,sampling_rate16000,return_tensorspt).to(DEVICE)# translate the audio from english to portuguese and generate a new waveform arrayaudio_array_from_audiomodel.generate(**audio_inputs,tgt_langpor,speaker_id2)[0].cpu().numpy().squeeze()为了克服这个问题我们决定创建 10 秒的块应用 S2ST并在最后将所有 NumPy 数组连接起来。虽然结果好多了但还不是完美的如下所示。问题是我们在创建块时没有考虑音频是否在句子中间这可能会降低最终结果。理想情况下我们会根据语音停顿来创建块。final_array[]foriinrange(0,30,10):# cut the video in chunks of 5 seconds and convert the audio into wav format# the division of the video in chunks is due to a model limitation that cannot handle long audio inputsffmpeg_extract_subclip(data/ZAAI_intro.mp4,0i,10i,targetnamedata/chunk.mp4)utils.convert_to_wav(data/chunk.mp4)# load audioaudio,orig_freqtorchaudio.load(data/chunk.wav)# convert into 16 kHz waveform array to match the training dataaudiotorchaudio.functional.resample(audio,orig_freqorig_freq,new_freq16_000)# encode the speech into a speech embeddingaudio_inputsprocessor(audiosaudio,sampling_rate16000,return_tensorspt,).to(DEVICE)# translate the audio from english to portuguese and generate a new waveform arrayaudio_array_from_audio(model.generate(**audio_inputs,tgt_langpor,speaker_id2)[0].cpu().numpy().squeeze())# append the different chunksfinal_array.append(audio_array_from_audio)torch.cuda.empty_cache()Seamless4MT v2 和 Whisper 用于 S2STSeamless4MT v2 对于 S2ST 还不是完美的。因此我们决定通过使用 T2ST 来改进结果。我们使用了 Whisper一个多语言音频转录模型将音频转换为文本如果您想了解更多关于 Whisper 的细节您可以查看我们的文章)。然后我们使用 Seamless4MT v2 将英文转录翻译成葡萄牙语并生成最终的语音。我们从 HF 的open/whisper-medium加载 Whisper 管道并将chunk_length_s设置为 30 秒。这很重要因为 Whisper 是使用 30 秒的块进行训练的所以如果你有一个更大的音频文件并且不调整这个参数你的转录将被截断。pipepipeline(automatic-speech-recognition,modelopenai/whisper-medium,chunk_length_s30,deviceDEVICE,)Whisper 可以自动将转录从英语翻译成葡萄牙语但由于我们希望 SeamlessM4T v2 执行翻译我们通过将pipe.model.config.forced_decoder_ids设置为None来避免它。# to avoid direct translationpipe.model.config.forced_decoder_idsNone最后我们只需运行这三行代码即可获得转录# same as before, convert the sample rate to 16000audio,orig_freqtorchaudio.load(data/ZAAI_intro.wav)audiotorchaudio.functional.resample(audio,orig_freqorig_freq,new_freq16_000)# must be a 16 kHz waveform array# perform the transcriptionpredictionpipe(audio.numpy()[0],batch_size8)[text]使用英语转录我们原本期望将此文本作为输入传递给 SeamlessM4T v2并得到完美的 T2ST但事实并非如此。正如之前一样SeamlessM4T v2 尚未准备好处理大量输入文本因此为了克服这一缺陷我们遍历文本中的所有句子并将它们逐个传递给 SeamlessM4T v2 以执行 T2ST。# T2STaudio_array[]foriinprediction.split(.):text_inputsprocessor(texti,src_langeng,return_tensorspt).to(DEVICE)audio_array_from_textmodel.generate(**text_inputs,tgt_langpor)[0].cpu().numpy().squeeze()audio_array.append(audio_array_from_text)audio_arraynp.concatenate(audio_array)# you can also check the translated test by running thisforiinprediction.split(.):text_inputsprocessor(texti,src_langeng,return_tensorspt).to(DEVICE)output_tokensmodel.generate(**text_inputs,tgt_langpor,generate_speechFalse)translated_text_from_textprocessor.decode(output_tokens[0].tolist()[0],skip_special_tokensTrue)print(translated_text_from_text)大家好我是路易斯Zai 的创始人兼股东。我们正站在人工智能创新和技术的最前沿。我们专注于两个主要领域首先我们为客户企业构建高度复杂的咨询项目通过生成式 AI、时间序列预测、推荐系统、营销模型等释放真实价值其次我们投资于核心 AI 初创公司帮助他们开发技术同时也协助他们在市场上的发布策略。正如您所看到的通过在我们的笔记本中运行代码并收听输出的音频文件结果会更好。结论经济全球化意味着商品和服务的跨境贸易这给公司带来了新的挑战例如理解不同的文化和能够在不同的语言中进行沟通。在这篇文章中我们展示了公司如何通过使用 AI 和开源解决方案翻译广告来节省财务资源。尽管由于无法处理大量音频和文本序列这篇文章的核心模型 SeamlessM4T v2 没有完美工作但我们通过结合 Whisper 进行转录和 SeamlessM4T v2 进行文本到语音翻译成功地解决了这些缺陷。对于公司来说另一种可能性但涉及更多成本和时间将是基于之前的广告对 SeamlessM4T v2 进行语音到语音翻译的微调。总的来说像 Meta 和 OpenAI 这样的公司似乎专注于尽可能多地消除语言障碍以进一步将我们今天所生活的这个不断连接的世界聚集在一起。我们将继续我们的使命分享这些倡议并展示它们如何通过在实用案例中实施来解决日常问题。关于我作为 AI 领域的连续创业者和领导者我为企业开发 AI 产品并投资于专注于 AI 的初创公司。ZAAI 创始人 | 领英 | X/Twitter参考文献[1] Loïc Barrault, Yu-An Chung, Mariano Coria Meglioli, David Dale, Ning Dong, Mark Duppenthaler, Paul-Ambroise Duquenne, Brian Ellis, Hady Elsahar, Justin Haaheim, John Hoffman, Min-Jae Hwang, Hirofumi Inaguma, Christopher Klaiber, Ilia Kulikov, Pengwei Li, Daniel Licht, Jean Maillard, Ruslan Mavlyutov, Alice Rakotoarison, Kaushik Ram Sadagopan, Abinesh Ramakrishnan, Tuan Tran, Guillaume Wenzek, Yilin Yang, Ethan Ye, Ivan Evtimov, Pierre Fernandez, Cynthia Gao, Prangthip Hansanti, Elahe Kalbassi, Amanda Kallet, Artyom Kozhevnikov, Gabriel Mejia Gonzalez, Robin San Roman, Christophe Touret, Corinne Wong, Carleigh Wood, Bokai Yu, Pierre Andrews, Can Balioglu, Peng-Jen Chen, Marta R. Costa-jussà, Maha Elbayad, Hongyu Gong, Francisco Guzmán, Kevin Heffernan, Somya Jain, Justine Kao, Ann Lee, Xutai Ma, Alex Mourachko, Benjamin Peloquin, Juan Pino, Sravya Popuri, Christophe Ropers, Safiyyah Saleem, Holger Schwenk, Anna Sun, Paden Tomasello, Changhan Wang, Jeff Wang, Skyler Wang, Mary Williamson. Seamless: 多语言表达和流式语音翻译. arXiv:2312.05187, 2023.[2] Loïc Barrault, Yu-An Chung, Mariano Cora Meglioli, David Dale, Ning Dong, Paul-Ambroise Duquenne, Hady Elsahar, Hongyu Gong, Kevin Heffernan, John Hoffman, Christopher Klaiber, Pengwei Li, Daniel Licht, Jean Maillard, Alice Rakotoarison, Kaushik Ram Sadagopan, Guillaume Wenzek, Ethan Ye, Bapi Akula, Peng-Jen Chen, Naji El Hachem, Brian Ellis, Gabriel Mejia Gonzalez, Justin Haaheim, Prangthip Hansanti, Russ Howes, Bernie Huang, Min-Jae Hwang, Hirofumi Inaguma, Somya Jain, Elahe Kalbassi, Amanda Kallet, Ilia Kulikov, Janice Lam, Daniel Li, Xutai Ma, Ruslan Mavlyutov, Benjamin Peloquin, Mohamed Ramadan, Abinesh Ramakrishnan, Anna Sun, Kevin Tran, Tuan Tran, Igor Tufanov, Vish Vogeti, Carleigh Wood, Yilin Yang, Bokai Yu, Pierre Andrews, Can Balioglu, Marta R. Costa-jussà, Onur Celebi, Maha Elbayad, Cynthia Gao, Francisco Guzmán, Justine Kao, Ann Lee, Alexandre Mourachko, Juan Pino, Sravya Popuri, Christophe Ropers, Safiyyah Saleem, Holger Schwenk, Paden Tomasello, Changhan Wang, Jeff Wang, Skyler Wang. SeamlessM4T: 大规模多语言和多模态机器翻译. arXiv:2308.11596, 2023.[3] Yu-An Chung, Yu Zhang, Wei Han, Chung-Cheng Chiu, James Qin, Ruoming Pang, Yonghui Wu. W2v-BERT: 结合对比学习和掩码语言模型进行自监督语音预训练. arXiv:2108.06209, 2021.[4] Jinming Zhao, Hao Yang, Ehsan Shareghi, Gholamreza Haffari.M-Adapter: 用于端到端语音到文本翻译的模态自适应. arXiv:2207.00952, 2022.[5] 科斯塔-朱萨Marta R. Costa-jussà、詹姆斯·克罗斯James Cross、奥努尔·切莱比Onur Çelebi、玛哈·埃尔巴亚德Maha Elbayad、肯尼斯·希菲尔德Kenneth Heafield、凯文·赫弗南Kevin Heffernan、卡拉巴西Elahe Kalbassi、詹妮斯·兰姆Janice Lam、丹尼尔·利希特Daniel Licht、让·马利尔Jean Maillard、安娜·孙Anna Sun、斯凯勒·王Skyler Wang、瓜伊勒姆·文泽克Guillaume Wenzek、扬·扬布卢德Al Youngblood、阿库拉Bapi Akula、洛里克·巴拉鲁Loic Barrault、梅西亚·冈萨雷斯Gabriel Mejia Gonzalez、普拉恩蒂普·汉桑蒂Prangthip Hansanti、约翰·霍夫曼John Hoffman、塞马尔利·贾雷特Semarley Jarrett、拉姆·萨达戈潘Kaushik Ram Sadagopan、德里克·罗Dirk Rowe、香农·斯普里特Shannon Spruit、周恩Chau Tran、皮埃尔·安德鲁斯Pierre Andrews、内齐普·法齐尔·阿扬Necip Fazil Ayan、舒鲁蒂·博萨莱Shruti Bhosale、谢尔盖·埃杜诺夫Sergey Edunov、范安吉拉Angela Fan、高辛迪Cynthia Gao、戈斯瓦米Vedanuj Goswami、古兹曼Francisco Guzmán、科恩Philipp Koehn、莫拉奇科Alexandre Mourachko、罗佩斯Christophe Ropers、萨菲亚·萨利姆Safiyyah Saleem、施文克Holger Schwenk、王杰夫Jeff Wang。不让任何语言落后扩展以人为本的机器翻译。arXiv:2207.046722022。[6] 岛仓博文Hirofumi Inaguma、波普里Sravya Popuri、库利科夫Ilia Kulikov、陈鹏建Peng-Jen Chen、王长汉Changhan Wang、钟安Yu-An Chung、唐云Yun Tang、李安Ann Lee、渡边伸治Shinji Watanabe、皮诺Juan Pino。UnitY使用离散单元的两遍直接语音到语音翻译。arXiv:2212.080552023。[7] 金钟吉Jungil Kong、金在贤Jaehyeon Kim、白杰亨Jaekyoung Bae。HiFi-GAN用于高效和高保真语音合成的生成对抗网络。arXiv:2010.056462020。