「豆包Marscode体验官」肝了4天,我用ChatTTS和LLM让deeplearning.ai课程说上流畅中文

我们都知道外网上有很多优秀的视频教程平台,比如Coursera和deeplearning.ai。尤其是后者,由吴恩达老师与OpenAI、Langchain、LlamaIndex、AutoGen等公司和作者合作,推出了一系列广受好评的LLM教程,如PromptEngineering、Langchain教程、LlamaIndex教程和AutoGen教程。deeplearning.ai的课程紧跟时下热点,是大语言模型爱好者和从业者不可或缺的资源。然而,deepleaning.ai的课程通常没有中文字幕,这无疑提高了学习的门槛。即使有些同学坚持学习,也可能因为语言障碍只能学到皮毛。我肝了4天,我成功地将这些课程转换成流畅自然的普通话。话不多说,让我们直接看看效果视频。

注:本文中有很多关于字幕处理和音视频处理的库都是与MarsCode交互得知,我本人对字幕和音视频处理并不是很了解~,如果其中对于音视频处理有疑问的地方,还望指出,感谢~

但是我的AppleM1使用torchaudio.save会报错,如下所示。

把上述错误拷贝给MarCode进行一番交流,终于解决了运行错误。但在与MarsCode交流中,我觉得MarsCode对于指令的跟随性不太好,我需要的是mp3,结果给出的代码是存储为wav文件。

此外,我觉得还可以改进的地方是上下文,看起来它已经忘记我使用torchaudio报错的,这仅仅只有3轮对话。

后来我要求使用pydup实现将numpyarray存储mp3,MarCode给出一版初稿,然后我运行报错,再次贴报错给它,最终给出如下代码。此段代码,可以运行,但是生成的mp3没有声音。于是我查询资料得知,它在将数组归一化之后量化到int16时,没有将数据缩放导致没有声音。加入numpy_array=(numpy_array*32767).astype(np.int16)如下代码即可,但生成的MP3听起来很快,按照官方教程中将frame_rate修改为24000,语音变得正常。

最终采用的是pydup的方法,得到了可运行的numpy_array_to_mp3函数,可以将numpy数组转换成mp3,需要安装pydub。

defnumpy_array_to_mp3(numpy_array,output_file):#将numpy数组规范化到[-1,1]范围numpy_array=np.clip(numpy_array,-1,1)numpy_array=(numpy_array*32767).astype(np.int16)#将numpy数组转换为int16类型的WAV格式字节流byte_stream=numpy_array.tobytes()#创建一个新的AudioSegment对象audio_segment=AudioSegment(data=byte_stream,sample_width=2,frame_rate=24000,channels=1)#将AudioSegment对象保存为MP3文件audio_segment.export(output_file,format="mp3")新的运行代码如下:

mp3_filename="output_audio1.mp3"numpy_array_to_mp3(wavs[0],mp3_filename)生成的语音极为流畅,你可以听听看。

根据我个人测试,seed_1332发音语气平稳、中英文穿插也能很好的合成,在长句合成上也未见到音色切换,推荐大家使用,上面那段欢迎公众号的音频就是来自seed_1332。但是现在新发布的ChatTTS已经不支持直接采用pt权重文件固定音色了,如何办呢?

上述代码运行后依然会报错,RuntimeError:Theexpandedsizeofthetensor(768)mustmatchtheexistingsize(1536)atnon-singletondimension2.Targetsizes:[1,35,768].Tensorsizes:[1,1,1536]。把这段报错给到MarsCode它无法解决,从这个错误来看,其实我们只需要将tensor转换为FP16即可,spk_emb_np=spk_emb.cpu().numpy().astype(np.float16)。经过修改后,得到如下函数tensor_to_str。

deftensor_to_str(spk_emb):#将Tensor转换为NumPy数组spk_emb_np=spk_emb.cpu().numpy().astype(np.float16)#将NumPy数组编码为字符串spk_emb_str=b14.encode_to_string(lzma.compress(spk_emb_np,format=lzma.FORMAT_RAW,filters=[{"id":lzma.FILTER_LZMA2,"preset":9|lzma.PRESET_EXTREME}]))returnspk_emb_str所以在下载好音色之后,我们就可以通过如下方式加载pt文件来固定音色。

