3. 金融图谱数据源:结构化、半结构化与非结构化

金融知识图谱的构建,第一步也是最关键的一步是理解数据源。金融行业的数据形态极为丰富,从传统的数据库表到实时的交易日志,再到海量的研报PDF,每一种数据源都对应着不同的采集、解析与建模策略。本章将系统梳理三类数据源的特征、典型场景与处理范式。

3.1 三类数据源全景对比

根据数据的组织方式和可解析程度,金融图谱数据源可划分为结构化、半结构化和非结构化三大类。下表从核心特征、典型格式、图谱映射难度和常见金融场景四个维度进行对比:

维度 结构化数据 半结构化数据 非结构化数据
核心特征 严格模式,固定字段与类型 自描述模式,标签/标记驱动 无固定模式,自然语言或二进制
典型格式 关系表 (MySQL, Oracle) JSON, XML, 日志 (Log) PDF, Word, 纯文本, 图片
图谱映射难度 低:可直接映射为节点/边 中:需Schema推理与嵌套展开 高:依赖NLP抽取与实体链接
金融场景举例 客户信息表、交易流水、持仓快照 行情推送JSON、风控日志、API响应 招股说明书、年报、新闻公告
实践要点: 在批流链路设计中,结构化数据通常作为“批处理”的稳定基准层,半结构化数据是“流处理”的主要输入,而非结构化数据则需要通过离线管道进行批量增强后,再注入图谱。

3.2 结构化数据:数据库表

结构化数据是金融图谱最可靠的“骨架”来源。其核心优势在于模式(Schema)明确,数据质量可控,可直接映射为图谱中的实体和关系。

3.2.1 常见金融表结构

  • 客户主数据表: 包含客户ID、姓名、证件号、风险等级等字段,直接映射为Customer节点。
  • 交易流水表: 包含交易ID、付款方、收款方、金额、时间,映射为Transaction节点及付款/收款边。
  • 持仓快照表: 包含账户ID、证券代码、持仓数量、成本价,映射为Holding关系。

3.2.2 映射规则示例

以交易流水表为例,其图谱映射逻辑如下:

-- 源表: transaction_log
-- 字段: txn_id, from_acct, to_acct, amount, txn_time

-- 节点映射
from_acct --> :Account {account_id: from_acct}
to_acct   --> :Account {account_id: to_acct}
txn_id    --> :Transaction {txn_id: txn_id, amount: amount, time: txn_time}

-- 关系映射
(from_acct) -[:发起交易]-> (txn_id)
(txn_id)   -[:到达账户]-> (to_acct)

3.3 半结构化数据:日志与JSON

半结构化数据是金融图谱“动态血液”的主要来源,尤其在实时风控和行情处理场景中占据主导地位。其特点是带有标签或标记,但模式可能随业务迭代而变化。

3.3.1 日志数据

金融系统日志通常包含时间戳、事件类型、关键参数。例如一条风控预警日志:

2025-03-21 14:30:00,123 [WARN] RiskEngine - 触发规则: RULE_1001
  | 客户ID: CUST_8899
  | 交易ID: TXN_4521
  | 风险评分: 85

解析后,可提取出RiskEvent节点,并与Customer、Transaction节点建立关联。

3.3.2 JSON数据

行情推送、API响应等场景广泛使用JSON。以下是一个典型的行情快照:

{
  "symbol": "600519.SH",
  "timestamp": "2025-03-21T14:30:00Z",
  "price": 188.50,
  "volume": 1250000,
  "bid": [188.48, 188.49],
  "ask": [188.51, 188.52]
}

JSON的嵌套结构(如bid/ask数组)在映射时需展开为多个OrderBookLevel节点或属性列表。

Schema漂移风险: 半结构化数据的字段可能随时新增或废弃。在流处理链路中,必须使用Schema Registry或动态Schema推理引擎,避免因字段缺失导致管道断裂。

3.4 非结构化数据:文本与PDF

非结构化数据是金融图谱“深度语义”的宝藏,但处理成本最高。招股说明书、年报、分析师研报等文档中蕴含大量实体、关系和事件,需要通过自然语言处理(NLP)技术进行抽取。

3.4.1 处理流程

  1. 文档解析: 使用OCR或PDF解析库(如PyMuPDF、Tika)提取纯文本。
  2. 实体识别: 识别公司名、人名、产品名、金额、日期等金融实体。
  3. 关系抽取: 识别实体间的语义关系,如“A公司收购B公司”、“C担任D公司董事”。
  4. 事件抽取: 提取结构化事件,如“股权变更”、“重大诉讼”。

3.4.2 典型抽取示例

原文:“2025年3月21日,华泰证券发布公告称,拟以现金方式收购胜通集团旗下资产管理业务。”

抽取结果:

  • 事件类型: 收购
  • 收购方: 华泰证券
  • 被收购方: 胜通集团(资管业务)
  • 交易方式: 现金
  • 公告日期: 2025-03-21

3.5 数据源融合架构

下图展示了三类数据源在金融图谱批流链路中的融合处理架构。结构化数据通过ETL直接入库,半结构化数据经流处理引擎实时解析,非结构化数据则通过离线NLP管道增强后统一注入图谱。

金融图谱数据源融合架构 金融图谱数据源融合架构 结构化数据 数据库表 (MySQL/Oracle) 半结构化数据 日志 / JSON / XML 非结构化数据 PDF / 文本 / 研报 批处理 ETL 流处理引擎 (Flink) 离线 NLP 管道 图谱融合引擎 实体对齐 / 关系合并 / 冲突消解 金融知识图谱 图数据库 (Neo4j / NebulaGraph) 说明:三类数据源经过差异化处理后,在图谱融合引擎中进行实体对齐与关系合并,最终写入图数据库。

3.6 数据源选择策略

在实际项目中,并非所有数据源都需要同时接入。建议根据业务优先级和数据成熟度分阶段实施:

推荐实施路径:
  1. 第一阶段: 优先接入结构化数据(客户、账户、交易),快速构建图谱骨架。
  2. 第二阶段: 接入半结构化数据(日志、行情),实现实时事件图谱。
  3. 第三阶段: 引入非结构化数据(研报、公告),通过NLP增强图谱语义深度。