事件图谱构建初步

2024年4月27日

复现Doc2EDAG

由于一开始没有什么头绪,所以先尝试复现别人的代码。

https://github.com/Spico197/DocEE

download Data.zip from the original repo: https://github.com/dolphin-zs/Doc2EDAG

然后把解压的文件放到DocEE的Data文件夹里。

1
python stat.py
1
2
3
# run on ChFinAnn dataset (to reproduce |R|=1 results in Table 1 of the PTPCG paper)
$ nohup bash scripts/run_ptpcg.sh 1>Logs/PTPCG_R1_reproduction.log 2>&1 &
$ tail -f Logs/PTPCG_R1_reproduction.log

由于我是在服务器上跑的,如果不想先下载到电脑然后再传上去的话就需要想到一些不用vpn也能链接github和huggingface的方法。

对于github,我采用先导入到gitee,然后再从gitee克隆。

对于huggingface,我使用国内镜像站。

https://hf-mirror.com/

1
huggingface-cli download --resume-download bert-base-chinese --local-dir bert-base-chinese --local-dir-use-symlinks False

我复现论文中的实验竟然要两天,由于我在此期间已经实现了更简单的方法,所以就先不管这些现有项目了。

GPT对构建事件图谱的一些意见

GPT4的意见:

事件图谱构建方案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
事件图谱(Event Graph)是一种特殊的知识图谱,它以事件为核心,通过事件参与者、事件类型、事件发生时间、地点等信息构建起丰富的事件语义网络。建立事件图谱的过程可以概括为以下几个步骤:

1. **数据收集**:这是构建任何知识图谱的第一步,包括事件图谱。数据可以从各种来源获取,如新闻文章、社交媒体帖子、学术论文等。输入为数据来源,输出为收集到的原始数据。

2. **实体识别与链接**:这一步的目标是从原始数据中识别出实体,并将这些实体链接到已知的知识库(如Wikidata、DBpedia等)。这通常通过命名实体识别(NER)技术实现,可以使用如Spacy、Stanford NLP等工具。输入为原始数据,输出为标记的实体及其在知识库中的链接。

3. **事件抽取**:这一步的目标是从原始数据中抽取事件。事件通常由动词表示,事件的参与者、时间、地点等信息通常由动词的主语、宾语和修饰语表示。这通常通过依存句法分析和语义角色标注(SRL)技术实现,可以使用如AllenNLP等工具。输入为标记的实体及其在知识库中的链接,输出为抽取的事件及其相关信息。

4. **事件分类**:这一步的目标是将抽取的事件分类到预定义的事件类型中。这通常通过文本分类技术实现,可以使用如BERT、GPT等预训练模型。输入为抽取的事件及其相关信息,输出为分类的事件及其类型。

5. **构建事件图谱**:这一步的目标是根据抽取和分类的事件以及它们的相关信息构建事件图谱。事件图谱通常表示为一个有向图,其中节点表示实体或事件,边表示实体或事件之间的关系。可以使用如NetworkX、Gephi等工具。输入为分类的事件及其类型,输出为事件图谱。

6. **图谱存储与查询**:这一步的目标是将事件图谱存储到图数据库中,并提供查询接口。可以使用如Neo4j、JanusGraph等图数据库。输入为事件图谱,输出为图数据库及其查询接口。

以上就是构建事件图谱的基本步骤。需要注意的是,这个过程可能需要进行多轮迭代和调整,以优化结果的质量和覆盖率。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
好的,让我们使用一个简单的新闻报告样例来说明这个过程。假设我们有以下的新闻报告:

"2024年4月27日,苹果公司在加利福尼亚州的库比蒂诺发布了新款iPhone。"

以下是这个样例在每个步骤的处理过程:

1. **数据收集**:我们的输入就是上述的新闻报告。

2. **实体识别与链接**:使用NER技术,我们可以识别出以下实体:“2024年4月27日”(时间),“苹果公司”(组织),“加利福尼亚州的库比蒂诺”(地点),“新款iPhone”(产品)。然后,我们可以将这些实体链接到知识库中的相应实体。

3. **事件抽取**:通过依存句法分析和SRL技术,我们可以抽取出以下事件:“发布”(动作),并确定其参与者、时间和地点:主体是“苹果公司”,时间是“2024年4月27日”,地点是“加利福尼亚州的库比蒂诺”,宾语是“新款iPhone”。

4. **事件分类**:我们可以将“发布”事件分类为“产品发布”类型。

5. **构建事件图谱**:根据上述信息,我们可以在图谱中添加一个新的“产品发布”事件,其主体是“苹果公司”,时间是“2024年4月27日”,地点是“加利福尼亚州的库比蒂诺”,宾语是“新款iPhone”。

6. **图谱存储与查询**:最后,我们可以将这个事件图谱存储到图数据库中,并提供查询接口。例如,用户可以查询“苹果公司在2024年发布了哪些产品?”或者“新款iPhone是在哪里发布的?”等问题。

以上就是这个样例在每个步骤的处理过程。需要注意的是,这只是一个简化的例子,真实的事件图谱构建过程可能会涉及更复杂的语言理解和知识表示问题。

基于大模型的极简事件图谱构建

这不一定是一个好方案,但是实现起来很简单。由于我能力有限,不能在有限的时间内看懂别人的论文并修改他们的代码来用作我们项目的一部分,所以我在想如何快速作出一个简单易行又有成效的方法。