WEBVTT格式:

WEBVTT100:00:02.080-->00:00:05.660RetrievalAugmentedGeneration,orRAG,hasbecomeakeySRT格式:

100:00:02,080-->00:00:05,660RetrievalAugmentedGeneration,orRAG,hasbecomeakey根据MarsCode沟通得知使用FFmpeg可将WEBVTT字幕文件转换为SRT文件:

ffmpeg-isubtitle.vttsubtitle.srt但是我发现转换后第一行字幕被移除了,这是因为VTT文件的第一行包含"WEBVTT",被识别为非字幕块。移除这一行后转换就可以正常进行。不过,MarsCode告诉我可以使用pysrt直接转换,看起来更加简单,也不需要使用FFmpeg这种重量级工具。

pysrt.open(vtt_path,encoding="utf-8").save(srt_path,encoding="utf-8")虽然pysrt可以直接转换,但是第一行依然会被移除。因此,我们需要编写代码移除第一行WEBVTT字幕,使用MarsCode自动编码,写出函数名然后编写comment,他就会自动提示,此时我们只需要按Tab键即可将这段自动生成代码输入。可以看出对于这种比较简单的功能,生成的代码基本不用考虑再次修改,基本上随着comment输入完成,代码自动生成就会提示,速度挺快的。

字幕文件已经转换完成,接下来需要考虑如何翻译字幕。通过pysrt可以逐行读取并翻译,但测试发现这种方法的翻译质量较差,因为一个字幕块通常不是完整的句子。例如:

content="""你是一个专业的翻译官,尤其擅长科技类中英文翻译,必须保持原本的字幕格式,要求保持精简,不要肆意添加东西,不要漏翻。比如:原文:100:00:03,270-->00:00:06,292howtosetupbothabasicandadvancedRAGpipeline翻译:100:00:03,270-->00:00:06,292如何设置基本和高级的RAG管道"""注意Prompt加入了必须这个词,要求保持字幕样式,还有要求保持精简,不要肆意添加东西,也不要漏翻。这是因为我发现有时候翻译出的中文太啰嗦了,导致后面使用chattts合成的音频要比原视频多出几分钟,这是无法接受的。

这样我们就能得到类似如下的中文字幕。

但我的内容是字幕,因此对于翻译本身还有要求。因此我参考吴恩达老师的反思策略写了translator_agent。

deftranslate_agent(source_text):translation_1=initial_translation(source_text)reflection=reflect_on_translation(source_text,translation_1)translation_2=improve_translation(source_text,translation_1,reflection)returntranslation_2最早的Prompt设定,经常出现几个连续字幕是重复的内容,就是通过反思他也只是删除重复内容,但不能让字幕在整句翻译的时候考虑字幕块的分布问题,所以Prompt在初始翻译的设定要考虑到这一点。

最后是根据反思的建议进行改进的的Prompt设定,它的系统Prompt设定不变,但是要求按照专家的建议进行改进,我还告诉他干得好,奖励5000美元(不知道人民币有没有效果)。在改进过程中,我经常看到它会把移除的字幕换成提示语(removeduplicate),所以我们在Prompt种要求在无需改进时候就返回原始翻译或者移除的情况下就展示为空等。

我们已经知道pysrt可以处理字幕文件,接下来可以使用pysrt读取中文字幕,并遍历调用ChatTTS的infer接口生成音频,如在第一节所示。音频的连接我们采用pydup工具,它支持插入静音片段和使用+号进行连接,也可以直接读取mp3、wav等文件。尽管我没有深入研究其全部功能,但主要是在MarsCode上生成的代码基础上进行了一些修改。

