利用大型语言模型构建动态金融知识图谱 | FinDKG(二)金融动态知识图谱(FinDKG)数据集、通过 KG Transformer 进行图学习
是一种基于注意力机制的图神经网络(GNN)模型,专为动态知识图谱的学习而设计。它结合了图注意力网络(Graph Attention Networks, GAT)和异构图 Transformer(Heterogeneous Graph Transformer, HGT)的特点。AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识
五、金融动态知识图谱(FinDKG)数据集
1、数据集构建
我们收集了大约 40 万篇来自《华尔街日报》的金融新闻文章,时间跨度从 1999 年到 2023 年。我们使用 ICKG 从每篇文章中提取五元组,关系类型限制在 15 种,与金融新闻相关(如表 1 所示)。实体被标记为特定类别(如表 2 所示)。
2、实体和关系示例
关系类型示例:
| 关系 | 定义 | 示例 |
|---|---|---|
| Has | 表示所有权或持有关系 | Google Has Android |
| Announce | 表示正式宣布某个事件或产品 | Apple Announces iPhone 13 |
实体类别示例:
| 类别 | 定义 | 示例 |
|---|---|---|
| ORG | 非政府组织 | Imperial College London |
| COMP | 公司 | Apple Inc. |
| PERSON | 个人 | Jerome Powell |
3、FinDKG 的可视化
通过对 FinDKG 进行可视化,我们可以看到特定时间段内最相关的实体和它们之间的关系。例如,在 2023 年 1 月,图谱中显示了美国和中国之间的地缘政治紧张关系,以及高通胀对全球经济的影响。
六、通过 KG Transformer 进行图学习
1、模型概述
KGTransformer 是一种基于注意力机制的图神经网络(GNN)模型,专为动态知识图谱的学习而设计。它结合了图注意力网络(Graph Attention Networks, GAT) 和异构图 Transformer(Heterogeneous Graph Transformer, HGT) 的特点。
2、元实体的引入

3、模型细节


图2:FinDKG支持ickg的知识图生成管道示意图,表示将文本新闻文章转换为结构化的动态知识图五元组。

表1:FinDKG数据集中的关系类型。

表2:FinDKG数据集中的实体类别。

图3:截至2023年1月1日FinDKG最具影响力实体的子图。实体按类别着色。
4、KGTransformer 模型代码示例
以下是用于训练 KGTransformer 模型的代码示例:
# 导入必要的库
import torch
import os
import sys
import pprint
from copy import deepcopy
from functools import partial
from collections import defaultdict
from datetime import datetime
# 获取当前脚本的绝对路径
current_path = os.path.abspath(__file__)
parent_parent_path = os.path.dirname(os.path.dirname(current_path))
sys.path.append(parent_parent_path)
# 导入 DKG 库
import DKG
from DKG.utils.log_utils import add_logger_file_handler, get_log_root_path, logger
from DKG.utils.model_utils import get_embedding
from DKG.utils.train_utils import setup_cuda, EarlyStopping
from DKG.model import (
DynamicGraphModel, DKG_DEFAULT_CONFIG, EmbeddingUpdater,
Combiner, EdgeModel, InterEventTimeModel, MultiAspectEmbedding
)
from DKG.model.time_interval_transform import TimeIntervalTransform
from DKG.train import compute_loss
from DKG.eval import evaluate
# 配置模型参数
args = deepcopy(DKG_DEFAULT_CONFIG)
args.seed = 41
args.cuda = args.gpu >= 0 and torch.cuda.is_available()
args.device = torch.device("cuda:{}".format(args.gpu) if args.cuda else "cpu")
args.graph = "FinDKG"
args.version = "KGTransformer"
......
# 设置随机种子
import numpy as np
np.random.seed(args.seed)
torch.manual_seed(args.seed)
if args.cuda:
torch.cuda.manual_seed_all(args.seed)
# 加载数据
from torch.utils.data import DataLoader
G = DKG.data.load_temporal_knowledge_graph(args.graph, data_root='./data')
collate_fn = partial(DKG.utils.collate_fn, G=G)
......
# 构建模型
embedding_updater = EmbeddingUpdater(
num_nodes=G.number_of_nodes(),
static_entity_embed_dim=args.static_entity_embed_dim,
structural_dynamic_entity_embed_dim=args.structural_dynamic_entity_embed_dim,
temporal_dynamic_entity_embed_dim=args.temporal_dynamic_entity_embed_dim,
node_latest_event_time=torch.zeros(
G.number_of_nodes(), G.number_of_nodes() + 1, 2, dtype=torch.float32
),
num_relations=G.num_relations,
rel_embed_dim=args.rel_embed_dim,
num_node_types=G.num_node_types,
num_heads=args.num_attn_heads,
......
combiner = Combiner(
......
).to(args.device)
edge_model = EdgeModel(
num_nodes=G.number_of_nodes(),
num_relations=G.num_relations,
rel_embed_dim=args.rel_embed_dim,
combiner=combiner,
dropout=args.dropout
).to(args.device)
inter_event_time_model = InterEventTimeModel(
dynamic_entity_embed_dim=args.temporal_dynamic_entity_embed_dim,
static_entity_embed_dim=args.static_entity_embed_dim,
num_rels=G.num_relations,
......
inter_event_time_mode=args.inter_event_time_mode,
dropout=args.dropout
)
model = DynamicGraphModel(
embedding_updater=embedding_updater,
......
node_latest_event_time=torch.zeros(
G.number_of_nodes(), G.number_of_nodes() + 1, 2, dtype=torch.float32
)
).to(args.device)
# 初始化嵌入
......
# 设置优化器
params = list(model.parameters()) + [
......
time_optimizer = torch.optim.AdamW(params, lr=args.lr, weight_decay=args.weight_decay)
# 训练模型
for epoch in range(args.epochs):
model.train()
for batch_i, (prior_G, batch_G, cumul_G, batch_times) in enumerate(train_data_loader):
# 计算损失
batch_train_loss_dict = compute_loss(
model, args.optimize, batch_G, static_entity_embeds,
init_dynamic_entity_embeds, init_dynamic_relation_embeds, args
)
# 反向传播和优化
loss = sum(batch_train_loss_dict.values())
loss.backward()
edge_optimizer.step()
edge_optimizer.zero_grad()
time_optimizer.step()
time_optimizer.zero_grad()
5、时间演化的更新

时间演化代码示例
class TemporalKGTransformer(nn.Module):
def __init__(self, ...):
super(TemporalKGTransformer, self).__init__()
......
def forward(self, x, edge_index, edge_type, node_type, h_prev):
x = self.kg_transformer(x, edge_index, edge_type, node_type)
h_t = self.rnn(x, h_prev)
return h_t
最后分享
AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。
学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。
这里给大家精心整理了一份
全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享!

1. 成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。
2. 大模型经典PDF书籍
书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)

3. 大模型视频教程
对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。

4. 2024行业报告
行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

5. 大模型项目实战
学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

6. 大模型面试题
面试不仅是技术的较量,更需要充分的准备。
在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以
微信扫描下方CSDN官方认证二维码,免费领取【保证100%免费】

更多推荐


所有评论(0)