如何使用英伟达 NeMo 构建语音翻译应用程序

导言

神经模块(NeMo)是一个开源工具包,旨在处理对话式人工智能任务。它是英伟达™(NVIDIA®)GPU 云(NGC)目录的一部分,该目录由工具、框架和预训练模型的集中存储库组成。这些模型加快了人工智能和高性能计算工作负载的开发、部署和管理。NGC GPU 加速容器也是 NGC 目录的重要组成部分,预配置了优化软件和库,以利用 GPU 资源加速性能。

本文将介绍如何在 GPU 加速 PyTorch 容器中使用 NeMo 框架来执行自动语音识别(ASR)和文本到语音(TTS)任务。您需要安装并运行 PyTorch 容器,然后使用 NeMo 预训练模型将导入的法语音频转换为英语音频。

前提条件

开始之前

安装 PyTorch 并访问 Jupyter Notebook

要在云 GPU 服务器上使用 NeMo 框架,请使用 Docker 安装并运行带有端口绑定的 PyTorch GPU 容器。然后,按照以下步骤访问预装在容器中的 Jupyter Notebook 服务。

  1. 使用 Docker 安装并运行 PyTorch GPU 容器
    $ sudo docker run --gpus all -p 9000:8888 -it nvcr.io/nvidia/pytorch:23.09-py3
    

    上述命令以下列配置运行 PyTorch GPU 加速 docker 容器:

    • --gpus all:将所有可用的服务器 GPU 分配给 Docker 容器。这将确保所有 GPU 资源都能运行 GPU 加速任务
    • -p 9000:8888:将服务器上的主机端口9000映射到容器端口8888。这将创建一个独立的 Jupyter Notebook 访问端口,有别于在端口8888上运行的 Vultr GPU Stack Jupyter Lab 服务
    • -:以交互模式启动容器并访问其 shell

    成功后,验证服务器提示是否更改为容器 shell

    root@4a09da260af2:/workspace#
    
  2. 将 Jupyter Notebook 作为后台进程启动
    # jupyter notebook --ip=0.0.0.0 &
    

    输出结果应如下所示

       要访问笔记本,请在浏览器中打开此文件:
        file:///root/.local/share/jupyter/runtime/nbserver-369-open.html
    或复制并粘贴此 URL:
        http://hostname:8888/?token=c5b30aac114cd01d225975a9c57eafb630a5659dde4c65a8
    

    如上述输出所示,复制生成的令牌?token=XXXX,以便在网络浏览器中安全访问 Jupyter Notebook。

  3. 使用 Chrome 浏览器等网络浏览器,使用生成的访问令牌通过端口9000访问公共服务器 IP 上的 Jupyter Notebook
    http://SERVER-IP:9000/?token=YOUR_TOKEN
    

 

运行预训练模型