我对构建事件图谱的本质作了一些思考。构建事件图谱像是一个提取、整体有用信息的一个过程,把杂乱的非结构化文本信息转化为结构化的图信息。这个和知识蒸馏的过程有点像,大模型从知识蒸馏中来,本身又具有了知识蒸馏的能力。我就有个大胆的想法: 用大模型一步到位直接构建事件图谱

Prompt

经过一番打磨和探索,我得出下面这个可以引导大模型从文章等文本信息中提取事件和实体以及识别其中各种关系的prompt,其输出是 结构化的图信息 ,我们可以用图形库来可视化这些图。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
请分析并提取以下文章内容中的关键信息,按照指定的结构化格式输出事件节点、实体节点以及它们之间的关系(事件-事件、事件-实体、实体-实体)。确保输出遵循JSON-LD规范,并明确标注每个节点和边的类型及标识符,以便于构建事件图谱。
Article Content: (在此处插入文章内容)
Extraction Instruction:
Event Nodes: 识别并总结文章中描述的所有独特事件,包括但不限于会议、事故、发布、庆典等。为每个事件创建一个事件节点,包含事件的名称、描述、开始日期(如果提及)和地点信息。使用@type: "Event"标记此类节点。
Entity Nodes: 抽取所有提及的重要实体,如人名、组织机构、地点等,并为每个实体创建一个节点。实体节点应至少包含名称和描述,使用适当的类型如@type: "Person", "Organization", 或 "Place"进行标记。
Relationships:
Event-Event: 识别并描述任何两个事件之间的顺序关系(如“导致”、“紧接着”)、因果关系等,使用relationshipType: "Follows", "Causes"等来定义边。
Event-Entity: 确定每个事件涉及的实体(参与者、地点、主办方等),使用relationshipType: "HasParticipant", "LocatedAt"等描述关联。
Entity-Entity: 抓取实体之间的关系,例如隶属、合作、竞争等,使用相应的relationshipType描述这些联系。
Output Format Example:
{
"@context": "http://schema.org",
"@type": "EventGraph",
"events": [
{
"@type": "Event",
"@id": "<事件ID>",
"name": "<事件名称>",
"description": "<事件描述>",
"startDate": "<事件开始日期>",
"location": {
"@type": "Place",
"@id": "<地点ID>",
"name": "<地点名称>",
"description": "<地点描述>"
},
"relationships": {
"HasParticipant": ["<参与者实体ID1>", "<参与者实体ID2>", "..."],
"LocatedAt": "<地点ID>"
}
}
],
"entities": [
{
"@type": "<实体类型>",
"@id": "<实体ID>",
"name": "<实体名称>",
"description": "<实体描述>"
},
{...} // 更多实体...
],
"relationships": [
{
"@id": "<关系ID>",
"relationshipType": "<关系类型>",
"source": "<来源事件/实体ID>",
"target": "<目标事件/实体ID>"
},
{...} // 更多关系...
]
}
请确保输出结果是结构化且层次分明的JSON格式,以便于直接应用于图谱构建。

经过在GPT3.5的测试,这个prompt设计得应该还是比较好的。不过发现了一个问题就是通过一篇文章构建的事件图谱已经足够复杂, 如果在很多文章进行构建,还要考虑更多的问题 。这个问题对应到事件图谱构建中大概就是事件共指解析,或者还要涉及到“实体公指解析”。不过也可以看到,直接用****大模型 就解决了事件抽取和事件关系两个最关键的问题

事件图谱设计思路

总体分析

上面大模型从文本提取出结构化图信息只是事件图谱的一部分。它的确是能够从一篇文章中构建出一个事件图谱,但是这个并不是我们想要的。这个项目最终要做的是利用事件图谱的技术来实现对舆情信息的分析和把握。

网络舆情挖掘系统需求分析设计文档

从需求文档出发,先看 事件图谱模块 ,我们要实现 搜索事件,并根据搜索的输入给出对应事件的图谱

就单从这个的实现来看,我们有静态预分析动态生成两种方法。静态预分析是指系统后台自动地将所有的文本转化为结构化的图信息,并且将这些处理好的图信息存储在数据库中,如果有请求则从数据库中检索出相应的信息。动态生成是指只有当遇到请求,才检索出相应的文本再动态地生成事件图谱。当然,这两种方法不是对立的,可以结合到一起,而且有必要结合到一起。可以从下面两个角度看:

把事件图谱模块放到整个系统的需求和设计中看 ,它不但自己形成一个独立模块,而且 它是其他功能实现的重要基础 。其他以事件为单位的功能,多多少少都要事件图谱提供事件信息。所以,静态预分析是必要的。

从事件图谱模块的现实运作来看 ,从所有的数据中进行充分完整的预处理可能是无法实现的(由于算力、存储等限制),在静态预分析的基础上实现某些动态生成是必要的。

Pipeline

Pipeline of Network Hot-spot Detection System

下面的事件图谱pipeline主要是基于以上文档,基于具体实现作了一些调整。

1~2:静态预分析
3:动态生成

  1. 对于每一篇文章/帖子/新闻等,利用大模型转化为结构化的图信息。
  2. 对于结构化的图信息,利用embedding计算余弦相似度来实现事件和实体的聚类(事件/实体共指解析),在此基础上 构建高层的事件图和实体图
  3. 用户可以从事件图列表中检索对应的事件,从该事件对应的事件图中提取所有的子图,综合利用这些子图的信息来构建一个事件图谱(TODO,这里有待细化)。

