Last chance! 50% off DataCamp Premium
Sale ends in

Whisper 是一款通用自动语音识别模型,基于大规模音频数据集进行训练。该模型可执行多语种转写、语音翻译以及语言检测。
Whisper 可用于语音助手、聊天机器人、将语音翻译成英文、会议自动记录笔记以及语音转写等场景。
转写是将口语转换为文本的过程。过去依赖人工完成,如今我们有了像 Whisper 这样的 AI 工具,能够准确理解口语内容。
如果您具备 Python 的基础知识,便可将 OpenAI Whisper API 集成到您的应用中。Whisper API 是 openai/openai-python 的一部分,可让您访问多种 OpenAI 服务与模型。
想进一步了解如何用 LangChain 构建 AI 应用,可观看我们的 Building Multimodal AI Applications with LangChain & the OpenAI API AI Code Along,您将学会如何使用 Whisper 语音转文本 AI 转写 YouTube 视频内容,并借助 GPT 就内容提出问题。
OpenAI Whisper API 支持以下语言的转写与翻译:
Afrikaans、Arabic、Armenian、Azerbaijani、Belarusian、Bosnian、Bulgarian、Catalan、Chinese、Croatian、Czech、Danish、Dutch、English、Estonian、Finnish、French、Galician、German、Greek、Hebrew、Hindi、Hungarian、Icelandic、Indonesian、Italian、Japanese、Kannada、Kazakh、Korean、Latvian、Lithuanian、Macedonian、Malay、Marathi、Maori、Nepali、Norwegian、Persian、Polish、Portuguese、Romanian、Russian、Serbian、Slovak、Slovenian、Spanish、Swahili、Swedish、Tagalog、Tamil、Thai、Turkish、Ukrainian、Urdu、Vietnamese 和 Welsh。
下图展示了使用 large-v2 模型在 Fleur 数据集上的词错误率(WER),并按语言分类。WER 越小,转写准确度越高。

Whisper API 支持的文件格式包括 mp3、mp4、mpeg、mpga、m4a、wav 和 webm。目前上传文件大小上限为 25MB。若文件更大,可使用 pydub 将其拆分为更小的片段。
本节将使用 OpenAI API 进行转写与翻译,并了解多种输出格式。
您可以使用 pip 安装 OpenAI 的 Python API。
pip install openai
随后,前往 OpenAI API 网页,点击头像并选择 "View API keys" 以生成 API 密钥。所有新注册的 OpenAI 账户都会提供 5 美元的免费额度,因此无需担心添加信用卡信息。

接着点击“Create new security key”按钮,填写密钥名称并复制生成的密钥。

在本地系统中,可在终端输入以下命令设置 API 密钥。它会创建一个环境变量,供您调用 OpenAI 服务。
export OPENAI_API_KEY='sk-...kMEM'
您也可以在 Python 程序内通过 openai.api_key 设置密钥。但不建议此做法,因为会将您的 API 暴露给公众。
import openai
openai.api_key = "sk-...kMEM"
如果您使用 DataLab,请点击 Environment > “加号”图标,然后填写环境变量的名称与值。

随后点击 Connect 按钮启用环境变量。

