语音转文本

学习如何将音频转换为文本

介绍

音频 API 提供了两个将语音转换为文本的端点,transcriptionstranslations,基于我们的先进的开源大型 v2 Whisper 模型。它们可用于:

  • 将音频转录为所处的语言。
  • 将音频转译并转录为英语。

目前,文件上传的大小限制为 25 MB,支持的输入文件类型包括:mp3mp4mpegmpgam4awavwebm

快速启动

转录

转录 API 接受您要转录的音频文件和所需的输出文件格式。我们目前支持多种输入和输出文件格式。

Python

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,其中包含原始文本。

{
  "text": "“文本”:“想象一下你有史以来最疯狂的想法,你很好奇它如何扩展到100倍,1000倍的东西..... 
}

Audio API 还允许您在请求中设置其他参数。例如,如果您想将 response_format 设置为 text,则您的请求将如下所示:

Python

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 端点不同,因为输出不是在原始输入语言中,而是翻译成英文文本。

Python

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)

在这种情况下,输入的音频是德语,而输出的文本如下所示:

你好,我叫沃尔夫冈,我来自德国。你今天要去哪里?

我们目前仅支持将文本翻译成英语。

支持的语言

我们目前通过transcriptionstranslations支持以下语言:

南非语、阿拉伯语、亚美尼亚语、阿塞拜疆语、白俄罗斯语、波斯尼亚语、保加利亚语、加泰罗尼亚语、汉语、克罗地亚语、捷克语、丹麦语、荷兰语、英语、爱沙尼亚语、芬兰语、法语、加利西亚语、德语、希腊语、希伯来语、印地语、匈牙利语、冰岛语、印度尼西亚语、意大利语、日语、卡纳达语、哈萨克语、韩语、拉脱维亚语、立陶宛语、马其顿语、马来语、马拉地语、毛利语、尼泊尔语、挪威语、波斯语、波兰语、葡萄牙语、罗马尼亚语、俄语、塞尔维亚语、斯洛伐克语、斯洛文尼亚语、西班牙语、斯瓦希里语、瑞典语、他加禄语、泰米尔语、泰语、土耳其语、乌克兰语、乌尔都语、越南语和威尔士语。

虽然底层模型已经针对 98 种语言进行了训练,但我们仅列出了超过 < 50% 的 单词 错误率(WER)的语言,这是行业标准的语音转文本模型准确性基准。模型将为未列出的语言返回结果,但其质量将较低。

时间戳

默认情况下,Whisper API 将输出提供的音频的文本转录。timestamp_granularities[] 参数启用了更结构化和带时间戳的 json 输出格式,在段MENT、单词级别或两者都有。这使得转录和视频编辑具有单词级别的精度,从而可以删除与特定单词相关的特定帧。

Python

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 或更小的块,或者使用压缩的音频格式。为了获得最佳性能,我们建议您避免在句子的中间将音频分成块,因为这可能会导致一些上下文丢失。

一种处理这种情况的方法是使用开源的 PydubPython 包 来拆分音频:

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。

提示

您可以使用 PROMPT 来改善 Whisper API 生成的转录的质量。模型将尝试匹配提示的风格,因此它更有可能使用大写字母和标点符号,如果提示也这样做。但是,当前的提示系统比我们的其他语言模型要受限得多,只提供对生成的音频进行控制的有限选项。以下是一些使用提示在不同情况下帮助的示例:

  • 提示可以在音频中帮助纠正特定的单词或缩写,模型可能会误识别。例如,以下提示可以改善 DALL·E 和 GPT-3 的转录,它们之前被写成“GDP 3”和“DALI”:“The transcript is about OpenAI which makes technology like DALL·E, GPT-3, and ChatGPT with the hope of one day building an AGI system that benefits all of humanity"
  • 要保留文件被分成段MENTS 的上下文,您可以使用前一个段MENT 的转录来提示模型。这将使转录更准确,因为模型将利用来自先前音频的相关信息。模型将仅考虑提示的最后 224 个令牌,并忽略更早的任何内容。对于多语言输入,Whisper 使用自定义令牌器。对于仅限英语的输入,它使用标准的 GPT-2 令牌器,这两者都可以通过开源的 Whisper Python 包 访问。
  • 有时,模型可能会在转录中跳过标点符号。您可以避免这种情况,方法是使用一个简单的提示,其中包含标点符号:“Hello, welcome to my lecture."
  • 模型可能会在音频中留出常见的填充词。如果您希望在转录中保留填充词,可以使用一个包含它们的提示:“Umm, let me think like, hmm... Okay, here's what I'm, like, thinking."
  • 一些语言可以以不同的方式进行写作,例如简化的或传统的中文。模型可能不会总是使用您想要的写作风格来进行转录。您可以通过使用一个在首选写作风格中撰写的提示来改善这一点。

提高可靠性

使用提示参数

第一种方法涉及使用可选的提示参数来传递正确拼写的字典。

由于它没有使用遵循指令的技术进行训练,Whisper的操作更像是一个基本的GPT模型。重要的是要记住,Whisper只考虑提示的前244个令牌。

Python

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",
  prompt="ZyntriQix, Digique Plus, CynapseFive, VortiQore V8, EchoNix Array, OrbitalLink Seven, DigiFractal Matrix, PULSE, RAPT, B.R.I.C.K., Q.U.A.R.T.Z., F.L.I.N.T."
)
print(transcription.text)

虽然它将提高可靠性,但该技术仅限于244个字符,因此您的SKU列表需要相对较小,才能成为可扩展的解决方案。

使用GPT-4进行后处理

第二种方法涉及使用GPT-4或GPT-3.5-Turbo的后处理步骤。

我们首先通过system_prompt变量为GPT-4提供说明。与我们之前使用提示参数所做的类似,我们可以定义我们的公司和产品名称。

Python

system_prompt = "You are a helpful assistant for the company ZyntriQix. Your task is to correct any spelling discrepancies in the transcribed text. Make sure that the names of the following products are spelled correctly: ZyntriQix, Digique Plus, CynapseFive, VortiQore V8, EchoNix Array, OrbitalLink Seven, DigiFractal Matrix, PULSE, RAPT, B.R.I.C.K., Q.U.A.R.T.Z., F.L.I.N.T. Only add necessary punctuation such as periods, commas, and capitalization, and use only the context provided."

def generate_corrected_transcript(temperature, system_prompt, audio_file):
    response = client.chat.completions.create(
        model="gpt-4o",
        temperature=temperature,
        messages=[
            {
                "role": "system",
                "content": system_prompt
            },
            {
                "role": "user",
                "content": transcribe(audio_file, "")
            }
        ]
    )
    return completion.choices[0].message.content

corrected_text = generate_corrected_transcript(0, system_prompt, fake_company_filepath)

如果您在自己的音频文件上尝试此错误,您可以看到GPT-4设法纠正了成绩单中的许多拼写错误。由于其更大的上下文窗口,这种方法可能比使用Whisper的提示参数更具可扩展性,并且更可靠,因为GPT-4可以以Whisper无法实现的方式进行指令和引导,因为缺乏以下指令。

Was this page helpful?