要使用预训练模型和必要的 NeMo 函数,请导入 NeMo 模块。然后,初始化预训练模型,并在 Jupyter Notebook 会话中执行音频转录和文本到语音合成等任务,如下所述。

  1. 访问 Jupyter Notebook 网页界面
  2. 在右中角单击 "新建"下拉菜单,显示一个下拉列表
  3. 笔记本:类别下选择Python 3 (ipykernel),打开一个新文件
  4. 在新的 Jupyter Notebook 文件中,在新单元格中添加以下代码,以安装必要的依赖包
    pip install Cython nemo_toolkit[all]hydra-core transformers sentencepiece webdataset youtokentome pyannote.metrics jiwer ijson sacremoses sacrebleu rouge_score einops unidic-lite mecab-python3 opencc pangu ipadic wandb nemo_text_processing pytorch-lightning
    

    以下是每个软件包代表的内容:

    • Cython一个 Python 模块,允许您为 Python 编写 C 扩展。它通常用于性能优化
    • nemo_toolkit[全部]:用于构建对话式人工智能模型的框架。其 全部标记安装所有可用组件和 NeMo 依赖项
    • hydra-core:用于配置复杂应用程序的框架。它用于以简洁有序的方式管理配置设置
    • transformers:与自然语言处理(NLP)中预先训练好的模型一起使用,包括 BERT、GPT-2 等模型
    • sentencepiece:执行文本标记化和分割的库,常用于 NLP 任务中
    • webdataset:执行高效的数据加载和扩充,在深度学习工作流中特别有用
    • youtokentome:执行子词标记化的库,适用于语言建模任务
    • pyannote.metrics:用于扬声器日记化和音频分析任务的工具包,包含这些任务的评估指标
    • jiwer:计算词错误率 (WER) 的库,这是自动语音识别 (ASR) 和其他语音处理任务中常用的指标
    • ijson:用于增量解析大型 JSON 文档的库。在高效处理大型数据文件时非常有用
    • sacremoses:执行标记化、去标记化和各种文本处理任务的 Python 库
    • sacrebleu:使用 BLEU 指标评估机器翻译质量
    • rouge_score:用于计算 ROUGE 评估指标的库,常用于文本摘要和机器翻译
    • einops:用于张量运算和重塑的库,在开发深度学习模型时非常有用
    • unidic-lite:形态分析词典
    • mecab-python3:在 MeCab 的 Python 绑定中工作的标记化语音部分标记器
    • opencc:简繁体文本转换库
    • pangu:中文文本间距库,用于在汉字之间添加空格
    • ipadic:形态分析词典
    • wandb:跟踪和可视化机器学习实验
    • nemo_text_processing:包含 NVidia NeMo 工具包专用的文本处理实用程序
    • pytorch-lightning:PyTorch 的轻量级封装器,可简化深度学习模型的训练
  5. 按主菜单栏上的运行或按CTRL ENTER 键安装软件包
  6. 在新的代码单元中,导入必要的模块
    导入 nemo
    import nemo.collections.asr as nemoo_asr
    导入 nemo.collections.nlp 为 nemo_nlp
    导入 nemo.collections.tts 为 nemo_tts
    导入 IPython
    

    上述命令导入了运行 NeMo 预训练模型所需的必要模块。以下是每个模块所代表的内容:

    • nemo:允许访问 NeMo 的功能和类
    • nemo.collections.asr:允许访问 NeMo 的 ASR 相关功能和模型
    • nemo_nlp:允许使用 NeMo 的 NLP 相关工具、模型和实用程序
    • nemo_tts:允许使用 NeMo 的 TTS 相关功能和模型
    • IPython:允许交互式运行和实验 NeMo 代码
  7. 打开 NGC NeMo 目录
    nemo_asr.models.EncDecCTCModel.list_available_models()
    nemo_nlp.models.MTEncDecModel.list_available_models()
    nemo_tts.models.HifiGanModel.list_available_models()
    nemo_tts.models.FastPitchModel.list_available_models()
    

    上述命令列出了以下类别中的所有可用模型:

    • 自动语音识别
    • 编码器-解码器:属于 MTEnDec 类别的自然语言处理 (NLP) 集合
    • 文本到语音:HifiGan 和 FastPitch

    根据目录,使用以下模型:

    • stt_fr_quartznet15x5:用于语音识别,法语专用
    • nmt_fr_en_transformer12x2:将文本从一种语言翻译成另一种语言,法语专用
    • tts_en_fastpitch:为输入到文本到语音的文本生成频谱图
    • tts_en_lj_hifigan_ft_mixertts:将频谱图转换为用于 TTS 的语音
  8. 初始化模型
    asr_model = nemo_asr.models.EncDecCTCModel.from_pretrained(model_name='stt_fr_quartznet15x5').cuda()
    nmt_model = nemo_nlp.models.MTEncDecModel.from_pretrained(model_name='nmt_fr_en_transformer12x2').cuda()
    spectrogram_generator = nemo_tts.models.FastPitchModel.from_pretrained(model_name='tts_en_fastpitch').cuda()
    vocoder = nemo_tts.models.HifiGanModel.from_pretrained(model_name='tts_en_lj_hifigan_ft_mixertts').cuda()
    

    至少等待 15 分钟,让初始化过程成功完成

执行音频转录和合成

  1. 下载法语音频样本。将链接替换为您所需的音频源 URL
    !wget 'https://lightbulblanguages.co.uk/resources/audio/bonjour.mp3'
    audio_sample = 'bonjour.mp3'
    IPython.display.Audio(audio_sample)
    

    上述命令下载了公开的法语 MP3 音频样本文件bonjour.mp3,并将其保存在 Jupyter Notebook 的工作目录中。此外,它还使用 IPython 的音频部件在 Jupyter Notebook 会话中显示和播放音频文件。

  2. 将音频样本转录为文本
    transcribed_text = asr_model.transcribe([audio_sample])
    print(transcribed_text)
    

    上述命令使用语音识别模型,并显示从音频内容转录的文本

    输出:

    ['你好']
    
  3. 将文本翻译成英文
    english_text = nmt_model.translate(transcribed_text)
    print(english_text)
    

    上述命令使用预训练模型将法语文本转换为英语,并显示转换后的文本

    输出:

    ['你好']
    
  4. 生成频谱图
    parseText = spectrogram_generator.parse(english_text[0])
    spectrogram = spectrogram_generator.generate_spectrogram(tokens=parseText)
    

    上述命令将英文文本转换为频谱图,这是文本到语音合成的预处理步骤,频谱图代表了生成音频的特殊特征

  5. 将频谱图转换为音频
    audio = vocoder.convert_spectrogram_to_audio(spec=spectrogram)
    audioOutput = audio.to('cpu').detach().numpy()
    

    上述命令通过 TTS 管道处理输入文本,生成音频输出

  6. 查看转录的音频
    IPython.display.Audio(audioOutput,rate=22050)
    

    验证以22050 Hz的速率生成的转录音频是否与英文文本相匹配

结论

您使用 NeMo 框架预训练模型和 Vultr Cloud GPU 服务器上的 NGC GPU 加速容器构建了一个人工智能翻译器。您将法语音频样本转录为法语文本,然后将文本转换为英语文本,并将文本转录为英语音频样本。通过使用 NeMo 模块和 NGC 目录中的预训练模型,音频语音识别管道变得高效便捷。

更多信息

更多信息,请访问以下文档资源:

版权声明:
作者:指北针
链接:https://www.vpscue.com/48684.html
来源:主机指北
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
海报
如何使用英伟达 NeMo 构建语音翻译应用程序
导言 神经模块(NeMo)是一个开源工具包,旨在处理对话式人工智能任务。它是英伟达™(NVIDIA®)GPU 云(NGC)目录的一部分,该目录由工具、框架和预训练模型的……
<<上一篇
下一篇>>