我们将使用 Marvin Minsky 关于 AI 的访谈 YouTube 视频的一小段并转换为音频。文件 marvin_minsky.mp3 时长 1 分钟,大小 970 KB。
我们从 How Are People in Barcelona Using AI? 这段西班牙语 YouTube 视频中截取一小段,生成 Easy_spanish_315.mp3 文件。其大小为 509 KB,时长 20 秒。
转写 API 的用法十分直接。您只需用 with 语句加载音频文件,并将音频对象传入 openai.Audio.transcribe。该函数仅需模型名称与音频对象,但您也可提供 language 参数以提升准确度。
import openai
with open("Audio/marvin_minsky.mp3", "rb") as audio_file:
transcript = openai.Audio.transcribe(
file = audio_file,
model = "whisper-1",
response_format="text",
language="en"
)
print(transcript)
of theories called Steps Toward Artificial Intelligence around 1970. That sort of charted several possible lines of research, which pretty much predicted what several communities of researchers would do in the next 20 years. Those predictions started to fall apart around--so that paper was 1970, roughly. By the late 1980s, the world had changed. It was interesting because when I started research in that general area, almost all of my students soon became professors.
查看 OpenAI API Python 速查表,快速了解各函数的用途。通过该速查表,您可以学习用于文本生成、语音转写、图像生成、嵌入等的多种 OpenAI API 命令。
在上一个示例中,我们将输出格式设为纯文本,但您也可以改为 SubRip 字幕(response_format="srt")、视频文本轨字幕(response_format="vtt")以及包含元数据的格式(response_format="verbose_json")。
在我们的示例中,将 response_format 改为 “srt”,以输出字幕。
with open("Audio/marvin_minsky.mp3", "rb") as audio_file:
transcript2 = openai.Audio.transcribe(
file = audio_file,
model = "whisper-1",
response_format="srt",
language="en"
)
print(transcript2)
如您所见,输出文本会按时间戳进行分段。
1
00:00:00,000 --> 00:00:10,960
of theories called Steps Toward Artificial Intelligence around 1970.
2
00:00:10,960 --> 00:00:24,320
That sort of charted several possible lines of research, which pretty much predicted what
3
00:00:24,320 --> 00:00:31,920
several communities of researchers would do in the next 20 years.
4
00:00:31,920 --> 00:00:42,040
Those predictions started to fall apart around--so that paper was 1970, roughly.
5
00:00:42,040 --> 00:00:48,200
By the late 1980s, the world had changed.
6
00:00:48,200 --> 00:00:56,760
It was interesting because when I started research in that general area, almost all
7
00:00:56,760 --> 00:01:16,920
of my students soon became professors.
Whisper 以 98 种语言进行训练,因而能够转写多种语言。为此,您需要更改 language 参数。
在本例中,我们转写西班牙语音频,因此设置 language="es"
with open("Audio/easy_spanish_315.mp3", "rb") as audio_file:
transcript_es = openai.Audio.transcribe(
file = audio_file,
model = "whisper-1",
response_format="text",
language="es"
)
print(transcript_es)
¿Qué crees que es la inteligencia artificial? ¿Qué creo que es? Eh... no sé, no sé cómo describirlo. Algo que no es natural, obviamente. Eh... Pues la inteligencia artificial es mediante... mediante datos, eh... introducirle a un algoritmo.
您只能将音频翻译为英文转写。
在示例中,我们向 `translate` 函数提供西班牙语音频,它会将西班牙语音频翻译成英文。
with open("Audio/easy_spanish_315.mp3", "rb") as audio_file:
translate = openai.Audio.translate(
file = audio_file,
model = "whisper-1",
response_format="text",
language="en"
)
print(translate)
What do you think artificial intelligence is? What do I think it is? I don't know how to describe it. Something that is not natural, obviously. Artificial intelligence is, through data, introduced to an algorithm.
前往 此 DataLab 工作簿亲自试试该示例。工作簿已包含音频文件与源码。您只需复制一份并设置环境变量即可运行。
另请查看 Using ChatGPT via the OpenAI API in the Python 教程,学习如何使用 gpt-3.5-turbo 模型进行聊天补全。
我们可以通过使用 prompt(提示) 参数来提升转写质量。通过在 prompt 参数中提供部分转写文本,可帮助模型理解写作风格、标点、大小写与拼写。
当前提示方式的一大缺点是对生成文本的可控性较弱。此外,提示过程难以自动化,因为其涉及由人工对音频进行部分转写。
您可以基于本教程的代码示例创建语音助手,或用它来打造《钢铁侠》中的 J.A.R.V.I.S.。为此,您需要设计好用户界面,并结合 Whisper、文本转语音与 ChatGPT API,我们已在这场 直播培训中进行讲解。
如果您是 ChatGPT 新手,可以学习 Introduction to ChatGPT 课程,掌握撰写提示的最佳实践,并将 ChatGPT 转化为业务价值。若您想了解 GPT-4 及生成式模型的工作原理,请阅读 What is GPT-4 and Why Does it Matter?。您还可以在下方找到更多资源: