GenAI 建立了我的实时翻译应用程序(比我写这个故事更快)。

这些天,你不需要很多编码经验和几个月的时间来交付一个原型。这个故事将展示如何在几个小时内完成,带有即时示例。

问题:

在塔林组织阿莎的冥想对话时,我不知怎么地承诺如果有人需要,就能组织现场翻译。老实说,我宁愿静静地听阿莎,而不是紧张地翻译。我也不想因为口语能力不足而让观众失望。所以我想:“一定有更好的办法!”然后我径直走上科技之路,避开显而易见的方法:

寻找一个想做这件事的朋友 ❌

订购专业服务 ❌

创建一个可以实时自动翻译语音的应用程序 ✅

免责声明:我使用ChatGPT帮助我完成了90%的编码工作,但本文没有使用任何ChatGPT。好吧,标题(提示)确实有一些帮助,但下面所有精彩的文字均为我自己撰写。

这里有一个合适的模因:

From Reddit

本文(有意地)略过API延迟,工程深度探讨和大量的代码示例。目标是展示使用GenAI可以轻松地创建相当复杂的软件部件,只需付出最小的努力。对于喜欢细节的人,请查看下面列出的提示链接和Github仓库。如果您不太懂技术,请跳至最后的“学习”部分。

创建一个实时翻译语音并输出字幕的系统:

今年夏天,我不得不为许多视频材料做字幕,所以我知道亚马逊转录是一个能干的工具,还提供流式实时音频转录(将语音转换为文本)。很酷,让我们使用它。我还需要翻译一些字幕,使用ChatGPT效果非常好。

👉 所以对于我的小型转录和翻译项目,我有一个计划:

  1. 让计算机听到正在说的话。
  2. 将演讲语音包发送给亚马逊转录,然后获取文本。
  3. 将文本发送到ChatGPT以进行翻译。
  4. 通过 WebSocket 在应用程序中显示字幕(WebSocket 在应用程序和服务器之间保持开放连接,允许实时更新字幕)

这让我开始探索使用现代人工智能工具的解决方案。

解决方案:

我的编程技能有限,但我的懒惰可不是 — 天哪,我可不愿意自己做任何编码工作!🚷

我之前在写我的应用程序时,用ChatGPT 4o有很好的体验,幸运的是,o1-preview就在我需要的那天到达。我让它交付第一个原型:

The first prompt.

在11秒内,我得到了要尝试的代码。并且,第一次尝试并没有成功 - 在得到正确结果之前还需要排除另外两个提示。经过漫长的5分钟复制-粘贴提示,终于得到了第一个原型(提示)。

感觉真棒!

我稍微调整了用户体验,让ChatGPT也可以将以前的文字显示为稍暗的颜色,这样更容易跟进。

到目前为止,一切都还不错。

让我们现在尝试用ChatGPT来翻译它:

有点过早优化,我知道,但效果棒极了。我笑了,ChatGPT为ChatGPT写了一个提示。

{
model: "gpt-4",
messages: [
{
role: "system",
content: `Translate the following text from ${sourceLang} to ${targetLang}.`,
},
{
role: "user",
content: text,
},
],
}

它正在工作。

我们完成了吗?

嗯,我希望如此。我们已经完成了80%。正如帕累托原则的每位学者所知道的那样(轻浮地解释),剩下的20%可能需要无限长的时间。

Vilfredo Pareto being a boss.

文件变得越来越大,难以导航,因为ChatGPT的上下文窗口限制而难以提示。 我请朋友将其重构成几个文件,并将Javascript重写为Typescript(提示)。 但那只是容易的部分...

困难的部分

亚马逊转录的更新文本就像从消防栓中得到的一样。它不会发送清晰的、最终的文本块 —— 它会随着处理更多音频而持续更新实时转录。我通过在Asha的真实演讲上进行测试发现了这一点。以下是文本如何被修改的可视化。

In 
In this
In this in car
In this incarnation
In this incarnation we pick
In this incarnation we pick up
In this incarnation we pick up from
In this incarnation we pick up from were
In this incarnation we pick up from where we
In this incarnation we pick up from where we left
In this incarnation we pick up from where we left of
In this incarnation we pick up from where we left off in the
In this incarnation we pick up from where we left off in the last
In this incarnation we pick up from where we left off in the last one
In this incarnation we pick up from where we left off in the last one, and..

转录是自动更正和在进行中更改句子。在英语中看起来还可以,但是在翻译时不行。这是它开始变得如何看起来:

Sees
Selles
Selles autos
Selles kehastuses
Selles kehastuses me valime
Selles kehastuses me võtame üles
Selles kehastuses me jätkame sellest
Selles kehastuses me jätkame sellest, kus olime
Selles kehastuses me jätkame sellest, kus me
Selles kehastuses me jätkame sealt, kus me lõpetasime
Selles kehastuses me jätkame sealt, kus me pooleli jäime
Selles kehastuses me jätkame sealt, kus me pooleli jäime viimases
Selles kehastuses me jätkame sealt, kus me pooleli jäime eelmises
Selles kehastuses me jätkame sealt, kus me eelmises pooleli jäime
Selles kehastuses me jätkame sealt, kus me eelmises pooleli jäime, ja..

无论你是否会说爱沙尼亚语,你会发现翻译后的句子可能会随着新词汇的加入而发生严重修改。有时整个句子的结构会随着更多词汇的加入而多次改变,使读者无法获得一致的阅读体验。

