NVIDIA NeMo 是一个用于构建新的最先进对话式 AI 模型的工具包。NeMo 有自动语音识别 (ASR)、自然语言处理 (NLP) 和文本转语音 (TTS) 模型的单独集合。
每个集合都包含预构建模块,其中包含训练数据所需的一切。每个模块都可以轻松定制、扩展和组合,以创建新的对话式 AI 模型架构。那么我们简单解释一下什么是ASR、NLP、TTS模型。
ASR是自动语音识别的缩写,是机器学习的一个子领域,专注于将口头语言翻译成文本格式的技术。这些方法背后的主要好处是允许在给定的语音消息中进行更好的单词搜索。
ASR 模型在当今世界广泛使用;最著名的实际应用包括 Apple 著名的语音交互系统 Siri。
自然语言处理或NLP是人工智能的一个子领域,能够理解和处理不同的语言格式以提取独特的见解和模式。
最常见的用途包括推荐系统,其中自然语言处理技术可以将不同的项目、对象或服务归入不同的类别。此外,如果用户喜欢某些项目类别,推荐系统可以推荐相同或相似类别的项目。
TTS是Text-to-Speech 的缩写,与前面提到的自动语音识别领域正好相反。在 ASR 中,机器学习模型接收语音消息并将其转换为文本格式。同时,Text-to-Speech 模型接收文本格式的数据并将其转换为语音格式。
正如前面提到的 Siri 模型,ASR 系统用于将用户的语音转换为文本供 Siri 理解,然后 TTS 模型用于 Siri 以语音格式回答。
在本文的以下部分中,我们将向您展示如何使用 NVIDIA Nemo 运行实际的自然语言处理模型。
在使用 NeMo 之前,假定您满足以下先决条件。
使用自然语言处理 (NLP),我们将构建一个能够检测给定句子情感的机器学习模型。情绪旨在将给定的句子分类为情绪积极或消极。
例如,积极的情绪是“他工作很努力,取得了伟大的成就。” 另一方面,负面情绪是“他的表现不够好,未能达到目标”。
本教程中使用的文本分类模型要求数据集以 TAB 分隔文件 (.tsv) 格式存储。以下是数据应存储的格式。
[WORD][SPACE][WORD][SPACE][WORD][TAB][LABEL]
为了更好地解释给定的格式,让我们以数据集的第一行为例:
第一个数据点是:
hide new secretions from the parental units: 0
因此,数据必须以下面给出的格式存储:
[hide][SPACE][new][SPACE][secretions][SPACE][from][SPACE][the][SPACE][parental][SPACE][units][TAB][0]
我们的数据集仅包含 2 列,即句子和标签 列。句子列(自变量)将用作我们模型的输入值。此列包含给定用户撰写的实际电影评论。
对于输出变量,我们将使用标签列(因变量),它表示先前编写的消息的实际情绪(正面或负面)。标签栏通常由人类用户手动填写。
- """ You can run either this notebook locally (if you have all the dependencies and a GPU) or on Google Colab.
- Instructions for setting up Colab are as follows: Open a new Python 3 notebook. Import this notebook from GitHub (File -> Upload Notebook -> "GITHUB" tab -> copy/paste GitHub URL) Connect to an instance with a GPU (Runtime -> Change runtime type -> select "GPU" for hardware accelerator) Run this cell to set up dependencies. """ # If you're using Google Colab and not running locally, run this cell # install NeMo BRANCH = 'r1.10.0' !python -m pip install git+https://github.com/NVIDIA/NeMo...;BRANCH#egg=nemo_toolkit[nlp]
如果您不使用 Colab,则可能需要升级 Jupyter notebook 以避免出现以下错误:
# 'ImportError: IProgress not found. Please update jupyter and ipywidgets.'
安装 ipywidgets 扩展
! pip install ipywidgets ! jupyter nbextension enable --py widgetsnbextension # Please restart the kernel after running this cell
请注意,当您使用 Google Colab 运行模型时,始终需要遵循上述 2 个步骤。
作为训练我们模型的实际第一步,我们需要导入所有需要的库和包。
您之前可能使用过的一些必要库可能包括torch和pytorch库。在此模型中,我们还将使用几个 NeMo 包,例如nemo.collections和nemo.utils.exp_manager包。
- from nemo.collections import nlp as nemo_nlp from nemo.utils.exp_manager import exp_manager
- import os import wget import torch import pytorch_lightning as pl from omegaconf import OmegaConf
在此步骤中,我们将通过创建 2 个新目录来保存我们的工作。您可以选择不创建或创建并重命名您自己的目录,但始终确保在代码中用新目录名替换旧目录名。
最后两行命令以 '!' 开头 会自动安装数据集,然后解压到指定的Data目录文件中。为您节省一些不必要的工作。
- DATA_DIR = "DATA_DIR" WORK_DIR = "WORK_DIR" os.environ['DATA_DIR'] = DATA_DIR
- os.makedirs(WORK_DIR, exist_ok=True) os.makedirs(DATA_DIR, exist_ok=True)
- ! wget <a href="https://dl.fbaipublicfiles.com/glue/data/SST-2.zip" target="_self">https://dl.fbaipublicfiles.com/glue/data/SST-2.zip </a>! unzip -o SST-2.zip -d {DATA_DIR}
由于 Nemo 数据集有其独特的格式,因此应插入或修改所使用的任何数据集以适应这种要求的格式。在我们的数据集中,我们需要删除多余的标题行。这是使用 sed 1d 命令完成的,该命令从指定数据集中删除第一列。请注意,我们仅从训练和验证数据集中删除了标题行,因为测试数据集没有此问题。
- ! sed 1d {DATA_DIR}/SST-2/train.tsv > {DATA_DIR}/SST-2/train_nemo_format.tsv ! sed 1d {DATA_DIR}/SST-2/dev.tsv > {DATA_DIR}/SST-2/dev_nemo_format.tsv ! ls -l {DATA_DIR}/SST-2 To print the first 5 lines of each data set: print('Contents (first 5 lines) of train.tsv:') ! head -n 5 {DATA_DIR}/SST-2/train_nemo_format.tsv
- print('\nContents (first 5 lines) of test.tsv:') ! head -n 5 {DATA_DIR}/SST-2/test.tsv
NVIDIA Nemo 模型使用配置系统工作,其中保存和使用包含运行我们模型的所有必要数据的配置文件。本教程中编写的大部分代码都会更新并向该文件添加新数据。
首先,NVIDIA 为您提供了一个可以立即使用的基本 YAML 配置文件。当然,模型之间需要进行一些修改和调整。配置文件将被下载到指定目录。