亚马逊SageMaker JumpStart现可提供用于自动语音识别的Whisper模型
亚马逊SageMaker JumpStart 新增Whisper模型,实现自动语音识别
今天,我们很高兴地宣布,OpenAI Whisper 基础模型现在可以在使用Amazon SageMaker JumpStart的客户中使用。Whisper 是一个用于自动语音识别(ASR)和语音翻译的预训练模型。Whisper 模型经过对标记数据达到 68 万小时的训练,表现出较强的泛化能力,无需进行微调即可适应多个数据集和领域。Sagemaker JumpStart 是 SageMaker 的机器学习(ML)中心,除了内置算法和端到端解决方案模板以帮助您快速开始 ML,还提供对基础模型的访问。
您还可以使用Amazon Transcribe进行 ASR,Amazon Transcribe 是一个完全托管且持续训练的自动语音识别服务。
在本文中,我们将展示如何部署OpenAI Whisper模型,以及如何调用模型进行音频转录和翻译。
OpenAI Whisper 模型使用huggingface-pytorch-inference容器。作为 SageMaker JumpStart 模型中心的客户,您可以使用 ASR 而无需在 SageMaker SDK 之外维护模型脚本。SageMaker JumpStart 模型还通过支持网络隔离的终端节点来提升安全性。
- 「MAXimum AI性能:NVIDIA GPU加速的最新Adobe更新改善了数百万创意工作者的工作流程」
- 迪拜将开始机器人出租车试运行
- 双语游戏应用旨在防止痴呆症 (Shuāngyǔ yóuxì yìngyòng zhǐ zài fángzhǐ chīdǎizhèng)
SageMaker 中的基础模型
SageMaker JumpStart 提供了对来自 Hugging Face、PyTorch Hub 和 TensorFlow Hub 等流行模型中心的一系列模型的访问权限,您可以在 SageMaker 的 ML 开发工作流中使用这些模型。最近在 ML 领域取得的进展导致出现了一类被称为基础模型的新模型,它们通常是在数十亿参数上进行训练,并可适应各种用例,如文本摘要、生成数字艺术和语言翻译等。由于这些模型的训练成本较高,客户希望使用现有的预训练基础模型,并根据需要进行微调,而不是自行训练这些模型。SageMaker 在 SageMaker 控制台上提供了一个经过筛选的模型列表,供您选择。
现在,您可以在 SageMaker JumpStart 中找到来自不同模型提供者的基础模型,快速开始使用基础模型。SageMaker JumpStart 根据任务或模型提供者提供基础模型,并且您可以轻松查看模型特性和使用条款。您还可以使用测试 UI 小部件尝试这些模型。当您希望大规模使用基础模型时,可以直接在 SageMaker 上使用模型提供者的预建笔记本。因为这些模型托管和部署在 AWS 上,所以您可以放心,无论是用于评估还是在大规模使用模型时,您的数据都不会与第三方共享。
OpenAI Whisper 基础模型
Whisper 是一个用于 ASR 和语音翻译的预训练模型。Whisper 是由 Alec Radford 和 OpenAI 的其他人在论文Robust Speech Recognition via Large-Scale Weak Supervision中提出的。您可以在 这个 GitHub 存储库中找到原始代码。
Whisper 是一种基于 Transformer 的编码器-解码器模型,也称为序列到序列模型。它通过大规模弱监督下标记的 68 万小时语音数据进行训练。Whisper 模型表现出很强的泛化能力,无需进行微调即可适应多个数据集和领域。
这些模型分为五种不同的模型尺寸配置。最小的四个模型是在仅英文或多语言数据上进行训练的。最大的检查点仅支持多语言。这十个预训练检查点都可以在 Hugging Face hub 上找到。下表概述了这些检查点以及指向模型在 hub 上的链接:
“`html
模型名称 | 参数数量 | 多语言 |
whisper-tiny | 39 M | 是 |
whisper-base | 74 M | 是 |
whisper-small | 244 M | 是 |
whisper-medium | 769 M | 是 |
whisper-large | 1550 M | 是 |
whisper-large-v2 | 1550 M | 是 |
让我们探索如何在SageMaker JumpStart中使用Whisper模型。
OpenAI Whisper基础模型WER和延迟比较
基于LibriSpeech test-clean上的不同OpenAI Whisper模型的词错误率(WER)在下表中显示。 WER是衡量语音识别或机器翻译系统性能的常用指标。 它测量了ASR系统的输出与参考文本(准确的转录或正确的转录)之间的差异,包括替换、插入和删除的错误数量,这些错误是将ASR输出转化为参考文本所需的。 这些数字来自于Hugging Face网站。
模型 | WER(百分比) |
whisper-tiny | 7.54 |
whisper-base | 5.08 |
whisper-small | 3.43 |
whisper-medium | 2.9 |
whisper-large | 3 |
whisper-large-v2 | 3 |
对于本博客,我们采用以下音频文件,并比较不同Whisper模型的语音识别延迟。 延迟是从用户发送请求到应用程序指示请求已完成的时间量。 下表中的数字表示使用相同音频文件进行100次请求的平均延迟,模型托管在ml.g5.2xlarge实例上。
模型 | 平均延迟(秒) | 模型输出 |
whisper-tiny | 0.43 | 我们生活在非常激动人心的机器学习时代。 机器学习模型的开发速度将大幅增加。 但是,除非我们将这些模型更加普及,否则在接下来的几年内,我们将无法达到我们想要的最终状态。 |
whisper-base | 0.49 | 我们生活在非常激动人心的机器学习时代。 机器学习模型的开发速度将大幅增加。 但是,除非我们将这些模型更加普及,否则在接下来的几年内,我们将无法达到我们想要的最终状态。 |
whisper-small | 0.84 | 我们生活在非常激动人心的机器学习时代。 机器学习模型的开发速度将大幅增加。 但是,除非我们将这些模型更加普及,否则在接下来的几年内,我们将无法达到我们想要的最终状态。 |
whisper-medium | 1.5 | 我们生活在非常激动人心的机器学习时代。 机器学习模型的开发速度将大幅增加。 但是,除非我们将这些模型更加普及,否则在接下来的几年内,我们将无法达到我们想要的最终状态。 |
whisper-large | 1.96 | 我们生活在非常激动人心的机器学习时代。 机器学习模型的开发速度将大幅增加。 但是,除非我们将这些模型更加普及,否则在接下来的几年内,我们将无法达到我们想要的最终状态。 |
whisper-large-v2 | 1.98 | 我们生活在非常激动人心的机器学习时代。 机器学习模型的开发速度将大幅增加。 但是,除非我们将这些模型更加普及,否则在接下来的几年内,我们将无法达到我们想要的最终状态。 |
“`
解决方案步骤
您可以使用亚马逊SageMaker控制台或亚马逊SageMaker笔记本部署Whisper模型。在本文中,我们将演示如何使用SageMaker Studio控制台或SageMaker笔记本部署Whisper API,然后使用部署的模型进行语音识别和语言翻译。本文中使用的代码可以在此GitHub笔记本中找到。
让我们逐步详细介绍每个步骤。
从控制台部署Whisper
- 要开始使用SageMaker JumpStart,请打开亚马逊SageMaker Studio控制台,转到SageMaker JumpStart的启动页面,然后选择开始使用JumpStart。
- 要选择一个Whisper模型,您可以使用顶部的选项卡,或使用顶部右侧的搜索框,如下方屏幕截图所示。对于本示例,请使用右上角的搜索框,输入
Whisper
,然后从下拉菜单中选择适当的Whisper模型。 - 在选择了Whisper模型之后,您可以使用控制台部署模型。可以选择要部署的实例,或使用默认设置。
从SageMaker笔记本部署基础模型
首先部署模型,然后使用部署的模型来解决不同的任务的步骤如下:
- 设置
- 选择模型
- 检索工件并部署端点
- 使用部署的模型进行ASR
- 使用部署的模型进行语言翻译
- 清理端点
设置
此笔记本在SageMaker Studio的ml.t3.medium实例上以Python 3(数据科学)内核进行了测试,并且在Amazon SageMaker笔记本实例中使用了conda_python3
内核。
%pip install --upgrade sagemaker --quiet
选择预训练模型
使用Boto3设置一个SageMaker会话,然后选择要部署的模型ID。
model_id = "huggingface-asr-whisper-large-v2"
检索工件并部署端点
使用SageMaker,即使没有在新数据集上进行微调,也可以对预训练模型执行推理。要托管预训练模型,请创建一个sagemaker.model.Model的实例并部署它。以下代码使用默认实例ml.g5.2xlarge
部署了whisper-large-v2模型的推理端点。您可以通过在JumpStartModel
类中传递instance_type
来在其他实例类型上部署模型。部署可能需要几分钟。
#从sagemaker.jumpstart.model导入JumpStartModelfrom sagemaker.serializers import JSONSerializermy_model = JumpStartModel(model_id=dropdown.value)predictor = my_model.deploy()
自动语音识别
接下来,您从SageMaker Jumpstart公共Amazon Simple Storage Service (Amazon S3)位置读取示例音频文件sample1.wav,并将其传递给用于语音识别的预测器。您可以用任何其他示例音频文件替换此示例文件,但请确保.wav文件的采样率为16kHz,因为自动语音识别模型要求如此。输入音频文件的长度必须小于30秒。
from scipy.io.wavfile import readimport jsonimport boto3from sagemaker.jumpstart import utils# The wav files must be sampled at 16kHz (this is required by the automatic speech recognition models), so make sure to resample them if required. The input audio file must be less than 30 seconds.s3_bucket = utils.get_jumpstart_content_bucket(boto3.Session().region_name)key_prefix = "training-datasets/asr_notebook_data"input_audio_file_name = "sample1.wav"s3_client = boto3.client("s3")s3_client.download_file(s3_bucket, f"{key_prefix}/{input_audio_file_name }", input_audio_file_name )with open(input_audio_file_name, "rb") as file: wav_file_read = file.read()# 如果收到客户端错误 (413),请检查端点的有效负载大小。SageMaker调用端点请求的有效负载限制约为5MBresponse = predictor.predict(wav_file_read)print(response["text"])
此模型在进行推理时支持许多参数。它们包括:
max_length
:模型生成文本的输出长度。如果指定,它必须是一个正整数。- language 和 task:在这里指定输出的语言和任务。模型支持转录或翻译任务。
max_new_tokens
:要生成的最大标记数。num_return_sequences
:返回的输出序列数。如果指定,它必须是一个正整数。num_beams
:贪婪搜索中使用的束大小。如果指定,它必须是大于或等于num_return_sequences
的整数。no_repeat_ngram_size
:模型确保在输出的序列中不重复长度为no_repeat_ngram_size
的词组。如果指定,它必须是大于1的正整数。- temperature:控制输出中的随机性。较高的温度会导致带有低概率词语的输出序列,较低的温度会导致带有高概率词语的输出序列。如果温度接近0,则会导致贪婪解码。如果指定,它必须是正浮点数。
early_stopping
:如果为True
,当所有束假设达到句子结尾标记时,文本生成将结束。如果指定,它必须是布尔值。do_sample
:如果为True
,则对下一个词进行取样。如果指定,它必须是布尔值。top_k
:在文本生成的每个步骤中,仅从最可能的top_k
个词中选择。如果指定,它必须是一个正整数。top_p
:在文本生成的每个步骤中,从具有累计概率top_p
的可能词组中选择。如果指定,它必须是0到1之间的浮点数。
在调用端点时,您可以指定上述参数的任意子集。接下来,我们将向您展示如何使用这些参数调用端点的示例。
语言翻译
要使用Whisper模型展示语言翻译,请使用以下法语音频文件,并将其翻译为英语。该文件的采样率必须为16kHz(与ASR模型的要求相同),因此如果需要,请确保对文件进行重新采样,并确保样本不超过30秒。
-
从公共S3位置的SageMaker JumpStart中下载
sample_french1.wav
文件,以便将其作为Whisper模型的负载传递进行翻译。input_audio_file_name = "sample_french1.wav"s3_client.download_file(s3_bucket, f"{key_prefix}/{input_audio_file_name }", input_audio_file_name )
-
将任务参数设置为
translate
,将语言设置为French
,以强制Whisper模型执行语音翻译。with open(input_audio_file_name, "rb") as file: wav_file_read = file.read()payload = {"audio_input": wav_file_read.hex(), "language": "french", "task": "translate"}predictor.serializer = JSONSerializer()predictor.content_type = "application/json"
-
使用predictor预测语言的翻译。如果收到客户端错误(错误413),请检查端点的有效负载大小。SageMaker调用端点请求的有效负载限制约为5MB。
response = predictor.predict(payload)print(response["text"])
-
从法语音频文件翻译为英语的文本输出如下:
[' 欢迎来到JPBSystem。我们有150多名员工和90%的销售额。我们已经开发了约15项专利。']
清理
在测试完终端后,请删除SageMaker推理终端节点并删除模型,以避免产生费用。
结论
在本文中,我们展示了如何测试和使用OpenAI Whisper模型来构建有趣的应用程序,使用Amazon SageMaker。今天就在SageMaker中尝试基础模型,并告诉我们您的反馈意见!
此指南仅供信息目的。您仍应进行自己独立的评估,并采取措施确保您符合自己的特定质量控制实践和标准,以及适用于您自身内容和第三方模型的地方规则、法律、法规、许可证和使用条款。AWS对此指南中引用的第三方模型没有控制权或管理权限,并不对第三方模型的安全性、免疫性、操作性或与您的生产环境和标准的兼容性做出任何陈述或保证。AWS不就此指南中的任何信息作出任何陈述、保证或保障将导致特定的结果或效果。