step1具体实现

数据预处理

这里假设已经爬取到了文本信息,实际上文本信息可能有质量高低之差,比如标题的质量比正文的质量要高。但是经过一些考察,这些并没有确定的趋向,因此采用“大一统”的方法可能是最好的,也就是直接把标题和正文拼接起来给大模型处理。

可以直接保留(不用交给大模型)的有效信息大概是爬取的url和发布时间。

此外,爬取的数据并不总是整洁的,所以需要进行一定的清洗,比如对于下面的这种就需要去除掉:

还有需要去除的是和中山大学无关的一些文本。

大模型****处理

将预处理后的文本信息输入给大模型,最终得到结构化的图信息。

prompt:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
请分析并提取以下文章内容中的关键信息,按照指定的结构化格式输出事件节点、实体节点以及它们之间的关系(事件-事件、事件-实体、实体-实体)。确保输出遵循JSON-LD规范,并明确标注每个节点和边的类型及标识符,以便于构建事件图谱。
Article Content: 羊城晚报全媒体记者陈亮,通讯员李建平、林娜报道:420日,今年将迎来百年华诞的中山大学在香港举办百年校庆年首场春茗。春茗仪式上,中山大学颁发了“中山大学名誉校董”“逸仙友谊奖”“逸仙杰出教育贡献奖”“逸仙教育贡献奖”等校级荣衔,授予对该校教育发展事业作出杰出贡献的校友、社会贤达和团体机构。据悉,这是该校首次在香港颁发校级荣衔。
“在学校发展的不同时期,众多有识之士、俊彦贤达,捐资出力,增拓楼宇,奖教奖学,扶危济困,从方方面面支持学校改善办学条件,推动学术发展,并与学校一道,承担起服务社会、造福人民的责任。”中山大学党委书记、中山大学教育发展基金会理事长陈春声教授在致辞中说。
为此,中山大学在迎来百年华诞之际,特设立校级捐赠荣衔,感谢各界对中山大学发展的支持,鼓励社会慈善义举。
现场授予2位名誉校董,7位人士和机构“逸仙友谊奖”,20余位人士和机构“逸仙杰出教育贡献奖”,40余位人士和机构“逸仙教育贡献奖”。
作为粤港澳大湾区最具实力的综合性大学之一,以及粤港澳高校联盟的发起单位,中山大学将此次校级荣衔授予仪式选择在香港举办。陈春声在致辞中感念霍英东、伍沾德、曾宪梓等三位爱港爱国人士对中大教育事业的关怀和厚爱。“他们多次慷慨资助中山大学的人才培养和文化体育项目。这种无私奉献的仁爱精神和对大学发展的高瞻远瞩,正是孙中山先生教育精神生生不息、代代传承的写照。”
今年,中山大学在香港设立了高等研究院,建设工作正加紧推进,将充分借助香港的区位优势,吸引全球最顶尖的学者,建设世界领先水平的实验室,为最尖端技术的研发和转化提供条件,自主培养高水平创新人才。
中国工程院院士、中山大学生命科学学院教授林浩然在春茗上介绍了中山大学香港高等研究院生物医药研发中心的发展思路:“我们将筹建进化与合成生物学基础科学中心和生物医药研发中心。两个中心将紧密围绕‘合成生物学’开展跨境协同攻关和创新。”
首场春茗现场,还举办了捐赠仪式,霍英东基金会捐赠支持霍英东体育中心修缮工程启动,中山大学深圳校友会捐赠设立首笔中山大学香港高等研究院建设基金,陈运河、刘修婉校友伉俪捐赠饶宗颐先生墨宝,谢锦鹏先生捐赠设立中山大学博物馆贵宾厅装修基金。
据中山大学教育发展基金会介绍,中山大学近期还将在青岛举办春茗和荣衔授予仪式。
举报/反馈
Extraction Instruction:
Event Nodes: 识别并总结文章中描述的所有独特事件,包括但不限于会议、事故、发布、庆典等。为每个事件创建一个事件节点,包含事件的名称、描述、开始日期(如果提及)和地点信息。使用@type: "Event"标记此类节点。
Entity Nodes: 抽取所有提及的重要实体,如人名、组织机构、地点等,并为每个实体创建一个节点。实体节点应至少包含名称和描述,使用适当的类型如@type: "Person", "Organization","Place"进行标记。
Relationships:
Event-Event: 识别并描述任何两个事件之间的顺序关系(如“导致”、“紧接着”)、因果关系等,使用relationshipType: "Follows", "Causes"等来定义边。
Event-Entity: 确定每个事件涉及的实体(参与者、地点、主办方等),使用relationshipType: "HasParticipant", "LocatedAt"等描述关联。
Entity-Entity: 抓取实体之间的关系,例如隶属、合作、竞争等,使用相应的relationshipType描述这些联系。
Output Format Example:
{
"@context": "http://schema.org",
"@type": "EventGraph",
"events": [
{
"@type": "Event",
"@id": "<事件ID>",
"name": "<事件名称>",
"description": "<事件描述>",
"startDate": "<事件开始日期>",
"location": {
"@type": "Place",
"@id": "<地点ID>",
"name": "<地点名称>",
"description": "<地点描述>"
},
"relationships": {
"HasParticipant": ["<参与者实体ID1>", "<参与者实体ID2>", "..."],
"LocatedAt": "<地点ID>"
}
}
],
"entities": [
{
"@type": "<实体类型>",
"@id": "<实体ID>",
"name": "<实体名称>",
"description": "<实体描述>"
},
{...} // 更多实体...
],
"relationships": [
{
"@id": "<关系ID>",
"relationshipType": "<关系类型>",
"source": "<来源事件/实体ID>",
"target": "<目标事件/实体ID>"
},
{...} // 更多关系...
]
}
请确保输出结果是结构化且层次分明的JSON格式,以便于直接应用于图谱构建。

example:

通义千问的回答:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
{
"@context": "http://schema.org",
"@type": "EventGraph",
"events": [
{
"@type": "Event",
"@id": "event1",
"name": "中山大学百年校庆年首场春茗",
"description": "中山大学在香港举办百年校庆年首场春茗活动",
"startDate": "2023-04-20",
"location": {
"@type": "Place",
"@id": "place1",
"name": "香港",
"description": "中山大学在香港举办此次活动"
},
"relationships": {
"HasParticipant": [
"entity1",
"entity2",
"entity3",
"entity4",
"entity5"
],
"LocatedAt": "place1"
}
},
{
"@type": "Event",
"@id": "event2",
"name": "中山大学在香港设立高等研究院",
"description": "中山大学在香港设立高等研究院,加强与香港的合作",
"startDate": "2023-04-20",
"location": {
"@type": "Place",
"@id": "place1",
"name": "香港",
"description": "中山大学在香港设立高等研究院"
},
"relationships": {
"HasParticipant": [
"entity1",
"entity6"
],
"LocatedAt": "place1"
}
},
{
"@type": "Event",
"@id": "event3",
"name": "中山大学在青岛举办春茗和荣衔授予仪式",
"description": "中山大学近期将在青岛举办春茗和荣衔授予仪式",
"startDate": "2023-04-20",
"location": {
"@type": "Place",
"@id": "place2",
"name": "青岛",
"description": "中山大学在青岛举办此次活动"
},
"relationships": {
"HasParticipant": [
"entity1"
],
"LocatedAt": "place2"
}
}
],
"entities": [
{
"@type": "Person",
"@id": "entity1",
"name": "陈春声",
"description": "中山大学党委书记、中山大学教育发展基金会理事长"
},
{
"@type": "Person",
"@id": "entity2",
"name": "霍英东",
"description": "爱港爱国人士,多次资助中山大学"
},
{
"@type": "Person",
"@id": "entity3",
"name": "伍沾德",
"description": "爱港爱国人士,多次资助中山大学"
},
{
"@type": "Person",
"@id": "entity4",
"name": "曾宪梓",
"description": "爱港爱国人士,多次资助中山大学"
},
{
"@type": "Person",
"@id": "entity5",
"name": "林浩然",
"description": "中国工程院院士、中山大学生命科学学院教授"
},
{
"@type": "Organization",
"@id": "entity6",
"name": "中山大学香港高等研究院",
"description": "中山大学在香港设立的高等研究院"
},
{
"@type": "Organization",
"@id": "entity7",
"name": "中山大学教育发展基金会",
"description": "中山大学的教育发展基金会"
},
{
"@type": "Organization",
"@id": "entity8",
"name": "中山大学深圳校友会",
"description": "中山大学深圳校友会"
},
{
"@type": "Person",
"@id": "entity9",
"name": "陈运河",
"description": "中山大学校友"
},
{
"@type": "Person",
"@id": "entity10",
"name": "刘修婉",
"description": "中山大学校友"
},
{
"@type": "Person",
"@id": "entity11",
"name": "谢锦鹏",
"description": "捐赠人"
}
],
"relationships": [
{
"@id": "rel1",
"relationshipType": "HasPosition",
"source": "entity1",
"target": "entity7"
},
{
"@id": "rel2",
"relationshipType": "Donated",
"source": "entity2",
"target": "entity1"
},
{
"@id": "rel3",
"relationshipType": "Donated",
"source": "entity3",
"target": "entity1"
},
{
"@id": "rel4",
"relationshipType": "Donated",
"source": "entity4",
"target": "entity1"
},
{
"@id": "rel5",
"relationshipType": "HasPosition",
"source": "entity5",
"target": "entity6"
},
{
"@id": "rel6",
"relationshipType": "Donated",
"source": "entity8",
"target": "entity6"
},
{
"@id": "rel7",
"relationshipType": "Donated",
"source": "entity9",
"target": "entity6"
},
{
"@id": "rel8",
"relationshipType": "Donated",
"source": "entity10",
"target": "entity6"
},
{
"@id": "rel9",
"relationshipType": "Donated",
"source": "entity11",
"target": "entity6"
}
]
}

GPT3.5的回答(这次事件分析有点太细):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
 {
"@context": "http://schema.org",
"@type": "EventGraph",
"events": [
{
"@type": "Event",
"@id": "event1",
"name": "中山大学百年校庆年首场春茗",
"description": "中山大学在香港举办百年校庆年首场春茗,颁发校级荣衔并举行捐赠仪式。",
"startDate": "2024-04-20",
"location": {
"@type": "Place",
"@id": "location1",
"name": "香港",
"description": "中山大学百年校庆年首场春茗举办地"
},
"relationships": {
"HasParticipant": [
"entity1",
"entity2",
"entity3",
"entity4",
"entity5",
"entity6",
"entity7",
"entity8",
"entity9",
"entity10",
"entity11",
"entity12",
"entity13",
"entity14",
"entity15",
"entity16",
"entity17",
"entity18",
"entity19",
"entity20",
"entity21",
"entity22",
"entity23",
"entity24",
"entity25",
"entity26",
"entity27",
"entity28",
"entity29",
"entity30",
"entity31",
"entity32",
"entity33",
"entity34",
"entity35",
"entity36",
"entity37",
"entity38",
"entity39",
"entity40"
],
"LocatedAt": "location1"
}
},
{
"@type": "Event",
"@id": "event2",
"name": "中山大学在香港设立高等研究院",
"description": "中山大学在香港设立高等研究院,加快建设工作并吸引全球顶尖学者。",
"location": {
"@type": "Place",
"@id": "location1",
"name": "香港",
"description": "中山大学百年校庆年首场春茗举办地"
}
},
{
"@type": "Event",
"@id": "event3",
"name": "中山大学校级荣衔授予仪式",
"description": "中山大学在香港举行校级荣衔授予仪式,感谢各界对学校发展的支持。",
"location": {
"@type": "Place",
"@id": "location1",
"name": "香港",
"description": "中山大学百年校庆年首场春茗举办地"
}
},
{
"@type": "Event",
"@id": "event4",
"name": "霍英东基金会捐赠仪式",
"description": "霍英东基金会捐赠支持霍英东体育中心修缮工程启动。",
"location": {
"@type": "Place",
"@id": "location2",
"name": "未提及",
"description": "未提及"
}
},
{
"@type": "Event",
"@id": "event5",
"name": "中山大学深圳校友会捐赠仪式",
"description": "中山大学深圳校友会捐赠设立首笔中山大学香港高等研究院建设基金。",
"location": {
"@type": "Place",
"@id": "location2",
"name": "未提及",
"description": "未提及"
}
},
{
"@type": "Event",
"@id": "event6",
"name": "陈运河、刘修婉校友伉俪捐赠仪式",
"description": "陈运河、刘修婉校友伉俪捐赠饶宗颐先生墨宝。",
"location": {
"@type": "Place",
"@id": "location2",
"name": "未提及",
"description": "未提及"
}
},
{
"@type": "Event",
"@id": "event7",
"name": "谢锦鹏先生捐赠仪式",
"description": "谢锦鹏先生捐赠设立中山大学博物馆贵宾厅装修基金。",
"location": {
"@type": "Place",
"@id": "location2",
"name": "未提及",
"description": "未提及"
}
}
],
"entities": [
{
"@type": "Person",
"@id": "entity1",
"name": "陈亮",
"description": "羊城晚报全媒体记者"
},
{
"@type": "Person",
"@id": "entity2",
"name": "李建平",
"description": "通讯员"
},
{
"@type": "Person",
"@id": "entity3",
"name": "林娜",
"description": "通讯员"
},
{
"@type": "Person",
"@id": "entity4",
"name": "陈春声",
"description": "中山大学党委书记、中山大学教育发展基金会理事长"
},
{
"@type": "Person",
"@id": "entity5",
"name": "霍英东",
"description": "爱港爱国人士"
},
{
"@type": "Person",
"@id": "entity6",
"name": "伍沾德",
"description": "爱港爱国人士"
},
{
"@type": "Person",
"@id": "entity7",
"name": "曾宪梓",
"description": "爱港爱国人士"
},
{
"@type": "Person",
"@id": "entity8",
"name": "林浩然",
"description": "中国工程院院士、中山大学生命科学学院教授"
},
{
"@type": "Person",
"@id": "entity9",
"name": "陈运河",
"description": "校友"
},
{
"@type": "Person",
"@id": "entity10",
"name": "刘修婉",
"description": "校友"
},
{
"@type": "Person",
"@id": "entity11",
"name": "谢锦鹏",
"description": "先生"
},
{
"@type": "Organization",
"@id": "entity12",
"name": "中山大学"
},
{
"@type": "Organization",
"@id": "entity13",
"name": "中山大学教育发展基金会"
},
{
"@type": "Organization",
"@id": "entity14",
"name": "香港高等研究院"
},
{
"@type": "Organization",
"@id": "entity15",
"name": "霍英东基金会"
},
{
"@type": "Organization",
"@id": "entity16",
"name": "中山大学深圳校友会"
},
{
"@type": "Organization",
"@id": "entity17",
"name": "羊城晚报"
}
],
"relationships": [
{
"@id": "relation1",
"relationshipType": "HasParticipant",
"source": "event1",
"target": "entity1"
},
{
"@id": "relation2",
"relationshipType": "HasParticipant",
"source": "event1",
"target": "entity2"
},
{
"@id": "relation3",
"relationshipType": "HasParticipant",
"source": "event1",
"target": "entity3"
},
{
"@id": "relation4",
"relationshipType": "HasParticipant",
"source": "event1",
"target": "entity4"
},
{
"@id": "relation5",
"relationshipType": "HasParticipant",
"source": "event1",
"target": "entity5"
},
{
"@id": "relation6",
"relationshipType": "HasParticipant",
"source": "event1",
"target": "entity6"
},
{
"@id": "relation7",
"relationshipType": "HasParticipant",
"source": "event1",
"target": "entity7"
},
{
"@id": "relation8",
"relationshipType": "HasParticipant",
"source": "event1",
"target": "entity8"
},
{
"@id": "relation9",
"relationshipType": "HasParticipant",
"source": "event1",
"target": "entity9"
},
{
"@id": "relation10",
"relationshipType": "HasParticipant",
"source": "event1",
"target": "entity10"
},
{
"@id": "relation11",
"relationshipType": "HasParticipant",
"source": "event1",
"target": "entity11"
},
{
"@id": "relation12",
"relationshipType": "HasParticipant",
"source": "event1",
"target": "entity12"
},
{
"@id": "relation13",
"relationshipType": "HasParticipant",
"source": "event1",
"target": "entity13"
},
{
"@id": "relation14",
"relationshipType": "HasParticipant",
"source": "event1",
"target": "entity14"
},
{
"@id": "relation15",
"relationshipType": "HasParticipant",
"source": "event4",
"target": "entity15"
},
{
"@id": "relation16",
"relationshipType": "HasParticipant",
"source": "event5",
"target": "entity16"
},
{
"@id": "relation17",
"relationshipType": "HasParticipant",
"source": "event6",
"target": "entity9"
},
{
"@id": "relation18",
"relationshipType": "HasParticipant",
"source": "event6",
"target": "entity10"
},
{
"@id": "relation19",
"relationshipType": "HasParticipant",
"source": "event7",
"target": "entity11"
}
]
}

图信息存储

我们可以采用图数据库来存储这些图结构的信息,这样可以有更高的可靠性、效率。

https://neo4j.com/

https://tugraph.tech/

https://www.mongodb.com/zh-cn

从入手难度来看,MongoDB是最容易的(以存储json文档的方式使用)。但是前两个是更专业的图数据库,和知识图谱紧密联系(这可能会带来一些benefit)。

图信息存储 Tugraph

TuGraph是支持大数据量、低延迟查找和快速图分析功能的高效图数据库。

由于TuGraph只支持linux,所以不妨用docker快速部署。

快速上手 — TuGraph 文档

1
docker pull tugraph/tugraph-runtime-centos7

有亿点大。

运行容器:

1
2
docker run -it -d -p 7001:7001 -p 7070:7070 -p 7687:7687 -p 8000:8000 -p 8888:8888 -p 8889:8889 -p 9090:9090 -v "D:\thinkerhui\综合实训\tugraph\data:/var/lib/lgraph/data"  -v "D:\thinkerhui\综合实训\tugraph\log:/var/log/lgraph_log" --name tugraph_demo tugraph/tugraph-runtime-centos7 /bin/bash
docker exec -d tugraph_demo bash /setup.sh

http://localhost:7070/#/login

不知道为啥8000的新ui打不开,只能用lagecy的

图模式设计与prompt改进

模式设计

改进的json格式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
请分析并提取以下文章内容中的关键信息,按照指定的结构化格式输出事件节点、实体节点以及它们之间的关系(事件-事件、事件-实体、实体-实体)。确保输出遵循JSON-LD规范,并明确标注每个节点和边的类型及标识符,以便于构建事件图谱。
Article Content: (在此处插入文章内容)
Extraction Instruction:
Event Nodes: 识别并总结文章中描述的所有独特事件,包括但不限于会议、事故、发布、庆典等。为每个事件创建一个事件节点,包含事件的名称、描述、开始日期(格式:yyyy-mm-dd,如果没有提及或无法准确推断则填null,注意可能要从上下文的细节中推理出准确的日期)。使用@type: "Event"标记此类节点。@id格式为eventnum,如event1,event2。
Entity Nodes: 抽取所有提及的重要实体,如人名、组织机构、地点等,并为每个实体创建一个节点。实体节点应至少包含名称和描述,使用适当的类型如@type: "Person", "Organization", 或 "Place"进行标记。@id格式为entitynum,如entity1,entity2。
Relationships:
Event-Event: 识别并描述任何两个事件之间的顺序关系(如“导致”、“紧接着”)、因果关系等,使用relationshipType: "Follows", "Causes"等来定义边。
Event-Entity: 确定每个事件涉及的实体(参与者、地点、主办方等),使用relationshipType: "HasParticipant", "LocatedAt"等描述关联。
Entity-Entity: 抓取实体之间的关系,例如隶属、合作、竞争、朋友等,使用相应的relationshipType描述这些联系。
Output Format Example:
{
"@context": "http://schema.org",
"@type": "EventGraph",
"events": [
{
"@type": "Event",
"@id": "<事件ID>",
"name": "<事件名称>",
"description": "<事件描述>",
"startDate": "<事件开始日期>",
}
],
"entities": [
{
"@type": "<实体类型>",
"@id": "<实体ID>",
"name": "<实体名称>",
"description": "<实体描述>"
},
{...} // 更多实体...
],
"relationships": [
{
"@id": "<关系ID>",
"relationshipType": "<关系类型>",
"source": "<来源事件/实体ID>",
"target": "<目标事件/实体ID>"
},
{...} // 更多关系...
]
}
请确保输出结果是结构化且层次分明的JSON格式,以便于直接应用于图谱构建。

