Translating with OpenAI

利用Python使用大型语言模型(LLMs)进行大规模转译技能

在一个日益联系紧密的世界中,公司通常需要用多种语言进行沟通。例如,公司的技能分类法——员工或求职者所具备的技能列表——可能需要提供多种语言版本,从英语到西班牙语、法语、中文等等。但是,手动翻译这些技能名称是非常耗时的,尤其是当涉及到成千上万条条目时。

输入大型语言模型(LLMs),如OpenAI的GPT-3.5,可以通过快速准确地翻译这些术语来提供帮助。在本文中,我将解释我与另一位ML专家(Joshua Mathias)如何使用Python和LLMs构建了一个高效的翻译流水线,重点放在自动化、错误处理、扩展和确保翻译数据被正确存储上。

无论您是初学者还是没有技术背景的人,阅读完本文后,您将对如何使用人工智能实现技能翻译自动化有深入的理解,以及在处理大型数据集时高效处理这些任务的重要性。

目的:我们为什么需要翻译技能?

想象一家总部设在美国的公司扩展到几个非英语国家,比如法国、巴西和中国。这家公司可能在其数据库中有一些技能列表(例如“软件开发”、“项目管理”),需要提供多种语言版本。虽然雇佣翻译人员逐个手动翻译每种技能可能是可行的,但这样做会很慢、昂贵且容易出错。

使用案例: 当数据科学家上线平台时,他们的当前技能和成长目标被捕获,使系统能够识别他们已经拥有的技能和需要发展的技能,比如Python。然后,这些信息被用来推荐来自平台内容数据库的个性化内容,确保材料以用户偏爱的语言呈现。通过根据他们特定的技能和职业期望量身定制学习资源,该平台帮助用户更有效地提升技能,助力于他们在职业中持续成长,并帮助他们在职业上取得进步。

通过使用类似OpenAI的GPT-3.5这样的LLM,我们可以自动化这项任务。人工智能可以快速翻译大量技能,确保整个数据集的准确性和一致性。这不仅节省时间,还可以降低成本,避免人为错误。

过程:我们如何翻译这些技能?

我们设计了一个名为SkillTranslatorProc类的系统,它可以使用像GPT-3.5这样的LLM自动将英语技能翻译成任何其他语言。 这个过程包括三个关键步骤:

  1. 批量处理:系统不会一次性翻译成千上万个术语,而是将数据集分成较小的批次进行处理,以提高性能。
  2. 错误处理和重试:系统会预料到可能出现的问题,比如超过API的速率限制(即,短时间内发出过多的请求),并在短暂延迟后重新尝试翻译。
  3. 高效存储:翻译被保存在结构化格式(DataFrame)中,这样我们可以准确知道哪个技能被翻译成了哪种语言。

让我们更详细地分解这些。

步骤1:批处理以实现高效翻译

一次翻译成千上万的条目可能会使人工智能模型和您的系统不堪重负。相反,我们将数据集分成每次翻译20个左右的技能小批次。这样可以使翻译更加高效,而不会导致错误或超时。

以下是我们如何做到这一点的片段:translations = self.translate_skills(skills, language)

batches = [df[i:i+batch_size] for i in range(0, len(df), batch_size)]  # Break list into batches
for batch in batches:
skills = batch['label'].dropna().tolist()
batch_translations = self.translate_skills(skills, language)

这个简单的循环将技能列表拆分成更小的组,使得每批技能可以发送到AI模型进行翻译。

步骤2:翻译提示

要翻译一项技能,我们向人工智能模型发送特定的提示。将提示视为您提供给模型的一组指示,告诉它准确要做什么。在这种情况下,我们正在指示模型将技能从一种语言(例如英语)翻译成另一种语言(例如西班牙语),并以特定格式提供结果。

这是提示的一个例子:

prompt = f"""
Please translate the skills below from English to {target_lang}. Prefix as English and suffix as {target_lang} separated by "->".
For example: Staff Development -> Desarrollo del Personal.
Use English title capitalization. Example:
Staff Development -> Desarrollo del Personal
Translate the following skills:
"""

让我们来分解一下:

  • 我们告诉AI模型将技能从英语翻译为目标语言,比如西班牙语。
  • English

    ->

    英文

  • 提供的示例(员工发展 -> 个人发展)展示了我们想要的模型。

在提示后,我们列出需要翻译的技能。AI模型处理此并返回翻译后的文本。

步骤3: 处理运行时错误和API限制

在使用像GPT-3.5这样的AI模型时,我们需要注意速率限制 - 某一时期内模型可以处理的请求数量。 如果超过此限制,系统可能会失败。为了避免这些问题,我们建立了错误处理逻辑,如果请求失败,则重试请求,并且在重试之间增加等待时间。

这是它的工作原理:

retry_count = 0
successful = False
while not successful and retry_count < 3:
try:
batch_translations = self.translate_skills(skills, language)
successful = True
except openai.error.APIError as e:
if e.status == 429: # If rate limit is hit
retry_count += 1
wait_time = 60 * retry_count # Wait longer for each retry
time.sleep(wait_time)
else:
raise e # Other errors, we don't retry

如果系统达到API的速率限制,它会等待(从60秒开始,每次重试增加一段时间)然后再次尝试。这可以确保过程不会过早失败,并可以随时间处理大规模的翻译请求。

第四步:保存翻译以确保准确性。

在这个过程中最重要的一步是将翻译的技能保存在正确的位置。模型提供翻译后,我们会使用DataFrame(Python中使用的类似表格的结构)以结构化格式存储它们。

这就是我们如何确保每个翻译准确保存的方式:

for lang_code, lang_translations in self.new_translations.items():
for label, translation in lang_translations.items():
translations_df.loc[translations_df['label'] == label, lang_code] = translation

此片段确保翻译被放置在DataFrame的正确行中,将原始的英语技能与适当语言栏中的翻译对应起来。通过首先将翻译存储在字典中,然后将其保存到DataFrame中,我们可以确保没有数据丢失或不匹配。

观察

  • 批量处理以提高效率: 将翻译分成批次确保进程顺利运行,不会过载系统或人工智能模型。
  • 健壮的错误处理:重试机制允许系统从临时问题中恢复,例如达到API的速率限制,而不会导致整个流程失败。
  • 准确的数据存储:通过先将翻译存储在内存中,然后再提交到DataFrame,我们确保每个翻译都放到正确的位置。

结论

通过利用像GPT-3.5这样的大型语言模型,我们可以自动化技能翻译过程,否则这些过程需要手动完成,可能需要几天甚至几周的时间。这种方法不仅节省时间和降低成本,还确保翻译在不同语言之间准确和一致。

这个解决方案的特点在于它处理大型数据集的能力,具有错误处理能力,并且在确保翻译存储正确方面非常注意。这使得系统变得稳健、高效,并且可以处理大规模的翻译任务。

无论您是否正在处理分类法、产品目录或任何其他需要翻译的大型数据集,这种方法都可以帮助您扩大努力并保持高质量结果。

#LLM #翻译 #OpenAI #机器学习 #人工智能 #Python #数据科学 #软件开发

2024-10-16 04:17:06 AI中文站翻译自原文