Voice Translation of Audio Files into Different Languages Using Gpt-4o
openai-cookbook/examples/voice_solutions/voice_translation_into_different_languages_using_GPT-4o.ipynb at main · openai/openai-cookbook · GitHub您是否曾经想将播客翻译成您的母语?翻译和配音音频内容可以使其更便于全球观众理解。借助GPT-4o的全新音频输入和音频输出模式,这一过程变得比以往更简单。
本指南将引导您使用OpenAI的GPT-4o音频模式API将英语音频文件翻译为印地语。
GPT-4o简化了音频内容的配音过程。以前,您需要将音频转换为文本,然后将文本翻译成目标语言,最后再将其转换回音频。现在,通过GPT-4o的语音对语音功能,您可以通过音频输入和输出一步完成此任务。
本《手册》中关于语言和书写脚本的术语说明。这些词通常可以互换使用,但考虑到任务的需求,理解两者的区别非常重要。
-
语言指的是口头或书面的交流系统。例如,印地语和马拉地语是不同的语言,但都使用天城文。同样,英语和法语是不同的语言,但都使用拉丁字母。
-
脚本指的是用来书写语言的一组字符或符号。例如,传统上使用西里尔字母书写的塞尔维亚语也可以用拉丁字母书写。
GPT-4o音频输入和音频输出模式使得用一个API调用将音频从一种语言配音到另一种语言变得更加容易。
-
使用GPT-4o将源音频文件转录为源语言脚本。如果您已经有源音频内容的转录文本,可以跳过此步骤。
-
将源语言的音频文件直接配音为目标语言。
-
使用BLEU或ROUGE获得翻译基准。
-
通过调整步骤1-3中的提示参数,解释并优化评分。
在开始之前,请确保您的OpenAI API密钥已配置为环境变量,并按以下代码单元安装了必要的软件包。
步骤1:使用GPT-4o将音频转录为源语言脚本
首先,我们创建一个函数,向OpenAI的GPT-4o API发送音频文件进行处理,使用chat completions API端点。
函数process_audio_with_gpt_4o
接收三个输入:
- 一个base64编码的音频文件(
base64_encoded_audio
),将发送给GPT-4o模型。 - 所需的输出模式(如文本或文本和音频)。
- 指示模型如何处理输入的系统提示。
该函数向OpenAI的chat/completions端点发送API请求。请求头包含用于授权的API密钥。数据负载包含模型类型(gpt-4o-audio-preview)、所选输出模式以及音频细节,如语音类型和格式(在本例中为“alloy”和“wav”)。它还包括系统提示和作为“用户”消息一部分的base64编码音频文件。如果API请求成功(HTTP状态200),响应将以JSON格式返回。如果发生错误(非200状态),则打印错误代码和消息。
此函数通过OpenAI的GPT-4o API实现音频处理,支持配音、转录或翻译等任务,具体取决于提供的输入内容。
# Make sure requests package is installed
import requests
import os
import json
# Load the API key from the environment variable
api_key = os.getenv("OPENAI_API_KEY")
def process_audio_with_gpt_4o(base64_encoded_audio, output_modalities, system_prompt):
# Chat Completions API end point
url = "https://api.openai.com/v1/chat/completions"
# Set the headers
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}"
}
# Construct the request data
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` 函数,我们将首先获取源音频的英文转录。如果已经有源语言的转录文本,可以跳过这一步。
在此步骤中,我们将:
1. 读取 WAV 文件并将其转换为 base64 编码。
2. 将输出模式设置为 `["text"]`,因为我们只需要文本转录。
3. 提供系统提示,指示模型专注于转录语音,忽略诸如掌声等背景噪音。
4. 调用 `process_audio_with_gpt_4o` 函数处理音频并返回转录文本。
import base64
audio_wav_path = "./sounds/keynote_recap.wav"
# Read the WAV file and encode it to 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 = "The user will provide an audio file in English. Transcribe the audio to English text, word for word. Only provide the language transcription, do not include background noises such as applause. "
response_json = process_audio_with_gpt_4o(english_audio_base64, modalities, prompt)
english_transcript = response_json['choices'][0]['message']['content']
print(english_transcript)
这个英文转录将作为我们的基准真值,用于在第三步中评估音频的印地语配音。
第二步:使用 GPT-4o 将音频从源语言配音成目标语言
通过 GPT-4o,我们可以直接将音频文件从英语配音成印地语,并通过一次 API 调用获取该音频的印地语转录。为此,我们将输出模式设置为 ["text", "audio"]
。
需要保持原始语言的术语表: “Turbo, OpenAI, token, GPT, Dall-e, Python”
模式:["text", "audio"]
提示:用户将提供一个英文音频文件。逐字配音整个音频至印地语。保留某些无法直接翻译成印地语的英文词汇,如 ${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']
转录文本是印地语和英语的组合,使用各自的书写系统:印地语采用天城文,英语采用拉丁文。这种方式确保了更自然的发音,并准确表达两种语言的词汇。我们将使用 pydub
模块播放音频,如下代码所示:
# 播放音频
audio_data_bytes = base64.b64decode(hindi_audio_data_base64)
audio_segment = AudioSegment.from_file(BytesIO(audio_data_bytes), format="wav")
play(audio_segment)
第三步. 获取翻译基准(例如,BLEU或ROUGE)
我们可以通过评估指标(如BLEU和ROUGE)将翻译文本与参考翻译进行比较,从而评估其翻译质量。
-
BLEU(Bilingual Evaluation Understudy):用于测量候选翻译与参考翻译之间n-gram的重叠程度。得分范围从0到100,分数越高表示质量越好。
-
ROUGE(Recall-Oriented Understudy for Gisting Evaluation):通常用于摘要评估。测量候选文本和参考文本之间的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开发者日。今天我们发布了一个新模型,GPT-4 Turbo。GPT-4 Turbo现在支持128,000个token的上下文。我们推出了一个新功能,称为JSON模式,模型将通过JSON进行响应。现在您可以同时调用多个函数,并且它通常会更好地遵循指令。您希望该模型访问外部知识数据库或文档,将知识带入您正在构建的内容中。GPT-4 Turbo拥有截至2023年4月的世界知识,我们将继续对其进行改进。
DALL·E 3、具有视觉功能的GPT-4 Turbo以及新的文本转语音模型今天将在API中提供。今天,我们还启动了一个新计划,称为自定义模型。自定义模型将密切合作,专门为您和您的使用场景打造出色的模型。利用我们的工具,我们将现有所有GPT-4客户的速率限制翻倍为每分钟的token。您可以在API账户设置中直接请求速率限制和配额更改。
相比GPT-4,GPT-4 Turbo的价格更便宜,从今天起完成token的费用降低为2倍。我们正在推出GPTs。GPTs是为特定用途定制的ChatGPT版本,由于它们结合了广泛知识和行动能力的指令,它们可以更好地帮助您。它们在许多社交任务中表现更佳。我们知道许多想要构建GPT的人不会编程。我们设计了只需一行代码即可编程GPT。
您可以创建私人GPT。您可以通过链接公开发布您的创作,供任何人使用;或者,如果您有ChatGPT Enterprise,您可以仅为您的公司构建GPT。我们将推出一个GPT商店。所以,这就是GPTs,我们期待看到您构建的内容。我们正在将自定义功能引入API。辅助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分数:35.27656890256424
ROUGE-1分数:0.8148148148148149
ROUGE-L分数:0.6934156378600822
总结
总而言之,本手册提供了一个清晰的逐步过程,用于翻译和配音音频,使内容更易于全球受众访问。利用GPT-4o的音频输入和输出功能,将音频文件从一种语言翻译并配音到另一种语言变得更简单。我们的示例集中在将音频文件从英语翻译成印地语。
该过程可以分为以下步骤:
-
转录:使用GPT-4o的文本模式,将源语言音频转录成源语言的书写文本。
-
配音:使用GPT-4o的音频模式,将音频文件直接配音成目标语言。
-
翻译质量基准测试:通过与参考文本比较,使用BLEU或ROUGE分数来评估翻译的准确性。
-
优化过程:如有必要,调整提示参数,以改进转录和配音结果。
本指南还强调了“语言”和“书写系统”之间的关键区别——这两个术语经常被混淆,但在翻译工作中至关重要。语言是指一种口头或书面的交流系统,而书写系统则是用于书写语言的一组字符。理解这一区别对于高效的翻译和配音非常重要。
通过遵循本手册中的技术,您可以将多种内容从一种语言翻译并配音成多种语言——从播客和培训视频到完整的电影。此方法适用于娱乐、教育、商业和全球交流等多个行业,使创作者能够扩大其影响力,触及多种语言的受众群体。
原文地址:https://blog.csdn.net/Niki2020_2017/article/details/143498758
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!