赛博斗蛐蛐?B站微博知乎大混战中学透GraphRAG

最近发现了一个来自B站UP主「林亦lyi」的开源项目 platform-war-public[1] 。

这个项目很有意思,它通过让AI学习B站微博知乎的评论内容,化身为资深用户,从而模拟不同平台展开一场激烈的辩论。

光说不练假把式,不如直接上手试试看效果!我选择了一个婚恋相关的辩题:裸婚是否能走得长久? 把程序跑起来看看 AI 们是怎么辩论的:

css 复制代码
B站:我支持裸婚能够走得长久。 婚姻是两个人的事,只要双方真心相爱,愿意共同面对生活中的困难和挑战,裸婚完全可以走得长远。经济基础固然重要,但婚姻中的真情实感和相互扶持才是婚姻能够长久的关键。

微博:我反对B站的观点!结婚的基础是双方的幸福感和生活保障,但现在的年轻人生活幸福度太低,没有自己的时间,失业率高,工作时间长,看不到希望,自然对婚姻敬而远之。在这样的环境下,裸婚想要走得长久,难度不言而喻。

知乎:我反对B站的观点!我觉得裸婚想要走得长远是有困难的,它忽略了婚姻中经济基础的重要性。"经济基础决定上层建筑",没有一定的经济基础,婚姻很难稳定。

不得不说,AI 扮演的各个平台的味儿还挺足,这是咋做到的呢?

其实项目运用了微软7月份开源的一项新技术------GraphRAG[2] 本文将以这场辩论为例,带大家走进GraphRAG的内部,了解它是如何工作的,以及它的独特优势所在。

PART 1: 提取关键词

首先,程序接收到辩题后,会将其输入大语言模型,由模型提取辩题中的核心关键词:

js 复制代码
我:"你是社交平台用户群体意志的化身,你正在参加一场辩论。请你按照你代表的平台,根据当前的辩论主题和已经进行的历史对话,生成对当前主题继续辩论的合适策略。我们目前的辩题是 "裸婚能否走的长久", 其他辩友的辩词是"xxx"。"

chatgpt :mode="直接检索", query="裸婚能否长久的论点和依据是什么?", entities=[]

可以看到,大语言模型为我们选择了当前适合的检索模式:直接检索。并结合辩题和当前的辩论情况精简出一条 query, 并提供关键词节点(entities)。

「小贴士」:

本项目提供了4中检索方式,分别是:

  1. 直接检索模式:用于需要快速确立基本观点,或作出直接明确的回应。

  2. 联想检索模式:需要对单一事物进行多角度分析,探索论点的连带影响和延伸问题。

  3. 关系检索模式:涉及到两个或多个节点或观点的联系

  4. 社区检索模式:需要从更宏观的角度审视问题,汇总普遍观点或共识。

PART 2 : 开始检索

接下来,我们将基于大语言模型提供的「检索模式」、「查询词(query)」和「关键词节点」,从向量数据库中检索相关话题与评论内容。

对于检索结果,将根据相关性评分进行筛选,仅保留相关性更高的结果。以下展示了不同检索模式下的结果示例:

2.1 直接检索:

直接检索是从全局向量数据库中检索, 获得「原始话题」和「评论数据」。

js 复制代码
chatgpt: mode="直接检索", query="裸婚能否长久的论点和依据是什么?", entities=[]

数据库 :「话题」:#年轻人婚恋更看重情感质量#......  「所有评论」: 不看看经济成啥样了,结的起婚? 每天就盯着这点事......

2.2 联想检索:

联想检索是根据大模型提供的节点关键词, 到对应节点的向量数据库中搜索相关话题和评论。依据「知识图谱」生成「节点之间的关系」。

js 复制代码
chatgpt: mode="联想检索", query="裸婚能否长久的论点和依据是什么?", entities=["婚姻"]

数据库:[关联实体 - 婚姻]:(原始话题与评论数据....略) 

数据库:[关联关系]:「婚姻」与「现代社会」的关系是:在现代社会中,婚姻不再是生活必需品,人们认为可以不通过婚姻来实现个人价值和幸福生活。[关联关系]:「女权」与「婚姻」 的关系是:主张抛弃婚姻,成为独立女性。[关联关系]:「彩礼」与「婚姻」 的关系是:成为结婚的负担和阻碍。

2.3 关系检索:

关系检索是对实体对进行路径搜索,搜索两个实体间的所有路径。

js 复制代码
chatGpt: mode="关系检索", query="裸婚能否长久的论点和依据是什么?", entities=["婚姻", "彩礼","相亲"]

数据库:[节点路径]: 彩礼 -> 相亲 -> 婚姻 -> 彩礼 -> 男女平等 

数据库:[关系链]: 彩礼->相亲时,双方会避免因彩礼问题导致的争执-> 相亲: 很多女性参加相亲是出于对婚姻的强烈需求-> 婚姻: 男方父母坚决不给彩礼钱,导致婚姻中的彩礼钱问题成为讨论的焦点-> 彩礼:取消彩礼陋习是实现男女平等趋势的一部分-> 男女平等

2.4 社区检索:

社区检索是从从社区向量数据库中检索子社区, 获得社区成员和社区简介信息。

js 复制代码
chatgpt:mode="社区检索", query="裸婚能否长久的论点和依据是什么?", entities=["婚姻", "彩礼","相亲"]

数据库: 爱情, 身体接受,  非独家庭, 平台, 社会现实, 沟通, 安全感, 物质条件, 恋爱

