十二、OpenAI语音转文本

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无法实现的方式进行指示和引导。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/16166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Typescript】类、类实例、构造函数、类是否也是构造函数....

务必注意&#xff1a;Typescript中类也是一个构造函数【可以new】但是有时候针对不确定的类型需要as转换一下 才能new class Test { }class Test01 extends Test {a 1 }function ok<T extends typeof Test>(asyncClass: T): T {/*** 1. 这里的T是一个【类的类型】*/ret…

Java面试题:请分析Java中的并发工具类,如ConcurrentHashMap和CopyOnWriteArrayList的内部实现原理

Java中的并发工具类是java.util.concurrent包提供的一些用于多线程环境下的集合类&#xff0c;它们通过不同的机制来保证线程安全。以下是ConcurrentHashMap和CopyOnWriteArrayList的内部实现原理分析&#xff1a; ConcurrentHashMap ConcurrentHashMap是一个线程安全的哈希表…

React常见面试题及参考答案(3万字长文)

目录 描述React中的组件生命周期 解释React中的JSX是什么 什么是React中的虚拟DOM?

辐射度技术在AI去衣中的魅力与科学

引言&#xff1a; 在当今的数字化时代&#xff0c;人工智能正逐渐渗透到我们生活的方方面面。其中&#xff0c;AI去衣技术作为一项颇具争议但又不失其科技创新的应用&#xff0c;正引起越来越多的关注和讨论。而在实现高质量图像渲染的过程中&#xff0c;辐射度技术凭借其卓越的…

CAD二次开发(5)-用户交互仿系统命令

1. 工具类&#xff1a;PromptTool.cs using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Geometry; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace _04用户交互 {public static…

封装 UpdateManager 实现启动微信小程序时自动强制更新

背景 微信小程序发布新版本后&#xff0c;微信有自己的更新策略&#xff1a;异步更新、同步更新。异步更新会在用户下次冷启动时才会加载新版本&#xff0c;本次打开的仍然是旧版本。为了保证更多用户能够访问的新版本&#xff0c;本文利用微信wx.getUpdateManager()暴露的Upd…

【综合分析题】同事共事

题目&#xff1a;在单位&#xff0c;甲同事自私&#xff0c;乙同事自卑&#xff0c;丙同事自负&#xff0c;你更愿意和哪个同事共事&#xff1f; 逐字稿&#xff1a; 各位考官好&#xff0c;在我看来&#xff0c;在单位和同事共事&#xff0c;其实是我们实践11大于2&#xff0…

leetcode LCR 076. 数组中的第 K 个最大元素

. - 力扣&#xff08;LeetCode&#xff09; 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k 2 输出: 5示例…

GEE26:批量导出逐日、逐月、逐季节和逐年的遥感影像(以NDVI为例)

影像导出 写在前面1.逐日数据导出2.逐月数据导出3.季节数据导出4.逐年数据导出 写在前面 最近很多小伙伴们私信我&#xff0c;问我如何高效导出遥感数据&#xff0c;从逐日到逐季度&#xff0c;我都有一套自己的方法&#xff0c;今天就来和大家分享一下&#xff01;   &#…

人工智能原理第十四章课后习题答案仅供参考

14.1 叙述演绎推理、归纳推理、以及溯因推理的基本概念、内在联系。并讨论为什么说这三者是主要的推理模式 演绎推理是根据已知的一般性、真实性的前提,通过推理得出个别结论的推理方法,简而言之是从一般到特殊的推理。 归纳推理是以个别实例为前提,推导出一般性结论的推理形…

缓存归纳总结1

1. 何时需要考虑缓存一致性 缓存一致性主要在以下情况需要特别考虑&#xff1a; 读多写少场景&#xff1a;当数据读取操作远多于写入时&#xff0c;为了提高系统性能&#xff0c;通常会将数据缓存起来。但一旦数据源&#xff08;如数据库&#xff09;中的数据发生变化&#xf…

基于YOLOv8+PySide6的快递分类管理系统

1、背景 随着电子商务的飞速发展&#xff0c;快递行业所承受的数据处理需求愈发庞大。在这样的背景下&#xff0c;传统的手工分类方法已经显得力不从心&#xff0c;因其不仅耗时耗力&#xff0c;还存在着易出错的隐患。因此&#xff0c;迫切需要研发出一套高效而准确的自动化系…

多线程案例(线程池)

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f649; 内容推荐:<计算坤是如何工作的>&#x1f649; &#x1f439;今日诗词:百年兴衰皆由人, 不由天&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&…

路径规划搜路算法有哪些?

路径规划搜索算法是帮助移动机器人或自动化系统在环境中从起点导航至终点的计算方法。以下是一些常见的路径规划搜索算法&#xff1a; Dijkstra算法&#xff1a;一种经典的最短路径搜索算法&#xff0c;适用于没有负权边的图。 A*算法&#xff1a;一种启发式搜索算法&#xff…

go 微服务框架kratos使用中间件的方法

一、中间件的概念 在go语言中&#xff0c;中间件是一种用于处理http请求的开发模式&#xff0c;允许开发人员在请求到达处理程序之前或之后执行特定的操作&#xff0c;如日志记录、身份验证、错误处理等。 中间件通常是一个函数&#xff0c;它接收一个 http.Handler 作为参数…

Ardupilot开源代码之Rover上路 - 后续4

Ardupilot开源代码之Rover上路 - 后续4 1. 源由2. 深度配置2.1 设置倒车按钮2.1.1 前进2.1.2 倒退 2.2 MP无法连接ESP82662.3 最小油门校准 3. 遗留&后续3.1 高精度编码器问题3.2 OV5647 720P30FPS 马赛克问题 4. 参考资料 1. 源由 开源项目最主要的问题就是所有配置是开放…

Python模块方法总结

一 模块简介 模块&#xff08;module&#xff09;和C语言中的头文件以及Java中的包很类似&#xff0c;在Python中用关键字import来引入某个模块&#xff0c;比如要引用模块math&#xff0c;就可以在文件最开始的地方用import math来引入。 import math#这样会报错 print sqrt…

信息安全从运维到运营:CISAW安全运维方向

随着数据中心规模扩大&#xff0c;安全运维内生需要逐渐向安全运营进化&#xff0c;统一安全理念&#xff0c;提高服务意识&#xff0c;提升专业能力。安全运营是对安全运维的继承式发展&#xff0c;而不是颠覆&#xff0c;意味着以业务发展为基础&#xff0c;以事件核查为线索…

【gradle】MAC下用gradle构建部署springboot项目

MAC下用gradle构建部署springboot项目 前言下载安装配置gradle下载安装下载可能出现的问题 &#xff08;zsh: command not found: brew&#xff09; 配置环境变量配置国内下载源全局配置单个项目配置 通过idea构建项目构建后的项目结构 小结延伸 前言 好久以前就听说gradle了&…