语音文件翻译成不同语言(使用 GPT-4o)
您是否曾想过将播客翻译成您的母语?将音频内容翻译和配音可以使其更容易被全球受众所接受。借助 GPT-4o 新的音频输入和输出模式,此过程比以往任何时候都更加轻松。
本指南将引导您使用 OpenAI 的 GPT-4o 音频模式 API 将英语音频文件翻译成印地语。
GPT-4o 简化了音频内容的配音过程。以前,您必须先将音频转换为文本,然后将文本翻译成目标语言,最后再将其转换回音频。现在,借助 GPT-4o 的语音到语音功能,您只需一步即可完成此操作,即可实现音频输入和输出。
关于此 Cookbook 中使用的“语言”和书面“脚本”的语义说明。这些词通常可以互换使用,但理解其区别对于手头的任务至关重要。
-
语言 指的是口头或书面交流系统。例如,印地语和马拉地语是不同的语言,但都使用天城文脚本。同样,英语和法语是不同的语言,但都使用拉丁字母书写。
-
脚本 指的是用于书写语言的字符或符号集。例如,塞尔维亚语传统上用西里尔字母书写,但也用拉丁字母书写。
GPT-4o 音频输入和输出模式使通过一次 API 调用即可轻松地将音频从一种语言配音到另一种语言。
1. 转录 使用 GPT-4o 将源音频文件转录为源语言脚本。如果您已经拥有源音频内容的转录,则可以跳过此步骤。
2. 配音 直接将音频文件从源语言配音到目标语言。
3. 获取翻译基准 使用 BLEU 或 ROUGE。
4. 解释和改进 根据需要调整步骤 1-3 中的提示参数。
在我们开始之前,请确保您已将 OpenAI API 密钥配置为环境变量,并安装了必要的软件包,如以下代码单元中所述。
步骤 1:使用 GPT-4o 将音频转录为源语言脚本
让我们开始创建一个函数,该函数将音频文件发送到 OpenAI 的 GPT-4o API 进行处理,使用聊天补全 API 端点。
函数 process_audio_with_gpt_4o
接受三个输入:
- 一个 base64 编码的音频文件(base64_encoded_audio),将发送到 GPT-4o 模型。
- 所需的输出模式(例如,文本,或文本和音频)。
- 一个系统提示,指示模型如何处理输入。
该函数向 OpenAI 的 chat/completions 端点发送 API 请求。请求标头包括用于授权的 API 密钥。数据负载包含模型类型(gpt-4o-audio-preview
)、选定的输出模式以及音频详细信息,例如语音类型和格式(在本例中为“alloy”和“wav”)。它还包括系统提示和 base64 编码的音频文件,作为“user”消息的一部分。如果 API 请求成功(HTTP 状态码 200),则响应将作为 JSON 返回。如果发生错误(非 200 状态码),则会打印错误代码和消息。
此函数支持通过 OpenAI 的 GPT-4o API 进行音频处理,允许根据提供的输入执行配音、转录或翻译等任务。
# 确保已安装 requests 包
import requests
import os
import json
# 从环境变量加载 API 密钥
api_key = os.getenv("OPENAI_API_KEY")
def process_audio_with_gpt_4o(base64_encoded_audio, output_modalities, system_prompt):
# Chat Completions API 端点
url = "https://api.openai.com/v1/chat/completions"
# 设置标头
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}"
}
# 构建请求数据
data = {
"model": "gpt-4o-audio-preview",
"modalities": output_modalities,
"audio": {
"voice": "alloy",
"format": "wav"
},
"messages": [
{
"role": "system",
"content": system_prompt
},
{
"role": "user",
"content": [
{
"type": "input_audio",
"input_audio": {
"data": base64_encoded_audio,
"format": "wav"
}
}
]
}
]
}
request_response = requests.post(url, headers=headers, data=json.dumps(data))
if request_response.status_code == 200:
return request_response.json()
else:
print(f"Error {request_response.status_code}: {request_response.text}")
return
使用 process_audio_with_gpt_4o
函数,我们首先获取源音频的英语转录。如果您已经拥有源语言的转录,则可以跳过此步骤。
在此步骤中,我们:
- 读取 WAV 文件并将其转换为 base64 编码。
- 将输出模式设置为 ["text"],因为我们只需要文本转录。
- 提供一个系统提示,指示模型专注于转录语音并忽略背景噪音(如掌声)。
- 调用
process_audio_with_gpt_4o
函数来处理音频并返回转录。
import base64
audio_wav_path = "./sounds/keynote_recap.wav"
# 读取 WAV 文件并将其编码为 base64
with open(audio_wav_path, "rb") as audio_file:
audio_bytes = audio_file.read()
english_audio_base64 = base64.b64encode(audio_bytes).decode('utf-8')
modalities = ["text"]
prompt = "用户将提供一个英语音频文件。请逐字将音频转录为英语文本。仅提供语言转录,不要包含背景噪音,如掌声。"
response_json = process_audio_with_gpt_4o(english_audio_base64, modalities, prompt)
english_transcript = response_json['choices'][0]['message']['content']
print(english_transcript)
您好,欢迎参加我们有史以来第一次 OpenAI DevDay。今天,我们将推出一款新模型,GPT-4 Turbo。GPT-4 Turbo 支持高达 128,000 个 token 的上下文。我们有一个名为 JSON 模式的新功能,可确保模型以有效的 JSON 进行响应。您现在可以一次调用多个函数。并且它在遵循指令方面会做得更好。您希望这些模型能够访问有关世界的更好知识,我们也是。因此,我们在平台中推出了检索功能。您可以将外部文档或数据库中的知识引入您正在构建的任何内容中。GPT-4 Turbo 拥有截至 2023 年 4 月的世界知识,并且我们将随着时间的推移继续改进它。DALL·E 3、支持 Vision 的 GPT-4 Turbo 以及新的文本到语音模型今天都将进入 API。今天,我们正在启动一个名为 Custom Models 的新计划。通过 Custom Models,我们的研究人员将与一家公司密切合作,帮助他们打造一款出色的定制模型,特别是为他们及其用例而设计,并使用我们的工具。更高的速率限制。我们将为所有现有的 GPT-4 客户将每分钟的 token 数翻倍,以便更容易地做更多事情,并且您将能够直接在您的 API 帐户设置中请求更改费率限制和配额。而且 GPT-4 Turbo 比 GPT-4 便宜得多,从今天开始,提示 token 便宜 3 倍,完成 token 便宜 2 倍。我们很高兴推出 GPTs。GPTs 是针对特定目的定制的 ChatGPT 版本。并且因为它们结合了指令、扩展知识和操作,所以它们可以为您提供更多帮助。它们可以在许多上下文中更好地工作,并且可以为您提供更好的控制。我们知道许多想要构建 GPT 的人不知道如何编码。我们已经使其能够仅通过对话来编程 GPT。您可以创建私有 GPT。您可以公开分享您的创作,通过链接供任何人使用。或者,如果您使用的是 ChatGPT Enterprise,您可以仅为您的公司创建 GPT。并且在本月晚些时候,我们将推出 GPT Store。所以这些就是 GPTs,我们迫不及待地想看看您会构建什么。我们正在将相同的概念带入 API。Assistant API 包括持久线程,因此它们不必弄清楚如何处理长对话历史记录,内置检索、代码解释器、沙盒环境中的工作 Python 解释器,当然还有改进的函数调用。随着智能集成到每个地方,我们将按需拥有超级能力。我们很高兴看到你们所有人将用这项技术做什么,并发现我们都将共同构建的新未来。我们希望当您明年回来时,今天我们推出的东西相对于我们现在正在为您忙碌创建的东西来说,看起来将非常普通。感谢您所做的一切。感谢您今天来到这里。
此英语转录将作为我们在第 3 步中对音频进行印地语配音的基准。
步骤 2. 使用 GPT-4o 将音频从源语言配音到目标语言
借助 GPT-4o,我们可以直接将音频文件从英语配音到印地语,并在一次 API 调用中获取音频的印地语转录。为此,我们将输出模式设置为 ["text", "audio"]
glossary_of_terms_to_keep_in_original_language = "Turbo, OpenAI, token, GPT, Dall-e, Python"
modalities = ["text", "audio"]
prompt = f"用户将提供一个英语音频文件。请将完整的音频逐字配音成印地语。请保留某些不存在直接印地语翻译的词语,例如 ${glossary_of_terms_to_keep_in_original_language}。"
response_json = process_audio_with_gpt_4o(english_audio_base64, modalities, prompt)
message = response_json['choices'][0]['message']
在下面的代码片段中,我们将从 GPT-4o 响应中检索印地语转录和配音音频。以前,这是一个多步骤过程,涉及多个 API 调用,首先是转录,然后是翻译,最后是生成目标语言的音频。现在,借助 GPT-4o,我们可以在一次 API 调用中完成此操作。
# 确保已安装 pydub 包
from pydub import AudioSegment
from pydub.playback import play
from io import BytesIO
# 从模型获取转录。这会因您使用的模式而异。
hindi_transcript = message['audio']['transcript']
print(hindi_transcript)
# 从响应中获取音频内容
hindi_audio_data_base64 = message['audio']['data']
欢迎参加我们有史以来第一次 OpenAI DevDay。今天我们正在推出一款新模型,GPT-4 Turbo。GPT-4 Turbo 现在支持 128,000 个 token 的上下文。我们有一个名为 JSON 模式的新功能,它将确保模型通过 JSON 进行响应。现在您可以同时调用多个函数,并且它通常会更好地遵循指令。您希望此模型能够访问外部知识数据库或文档,以将知识引入您正在构建的内容中。GPT-4 Turbo 拥有截至 2023 年 4 月的世界知识,我们将随着时间的推移继续对其进行改进。
DALL·E 3、支持 Vision 的 GPT-4 Turbo 以及新的文本到语音模型今天都将在 API 中提供。今天,我们正在启动一个名为 custom models 的新计划。Custom models 将密切合作,为您和您的用例专门打造出色的 custom models。利用我们的工具,我们将现有 GPT-4 客户的每分钟 token 数翻倍。您将能够直接在您的 API 帐户设置中请求费率限制和配额的更改。
而且 GPT-4 Turbo 比 GPT-4 便宜得多,从今天开始,completion tokens 的价格是 2 倍。我们正在推出 GPTs。GPTs 是 ChatGPT 的定制版本,用于特定目的,并且由于它们将指令与广泛的知识和操作功能相结合,因此它们可以为您提供更多帮助。它们可以在许多社交任务中表现得更好。我们知道许多想要构建 GPT 的人不知道如何编码。我们已经构建了它,以便您只需一行代码即可编程 GPT。
您可以创建私有 GPT。您可以公开分享您的创作,通过链接供任何人使用,或者如果您有 ChatGPT Enterprise,您可以仅为您自己的公司构建 GPT。我们将推出一个 GPT 商店。所以这就是 GPTs,我们很期待看到您将构建什么。我们将定制化引入 API。Assistant API 包括持久线程,因此它不必弄清楚如何处理来自长对话的历史记录。内置的检索器、代码解释器、沙盒环境中的工作 Python 解释器,当然还有改进的函数调用。
随着智能集成到每个地方,我们将按需拥有超级能力。我们很期待看到您将能够用这项技术构建什么,并探索我们共同创造的这个新未来。我们希望您明年回来,因为我们现在为您构建的东西与那个时候相比,今天看起来将非常朴素。感谢您的所有方法。感谢您今天来到这里。
转录的文本是印地语和英语的组合,以各自的脚本表示:印地语使用天城文,英语使用拉丁字母。这种方法可确保语音听起来更自然,并具有两种语言单词的正确发音。我们将使用 pydub
模块来播放音频,如下面的代码所示。
# 播放音频
audio_data_bytes = base64.b64decode(hindi_audio_data_base64)
audio_segment = AudioSegment.from_file(BytesIO(audio_data_bytes), format="wav")
play(audio_segment)
步骤 3. 获取翻译基准(例如,BLEU 或 ROUGE)
我们可以通过将翻译后的文本与参考翻译进行比较来评估翻译质量,使用 BLEU 和 ROUGE 等评估指标。
BLEU(双语评估替补):衡量候选翻译和参考翻译之间 n-gram 的重叠。分数范围从 0 到 100,分数越高表示质量越好。
ROUGE(面向召回的 the Gisting 评估替补):通常用于摘要评估。衡量候选文本和参考文本之间 n-gram 和最长公共子序列的重叠。
理想情况下,需要参考翻译(人工翻译版本)才能进行准确评估。但是,开发此类评估可能具有挑战性,因为它需要精通两种语言的双语人士投入时间和精力。
另一种方法是将目标语言的输出音频文件转录回原始语言,以使用 GPT-4o 评估翻译质量。
# 将模型生成的音频输出文件翻译回英语,并与参考文本进行比较
modalities = ["text"]
prompt = "用户将提供一个印地语音频文件。请逐字将音频转录为英语文本。仅提供语言转录,不要包含背景噪音,如掌声。"
response_json = process_audio_with_gpt_4o(hindi_audio_data_base64, modalities, prompt)
re_translated_english_text = response_json['choices'][0]['message']['content']
print(re_translated_english_text)
您好,欢迎参加我们有史以来第一次 OpenAI DevDay。今天我们正在推出一款新模型,GPT-4 Turbo。GPT-4 Turbo 现在支持 128,000 个 token 的上下文。我们有一个名为 JSON 模式的新功能,它将确保模型通过 JSON 进行响应。现在您可以同时调用多个函数,并且它通常会更好地遵循指令。您希望此模型能够访问外部知识数据库或文档,以将知识引入您正在构建的内容中。GPT-4 Turbo 拥有截至 2023 年 4 月的世界知识,我们将随着时间的推移继续对其进行改进。
DALL·E 3、支持 Vision 的 GPT-4 Turbo 以及新的文本到语音模型今天都将在 API 中提供。今天,我们正在启动一个名为 custom models 的新计划。Custom models 将密切合作,为您和您的用例专门打造出色的 custom models。利用我们的工具,我们将现有 GPT-4 客户的每分钟 token 数翻倍。您将能够直接在您的 API 帐户设置中请求费率限制和配额的更改。
而且 GPT-4 Turbo 比 GPT-4 便宜得多,从今天开始,completion tokens 的价格是 2 倍。我们正在推出 GPTs。GPTs 是 ChatGPT 的定制版本,用于特定目的,并且由于它们将指令与广泛的知识和操作功能相结合,因此它们可以为您提供更多帮助。它们可以在许多社交任务中表现得更好。我们知道许多想要构建 GPT 的人不知道如何编码。我们已经构建了它,以便您只需一行代码即可编程 GPT。
您可以创建私有 GPT。您可以公开分享您的创作,通过链接供任何人使用,或者如果您有 ChatGPT Enterprise,您可以仅为您自己的公司构建 GPT。我们将推出一个 GPT 商店。所以这就是 GPTs,我们很期待看到您将构建什么。我们将定制化引入 API。Assistant API 包括持久线程,因此它不必弄清楚如何处理来自长对话的历史记录。内置的检索器、代码解释器、沙盒环境中的工作 Python 解释器,当然还有改进的函数调用。
随着智能集成到每个地方,我们将按需拥有超级能力。我们很期待看到您将能够用这项技术构建什么,并探索我们共同创造的这个新未来。我们希望您明年回来,因为我们现在为您构建的东西与那个时候相比,今天看起来将非常朴素。感谢您的所有方法。感谢您今天来到这里。
将文本转录回印地语音频的英语语言脚本后,我们可以通过将其与原始英语转录进行比较来运行评估指标。
# 确保已安装 sacrebleu 包
import sacrebleu
# 确保已安装 rouge-score 包
from rouge_score import rouge_scorer
# 我们将使用原始英语转录作为参考文本
reference_text = english_transcript
candidate_text = re_translated_english_text
# BLEU 分数评估
bleu = sacrebleu.corpus_bleu([candidate_text], [[reference_text]])
print(f"BLEU Score: {bleu.score}")
# ROUGE 分数评估
scorer = rouge_scorer.RougeScorer(['rouge1', 'rougeL'], use_stemmer=True)
scores = scorer.score(reference_text, candidate_text)
print(f"ROUGE-1 Score: {scores['rouge1'].fmeasure}")
print(f"ROUGE-L Score: {scores['rougeL'].fmeasure}")
BLEU Score: 35.27656890256424 ROUGE-1 Score: 0.8148148148148149 ROUGE-L Score: 0.6934156378600822
步骤 4. 根据需要调整步骤 1-3 中的提示参数来解释和改进分数
在此示例中,BLEU 和 ROUGE 分数均表明语音翻译的质量介于“非常好”和“优秀”之间。
解释 BLEU 分数: 虽然没有普遍接受的量表,但一些解释表明:
0 到 10:翻译质量差;存在重大错误且不流畅。
10 到 20:质量低;部分可理解但错误很多。
20 到 30:质量一般;传达了基本含义,但缺乏精确性和流畅性。
30 到 40:质量好;可理解且相对准确,但有小错误。
40 到 50:质量非常好;准确流畅,错误很少。
50 及以上:质量优秀;与人工翻译非常接近。
解释 ROUGE 分数: “好”ROUGE 分数的解释可能因任务、数据集和领域而异。以下指南表明了一个好的结果:
ROUGE-1(unigram 重叠):对于抽象摘要任务,分数在 0.5 到 0.6 之间通常被认为是不错的。
ROUGE-L(最长公共子序列):分数在 0.4 到 0.5 左右通常被认为是不错的,这反映了模型捕获参考文本结构的能力。
如果您的翻译分数不令人满意,请考虑以下问题:
1. 源音频是否准确转录?
如果转录包含错误,例如混淆发音相似的单词,您可以在步骤 1 的系统提示中提供此类术语的词汇表。这有助于模型避免误解并确保特定术语的准确转录。
2. 源音频是否没有语法错误?
如果源音频包含语法错误,请考虑使用 GPT 模型进行后处理步骤,通过删除语法错误和添加适当的标点符号来优化转录。之后,您可以使用修正后的转录,而不是使用 GPT-4o 的音频输入和输出模式,而是使用 GPT-4o 的文本输入和音频输出模式来生成目标语言的音频。
3. 是否有一些词语保留在原始语言中有意义?
某些术语或概念在目标语言中可能没有合适的翻译,或者以其原始形式更容易理解。请重新访问您的 glossary_of_terms_to_keep_in_original_language
并包含任何此类术语,以保持清晰和上下文。
结论
总之,本食谱提供了一个清晰的分步流程,用于翻译和配音音频,使内容更容易被全球受众所接受。通过利用 GPT-4o 的音频输入和输出功能,将音频文件从一种语言翻译和配音到另一种语言变得更加简单。我们的示例侧重于将音频文件从英语翻译成印地语。
该过程可细分为以下步骤:
1. 转录: 使用 GPT-4o 文本模式获取源语言音频到源语言脚本的转录。
2. 配音: 使用 GPT-4o 的音频模式将音频文件直接配音到目标语言。
3. 基准翻译质量: 使用 BLEU 或 ROUGE 分数与参考文本进行比较来评估翻译的准确性。
4. 优化流程: 如有必要,调整提示参数以改进转录和配音结果。
本指南还强调了“语言”和“脚本”之间的关键区别——这两个术语经常被混淆,但在翻译工作中至关重要。语言指的是交流系统,无论是口头还是书面,而脚本是书写语言所用的一组字符。掌握这种区别对于有效的翻译和配音至关重要。
通过遵循本食谱中的技术,您可以将各种内容——从播客和培训视频到完整电影——翻译和配音成多种语言。这种方法适用于娱乐、教育、商业和全球通信等行业,使创作者能够扩大其覆盖范围,触及不同的语言受众。