语音到文本
概述
音频 API 提供两个语音到文本终端节点,以及基于我们最先进的开源 large-v2 Whisper 模型。它们可用于:transcriptions
translations
- 将音频转录为音频所在的任何语言。
- 将音频翻译并转录为英文。
文件上传当前限制为 25 MB,并支持以下输入文件类型:、、、 和 .mp3
mp4
mpeg
mpga
m4a
wav
webm
快速入门
改编
转录 API 将要转录的音频文件和音频转录所需的输出文件格式作为输入。我们目前支持多种输入和输出文件格式。
1
2
3
4
5
6
7
8
9
from openai import OpenAI
client = OpenAI()
audio_file= open("/path/to/file/audio.mp3", "rb")
transcription = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file
)
print(transcription.text)
默认情况下,响应类型将为包含原始文本的 json。
Audio API 还允许您在请求中设置其他参数。例如,如果要将 as 设置为 ,您的请求将如下所示:response_format
text
1
2
3
4
5
6
7
8
9
10
from openai import OpenAI
client = OpenAI()
audio_file = open("/path/to/file/speech.mp3", "rb")
transcription = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file,
response_format="text"
)
print(transcription.text)
API 参考 包括可用参数的完整列表。
翻译
翻译 API 将任何受支持语言的音频文件作为输入,并在必要时将音频转录为英语。这与我们的 /Transcriptions 端点不同,因为输出不是原始输入语言,而是翻译为英语文本。
1
2
3
4
5
6
7
8
9
from openai import OpenAI
client = OpenAI()
audio_file= open("/path/to/file/german.mp3", "rb")
translation = client.audio.translations.create(
model="whisper-1",
file=audio_file
)
print(translation.text)
在本例中,输入的音频是德语的,输出的文本如下所示:
我们目前仅支持翻译成英文。
支持的语言
我们目前通过 和 终端节点支持以下语言:transcriptions
translations
南非荷兰语、阿拉伯语、亚美尼亚语、阿塞拜疆语、白俄罗斯语、波斯尼亚语、保加利亚语、加泰罗尼亚语、中文、克罗地亚语、捷克语、丹麦语、荷兰语、英语、爱沙尼亚语、芬兰语、法语、加利西亚语、德语、希腊语、希伯来语、印地语、匈牙利语、冰岛语、印度尼西亚语、意大利语、日语、卡纳达语、哈萨克语、韩语、拉脱维亚语、立陶宛语、马其顿语、马来语、马拉地语、毛利语、尼泊尔语、挪威语、波斯语、波兰语、葡萄牙语、罗马尼亚语、俄语、塞尔维亚语、斯洛伐克语、斯洛文尼亚语、西班牙语、斯瓦希里语、瑞典语、他加禄语、泰米尔语、泰语、土耳其语、乌克兰语、 乌尔都语、越南语和威尔士语。
虽然基础模型使用 98 种语言进行了训练,但我们只列出了超过 <50% 的单词错误率 (WER) 的语言,这是语音转文本模型准确性的行业标准基准。该模型将返回上面未列出的语言的结果,但质量会很低。
时间 戳
默认情况下,Whisper API 将以文本形式输出所提供音频的转录文本。timestamp_granularities[]
参数支持更结构化和带时间戳的 json 输出格式,时间戳位于句段和/或单词级别。这样可以对转录和视频编辑进行单词级精度,从而可以删除与单个单词相关的特定帧。
1
2
3
4
5
6
7
8
9
10
11
12
from openai import OpenAI
client = OpenAI()
audio_file = open("speech.mp3", "rb")
transcript = client.audio.transcriptions.create(
file=audio_file,
model="whisper-1",
response_format="verbose_json",
timestamp_granularities=["word"]
)
print(transcript.words)
更长的输入
默认情况下,Whisper API 仅支持小于 25 MB 的文件。如果您的音频文件超过此长度,则需要将其分成 25 MB 或更小的块或使用压缩的音频格式。为了获得最佳性能,我们建议您避免在句子中间拆分音频,因为这可能会导致丢失一些上下文。
处理此问题的一种方法是使用 PyDub 开源 Python 包来拆分音频:
1
2
3
4
5
6
7
8
9
10
from pydub import AudioSegment
song = AudioSegment.from_mp3("good_morning.mp3")
# PyDub handles time in milliseconds
ten_minutes = 10 * 60 * 1000
first_10_minutes = song[:ten_minutes]
first_10_minutes.export("good_morning_10.mp3", format="mp3")
OpenAI 不保证 PyDub 等第 3 方软件的可用性或安全性。
促使
您可以使用提示来提高 Whisper API 生成的转录文本的质量。该模型将尝试匹配提示的样式,因此如果提示也这样做,它将更有可能使用大写和标点符号。但是,当前的提示系统比我们的其他语言模型要有限得多,并且仅提供对生成的音频的有限控制。以下是提示在不同情况下如何提供帮助的一些示例:
- 提示对于更正模型可能在音频中误认的特定单词或首字母缩略词非常有用。例如,以下提示改进了单词 DALL·E 和 GPT-3,之前写为“GDP 3”和“DALI”:“文字记录是关于 OpenAI 的,它使像 DALL·E、GPT-3 和 ChatGPT,希望有一天能建立一个造福全人类的 AGI 系统”
- 要保留拆分为段的文件的上下文,您可以使用前一个段的转录文本提示模型。这将使转录文本更加准确,因为模型将使用先前音频中的相关信息。该模型将只考虑 prompt 的最后 224 个标记,并忽略之前的任何内容。对于多语言输入,Whisper 使用自定义分词器。对于仅限英语的输入,它使用标准的 GPT-2 分词器,两者都可以通过开源 Whisper Python 包访问。
- 有时,模型可能会跳过脚本中的标点符号。您可以通过使用包含标点符号的简单提示来避免这种情况:“您好,欢迎来到我的讲座。
- 模型还可以在音频中省略常见的填充词。如果你想在成绩单中保留填充词,你可以使用包含它们的提示:“嗯,让我想想,嗯......好吧,这就是我的想法。
- 某些语言可以用不同的书写方式,例如简体中文或繁体中文。默认情况下,该模型可能并不总是使用您想要的转录文本写作风格。您可以通过使用自己喜欢的写作风格的提示来改进这一点。
提高可靠性
正如我们在提示部分所探讨的那样,使用 Whisper 时面临的最常见挑战之一是模型通常无法识别不常见的单词或首字母缩略词。为了解决这个问题,我们重点介绍了在这些情况下提高 Whisper 可靠性的不同技术: