Press "Enter" to skip to content

使用LLMs(GPT和Vertex AI/Google Bard)进行术语翻译

由Mojahid Mottakin在Unsplash上的照片

像ChatGPT这样的LLMs能否比人类更准确地进行翻译?我们有哪些LLMs选项可供使用?了解更多关于使用生成式AI进行多种不同语言的翻译。

背景

在撰写本文时,我已经从事数据工作将近十年,并在本地化领域工作了两年。我有着各种形式的人工智能经验,包括但不限于聚类、分类和情感分析。机器翻译(MT)在本地化中被广泛使用。可以将其视为将一些文本输入到谷歌翻译中并要求将其翻译成其他语言。根据我的经验,机器翻译通常有80%的正确率,但仍需要人工审核/修正误译。

随着ChatGPT和Google Bard等大型语言模型(LLMs)的兴起,我们或许可以通过为LLMs提供额外的上下文(如定义和词性)来更接近人类翻译的准确性。

使用LLMs(GPT和Vertex AI/Google Bard)进行术语翻译 四海 第2张

假设

LLMs使用基于提示的输入。这意味着您在提示中提供的信息和上下文越多,LLM的输出就越好。鉴于一组英语术语、它们的定义和它们的词性样本,我们想要看看LLMs是否能够在将术语翻译成不同语言时产生更好的结果。我们将使用的两种LLMs是GPT(通过Jupyter Notebook通过OpenAI API)和Vertex AI(通过Google BigQuery的ML.GENERATE_TEXT函数)。后者需要更多的设置,但可以直接在查询控制台中使用SQL运行。

使用LLMs进行翻译

GPT

我们首先在我们的Jupyter笔记本中安装OpenAI python库

import sys !{sys.executable} -m pip install openai

导入pandas以处理数据框。导入先前安装的openai库并设置您的API密钥。将数据读入数据框。如果您想要跟随进行操作,我将使用的数据可以在此处找到。

import pandasimport openai openai.api_key = "YOUR_API_KEY" # 读入您的数据 df = pd.read_csv('mydata/terms_sample.csv')

在一个列表中,设置您希望将单词翻译成的语言。

