AI 3D建模工具: Tripo 3D | Meshy AI

我正在测试 Andrew Ng 的语言翻译 A​​I 代理系统及其在逆变换下的稳定性。

给定源语言的文本,我们应用翻译函数 f,然后应用 f 的逆。它应该是不变的:

但是,数学与语言翻译有什么关系?

在完美的系统中,从英语翻译成西班牙语再翻译成英语不应该改变源文本的含义。

1、Andrew NG的翻译代理系统

Andrew NG(吴恩达)发布了一款用于语言翻译的开源 AI 代理系统。代理工作流程分为 3 个步骤:

  • 代理将源语言翻译成目标语言
  • 代理审查翻译,通过头脑风暴改进翻译(反思)
  • 代理编辑初始翻译,并结合第 2 步的反馈

这是开源 github repo。如果你是生成式AI 代理的新手,我建议你先阅读此内容。

反射(reflection)是一种有用的代理设计模式。这就像离开电脑,思考如何改进工作;然后,当你回到电脑前时,执行计划来修改工作。

通过反射,你可以让代理休息一下,回顾迄今为止的工作,然后代理会集思广益,提出潜在的改进。

这一点至关重要,因为代理可以自主运行,无需人工干预。

通过使用反射,代理可以自我批评,迭代以获得更好的答案,而无需你手动告诉它该做什么。

正如 Andrew Ng 在自述文件中所解释的那样,AI 代理系统对翻译有几个好处:

  • 修改输出的风格,例如正式/非正式。
  • 指定如何处理习语和特殊术语,如名称、技术术语和首字母缩略词。例如,在提示中包含词汇表可确保特定术语(例如开源、H100 或 GPU)的翻译一致。
  • 指定语言的特定区域用法或特定方言,以服务目标受众。例如,拉丁美洲使用的西班牙语与西班牙使用的西班牙语不同;加拿大使用的法语与法国使用的法语不同。

2、实验:10 次迭代,短文本

使用 repo,我想测试逆变换下的稳定性。

因此,我将从英语翻译成西班牙语,再翻译回英语,然后确定源文本的含义是否得到保留。

这是我的代码:

import translation_agent as ta

source_lang, target_lang, source_text = (
    "English",
    "Spanish",
    "Large language models are pretty cool",
)

countries = ["Mexico", "US"]
translation = ta.translate(source_lang, target_lang, source_text, countries[0])

num_iters = 10

for i in range(num_iters):
    country = countries[i % len(countries)]
    t = ta.translate(source_lang, target_lang, source_text, country)
    print(
        f"Iter {i+1}/{num_iters} {source_lang}->{target_lang} [country={country}]. Output: {t}"
    )
    source_lang, target_lang = target_lang, source_lang
    source_text = t

注意:你首先需要导出环境变量 OPENAI_API_KEY。

这是我正在翻译的简短文本:

Large language models are pretty cool

以下是运行 10 次迭代后的完整日志,其中从英语翻译成西班牙语再到英语来回翻译了 5 次:

ic| num_tokens_in_text: 6
ic| 'Translating text as single chunk'
ic| num_tokens_in_text: 6
ic| 'Translating text as single chunk'
Iter 1/10 English->Spanish [country=Mexico]. Output: Los grandes modelos de lenguaje son bastante geniales.
ic| num_tokens_in_text: 12
ic| 'Translating text as single chunk'
Iter 2/10 Spanish->English [country=US]. Output: Powerful language models are really cool.
ic| num_tokens_in_text: 8
ic| 'Translating text as single chunk'
Iter 3/10 English->Spanish [country=Mexico]. Output: Los modelos de lenguaje súper potentes están padrísimos.
ic| num_tokens_in_text: 17
ic| 'Translating text as single chunk'
Iter 4/10 Spanish->English [country=US]. Output: Incredibly powerful language models are totally awesome!
ic| num_tokens_in_text: 10
ic| 'Translating text as single chunk'
Iter 5/10 English->Spanish [country=Mexico]. Output: ¡Los modelos de lenguaje increíblemente poderosos son increíbles!
ic| num_tokens_in_text: 18
ic| 'Translating text as single chunk'
Iter 6/10 Spanish->English [country=US]. Output: Language models are unbelievably powerful and just amazing!
ic| num_tokens_in_text: 10
ic| 'Translating text as single chunk'
Iter 7/10 English->Spanish [country=Mexico]. Output: ¡Los modelos de lenguaje son increíblemente poderosos y realmente asombrosos!
ic| num_tokens_in_text: 21
ic| 'Translating text as single chunk'
Iter 8/10 Spanish->English [country=US]. Output: Language models are incredibly powerful and truly amazing!
ic| num_tokens_in_text: 9
ic| 'Translating text as single chunk'
Iter 9/10 English->Spanish [country=Mexico]. Output: ¡Los modelos de lenguaje son increíblemente poderosos y realmente asombrosos!
ic| num_tokens_in_text: 21
ic| 'Translating text as single chunk'
Iter 10/10 Spanish->English [country=US]. Output: Language models are incredibly powerful and truly amazing!