mistral7B的回答:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
 {
"@context": "http://schema.org",
"@type": "EventGraph",
"events": [
{
"@type": "Event",
"@id": "event1",
"name": "春季庆典与荣衔授予仪式 (Spring Ceremony & Honors)",
"description": "春季在中山大学举行的庆典和荣衔授予活动。",
"startDate": "2023-04-01"
},
{
"@type": "Event",
"@id": "event2",
"name": "春季庆典上的捐赠仪式 (Fundraising Ceremony at Spring Festival)",
"description": "在春季庆典上,有几项慈善活动和捐赠项目发布。",
"startDate": "2023-04-01"
},
{
"@type": "Event",
"@id": "event3",
"name": "霍英东体育中心修缮工程启动 (Construction of Heunging East Sports Center)",
"description": "霍英东基金会捐赠支持了中山大学的体育中心修缮工程。",
"startDate": "2023-04-01"
},
{
"@type": "Event",
"@id": "event4",
"name": "中山大学香港高等研究院建设基金捐赠 (Establishment of the Endowment Fund for Shanghai Jiao Tong University in Hong Kong)",
"description": "深圳校友会捐赠为中山大学香港高等研究院建设基金提供了首笔资金。",
"startDate": "2023-04-01"
},
{
"@type": "Event",
"@id": "event5",
"name": "合成生物学基础科学中心和生物医药研发中心的发展 (Development of the Synthetic Biology and Regenerative Medicine Research Institutes)",
"description": "在春季庆典上,中山大学宣布将筹建进化与合成生物学基础科学中心和生物医药研发中心。",
"startDate": "2023-04-01"
}
],
"entities": [
{
"@type": "Organization",
"@id": "entity1",
"name": "中山大学 (Shanghai Jiao Tong University)",
"description": "一所著名的中国大学,位于上海和东南地区。"
},
{
"@type": "Person",
"@id": "entity2",
"name": "霍英东 (Heung Ying Kai)",
"description": "一个成功的企业家,慈善活动中出演。"
},
{
"@type": "Organization",
"@id": "entity3",
"name": "深圳校友会 (SSUAA)",
"description": "中山大学的校友协会,负责慈善和活动组织。"
},
{
"@type": "Organization",
"@id": "entity4",
"name": "霍英东基金会 (Heung Ying Kai Foundation)",
"description": "一个慈善机构,致力于社会公益和文化事业。"
}
],
"relationships": [
{
"@id": "r1",
"relationshipType": "HasParticipant",
"source": "event1",
"target": "entity1"
},
{
"@id": "r2",
"relationshipType": "HasParticipant",
"source": "event1",
"target": "entity2"
},
{
"@id": "r3",
"relationshipType": "HasParticipant",
"source": "event1",
"target": "entity3"
},
{
"@id": "r4",
"relationshipType": "HasParticipant",
"source": "event1",
"target": "entity4"
},
{
"@id": "r5",
"relationshipType": "HasParticipant",
"source": "event2",
"target": "entity1"
},
{
"@id": "r6",
"relationshipType": "HasParticipant",
"source": "event3",
"target": "entity1"
},
{
"@id": "r7",
"relationshipType": "HasParticipant",
"source": "event4",
"target": "entity1"
},
{
"@id": "r8",
"relationshipType": "HasFunding",
"source": "event3",
"target": "entity4"
},
{
"@id": "r9",
"relationshipType": "HasFunding",
"source": "event4",
"target": "entity1"
}
]
}

ChatGPT3.5的回答:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
{
"@context": "http://schema.org",
"@type": "EventGraph",
"events": [
{
"@type": "Event",
"@id": "event1",
"name": "中山大学百年校庆年首场春茗",
"description": "今年将迎来百年华诞的中山大学在香港举办百年校庆年首场春茗。春茗仪式上,中山大学颁发了多个校级荣衔,表彰对该校教育发展事业作出贡献的校友、社会贤达和团体机构。",
"startDate": "2024-04-20"
},
{
"@type": "Event",
"@id": "event2",
"name": "中山大学在香港设立高等研究院",
"description": "中山大学在香港设立了高等研究院,建设工作正加紧推进,旨在吸引全球顶尖学者,建设世界领先水平的实验室,自主培养高水平创新人才。",
"startDate": "2024-04-20"
},
{
"@type": "Event",
"@id": "event3",
"name": "中山大学青岛春茗和荣衔授予仪式",
"description": "中山大学近期将在青岛举办春茗和荣衔授予仪式。",
"startDate": null
}
],
"entities": [
{
"@type": "Organization",
"@id": "entity1",
"name": "中山大学",
"description": "中山大学是一所综合性研究型大学,位于广州市。"
},
{
"@type": "Person",
"@id": "entity2",
"name": "陈春声",
"description": "中山大学党委书记、中山大学教育发展基金会理事长。"
},
{
"@type": "Person",
"@id": "entity3",
"name": "霍英东",
"description": "爱港爱国人士,曾慷慨资助中山大学的人才培养和文化体育项目。"
},
{
"@type": "Person",
"@id": "entity4",
"name": "伍沾德"
},
{
"@type": "Person",
"@id": "entity5",
"name": "曾宪梓"
},
{
"@type": "Person",
"@id": "entity6",
"name": "陈运河"
},
{
"@type": "Person",
"@id": "entity7",
"name": "刘修婉"
},
{
"@type": "Person",
"@id": "entity8",
"name": "饶宗颐"
},
{
"@type": "Person",
"@id": "entity9",
"name": "谢锦鹏"
},
{
"@type": "Person",
"@id": "entity10",
"name": "林浩然",
"description": "中国工程院院士,中山大学生命科学学院教授。"
}
],
"relationships": [
{
"@id": "relation1",
"relationshipType": "HasParticipant",
"source": "event1",
"target": "entity2"
},
{
"@id": "relation2",
"relationshipType": "HasParticipant",
"source": "event1",
"target": "entity3"
},
{
"@id": "relation3",
"relationshipType": "HasParticipant",
"source": "event1",
"target": "entity4"
},
{
"@id": "relation4",
"relationshipType": "HasParticipant",
"source": "event1",
"target": "entity5"
},
{
"@id": "relation5",
"relationshipType": "HasParticipant",
"source": "event2",
"target": "entity10"
},
{
"@id": "relation6",
"relationshipType": "HasParticipant",
"source": "event1",
"target": "entity6"
},
{
"@id": "relation7",
"relationshipType": "HasParticipant",
"source": "event1",
"target": "entity7"
},
{
"@id": "relation8",
"relationshipType": "HasParticipant",
"source": "event1",
"target": "entity8"
},
{
"@id": "relation9",
"relationshipType": "HasParticipant",
"source": "event1",
"target": "entity9"
},
{
"@id": "relation10",
"relationshipType": "LocatedAt",
"source": "event1",
"target": "entity1"
},
{
"@id": "relation11",
"relationshipType": "LocatedAt",
"source": "event2",
"target": "entity1"
},
{
"@id": "relation12",
"relationshipType": "LocatedAt",
"source": "event3",
"target": "entity1"
},
{
"@id": "relation13",
"relationshipType": "Causes",
"source": "event1",
"target": "event2"
},
{
"@id": "relation14",
"relationshipType": "Follows",
"source": "event1",
"target": "event3"
}
]
}

