大模型在知乎舰桥平台的应用和实践
全文目录:
1. 业务现状和背景
2. 知识体系分类整理
3. 自然语言转筛选条件
4. 自然语言数据分析
5. 总结与展望
6.Q&A
分享嘉宾|侯容 知乎 舰桥平台 Leader
编辑整理|罗壮 Soul
内容校队|李瑶
出品社区|DataFun
01
首先来介绍下舰桥平台。
舰桥是知乎内部的一个运营分析平台,它主要的场景涉及找人、找内容、盯人、盯内容、找机会、查问题,它提供的能力包括筛选、打包、分析和监控。
在这个过程中,我们是如何和大模型进行结合的呢?
知乎的业务发展起源于灵感,可以分为外部灵感和内部灵感。外部灵感主要是来源于站外的新闻,我们会讲站外的新闻根据知识体系聚合成事件,再根据事件产出问题,最后基于问题形成讨论场,讨论会产生站内的供用户消费的内容。内部灵感主要是来源于站内已有的内容,对已有的内容进行整理、分析、合并和分类。我们把这一部分的工作称为知识体系整理,也是大模型在舰桥平台应用的第一部分。
第二部分针对知乎站内的内容生态建设,我们会利用大模型通过自然语言在推荐系统的基础上宏观调控内容生态。
第三部分针对业务分析,利用大模型通过自然语言进行数据分析。
以上就是大模型在舰桥平台的应用场景,这三个场景无论在业务上还是在技术上都具有一定的独特性和代表性。
下面来具体介绍第一个场景,即知识体系的分类整理。
这个场景有两种业务形态,第一种是事件聚合,传统的做法是从站外的新闻源获取新闻,通过聚类的算法进行聚合,再根据聚类结果人工新增事件,接着选择合适的角度基于事件创建问题进而引发多观点讨论。第二种是沉淀内容,我们需要重新整理出对应的多级分类树和对应内容,结构化已有的知识,让沉淀的内容进一步引起讨论。
在用大模型解决以上两个业务需求的时候,我们遇到了很多问题,包括聚类准确性的问题、max token问题、流程复杂性问题。
我们基于大模型设计的事件聚合流程如上图所示,整体分4个阶段:
新闻提取关键信息并处理成向量。
多轮高准聚类直到无法聚类,大模型在这个阶段起到的作用是给节点下的新闻或者事件起名。
一轮高召聚类,聚类后,再通过大模型判断聚类节点中事件是否相同,如果相同则合并。
生成事件-->新闻的最终结果,交付给业务方使用。
将对新闻进行层次聚类替代为对大模型生成的事件进行层次聚类有效地解决了聚不上的case;让大模型判断聚在一起的新闻或者事件是否真实是相同的事件并根据结果采取相应的措施有效地解决了过度聚合的case。
由于已经通过层次聚类对节点下的内容进行了分组,所以输入给大模型的prompt都比较小,这也有效地解决了max token问题。
由于基于大模型去完成整个任务的流程相对比较困难,我们设计并开发了针对该任务的类似于MapReduce的方案,这也很好地解决了流程复杂的问题。
这套新方案有以下优点:
事件名可以自动生成,无需人工介入。
准确率的提升。
至于知识整理,我们基于大模型搭建了如上图所示的流程。整体流程大致可以分成以下几步:
内容拆分,确保prompt不超过max token。
map阶段:将每组内容生成分类名。
reduce阶段:分类名两两合并,直到无法合并。
结果写入文件,并根据group by后的数量决定是否需要递归从初始阶段开始执行,最终将所有文件merge成一个结果文件。
在这个过程中,我们也会遇到一些问题,具体的解决方法为:
绕开max token:先将内容按照max token拆分,形成分类,再进行分类合并。
快速处理大量内容:将任务抽象成MapReduce节点,同一stage节点可并发,保障并行度。
大模型限速:MapReduce任务是一个通用的task,针对该task的调度队列进行集群统一限速。
接下来介绍自然语言转筛选条件部分,这部分面向的场景主要是打包、找人、找内容。
在我们的业务中,业务人员需要根据条件找到用户和内容。这样的任务有以下几个特点:
筛选条件很多。 不同条件之间的逻辑组合很多。
阶段一:基于原子条件构造筛选条件。 阶段二:将原子条件完成交并差构造筛选条件。 阶段三:使用模糊语句构造筛选条件。 阶段四:构造有明显逻辑错误的筛选条件。
JSON格式错误,我们构造了大量的JSON的样本。 存在额外条件,我们尝试使用随机条件组合构造样本。 大于小于号错误,我们用筛选条件随机生成多种大于小于的样本。 且或非理解错误,我们尝试随机组合筛选条件构造一批样本。 时间区间理解成时刻,我们尝试使用多个时间类筛选条件构造一批样本。 条件部分缺失,我们尝试使用随机条件组合构造样本。
降低了使用成本,用户使用量提升,提高了整体的工作效率。 新手友好,很多新同学同坐自然语言转筛选开始学会使用这一功能,降低了推广成本。 改变了传统的新标签、新特征推广方式,将新标签上线后对各业务方宣讲转变为自动翻译成新标签的形式,提升了沟通效率,降低了协同成本。
如何将多变的自然语言在当前场景下转成合适的SQL? 如何尽可能地兼容用户输入的自然语言? 如何保障给负责当前业务的同学看到的一定是当前业务自身的结果?
将问题转成embedding并通过MMR找到类似的问题Top10 考虑max token限制生成合适的prompt:
绿色:去重后的列名 浅蓝:查询的例子 深蓝:本次用户的问题
早期使用余弦相似,类似的样例太多,效果不好。
如何尽可能将查询和数据源关联好?
用户输入的自然语言很泛,如何在这种情况下尽 可能准确的满足用户需求?
PE 工作没有成熟经验,大家都在摸索,摸着石头过河。 max token是一个挑战,需要设计很多绕行方案。 prompt几乎没有什么最佳实践,凡事靠试。 会有提示注入的问题。 大模型比较慢,且这个问题在复杂场景下会被放大。 数据量大或者场景复杂时没有高效的框架。 构造微调的数据缺乏通用的方法和工具,需要仔细思考。
会出现面向大模型复杂任务的处理框架。 需要有业务的想象力,模型能力决定下限,想象力决定上限。
Q1:事件聚合过程中的大模型如何选型?
Q2:事件聚合的评估手段有哪些?
Q3:知识整理场景如和终止迭代?
以上就是本次分享的内容,谢谢!
分享嘉宾
INTRODUCTION
侯容
知乎
舰桥平台 Leader
侯容,知乎舰桥平台 Leader,主要负责知乎舰桥平台的业务和研发(一站式内容&用户管理平台。面向找人、找内容、盯人、盯内容、找机会、查问题六大核心的筛选、打包、分析、监控的运营平台)。
往期推荐
点个在看你最好看