我已将其清理干净,只显示英文翻译:





遗憾的是,我们在第一次反向翻译中失去了 大型语言模型(Large Language Model)的含义!

经过反思(看看我做了什么),我想这是有道理的……

我们的代理不认为“大型语言模型”是一个应该一致翻译的独特技术术语。

同样有趣的是,从第三次反向翻译开始似乎出现了收敛:#3、4、5 都非常相似。

强大 (powerful)一词的重复也跳了出来。

我的假设:我们的代理正在混合大(large)和酷(cool)的概念,从而产生强大(powerful)这个词。

3、实验:20 次迭代,短文本

接下来,我使用 20 次迭代运行相同的实验,因此我们得到了 10 个翻译回英语的版本:










再次,我们在第一遍就失去了“大型语言模型”的含义。

现在重复出现的词是先进(advanced)而不是之前的强大(powerful)。

真正有趣的是“先进”的定义在迭代过程中是如何变化的:

  • 我们从“先进的人工智能语言模型真的令人难以置信”开始。
  • 然后使用不同的“先进”定义:“看到人工智能语言模型(人工智能)取得了如此大的进步,真是令人印象深刻。”
  • 这引出了我们的最后一次迭代:“看到人工智能语言模型取得了如此大的进步,真是令人印象深刻。”

由于“先进”含义的偏差,当我们将第 10 次翻译回英语时,文本的含义与原文明显不同。

4、实验:词典

我不想手动将词汇表或词典与术语“大型语言模型”合并在一起。

我想知道在提示中添加一些上下文是否会有所帮助。

我在步骤 1 和 3 中将此添加到翻译提示中:

“保留对技术术语的任何引用。”

但这没有帮助。

好的,我会硬编码一本词典:


以下是翻译回英语:



耶!

我们在前两次逆变换下看到了稳定性——术语“大型语言模型”被成功保留。

但我们第三次失去了它!

在这一点上,我担心技术和行业特定术语仍然是机器翻译的一个不小的障碍。

5、实验:6 次迭代,长文本

那么,让我们在不包含行话的长文本上测试代理系统。

这是我最喜欢的 X 用户之一的帖子,我喜欢阅读它来获得温暖和迷茫:

我运行脚本 6 次,因此我们得到了 3 个英文翻译。

这是第一个英文翻译:

以下是第三次翻译回的英文:

总体而言,我对这 3 个译本的英文版印象深刻!

你可以在第三个最终翻译中看到我仅有的 2 个小点:

  • 代理将复数从多个“你在你爱的人身边醒来”改为单数“你在你所爱的人的陪伴下醒来”。在我看来,这改变了文本的原意,因为后一种单数情况让人联想到配偶,而复数让人联想到多个家庭成员
  • 在最后一句中,代理人将理解一词误译为控制,在我看来,这改变了文本的原意。理解现实的本质与试图控制现实是有区别的。

5、实验:俄语

为了好玩,我将目标语言切换为俄语,并使用提示中嵌入的短文本和词典重新运行:

Large language models are pretty cool

再次,“advanced”一词再次出现。

即使提示中嵌入了词典,翻译也会在第 4 次反向翻译中失去“大型语言模型”的技术概念。

回想一下,我们也在西班牙语翻译中观察到了这一点。

6、结束语

这是我第一次使用 Andrew Ng 的翻译代理系统。

它翻译长篇文章的效果非常出色,没有使用技术术语,而且大部分保留了每个短语的含义,这让我印象深刻。我尝试了 6 次迭代,所以翻译回英语 3 次。

每次翻译不仅过得去,而且与原文的意图和风格非常吻合。

然而,技术和行业特定术语是一个重大挑战。在几次实验中,我们看到“大型语言模型”的技术概念在翻译中丢失了。即使添加了词典,我们也没有在逆变换下实现稳定性。

我很高兴关注这个项目的发展!

从 github repo 的 Readme 中,以下是改进这个 AI 代理系统的方法:


原文链接:Testing Andrew Ng's AI Agent System for Language Translation

BimAnt翻译整理,转载请标明出处

本文属于「AI × 3D」专题。查看专题全部文章 →