languages = ['西班牙语(西班牙)', '西班牙语(拉丁美洲)', '德语', '意大利语', '日语', '中文(简体)', '法语'

创建一个函数,该函数迭代处理数据框中的行和列表中的语言,分别翻译术语。提示将输入到“messages”部分。我们将使用GPT 3.5,并将温度设置为一个非常小的数字,以确保我们从LLM获得准确/不太创造性的响应。

def translate_terms(row, target_language):    """翻译术语"""        user_message = (        f"将以下英语术语翻译为{target_language}:'" + row['术语'] +        "'。\n以下是术语的定义以提供更多上下文:\n" + row['定义'] +        "'。\n以下是术语的词性以提供更多上下文:\n" + row['词性'] +        "。\n请仅翻译术语而不翻译定义。除了翻译的术语外,请不要提供任何其他文本。"     )        response = openai.ChatCompletion.create(        model="gpt-3.5-turbo",        messages=[            {"role": "system", "content": "您是一个有帮助的翻译助手,可以将术语翻译成其他语言,提供英语术语和定义。"},            {"role": "user", "content": user_message},        ],        max_tokens=50,        n=1,        temperature=0.1    )        return response['choices'][0]['message']['content']

最后一步是对数据框中的每种语言应用翻译函数,并为这些相应语言的术语创建一个新的列。请参考以下完整的代码。

# 将函数应用于数据框for language in languages:    df[language+'_terms'] = df.apply(translate_terms, axis=1, args=(language,))
已翻译术语的数据框

Google Bard / text-bisonm / Vertex AI

我们将使用Google的text-bison模型中的ML.GENERATE_TEXT函数来翻译之前相同的术语。此过程需要更多的资源来设置,但一旦设置好,我们就能够在SQL查询中直接调用LLM。

设置

我不会提供详细的设置指南,因为每个人的Google Cloud基础设施都是根据他们的需求而定的。相反,我将提供一个高级概述,并附带获取进展的链接。

  1. 确保启用了Vertex AI用户角色以访问您的服务帐号。
  2. 按照Google Cloud上的说明建立一个远程云连接。
  3. 使用远程云连接创建一个LLM模型
  4. 现在您应该能够使用ML.GENERATE_TEXT函数运行您的LLM模型。我建议查看函数的参数以了解所需的参数。
  5. 将数据上传到您的计费项目中,以便进行查询。

代码

用于生成翻译的代码如下所示。由于我的限制和查询引擎的限制,我决定分别运行每种语言的代码(手动替换粗体文本),而不是像之前的jupyter笔记本那样循环遍历语言数组。

DECLARE USER_MESSAGE_PREFIX STRING DEFAULT (  '根据英语术语和定义,您是一个有帮助的翻译助手。'|| '\n\n' ||  '将以下英语术语翻译成法语。请不要翻译定义。'|| '\n\n' ||  '术语: ');DECLARE USER_MESSAGE_SUFFIX DEFAULT (  '\n\n' || '以下是该术语的定义,以提供更详细的上下文: '|| '\n\n');DECLARE USER_MESSAGE_SUFFIX2 DEFAULT (  '\n\n' || '以下是该术语的词性,以提供更详细的上下文: '|| '\n\n');DECLARE USER_MESSAGE_SUFFIX3 DEFAULT (  '\n\n' || '术语的法语翻译:');DECLARE languages ARRAY<string>;SET languages = ['西班牙语(西班牙)', '西班牙语(拉丁美洲)', '德语', '意大利语', '日语', '中文(简体)', '法语'];SELECT  ml_generate_text_result['predictions'][0]['content'] AS generated_text,  ml_generate_text_result['predictions'][0]['safetyAttributes']    AS safety_attributes,  * EXCEPT (ml_generate_text_result)FROM  ML.GENERATE_TEXT(    MODEL `YOUR_BILLING_PROJECT.YOUR_DATASET.YOUR_LLM`,    (      SELECT        Term,        Definition,        USER_MESSAGE_PREFIX || SUBSTRING(TERM, 1, 8192) || USER_MESSAGE_SUFFIX || SUBSTRING(Definition, 1, 8192) || USER_MESSAGE_SUFFIX2 || SUBSTRING(Part_of_speech, 1, 8192) || USER_MESSAGE_SUFFIX3 AS prompt      FROM        `YOUR_BILLING_PROJECT.YOUR_DATASET.terms_sample`    ),    STRUCT(      0 AS temperature,      100 AS max_output_tokens    )  );

解读结果

说明:除了英语之外,我不会说这些语言,所以请对我的结论持保留意见。

GPT翻译的术语
Vertex AI翻译的术语

结果可以在这里找到。我记录了一些发现:

  • 两个LLM翻译中,47/84(56%)完全相同。- GPT经常在单词末尾加上句号(.)。去掉这些句号后,匹配百分比提高到63%。
  • 似乎日语和法语是两个LLM之间最不一致的翻译。
  • GPT将术语“make up”理解为化妆品(即化妆品),这令人担忧,因为在进行翻译之前似乎没有利用该术语的定义和词性。- 这可能是因为我的提示结构不够优化。例如,我可以在术语之前提供定义,让LLM先处理这些信息。
  • GPT似乎直译了重金属(专有名词),特别是在德语中,它被翻译成了与音乐流派不相符的术语。

最终我会说两个LLM都有各自的优点和缺点。GPT在Python中很容易设置和运行,而Vertex AI在进行翻译之前更清楚地理解提示并考虑所有上下文。我认为可以公正地说,与普通机器翻译相比,LLM在处理额外上下文方面做得更好。告诉我你的想法。我能做得更好吗?

原文发布于https://shafquatarefeen.com。

Leave a Reply

Your email address will not be published. Required fields are marked *