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 分析”的图数据基础。

金融知识图谱实体-关系示例 人物:张坤 属性:基金经理 | 从业12年 公司:贵州茅台 属性:白酒 | 市值2.1万亿 事件:提价公告 属性:2024-10-01 | 正面 属性:提价幅度20% 管理基金 重仓持有 引发 包含属性 图例:蓝色-人物节点 | 绿色-公司节点 | 红色-事件节点 | 橙色-属性节点 关系边包含“管理基金”、“重仓持有”、“引发”等语义标签,支持多跳查询

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 字段,这是后续进行“时间点回放”和“状态对比”的关键字段。缺失时间维度的关系表将无法支持历史状态回溯。

2.7 本章小结