AI 3D建模工具: Tripo 3D | Meshy AI
我正在测试 Andrew Ng 的语言翻译 AI 代理系统及其在逆变换下的稳定性。
给定源语言的文本,我们应用翻译函数 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」专题。查看专题全部文章 →