1 介绍
音频API提供两个语音转文本的端点,transciptions 和 translations, 它们基于最强的开源模型large-v2 Whisper.可以被使用到:
- 将音频转换成任何语言的音频
- 翻译并转化音频到英文
上传文件的大小限制在25M以内,支持的音频格式有:mp3 mp4 mpeg mpga m4a wav webm
2 快速开始
转录API将要转录的音频文件和所需的音频转录输出文件格式作为输入,我们目前支持多种输入和输出文件格式:
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": "Imagine the wildest idea that you've ever had, and you're curious about how it might scale to something that's a 100, a 1,000 times bigger.
....
}
在一个请求中音频AIP允许你设置额外的参数。例如:response_format=text,你的请求像下边内容:
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)
3 翻译
translations API采用任何支持的语言和转换的音频文件,如果必要,可以使音频翻译成英文。这与我们的/Transcriptions端点不同,因为输出不是原始输入语言,而是翻译成英语文本
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)
目前仅支持翻译成英文
4 支持语言
目前我们transcriptions和translations两个端点支持下面的语言:
阿非利卡语,阿拉伯语,亚美尼亚语,阿塞拜疆语,白俄罗斯语,波斯尼亚语,保加利亚语,加泰罗尼亚语,中文,克罗地亚语,捷克语,丹麦语,荷兰语,英语,爱沙尼亚语,芬兰语,法语,加利西亚语,德语,希腊语,希伯来语,印地语,匈牙利语,冰岛语,印度尼西亚语,意大利语,日语,卡纳达语,哈萨克语,韩语,拉脱维亚语,立陶宛语,马其顿语,马来语,马拉地语,毛利语,尼泊尔语,挪威语,波斯语,波兰语,葡萄牙语,罗马尼亚语,俄语,塞尔维亚语,斯洛伐克语,斯洛文尼亚语,西班牙语,斯瓦希里语,瑞典语,他加洛语,泰米尔语,泰语,土耳其语,乌克兰语,乌尔都语,越南语和威尔士语。
虽然底层模型在98种语言上进行了训练,但我们只列出了超过<50%单词错误率(WER)的语言,这是语音到文本模型准确性的行业标准基准。该模型将返回上面未列出的语言的结果,但质量会很低。
5 时间戳
默认情况下,Whisper API将以文本形式输出所提供音频的文本。timestamp_granularities[]参数会启用一个更有结构化的时间戳的json输出格式,在分段级、字级或两者同时使用时间戳。这使得文字和视频编辑的单词级精度,它允许移除与单个单词相关的特定框架。
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)
6 过长输入
默认情况下,Whisper API仅支持小于25MB的文件。如果你有一个音频文件大于25MB,则你需要分割文件为等于或小于25MB的块,或使用一个压缩的频频格式。为了得到更好的效果,我们建议避免在句子中间分割音频,这样可能导致内容丢失。
有一个处理这个问题的方法,使用PyDub 开源的Python包来分割音频:
from pydub import AudioSegmentsong = AudioSegment.from_mp3("good_morning.mp3")# PyDub handles time in milliseconds
ten_minutes = 10 * 60 * 1000first_10_minutes = song[:ten_minutes]first_10_minutes.export("good_morning_10.mp3", format="mp3")
7 提示词
你可以通过Whisper API设置一个提示词来改进文本的生成质量。模型会尝试匹配提示词的风格,因此,如果提示符也这样做,则更有可能使用大写和标点符号。然而,当前的提示系统比我们的其他语言模型更受限制,只能对生成的音频提供有限的控制。在不同的场景下能帮助到你,这里是一些提示词的案例:
- 提示对于纠正模型可能在音频中错误识别的特定单词或首字母缩略词非常有帮助。例如,下面的提示改进了DALL·E和GPT-3这两个词的转录,之前写为“GDP 3”和“DALI”:“转录是关于OpenAI的,它使DALL·E、GPT-3和ChatGPT这样的技术,希望有一天能建立一个造福全人类的AGI系统。
- 为了保留被分割成片段的文件的上下文,您可以用前面片段的文本提示模型。这将使文本更加准确,因为模型将使用来自先前音频的相关信息。该模型将只考虑提示符的最后224个令牌,而忽略之前的任何令牌。对于多语言输入,Whisper使用自定义标记器。对于仅限英语的输入,它使用标准的GPT-2标记器,这两个标记器都可以通过开源的Whisper Python包访问。
- 有时模型可能会跳过文本中的标点符号。你可以通过使用一个包含标点符号的简单提示来避免这种情况:“你好,欢迎来到我的讲座。
- 该模型还可以省略音频中常见的填充词。如果你想在你的成绩单中保留填充词,你可以使用包含它们的提示:“嗯,让我想想,嗯……”好吧,我是这么想的。”
- 有些语言可以用不同的方式书写,比如简体中文或繁体中文。在默认情况下,该模型可能并不总是使用您希望用于成绩单的写作风格。你可以通过使用你喜欢的写作风格的提示来改善这一点。
8 提高可靠性
正如我们在提示部分中所讨论的,使用Whisper时面临的最常见挑战之一是该模型通常不能识别不常见的单词或缩写词。为了解决这个问题,我们强调了在这些情况下提高Whisper可靠性的不同技术:
使用提示参数
第一种方法是涉及使用一个可选的传递1个正确拼写的字典提示参数。因为它没有接受过指令跟随技术的训练,Whisper的操作更像一个基本的GPT模型。切记:Whisper仅使用提示词的前244tokens
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提供说明。与前面使用prompt参数所做的类似,我们可以定义公司和产品名称.
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.contentcorrected_text = generate_corrected_transcript(0, system_prompt, fake_company_filepath)
如果你在自己的音频文件上尝试这个,你可以看到GPT-4设法纠正了文本中的许多拼写错误。由于其更大的上下文窗口,这种方法可能比使用Whisper的提示参数更具可扩展性,并且更可靠,因为GPT-4可以以Whisper无法实现的方式进行指示和引导。