full_audio=AudioSegment.silent(duration=0)subtitles=pysrt.open(subtitle_path,encoding="utf-8")fori,subtitleinenumerate(subtitles):text=subtitle.textstart_time=time_to_ms(subtitle.start)end_time=time_to_ms(subtitle.end)duration_ms=end_time-start_timewavs=chat.infer([text.replace('\n','')],use_decoder=True,params_infer_code=params_infer_code)mp3_filename=f"temp_{i}.mp3"wav_to_mp3(mp3_filename,wavs[0])speech=AudioSegment.from_mp3(mp3_filename)full_audio+=speech虽然看起来比较简单,但实际生成的音频和字幕大部分都无法匹配。需要处理诸如空字幕、开始前后加入静音片段。最主要的问题是合成的音频长度和字幕不匹配,这意味视频和音频也不会匹配,这是一个严重影响体验的问题。与MarsCode沟通得知,FFmpeg中大约有几种方法,其中asspeed我们不考虑,第2个方法的输入源必须是视频,因此也不考虑。

经过测试,我感觉第一种使用atempo过滤器的方法效果最好。因此,我要求MarsCode使用pydup实现第一种方法如下,最好将倍速调整到0.5-2.0之间,超过2.0之后基本听不太清楚了。

既然我们已经生成了中文字幕和普通话音频,最后一步就是通过FFmpeg将所有文件合并,生成最终的视频。在反复询问MarsCode后,我了解到由于字幕的合并需要重新编码视频,因此最终FFmpeg命令如下:

最终,我们成功地将一些只有英文字幕而没有中文配音的教程转译为自然地道的中文配音,期望能更好地普及优秀的英文视频教程。虽然现阶段对于英文转中文发音后,导致字幕和合成语音有些许同步的问题,此外对于音频的速度控制,仍然不够理想,但我想这已经是一个很大的进步,这里也欢迎亲爱的读者提出更好的建议。此外,我们还可以使用ChatTTS克隆音色,并控制在不同人说话时候的音色,这样就能做到完全拟真的效果,也不会有违和的感觉,或许这需要使用whisper等ASR自动语音识别判别声音,或许有一天多模态大模型可以完全自动克隆音色并翻译合成。如果你有想看的英文教程,欢迎留言,不要私信,私信需要我回关才能回复。