Cypher是neoj4的查询语言,相关文档可以查看:Introduction - Cypher Manual

事件聚类和Embedding

mxbai-embed-large

这个非常新鲜热辣的embedding模型。

但是发现效果并不好,然后发现了另外一个向量嵌入模型,感觉在中文的效果甩了mxbai-embed-large几条街。

聚类之后,需要调用大模型得出抽象事件的名称、描述和日期。

事件聚类prompt设计如下:

1
2
<事件列表>
请总结上面的事件为一个事件,输出事件名称name、事件描述description和事件日期date(如果没有的话填写null)。其中,事件描述要求详尽,总结和保留具体细节;事件日期要求准确。以JSON格式输出,格式:{'name':'name of thing', 'description':'description of thing', 'Date':'yyyy-mm-dd'}
1
2
3
4
5
6
<事件列表>
请根据上面提供的一系列事件,提炼出一个综合事件。输出应为一个JSON对象,包含以下三个键值对:
- 'eventName': 抽象事件的名称,
- 'eventSummary': 综合事件的详细描述,需涵盖所有关键信息(活动、地点、人物、时间)及具体细节,
- 'eventDate': 事件的发生日期,若信息中未提及任何日期,则使用'null',若信息有多个日期,选取一个出现次数多的最有可能的日期(日期格式:yyyy-mm-dd)。
确保事件描述全面且准确,同时准确地标注事件发生日期(如果可确定)。

实体聚类

同样地,实体也需要进行聚类。

1
2
3
4
5
6
<实体列表>
请根据上面提供的实体组,提炼出一个综合实体。输出应为一个JSON对象,包含以下三个键值对:
- 'entityName': 抽象实体的名称,
- 'entitySummary': 综合实体的详细描述,需涵盖所有关键信息及具体细节,
- 'entityType': 实体的类型。
确保实体描述全面且准确。

图计算分析

根据图模式定义,以及Tugraph图计算平台的支持,可以采用以下策略来进行事件舆情分析:

  1. 社区发现
  2. 利用社区检测算法识别“实体”和“事件”节点的社区结构。这可以帮助您发现紧密相关的实体群组和事件群组,从而分析哪些实体或事件经常被一起提及,形成热点话题或舆论焦点。
  3. 中心性分析
  4. 对“事件”、“实体”和“文档”节点应用中心性算法,找出影响力最大的事件、最关键的实体和最具代表性的文档。例如,使用度中心性衡量哪些事件或实体关联最多,使用介数中心性识别信息流通的关键节点。
  5. 路径与连通性分析
  6. 分析“事件_事件”、“事件_实体”、“实体_实体”边,找出事件间的传播路径和实体间的关系网。这有助于理解舆情的扩散模式和影响路径。
  7. 短路检测与关键路径分析
  8. 确定信息在不同实体和事件间传播的最短路径,识别信息传播的主要渠道和关键节点,对于快速响应和控制舆情走向至关重要。
  9. 模式匹配与子图挖掘
  10. 搜索特定的模式,如特定类型的关系链(如“事件-实体-文档”)或者特定的事件-实体组合,这些模式可能对应于典型的舆情演变轨迹或公众反应模式。
  11. 基于图的 机器学习
    1. 利用“抽象事件”和“抽象实体”的embedding属性,结合图神经网络(GNN)技术,对事件和实体进行更深层次的特征学习,预测舆情发展趋势,进行情感分析或分类。
  12. 时间序列分析
  13. 结合“文档”节点的时间戳,分析舆情随时间的变化趋势,识别舆情爆发的时间点、持续时间以及衰退模式。
  14. 来源分析
  15. 通过“来源”边,追踪舆情信息的最初来源和主要传播媒介,评估不同信息源的影响力和可信度。

抽象节点

我们需要根据聚类的结果,将同一个事件指向同一个抽象事件节点,同一个实体指向同一个抽象实体节点。

前端实现

为了减少开发成本,我们决定直接采用tugraph自带的开源前端tugraph-web。在我们自己的网站进行相关操作的时候自动跳转到tugraph并执行相关语句。


事件图谱构建初步
http://thinkerhui.site/2024/04/27/自学研究/事件图谱构建初步/
作者
thinkerhui
发布于
2024年4月27日
许可协议