我正在测试 Andrew Ng 的语言翻译 AI 代理系统及其在逆变换下的稳定性。
给定源语言的文本,我们应用翻译函数 f,然后应用 f 的逆。它应该是不变的:
但是,数学与语言翻译有什么关系?
在完美的系统中,从英语翻译成西班牙语再翻译成英语不应该改变源文本的含义。
NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割
1、Andrew NG的翻译代理系统
Andrew NG(吴恩达)发布了一款用于语言翻译的开源 AI 代理系统。代理工作流程分为 3 个步骤:
- 代理将源语言翻译成目标语言
- 代理审查翻译,通过头脑风暴改进翻译(反思)
- 代理编辑初始翻译,并结合第 2 步的反馈
这是开源 github repo。如果你是生成式AI 代理的新手,我建议你先阅读此内容。
反射(reflection)是一种有用的代理设计模式。这就像离开电脑,思考如何改进工作;然后,当你回到电脑前时,执行计划来修改工作。
通过反射,你可以让代理休息一下,回顾迄今为止的工作,然后代理会集思广益,提出潜在的改进。
这一点至关重要,因为代理可以自主运行,无需人工干预。
通过使用反射,代理可以自我批评,迭代以获得更好的答案,而无需你手动告诉它该做什么。
正如 Andrew Ng 在自述文件中所解释的那样,AI 代理系统对翻译有几个好处:
- 修改输出的风格,例如正式/非正式。
- 指定如何处理习语和特殊术语,如名称、技术术语和首字母缩略词。例如,在提示中包含词汇表可确保特定术语(例如开源、H100 或 GPU)的翻译一致。
- 指定语言的特定区域用法或特定方言,以服务目标受众。例如,拉丁美洲使用的西班牙语与西班牙使用的西班牙语不同;加拿大使用的法语与法国使用的法语不同。
2、实验:10 次迭代,短文本
使用 repo,我想测试逆变换下的稳定性。
因此,我将从英语翻译成西班牙语,再翻译回英语,然后确定源文本的含义是否得到保留。
这是我的代码:
import translation_agent as tasource_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 = 10for 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_langsource_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!
我已将其清理干净,只显示英文翻译:
1. Powerful language models are really cool.
2. Incredibly powerful language models are totally awesome!
3. Language models are unbelievably powerful and just amazing!
4. Language models are incredibly powerful and truly amazing!
5. Language models are incredibly powerful and truly amazing!
遗憾的是,我们在第一次反向翻译中失去了 大型语言模型(Large Language Model)的含义!
经过反思(看看我做了什么),我想这是有道理的……
我们的代理不认为“大型语言模型”是一个应该一致翻译的独特技术术语。
同样有趣的是,从第三次反向翻译开始似乎出现了收敛:#3、4、5 都非常相似。
强大 (powerful)一词的重复也跳了出来。
我的假设:我们的代理正在混合大(large)和酷(cool)的概念,从而产生强大(powerful)这个词。
3、实验:20 次迭代,短文本
接下来,我使用 20 次迭代运行相同的实验,因此我们得到了 10 个翻译回英语的版本:
1. Big AI language models are super cool!
2. The advanced AI language models are truly incredible.
3. It's truly incredible how advanced language models in artificial intelligence are.
4. It's really impressive how advanced artificial intelligence language models are.
5. It's impressive how incredibly advanced the artificial intelligence language models are.
6. It's impressive to see how much AI language models have advanced.
7. It's really impressive to see how much AI language models (Artificial Intelligence) have advanced.
8. It's truly amazing to see how far artificial intelligence (AI) language models have come.
9. It's truly amazing to see how far artificial intelligence (AI) language models have come.
10. It's really impressive to see how far AI language models have come.
再次,我们在第一遍就失去了“大型语言模型”的含义。
现在重复出现的词是先进(advanced)而不是之前的强大(powerful)。
真正有趣的是“先进”的定义在迭代过程中是如何变化的:
- 我们从“先进的人工智能语言模型真的令人难以置信”开始。
- 然后使用不同的“先进”定义:“看到人工智能语言模型(人工智能)取得了如此大的进步,真是令人印象深刻。”
- 这引出了我们的最后一次迭代:“看到人工智能语言模型取得了如此大的进步,真是令人印象深刻。”
由于“先进”含义的偏差,当我们将第 10 次翻译回英语时,文本的含义与原文明显不同。
4、实验:词典
我不想手动将词汇表或词典与术语“大型语言模型”合并在一起。
我想知道在提示中添加一些上下文是否会有所帮助。
我在步骤 1 和 3 中将此添加到翻译提示中:
“保留对技术术语的任何引用。”
但这没有帮助。
好的,我会硬编码一本词典:
“保留此词典中对技术术语的任何引用:
[“大型语言模型”]”
以下是翻译回英语:
1. The truth is that large language models are incredibly impressive.
2. Large language models are truly impressive.
3. Major language models are really impressive.
耶!
我们在前两次逆变换下看到了稳定性——术语“大型语言模型”被成功保留。
但我们第三次失去了它!
在这一点上,我担心技术和行业特定术语仍然是机器翻译的一个不小的障碍。
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 代理系统的方法:
原文链接:学习率调度器 - BimAnt