2. 金融知识图谱基础:实体、关系、属性的概念,金融领域典型实体(公司、人物、事件)与关系建模
2.1 知识图谱核心三元组:实体、关系、属性
知识图谱的本质是一种基于图的数据结构,由 节点(实体) 和 边(关系) 组成。在金融领域,我们将非结构化的文本、表格数据转化为结构化的 三元组,即 (实体, 关系, 实体) 或 (实体, 属性, 属性值)。
| 概念 | 定义 | 金融领域示例 |
|---|---|---|
| 实体 | 客观存在且可相互区分的对象,是图谱中的节点。 | “贵州茅台股份有限公司”、“张坤”、“2024年三季报” |
| 关系 | 实体之间的语义连接,是图谱中的边。 | “持股”、“担任”、“隶属于”、“发生” |
| 属性 | 描述实体的特征或参数,通常以键值对形式存在。 | “注册资本:12.56亿元”、“净利润增长率:15.2%” |
SQL 映射提示: 在关系型数据库中,实体通常对应
node 表,关系对应 edge 表,属性则作为 node 表的字段或独立的 property 表存储。这是后续进行“回放对比”分析的基础。
2.2 金融领域典型实体建模
金融知识图谱的实体建模需要覆盖市场参与主体、交易标的、宏观事件三大类。以下是三类核心实体的建模规范:
2.2.1 公司实体
公司是金融图谱中最核心的节点,需要包含唯一标识、基础信息、财务特征等属性。
- 唯一标识: 股票代码(如 600519.SH)、统一社会信用代码。
- 基础属性: 公司全称、简称、上市日期、所属行业(申万一级/二级)、注册地。
- 财务属性: 总市值、市盈率(PE)、市净率(PB)、ROE、资产负债率。
2.2.2 人物实体
人物实体包括高管、股东、分析师、监管官员等,重点刻画其职务轨迹与影响力。
- 唯一标识: 身份证号(脱敏)、人物ID。
- 基础属性: 姓名、性别、出生年份、学历、毕业院校。
- 职务属性: 当前职务、历任公司、任职起始日期。
2.2.3 事件实体
事件是驱动市场波动的关键因素,具有时间、类型、影响范围等维度。
- 唯一标识: 事件ID(如 EVT-20241001-001)。
- 核心属性: 事件名称、发生日期、事件类型(如“股权质押”、“业绩暴雷”、“监管处罚”)、影响标的、情绪标签(正面/负面/中性)。
2.3 金融领域关系建模
关系建模决定了图谱的查询深度与分析能力。金融领域的关系主要分为 股权关系、任职关系、交易关系 和 事件关联关系 四类。
| 关系类型 | 头实体 | 尾实体 | 典型关系标签 | 属性示例 |
|---|---|---|---|---|
| 股权关系 | 人物/公司 | 公司 | 持股、控股、参股 | 持股比例、持股数量、变动日期 |
| 任职关系 | 人物 | 公司 | 担任、曾任、独立董事 | 职务名称、任职起始日、薪酬 |
| 交易关系 | 公司 | 公司 | 供应商、客户、竞争对手 | 交易金额、合同期限、关联交易占比 |
| 事件关联 | 公司/人物 | 事件 | 涉及、引发、受益于 | 影响程度、损失金额、公告编号 |
2.4 实体与关系联合建模:图谱结构示意
下图展示了一个简化的金融知识图谱子图,包含公司、人物、事件三类实体及其典型关系。该结构是后续进行“回放对比 SQL 分析”的图数据基础。
2.5 从文本到三元组:抽取与建模示例
以一条金融新闻为例,展示如何将非结构化文本转化为结构化的三元组数据,这是构建图谱的第一步,也是后续 SQL 回放对比的数据来源。
原始文本: “2024年10月10日,易方达基金经理张坤管理的易方达蓝筹精选基金,增持贵州茅台股票,持股比例由4.8%升至5.2%。”
抽取结果(三元组列表):
-- 实体-关系-实体三元组
(张坤, 管理基金, 易方达蓝筹精选)
(易方达蓝筹精选, 增持, 贵州茅台)
-- 实体-属性三元组
(张坤, 职务, 基金经理)
(张坤, 所属机构, 易方达基金)
(贵州茅台, 股票代码, 600519.SH)
(增持, 变动日期, 2024-10-10)
(增持, 持股比例变动, 4.8% -> 5.2%)
2.6 关系建模的 SQL 表结构设计
为了在关系型数据库中实现“回放对比”分析,我们需要将图谱数据映射为两张核心表:entity 表和 relation 表。以下为建表 DDL 示例:
-- 实体表:存储所有节点
CREATE TABLE entity (
entity_id VARCHAR(64) PRIMARY KEY,
entity_type VARCHAR(32) NOT NULL, -- 'company', 'person', 'event'
entity_name VARCHAR(128) NOT NULL,
properties JSONB, -- 存储动态属性
created_at TIMESTAMP DEFAULT NOW()
);
-- 关系表:存储所有边
CREATE TABLE relation (
relation_id BIGSERIAL PRIMARY KEY,
source_id VARCHAR(64) NOT NULL REFERENCES entity(entity_id),
target_id VARCHAR(64) NOT NULL REFERENCES entity(entity_id),
relation_type VARCHAR(64) NOT NULL, -- 'hold', 'manage', 'involve'
properties JSONB, -- 存储权重、时间、金额等
valid_from DATE,
valid_to DATE,
created_at TIMESTAMP DEFAULT NOW()
);
-- 索引:加速图谱遍历查询
CREATE INDEX idx_relation_source ON relation(source_id);
CREATE INDEX idx_relation_target ON relation(target_id);
CREATE INDEX idx_relation_type ON relation(relation_type);
建模避坑指南: 金融关系往往具有 时效性(如持股比例随时间变化)和 方向性(如“控股”与“被控股”)。在关系表中务必保留
valid_from 和 valid_to 字段,这是后续进行“时间点回放”和“状态对比”的关键字段。缺失时间维度的关系表将无法支持历史状态回溯。