THE END
1.重要学习网址收藏1ZhemgLee的技术博客19.33万字!深度学习笔记在线版发布! 总1:https://mp.weixin.qq.com/s/hxHqHnGykjbyZk25GxZ8cA 分1:https://github.com/fengdu78/deeplearning_ai_books 20.最新PPT科研绘图教程库 https://mp.weixin.qq.com/s/JIjneaIdw6XYIoClbXSG9Q 21.太赞了!100个案例,Matplotlib 从入门到大神!(附源代码) https://blog.51cto.com/u_15240054/2873341
2.deeplearningai官网,专注于人工智能领域的在线课程学习平台《神经网络与深度学习》(Neural Networks and Deep Learning):由 deeplearning.ai 提供的免费课程,介绍了神经网络和深度学习的基本概念和原理。 《深度学习入门:基于Python的实践》(Deep Learning for Coders):由 fast.ai 提供的课程,着重于以实践为导向的深度学习入门,帮助学习者快速掌握深度学习的实际应用。 https://feizhuke.com/sites/deeplearning-ai.html
3.DeepLearning教程翻译米罗西非常激动地宣告,Stanford 教授 Andrew Ng 的 Deep Learning 教程,于今日,2013年4月8日,全部翻译成中文。这是中国屌丝军团,从2月20日战役打响之日,经过 50 天的团结奋战,取得的全面彻底的胜利。 此次战役的巨大胜利,之所以令人激动,有三方面的原因。 https://www.cnblogs.com/zhehan54/p/7083402.html
4.《DeepLearning》中文印前版开放下载,让我们向译者致敬机器之心在众多网友的帮助和校对下,草稿慢慢变成了初稿。尽管还有很多问题,但至少 90% 的内容是可读的,并且是准确的。我们尽可能地保留了原书 Deep Learning 中的意思并保留原书的语句。 然而我们水平有限,我们无法消除众多读者的方差。我们仍需要大家的建议和帮助,一起减小翻译的偏差。 https://www.jiqizhixin.com/article/2647
5.论文翻译DeepLearningdeeplearning学术写作翻译【论文翻译】Deep Learning Yann LeCun? Yoshua Bengio? Geoffrey Hinton 深度学习 Yann LeCun? Yoshua Bengio? Geoffrey Hinton Abstract Deep learning allows computational models that are composed of multiple processing layers to learn representations of data with multiple levels of abstraction. https://blog.csdn.net/diaokui2312/article/details/107746725/
6.GitHubsoloyuyang/deeplearningbookDeep Learning 中文翻译 公开1个多月,在众多网友的帮助下,草稿中的草稿慢慢变成了草稿。原本打算我们翻译人员先相互校对一遍再让网友校对,但由于时间不足,于是更改计划,打算一起校对。 直译版逐渐向意译版过渡,我们希望尽可能地保留原书Deep Learning中的意思并保留原书的语句。 然而我们水平有限,哈姆雷特成千上万,https://github.com/soloyuyang/deeplearningbook-chinese
7.RegressionandClassificationCourse(DeepLearning.AI)Learn the fundamentals of machine learning with Andrew Ng in this updated 3-course Specialization by DeepLearning.AI and Stanford Online. Build and train models using Python, NumPy, and scikit-learn for real-world AI applications. Ideal for beginners.https://www.coursera.org/learn/machine-learning
8.DeepLearning(UFLDL)翻译版合集开发技术微风**风情上传3.46MB文件格式docxDeepLearning机器学习深度学习UFLDL UFLDL的深度学习教程翻译,适合入门。 (0)踩踩(0) 所需:1积分 Simply Expression Language 2024-12-18 16:45:59 积分:1 Images and Base64 2024-12-18 16:45:32 积分:1 physicalDep https://www.coder100.com/index/index/content/id/2530433
9.[DeeplearningAI笔记]序列模型3.6Bleu得分/机器翻译得分指标即如果机器翻译的长度大于人工翻译输出的长度,BP=1,而其他情况下 BP 的定义会遵从一个式子,从而减小 Bleu 得分的值。 Bleu 得分是一个单一实数评价指标,其在机器翻译和图片描述中应用广泛,用以评价机器生成的语句和实际人工生成的结果是否相近。 参考资料 https://cloud.tencent.com/developer/article/1679650
10.《深度学习DeepLearning》中文版高清完整PDF版下载神经网络和深度学习(Neural Networks and Deep Learning) 中文pdf完整版 内容为时下最火热的神经网络和深度学习,该教程来源于美国Michael Nielsen的个人网站,他致力于把神经网络与深度学习的高深知识以浅显易懂的方式讲解出来,成为众多大牛推荐的必读网络资源之一。国内有识之士把其翻译成中文,方便了广大读者。是不可多https://www.iteye.com/resource/u014036026-9822874
11.DeepL翻译:全世界最准确的翻译即时翻译文本&完整的文档文件。为个人和团队提供准确的翻译。每天有数百万人使用DeepL进行翻译。https://www.deepl.com/
12.2神经网络与深度学习(NeuralNetworksandDeepLearning)免费在线预览全文 《神经网络与深度学习》 NeuralNetworksandDeepLearning https://nndl.github.io/ 邱锡鹏 xpqiu@ 2020 年3 月7 日 序 很高兴为邱锡鹏教授的《神经网络与深度学习》一书写个序. 近年来由于阿尔法围棋战胜人类顶级高手新闻的轰动效应,让人工智能一 下子进入了寻常百姓家,成为家喻户晓的热词. 阿尔法https://max.book118.com/html/2021/0710/8060137027003120.shtm
13.翻译'DeepNg'–字典中文DeepLearning.ai :DeepLearning course by AndrewNg, Founder of coursera DeepLearning.ai :深度学习课程,作者coursera的创建者,吴恩达 ParaCrawl Corpus In June of 1982, 123 of the white ministers of theNGchurch had a joint letter published in the official mouthpiece of the church, Die Kerkbode, sayinghttps://glosbe.com/en/zh/Deep%20Ng
14.8个学习AI的网站(免费自学人工智能必备)学吧导航DeepLearningAI网站也是由人工智能和机器学习领域的权威吴恩达教授创建的在线学习平台,该网站提供与深度学习相关的各种课程和资源,深度学习是机器学习的一个子领域,专注于人工神经网络和深度神经网络。课程设计为初学者和有经验的实践者都可以使用,分为入门、中级、高级三个层次,涵盖一系列与深度学习有关的主题,包括神经https://www.xue8nav.com/2090.html
15.推荐章节(DeepLearning)书评现在市面上系统讲解Deep Learning的书不多,出版的更少,毕竟像CNN这种东西本身就没人真懂,在这领域经验主义远强于逻辑主义。这本书是我目前读过讲DL最好的一本(虽然我读过的并不多,有其他好书还请推荐)。这里推荐几个写的很好的章节。第一部分:这部分其实没什么好说的,基本就是统计学习最基础的线性代数,概率https://book.douban.com/review/8291848/
16.最强通用棋类AI,AlphaZero强化学习算法解读Recall that systems like DeepBlue would rely on a human-defined “evaluation function”, which would take as an input the board state and output the “value” of the state. Nowadays, it’s extremely easy for DeepLearning models to take as an input an image and classify it as a dog orhttps://www.flyai.com/article/770
17.数据驱动软测量深度学习调研(QingqiangSunandZhiqiangGeA Survey on Deep Learning for Data-driven Soft Sensors (Qingqiang Sun and Zhiqiang Ge, Senior Member, IEEE) 本文是来自浙江大学葛志强教授团队21年的一篇关于深度学习软测量的综述,文章详细总结了当前深度学习在软测量领域的各项工作以及未来的研究热点及展望。 https://www.jianshu.com/p/95f3d67d40f9
18.DeepLearningTool的两个版本Deep Learning Tool 0.4 (via MVP, MVTec's Package Loader)Deep Learning Tool 0.4 (for offlinehttps://www.51halcon.com/forum.php?mod=viewthread&tid=4390
19.MachineLearningMastery——免费在线学习机器学习,从基础到高级免费在线学习机器学习,从基础到高级 网址:Start Here with Machine Learning (machinelearningmastery.com) https://home.designshidai.com/7815.html
20.什么是深度学习(DeepLearning)深度学习(Deep Learning)是机器学习的一个子集,而机器学习是人工智能的一个分支,它使计算机能够从数据中学习并执行通常需要人类智能才能完成的任务。深度学习使用人工神经网络,一种受人脑结构和功能启发的算法,可以从大量数据中学习并进行预测或分类。 深度学习的工作原理 https://www.tuidog.com/8481.html
21.DeepLearningDataSynthesisfor5GChannelEstimationsimParameters = hDeepLearningChanEstSimParameters(); carrier = simParameters.Carrier; pdsch = simParameters.PDSCH; Create a TDL channel model and set channel parameters. To compare different channel responses of the estimators, you can change these parameters later. channel = nrTDLChannel; channelhttps://www.mathworks.com/help/5g/ug/deep-learning-data-synthesis-for-5g-channel-estimation.html
22.15个顶级的开源人工智能工具聚合数据gpu的多台机器上它都有优异的表现.微软主要用它做语音识别的研究,但是它在机器翻译,图像识别,图像字幕,文本处理,语言理解和语言建模方面都有着良好的应用. 3. deeplearning4j deeplearning4j 是一个 java虚拟机(jvm)的开源深度学习库.它运行在分布式环境并且集成在 hadoop和 apache spark中.这使它可以配置深度神经https://www.juhe.cn/news/index/id/516
23.吴恩达人工智能布局三板斧第一斧:真要培养这么多AI专家?科学湃以下是吴恩达发布最新项目的博客全文翻译 : 亲爱的朋友们: 我一直在进行三个 AI 项目的相关工作。现在,我非常激动的宣布我的第一个项目:deeplearning.ai,一个旨在传播 AI 知识的项目。目前已经在 Coursera 上开放了一系列的深度学习课程。这些课程将能帮你掌握深度学习知识,并助你在该领域成就自己的一番事业。 https://www.thepaper.cn/newsDetail_forward_1757423
24.人机交互系统——深度学习分布式计算框架? 机器翻译 ? 个性化推荐 ? 词向量 ? 语义角色标注 ? 案例: ? 高尔夫球场的遥感检测:http://ai.baidu.com/support/news?action=detail&id=976 ? Github地址:https://github.com/PaddlePaddle/Paddle 2.2 Deeplearning4j Deeplearninghttps://maimai.cn/article/detail?fid=1390980126&efid=wrcrBSvTljJpbglEWm71iw