除此之外,对每个更新都要求翻译都既昂贵又慢。为什么要发送所有的不完整的胡言乱语呢?每次到ChatGPT的API调用需要0.3-0.7秒,而Asha可以每秒说出4-5个短词。随着时间的推移,字幕会变得严重延迟。

🧘 我需要帮助翻译保持冷静和专注,顺应持续变化的潮流,找到速度和准确性之间的和谐。以下是我尝试过的方法:

…与ChatGPT(提示)讨论。 这并没有带来突破,但提供了一些可以尝试的想法。

💡将每10个单词翻译一次。 这可以解决速度慢的问题,但最后一个或两个单词可能不完整。 这将导致几秒钟显示毫无意义的翻译:

In this incarnation we pick up from where we left off in the last one, 
and we can feel bet

Selles kehastuses me jätkame sealt, kus me eelmises pooleli jäime,
ja me võime kihla vedada.

然后:

In this incarnation we pick up from where we left off in the last one, 
and we can feel better for a while

Selles kehastuses me jätkame sealt, kus me eelmises pooleli jäime,
ja me võime end mõnda aega paremini tunda.

噢🤦‍♂️

💡让我们等待句子结束。阿莎说话相当快,而转录员不知道什么时候放一个句号,所以文本块变得相当大:

目前,我选择了这个选项:

  • 尝试等待标点符号(.,!?; —),然后进行翻译。
  • 如果以上操作太耗时,请利用亚马逊的IsPartial标志,该标志表示亚马逊转录是否认为单词仍然可以更改。如果前面的10个单词的IsPartial==false,请使用修改后的提示对它们进行翻译:
// Give a chunk of the previous text as "context" 
if(context) {
prompt = `Translate the following text from ${sourceLang} to ${targetLang}.
You are translating live subtitles that get updated every few seconds.
Try not to change previously translated chunks.
Previous chunk: ${context} ${correctionPrompt}`;
}

这将产生一个尚可接受的结果 - 大多数翻译是合理的,并且相当有规律,但这项练习远未结束,还面临挑战:

  • 将应用程序更加精致化,作为亚马逊转录和ChatGPT之间的一层。 目前用于决定要发送哪个文本块进行翻译的算法相当基础。
  • 更好的用户体验。我们还没有太关注这一点。
  • 托管怪癖。GCP Cloud Run 最多具有 60 分钟的 WebSocket 连接时间。之后,连接会断开,要么客户端需要重新连接,要么我需要迁移到适当的虚拟机。
  • 考虑使用语音合成来玩耍,这样人们可以听取翻译而不是阅读字幕。

我已经花了3个晚上调整那最后的20%,我可以再花4个晚上达到下一个水平。

学习

我爱GenAI 💗!它让我能够:

  • 将想法转化为一个晚上内的功能原型。
  • 将原型提炼成一个解决方案,在3个晚上解决了我90%的问题。在我从原型转向MVP的过程中,它一直与我同行。
  • 把代码放到 Docker 中,然后部署到 GCP。

在另外3个晚上,我可能能够交付一个具有良好用户体验的工作产品💅。

这真是一个美好的时代!如果没有最新最伟大的GenAI来帮我写作,我想我需要3-4个星期才能弄清楚一切。如果没有亚马逊转录,我需要花费一个小时来自己翻译Asha的演讲,这真是一个苦涩的过程 😃。

亚马逊转录:我对2024年的语音识别技术的先进程度感到惊讶。延迟如此之低,单词会被自动更正(猜测它们拥有自己的GenAI层来处理),API允许多种优化,语音识别效果极佳。

使用ChatGPT 4o-mini进行翻译:它既好又便宜。在数小时的测试过程中,我大约花费了0.05美元。它在得到合理的句子时完成它的工作。在API上也相当快速地给出回应。

使用GenAI进行编码:新模型o1-preview在代码编写方面是对4o的巨大升级(而且一开始就不错)。它输出的代码是连贯的,并且还可以轻松地重构大块代码。

在未来几年,编码将主要是描述性的 - 您描述问题,AI写代码。就像我所做的那样,但在所有方面更加先进。查看底层并自行修复问题将会变得罕见 - 就像我们几乎不会进入C ++编译器来调试我们的Python代码一样,而我们实际上从未编写过运行C ++的汇编代码。我甚至不知道该怎么做。软件工艺的定义将不得不改变。

AI也会让你变得有点愚蠢 - 因为你不是每一行代码都写出来的,所以要理解和掌握起来更困难,越来越依赖于进一步的提示。就像每个无代码解决方案一样,到某个时候你会遇到一个难题,因为它从未见过这样的问题。挽起衣袖,接管AI的工作比你自己做一切要困难得多(提示 - 它解释了实时转录的局限性,但你必须进行创造性的工作来克服这些)。

使用互联网上所有可用数据训练的GenAI就像一个全球潜意识。它拥有所有信息,可以将其混合成意想不到的方式,并提出聪明的解决方案。然而,它缺乏创造性火花-它可以将现有知识合成成意想不到的方式,但它不能进行直觉感知的飞跃。这就是我们发挥作用的地方🤓。

你可以在这里尝试使用这个工具。请温柔一点,我有预算限制 😙。

这是一个链接到我的(或者说公平一点,90%是ChatGPT的)努力成果:

2024-09-28 04:16:09 AI中文站翻译自原文