数据库: 我认为爱情是婚姻中最核心的元素,没有爱情的婚姻就像没有灵魂的躯壳。在我看来,真正的爱情不仅仅是肉体的吸引,更是灵魂深处的共鸣....(省略)
```js

PART 3 : 生成辩词

将以上检索结果和对应prompt  输入大语言模型,来生成各方辩词,就得到了上述示例中的效果。

```js
我:"你是B站用户群体意志的化身,正在参加辩论。现在,你需要针对当前的讨论进行回复。你回复的内容必须完全基于检索结果进行组织。检索内容是{....}。

chatgpt:  生成辩词如下:我支持裸婚能够走得长久。 婚姻是两个人的事,只要双方真心相爱,愿意共同面对生活中的困难和挑战,裸婚完全可以走得长远。经济基础固然重要,但婚姻中的真情实感和相互扶持才是婚姻能够长久的关键。

PART 4 : 阶段小结

我们首先借助大语言模型处理辩题,提取关键词节点并确定检索方式,随后结合知识图谱进行向量化搜索,再基于检索结果组织辩词。这一过程直观地展示了 GraphRAG 的部分核心原理。


那么我们再回头来看下,如何根据原始的评论,来构建知识图谱和检索数据库呢?

PART -2: 构建知识图谱

首先,需要构建知识图谱。这一过程需要通过「大语言模型」对原始评论数据进行处理,提取「关键节点」并梳理它们之间的「关系」,从而形成系统化的结构。整个图谱的构建过程借助了 NetworkX 开源库实现。

知识图谱可视化之后的效果如下:

可以看到节点周围展示了相关的关键词,点击连线即可查看它们之间的具体关联。

在生成知识图谱的过程中,如果有相似的节点(如 "妈妈" 和 "母亲" ),则进行节点合并。这里节点合并是借助 HuggingFaceBgeEmbeddings 来对每个实体向量化,通过比较向量的距离来判断两个文本的相似度。

「小贴士」

Q: 向量化后的数据长什么样?

A: 是一个 json,由一个一维数组表示当前节点的信息:

{

//7旬大爷的unicode编码,是一个关键词节点

\u65ec\u5927\u7237: [

//数据中包含该节点的信息

0.01363861933350563,

0.05924391746520996,

-0.03023160807788372,

-0.044953517615795135,

...

]

}

PART -1: 构建向量数据库

接下来,需要为知识图谱中的每个节点创建对应的「向量数据库」,以便后续检索。例如,"彩礼"节点的向量库中存储了"彩礼"与其他节点的关系以及相关的原始评论内容。

此外,还需要单独生成全局向量库和社区向量库,分别用于「直接检索模式」和「社区检索模式」。

全局向量库将所有话题及评论内容格式化为 Markdown 形式后存储;而社区向量库则将社区内容概要存储。这种设计方便了针对不同场景的高效检索。

「小贴士」

Q: 社区数据是怎么收集的?

A: 通过知识图谱中的图结构,调用nx.community.louvain_communities库方法来实现的。

PART 0: 阶段小结

这部分我们学习了如何生成GraphRAG中的知识图谱,核心是利用大语言模型提取评论数据中的节点和关联,并以此构建图结构,并对相似信息进行聚类。

至此,我们已经了解了整个工作流程。接下来,回顾一些相关的小知识。

在本次项目中涉及了 AI 领域的一个重要概念------RAG ,即Retrieval-Augmented Generation(检索增强生成)。顾名思义,它通过从海量数据中检索相关信息,再结合检索内容生成答案,广泛应用于私有知识库的检索场景。

我们使用的GraphRAG 是 RAG 的一种改进版本,它将知识图谱引入检索过程。与传统 RAG 相比,GraphRAG 利用图结构的优势,在以下两方面表现尤为突出:

1.连接分散的信息:GraphRAG 能从分散的数据中发现关联,例如在本例中,它能够将网友的零散评论关联起来,并生成一个全面的答案。

2.总结主题与概念:它能够识别数据集中的关键主题,生成高层次的摘要,帮助快速理解大型文档集合的核心内容和重点。

微软将大语言模型与知识图谱相结合,打造了这项具有高度创新性的技术,为多种产品和应用场景提供了更多可能性。

关于我

持续更新 AIGC 最新行业动态,若希望更好的阅读体验,可移步微信公众号:张XX的AI小站

参考资料

[1] platform-war-public

github.com/LYiHub/plat...

[2] GraphRAG

github.com/microsoft/g...

相关推荐
兔爷眼红了36 分钟前
Swift语言的物联网
开发语言·后端·golang
win水1 小时前
数据结构(初阶)(一)----算法复杂度
c语言·数据结构·算法
I_Am_Me_1 小时前
【专题三:穷举vs暴搜vs深搜vs回溯vs剪枝】46. 全排列
算法·机器学习·剪枝
I_Am_Me_1 小时前
【专题二 二叉树中的深搜】814. 二叉树剪枝
算法·剪枝
我想吃余1 小时前
高阶C语言|库函数qsort的使用以及用冒泡排序实现qsort的功能详解
c语言·开发语言·数据结构·算法
董董灿是个攻城狮1 小时前
020:为什么 Resnet 如此重要?
人工智能·计算机视觉·cnn
码上艺术家1 小时前
手摸手系列之 Java 通过 PDF 模板生成 PDF 功能
java·开发语言·spring boot·后端·pdf·docker compose
汪子熙1 小时前
为什么 BERT 仅使用 Transformer 的编码器部分,而不使用解码器部分?
人工智能
AI服务老曹1 小时前
满足不同场景的需求的智慧物流开源了
人工智能·开源·自动化·能源
程序猿阿伟2 小时前
《开源与合作:驱动鸿蒙Next系统中人工智能技术创新发展的双引擎》
人工智能·开源·harmonyos