点击上方蓝字关注更多AI资讯
书接上文,之前一篇Google的NotebookLM爆火,一键生成超逼真双人对话播客!AI改革的春风终于席卷了播客!功能实测+开源版本部署看这篇!我们重点介绍了AI在播客领域目前的影响,以及比如小宇宙、秘塔、通义等等代表性产品的播客有关功能的介绍,这其中来自Google的NotebookLM更是凭其Audio Overview的文转播客音频功能实力出圈!
NotebookLM是一款由谷歌开发的AI工具,它利用自然语言处理技术,能够处理和分析用户上传的文档内容,包括生成摘要、解答问题、生成对话式播客等。上一篇我们已经对它的惊艳能力有了初步了解,也基于开源版本的平替进行了本地的部署,那今天我们再深入一下!就NotebookLM其背后的技术进行分析,并且尝试基于Coze自己来快速实现一个Agent版的个人NotebookLM!
01
NotebookLM 背后的技术
Google 的 NotebookLM 背后的技术主要依赖于先进的自然语言处理(NLP)和大规模预训练模型并使用 自家模型Gemini 1.5 Pro,尤其是基于 Transformer 架构的模型,如 BERT、T5 等。这些模型擅长处理大规模的文本数据,并能够理解语境,提取关键信息和生成自然语言总结。下面我们详细探讨其背后的技术原理以及相关的学术研究。
NotebookLM的技术架构
1. 基于Gemini 1.5 Pro
NotebookLM基于Google的Gemini 1.5 Pro模型,在处理长文本方面具有显著的优势。它能够无缝分析、分类和总结复杂的长篇文档。例如,它可以处理高达100万token的文本,并且在检索完整性上达到了几乎完美的水平(>99%)。此外,该模型在处理高达530,000 token的文本时,能够实现100%的检索完整性,在处理1,000,000 token的文本时达到99.7%的检索完整性。这种能力使得Gemini 1.5 Pro在长文档问答(long-document QA)、长视频问答(long-video QA)和长上下文语音识别(long-context ASR)等任务中表现出色.
正是基于Gemini 1.5 Pro超强的长文本理解和多模态能力,NotebookLM能够处理和分析用户上传的文档内容,整合不同类型的媒体内容,包括Google文档、幻灯片、PDF、文本文件和网页链接等。
2. RAG技术
NotebookLM采用检索增强生成(RAG)技术,结合大型语言模型(LLM)生成摘要、提纲、常见问题解答和学习指南等内容。RAG技术通过将语言模型与用户笔记和外部来源结合,提高信息的准确性和可靠性,生成更准确的信息。
3. Transformer 和预训练模型
Gemini 1.5 Pro的背后是大名鼎鼎的Transformer 架构,Transformer是 Vaswani 等人在 2017 年的论文 "Attention is All You Need" 中首次提出的。Transformer 在自然语言处理(NLP)领域引发了一场变革,它通过自注意力机制让模型能够同时处理文本中的每一个词,从而有效地捕捉到长距离的语义依赖关系。
像 BERT 和 T5 这样的基于 Transformer 的模型,采用了一种两阶段的学习策略:预训练和微调。首先,这些模型会在庞大的未标注文本数据集上进行预训练,以学习通用的语言表示。随后,在针对特定任务时,会利用相对较少的标注数据对模型进行微调。这种结合了大规模预训练与任务导向微调的方法不仅增强了模型对于新任务的适应能力,而且即使在只有少量标记数据的情况下也能表现出色。
4. 文本生成与摘要技术
NotebookLM 能够自动生成文档摘要,这一功能依托于自然语言生成(NLG)技术,尤其是在文本摘要生成领域的研究。文本摘要主要可以分为提取式和生成式两大类。其中,提取式摘要直接从原文中选取关键句或段落进行组合;而生成式摘要则是通过模型学习后自主创作出简洁的总结。
在处理文档摘要时,NotebookLM 更加侧重于采用生成式方法,这背后支撑的是像 BART(双向及自回归变换器)和 T5 这样的先进生成模型。这类模型利用解码器来产生连贯且准确的摘要内容,能够更好地捕捉文档核心信息,并以一种自然流畅的方式呈现给用户。
3. 文本转语音(TTS)
NotebookLM使用了开源的文本转语音框架MeloTTS,实现了将PDF等文档内容转换为对话音频文件的功能。这一功能使得NotebookLM能够生成自然逼真的播客,并支持多种语言和自定义语气。
5. 稀疏混合专家(MoE)架构
除了Transformer,Gemini 1.5 Pro模型采用了稀疏混合专家(MoE)架构,能够在处理复杂问题时大幅提高效率。稀疏混合专家(MoE)架构是一种先进的模型设计范式,通过集成多个专家网络(Experts)和一个门控网络(Gating Network)来提高模型的容量和效率。MoE架构的核心原理是利用GateNet进行输入样本的分配,并通过专家模型进行处理和预测。在NotebookLM中,这一架构被用于替代传统的前馈神经网络(FFN),从而实现更高的效率和性能。
具体来说,MoE层包含若干“专家”,每个专家本身是一个独立的神经网络。当输入数据到达时,门控网络会根据数据的特征选择最合适的专家进行处理,这样可以确保模型只激活与当前任务最相关的部分,从而提高计算效率。这种稀疏激活机制使得NotebookLM能够一次性处理多达1500页的信息,非常适合处理大型数据集。
MoE的核心思想是通过正交化处理门控权重,可以增强专家网络间的区分度,处理远小于原先规模的token,达到相近的效果。这个思维方式在很多领域都适用,甚至我们自己搭建Agent都是适用的!
02
基于Coze的Agent快速搭建文转播客
前一篇我们讲了开源的open-notebooklm的部署和使用,不过环境的安装和代码的调整多少还是有一些开发门槛,那今天我们来尝试下用Agent实现类似的效果!无需代码基础,我们选择基于Coze平台可视化工作流,跟着我下面的步骤拉拉拽拽,就能搞定!
上面我们已经分析了NoteBookLM背后的技术,要用Agent来实现的话,我们再来分析一下NoteBookLM的工作流程。其实从前一篇notebooklm的交互上,我们也能大致分析出一些流程拆解的思路。
可以看到,从文字到对话播客的生成,有几个关键的中间产出——创作主题、摘要、基于文章观点生成的问题,以及最后的对话转音频技术。
基于此,我们可以理解出来大致的实现思路:
1. 将用户上传的文件/链接中的纯文本进行提取
2. 将文本输入到大模型,输出上面我们分析的创作主题、摘要,当然这些中间产出也是为了通过分步理解的方式,让大模型更优质的产出关键的结果——基于文章生成的问答对话
3. 将大模型生成的问答对话,根据角色进行分别处理并结构化输出
4. 将不同角色的谈话内容分别输入给 TTS合成语音
5. 将不同角色的聊天内容穿插,合成一段完整的音频,最终输出
借用下特工宇宙分析的流程图,基本和上面我们提取的流程一致
好了,接着我们就来基于coze搭建一个这样的工作流:
(这里就先略过一些基本的coze账号申请啦)
登录Coze-选择个人空间-选择工作空间-选择资源库-右上角添加资源-选择工作流
进来后,先在开始节点增加一个String类型的新的参数:article_url,再添加一个插件,如图关联一下参数
添加一个大模型,用来生成节目的台词
节目台词大模型的prompt为:
你是一个专业的广播节目编辑,节目叫:扣子电台。你会将原始内容转化为适合2位主播朗读的新闻广播节目稿。
你是一个专业的广播节目编辑,节目叫:扣子电台。你会将原始内容转化为适合2位主播朗读的新闻广播节目稿。
==原始内容==
{{input}}
====End======
注意:
1. 请直接输出主播朗读的台词,不要包含其他内容,也不用做自我介绍或者介绍今天的日期,直接进入主题。
2. 语气要非常自然,并且尽量在内容中增加更多语气词和口水词,像两个人在聊天,但不要用"啥"类似的东北话。
3. 请注意只有2位主播,一男一女,所以不要出现其他角色的对白,每句话不要过长,主播尽量多交流。
4. 稿件不要过长,尽量控制在10分钟以内。
5. 注意2位主播要经常互动,先有男主播开始讲话
示例输出格式:
男:各位听众大家好,欢迎收听小纸条电台
女:今天我们来聊一聊....
模型选择和参数关联配置如下,参数为上一个链接读取插件输出内容中的content
接着我们基于“生成节目台词”的模型后,添加一个代码块,主要是将大模型生成的男女主播对话的内容分别进行提取,这步主要是为了将各自角色的语音内容输入给对应音色的音频生成插件
代码如下(Python)
async def main(args: Args) -> Output:
params = args.params
lines = params['input'].strip().split('\n')
# 初始化两个数组
male_lines = []
female_lines = []
# 遍历每一行,根据前缀将对白添加到对应的数组中
for line in lines:
if line.startswith('男:'):
male_lines.append(line[2:])
elif line.startswith('女:'):
female_lines.append(line[2:])
ret: Output = {
"key0": male_lines,
"key1": female_lines
}
return ret
接着我们再添加两个文本转语音的插件,如下图红色为女声,蓝色为男生宿舍,各添加一个~
然后像这样与前一个代码块进行连接
男声插件的配置如下,注意这里我们选择了批处理,是希望这个音频插件批量的将属于男声的文字转化成音频链接,批处理最后输出的结果是一个数组,这样也有助于我们下一个环节做音频的合成
女声插件的配置如下,注意这里代码块关联的参数要取key1这个数组,一样是批处理,获得女声的音频链接的数组
再来添加一个代码块
代码块的配置如下
代码如下(javascript),这段代码就是将男女声生成的音频链接数组穿插着排队,合并为一个数组,也更加符合对话的模式
代码(javascript)
async function main({ params }: Args):
Promise<Output> {
const mergedUrls = [];
const maxLength = Math.max(params.audio.length, params.audio_1.length);
for (let i = 0; i < maxLength; i++) {
if (i < params.audio.length) {
mergedUrls.push(params.audio[i].data.url);
}
if (i < params.audio_1.length) {
mergedUrls.push(params.audio_1[i].data.url);
}
}
const ret = {
"key0": mergedUrls,
};
return ret;
}
接着,我们按照和之前一样的方式,添加一个叫做"音频处理工具"的插,参数配置如下,第二个urls参数来自上一个代码块的输出,也就是合并后的音频链接的数组
最后链接一个结束节点,audio参数引用上一个音频合并插件的输出url
到此,这个流就完成啦!试运行了一下,输入了一个小纸条之前的文章链接
(https://mp.weixin.qq.com/s/uYPdPFLS8xQEWLxSyJ38tQ),最后生成的音频效果正经可以!大家听听看:
可以看出来,整体流程并不复杂,但想要达到稳定逼真的效果需要一些工程上的优化手段,个人认为其中最关键的影响输出质量的为以下两个关键点:
1. 提示词技巧,需要将输入的文本转化成既具可读性和专业性的双人对话内容,这决定着最终内容整体质量,既不能过于泛泛也要避免生硬,还存在很大的调整空间
2. 语音合成技术,TTS音频生成的效果会直接影响最终的用户体验,效果逼真的语音模型才会让人有听播客的感觉,图中给到的例子是coze官方的插件,大家也可以再探索下集成更好的TTS方案的办法,这里也有很大的提升空间
到这里我们的工作流就完成啦!可以直接添加到Coze的bot中,这样我们就轻松拥有了一个可以免费帮我们把链接内容转成播客的对话Agent助手了!
工作流的链接是:
https://www.coze.cn/work_flow?space_id=7418044514025832502&workflow_id=7424161830437994547
参考自官方的一个工作流,除了上面讲的内容还支持了播客封面和标题的生成,大家可以按需体验和复制哦,除了提示词和语音合成这里还有优化的空间,输入形态这里目前也就只支持的公众号的文章链接,如果有小伙伴可以在输入端支持多模态输入,也欢迎评论区分享下让我来学习下!
一起学AI!