[译][AI OpenAI-doc] 语音转文字

简介: 学习如何将音频转换为文本。音频 API 提供了语音转文本的端点,转录和翻译,基于我们先进的开源大型-v2 Whisper 模型。

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

介绍

音频 API 提供了两个语音转文本的端点,即转录和翻译,基于我们先进的开源大型-v2 Whisper 模型。它们可用于:

  • 将音频转录为音频所使用的任何语言。
  • 将音频翻译并转录为英文。

目前,文件上传限制为 25 MB,并支持以下输入文件类型:mp3、mp4、mpeg、mpga、m4a、wav 和 webm。

快速入门

转录

转录 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": "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.
....
}

音频 API 还允许您在请求中设置附加参数。例如,如果您想将 response_format 设置为文本,您的请求将如下所示:

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)

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

Hello, my name is Wolfgang and I come from Germany. Where are you heading today?

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

支持的语言

我们目前通过转录和翻译终点支持以下语言:

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

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

时间戳

默认情况下,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)

长音频输入

默认情况下,Whisper API 仅支持小于 25 MB 的文件。如果您有一个超过这个大小的音频文件,您需要将其分割成小于或等于 25 MB 的块,或者使用压缩的音频格式。为了获得最佳性能,我们建议您避免在句子中间分割音频,因为这可能会导致一些上下文丢失。

处理这个问题的一种方法是使用 PyDub 开源 Python 包来分割音频:

from pydub import AudioSegment

song = AudioSegment.from_mp3("good_morning.mp3")

# PyDub 以毫秒为单位处理时间
ten_minutes = 10 * 60 * 1000

first_10_minutes = song[:ten_minutes]

first_10_minutes.export("good_morning_10.mp3", format="mp3")

OpenAI 不对 PyDub 等第三方软件的可用性或安全性作任何保证。

提示

您可以使用提示来提高 Whisper API 生成的转录质量。模型将尝试匹配提示的风格,因此如果提示中使用了大写字母和标点符号,它更有可能也会使用。然而,当前的提示系统比我们的其他语言模型要受限得多,并且只提供有限的控制生成的音频。以下是提示在不同情况下如何帮助的一些示例:

  • 提示对于纠正模型可能在音频中错误识别的特定单词或首字母缩写词非常有帮助。例如,以下提示改进了 DALL·E 和 GPT-3 这两个单词的转录,之前被写作为 "GDP 3" 和 "DALI":"这篇文稿是关于 OpenAI,该公司开发出像 DALL·E、GPT-3 和 ChatGPT 这样的技术,希望有一天能建立一个造福全人类的 AGI 系统。"
  • 为了保留被分割成段落的文件的上下文,您可以使用前一段的转录作为提示。这样会使转录更准确,因为模型将使用前一个音频的相关信息。模型只会考虑提示的最后 224 个标记,并忽略之前的任何内容。对于多语言输入,Whisper 使用自定义分词器。对于仅英语输入,它使用标准的 GPT-2 分词器,这两者都可以通过开源的 Whisper Python 包访问。
  • 有时,模型在转录中可能会跳过标点符号。您可以通过使用包含标点符号的简单提示来避免这种情况:"你好,欢迎来到我的讲座。"
  • 模型在音频中也可能会省略常用的填充词。如果您想在转录中保留这些填充词,可以使用包含它们的提示:"嗯,让我想想,嗯...好的,我想我是这么想的。"
  • 某些语言可以以不同的方式书写,例如简体或繁体中文。模型可能不会始终使用您希望在转录中使用的写作风格。您可以通过使用您喜欢的写作风格的提示来改进这一点。

提高可靠性

正如我们在提示部分中所探讨的,使用 Whisper 时面临的最常见挑战之一是模型通常无法识别不常见的单词或首字母缩略词。为了解决这个问题,我们已经强调了几种不同的技术,可以在这些情况下提高 Whisper 的可靠性:

使用提示参数

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

由于 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 = "您是 ZyntriQix 公司的一名有益助手。您的任务是纠正转录文本中的任何拼写错误。确保以下产品名称的拼写正确: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. 仅添加必要的标点符号,如句号、逗号和大写字母,并且仅使用提供的上下文。"

