输入“/”快速插入内容

开发:AI-双语字幕

AI 确确实实在改变我,让我自己的能力范围在扩大了,可以自行发现需求——产生方案——验证方案——解决需求,这个感觉还蛮棒的。
产生这个想法是因为:
2023.08.01 这个时间点,我看到微博 PG 的一个博主发了 PG 播客的生肉视频。我的英语水平,有字幕都看不懂何况没有 = =
先写爱看的——最终解决方案
最终的解决方案,逻辑其实也很简单:
1、用 whisper 生成原视频的英文字幕;(我预设 whisper 生成的字幕没问题,whisper 的问题不探讨)
2、让 GPT 结合字幕全文翻译,并让他根据原英文字幕的拆分,将译文进行同样行数的拆分;
3、将 GPT 译文拆分的结果插入到原英文字幕文件中形成一个新的双语字幕文件。
这个过程中所有的执行脚本都是让 GPT 写的。GPT 的 prompt 在最后。
08.04 更新这一节是失败的经历,可以跳过。
08.04 更新
08.01 产生想法之后,就经历了下面的过程(过去两天太兴奋了,但想法暂时都还没成功,恰好停一停记录一下):
1、识别音视频中的语言并生成字幕文件:
whisper 是一个非常优秀的字幕处理工具,他能很好的识别视频/音频中的语言:
medium 尺寸能很好的解决英文的问题
中文的处理我没试过,根据宝玉 xp的说法,large 尺寸处理中文的效果会好一些
但仅处理成英文对母语是中文的绝大部分人来说是不够的,至少需要一个纯中文的字幕,当然我认为双语的字幕当然是最好的。
2、下面就到了处理中文翻译的部分,翻译是一个非常麻烦的问题:
我们现在常用的谷歌翻译、微软翻译在处理结果上太粗暴了。普遍的问题有:
没有基础的语境背景信息,不知道一些特定的语境下的句子该如何准确翻译;
在一些常用俚语上的翻译也非常生硬;
没法准确识别一些人名、地名等特定词,这类词语最好的办法是不翻译,直接显示。
在翻译处理上目前 GPT3.5 有比上述工具好太多的效果(Claude 我也试了一下,效果不及 GPT3.5,其他的就没有试了目前):
需要把足够的上下文给他,以确保他在翻译一些句子的时候能够更好的理解;
最好告诉他一些背景信息,这样他能更好的识别一些特定的名词。(比如说告诉他这是一档 NBA 播客,他能知道勒布朗是指谁)
但由于一个音视频的内容太多,导致文本太多,在目前的限制中单次输入输出的文本量有限,又得分批的把内容投喂给 GPT。
[ ] 这里分批其实在全自动化的考量下有一个需要解决的问题,就是怎么分能达到不截断一条完整的话的语意。当然从全局来看这个问题还好,只要上下文在同一个会话中,下半个句子的翻译准确的概率是很大的,但上半个句子就不一定了。
3、在上述处理的基础上,现在手里面有三个东西:a、英文字幕SRT文件;b、英文全文;c、译文全文。现在的就得想办法把译文加到字幕文件中,形成一个双语字幕:
处理逻辑说起来其实比较简单:就是要找到英文句子对应的翻译,理论上句子和句子之间肯定按照顺序一一对应的。但由于文化的不同,已经 AI 处理结果的一些随机性,肯定不能指望通过标点符号去解决这个事情;
我最初的想法是,用一些开源库(nltkjieba这些都是 GPT 告诉我的)分别把中英文分句,分好之后看看效果:
非常明显的结果是,英文分句比中文分句多非常多;
那接着就想办法用英文分句去找对应的中文分句,这样能匹配上,就能知道他们之间的关系了。我马上就想到了通过语意理解的方式去做匹配,在 GPT 的帮助下,经历了以下过程:
英文句子与中文句子之间的余弦值匹配;
加入了 BERT 的 embedding;
将英文换成谷歌翻译的中文;
将余弦值换成欧几里得距离。
以上这些过程的结果都不好,在我的策略下,大部分的英文句子都回匹配同一个中文句子,导致在该中文句子的循环下出不去了 = =
[ ] 我的一个猜测 BERT 的 embedding 效果不好,或许换成 openai 的embedding 能有一个不错的结果
4、上述过程花了我比较长的时间,让我最近两天感觉时光飞逝,睡觉前想这些事情兴奋难以入眠是我的一个常态。
在上述过程都失败了之后,我突然开窍发现了一个非常的简单办法,就是把一整个字幕文件的英文原文都丢给 GPT4,让他全文理解并按照字幕文件的分段输出中文结果:
我用的 POE 的 GPT4 模型跑的,输出的截断前的结果挺好的,但我目前没办法验证如果不截断的话是不是一个完整的结果;
我用同样的办法试了 Claude,也还是不行。
但 GPT4 的价格很贵且按照目前我自己对这个机制的理解,他也会出错,所以我想到了一个办法,回去找宝玉 xp 的微博,他提到的一个方法的可行性佐证了我的这个想法应该可行。接下来试一试,后续再更新。