def generate_corrected_transcript(temperature, system_prompt, audio_file):
    response = client.chat.completions.create(
        model="gpt-4-turbo",
        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 的提示参数更具可扩展性,并且更可靠,因为相较于 Whisper,GPT-4 可以通过指令和引导来进行指导,而 Whisper 由于缺乏指令遵循功能,无法做到这一点。


相关实践学习
一键创建和部署高分电影推荐语音技能
本场景使用天猫精灵技能应用平台提供的技能模板,在2-5分钟内,创建一个好玩的高分电影推荐技能,使用模板后无须代码开发,系统自动配置意图、实体等,新手0基础也可体验创建技能的乐趣。
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
相关文章
|
15小时前
|
存储 人工智能 缓存
[译][AI OpenAI-doc] 生产最佳实践
本指南提供了一套全面的最佳实践,以帮助您从原型转向生产。无论您是经验丰富的机器学习工程师还是最近的爱好者,本指南都应为您提供成功将平台投入生产环境所需的工具:从确保访问我们的API到设计能够处理高流量的稳健架构。使用本指南帮助制定尽可能平稳有效地部署应用程序的计划。
|
2天前
|
XML 存储 人工智能
[译][AI OpenAI-doc] Prompt工程
这个指南分享了从大型语言模型(有时称为GPT模型)如GPT-4 中获得更好结果的策略和技巧。这里描述的方法有时可以结合使用以达到更好的效果。我们鼓励进行实验,找到最适合您的方法。
[译][AI OpenAI-doc] Prompt工程
|
3天前
|
存储 人工智能 JSON
[译][AI OpenAI-doc] v2 有什么新功能?Beta
2024年4月,我们宣布了一系列新功能和改进的助手API,并将我们的Beta版移至一个新的API版本,OpenAI-Beta: assistants=v2。了解更多详情,请查看我们的迁移指南。
|
4天前
|
存储 人工智能 API
[译][AI OpenAI-doc] 迁移指南 Beta
我们已经改变了助手 API 在 beta 的 v1 版本和 v2 版本之间工具和文件的工作方式。今天,通过 API,两个 beta 版本仍然可以访问,但我们建议尽快迁移到我们 API 的最新版本。我们将在 2024 年底之前废弃 beta 的 v1 版本。
[译][AI OpenAI-doc] 迁移指南 Beta
|
5天前
|
人工智能 API 开发工具
[译][AI OpenAI-doc] 函数调用 Beta
类似于聊天完成 API,助手 API 支持函数调用。函数调用允许您描述函数给助手 API,并让它智能地返回需要调用的函数及其参数。
|
8天前
|
XML 人工智能 JSON
[译][AI OpenAI-doc] 代码解释器 Beta
代码解释器允许助手在受限执行环境中编写和运行 Python 代码。该工具可以处理具有不同数据和格式的文件,并生成带有数据和图形图像的文件。
43 17
|
9天前
|
存储 人工智能 前端开发
[译][AI OpenAI-doc] 文件搜索 Beta
文件搜索通过从其模型外部获取的知识增强了助手的功能,例如专有产品信息或用户提供的文档。通过向量存储库,您可以管理文件的解析、分块、嵌入和存储,以进行关键字和语义搜索。确保向量存储库准备就绪,以确保所有数据可搜索,并利用到期策略管理成本。
|
10天前
|
存储 人工智能 数据可视化
[译][AI OpenAI-doc] 助手如何工作(Beta)
助手 API 旨在帮助开发人员构建功能强大的 AI 助手,能够执行各种任务。
[译][AI OpenAI-doc] 助手如何工作(Beta)
|
11天前
|
人工智能 JavaScript API
[译][AI OpenAI-doc] 助手 API Beta
助手 API 允许你在自己的应用程序中构建 AI 助手。助手具有指令,并可以利用模型、工具和文件来响应用户的查询。目前,助手 API 支持三种类型的工具:代码解释器、文件搜索和函数调用。
|
12天前
|
人工智能 JSON API
OpenAI GPT-4 Turbo发布:开创AI新时代
OpenAI GPT-4 Turbo发布:开创AI新时代
38 2