2、投研知识图谱的构建流程:需求分析、数据采集、本体设计、知识抽取、知识融合、知识存储、知识应用
说实话,很多团队做知识图谱,一上来就急着写代码、搭数据库。结果呢?做着做着发现数据对不上,业务方说「这不是我要的」。我见过太多这样的项目了。
所以今天咱们聊聊构建流程。一共七个步骤,环环相扣。你想想看,盖楼得先画图纸吧?做知识图谱也一样。
2.1 需求分析:别急着动手,先想清楚要什么
这一步最容易被忽略。我刚开始做投研图谱时,也犯过这个错——直接拿公开数据往里灌,结果发现基金经理问的问题,图谱根本答不上来。
需求分析要回答三个问题:
- 谁在用?——研究员?基金经理?风控人员?
- 查什么?——公司关系?行业上下游?事件传导?
- 怎么查?——精确搜索?模糊推荐?路径分析?
核心原则:需求决定本体,本体决定数据。别反过来。
举个例子。如果用户想查「某公司有哪些关联方」,那你的图谱里就得有「持股」「任职」「担保」这些关系。如果用户想查「某行业最近有哪些负面事件」,那你就得把新闻、公告里的实体和事件抽出来。
我的习惯:先跟业务方聊半小时,列10个典型问题。然后问自己——这10个问题,现有系统能回答吗?不能的话,缺什么?
2.2 数据采集:来源要广,质量要控
需求明确了,接下来就是找数据。投研领域的数据源,我大致分三类:
| 数据类别 | 典型来源 | 采集方式 |
|---|---|---|
| 结构化数据 | 财报、数据库、API接口 | ETL工具、SQL查询 |
| 半结构化数据 | 公告、研报、新闻 | 爬虫 + 解析模板 |
| 非结构化数据 | 电话会议录音、视频 | 语音转文字 + NLP |
这里有个坑——数据质量。我曾经从某个公开数据源拉公司股东信息,结果发现同一家公司在不同年份的股东名称写法都不一样。比如「张三」和「张 三」(中间多了个空格),在知识图谱里就成了两个实体。
避坑指南:数据采集阶段就要做初步清洗。至少要去重、去空格、统一格式。别等到知识融合阶段再处理,那时候成本就高了。
2.3 本体设计:图谱的骨架
本体设计,说白了就是定义「有什么实体」和「有什么关系」。这是知识图谱的灵魂。
投研领域常见的本体包括:
- 实体类型:公司、人物、行业、产品、事件、公告
- 关系类型:持股、任职、供应、竞争、收购、担保
- 属性:公司名称、注册资本、成立日期、行业分类
我建议用自顶向下的方式设计。先画一个大框架,再逐步细化。比如:
实体:公司
├── 属性:名称、代码、行业、市值
├── 关系:持股 → 公司
├── 关系:任职 → 人物
└── 关系:供应 → 公司
实体:人物
├── 属性:姓名、职位、背景
└── 关系:任职 → 公司
个人经验:本体设计别太复杂。我见过有人把关系细分成30多种,结果数据根本填不满。先做核心的5-8种关系,跑通了再扩展。
下面这张图展示了投研知识图谱的核心本体结构:
2.4 知识抽取:从文本到三元组
本体设计好了,数据也采回来了。接下来就是抽取出「实体-关系-实体」这样的三元组。
常用的方法有:
- 规则匹配:写正则或模板,适合格式固定的文本(如财报)
- 命名实体识别(NER):用模型识别公司名、人名、地名
- 关系抽取:用预训练模型判断两个实体之间的关系
举个例子。从「张三持有A公司30%股份」这句话里,我们要抽取出:
(张三, 持股, A公司)
(张三, 持股比例, 30%)
注意:属性也可以看作一种特殊的关系。比如「持股比例」就是实体和数值之间的关系。
我建议先用规则兜底,再用模型做补充。规则准确率高但覆盖低,模型覆盖广但可能出错。两者结合效果最好。
2.5 知识融合:把碎片拼成整体
这一步解决的是「同一个实体在不同数据源里叫法不一样」的问题。
比如:
- 「阿里巴巴」和「Alibaba」是同一家公司
- 「马云」和「Jack Ma」是同一个人
- 「2023年报」和「2023年年度报告」是同一份文档
常用的融合技术包括:
- 实体对齐:用相似度算法判断两个实体是否指向同一对象
- 属性融合:多个来源的属性值取交集或加权平均
- 冲突消解:当不同来源信息矛盾时,按可信度选择
我曾经踩过的坑:做实体对齐时,只用了名称相似度。结果「华润啤酒」和「华润医药」被合并成了同一个实体。后来加了行业属性做约束,才避免了这个错误。
2.6 知识存储:选对数据库
知识图谱的存储,主流方案有两种:
| 存储方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 图数据库(Neo4j、JanusGraph) | 关系查询快,支持路径分析 | 分布式支持弱,学习成本高 | 中小规模图谱,深度关系查询 |
| RDF三元组库(Jena、Virtuoso) | 标准化,支持SPARQL查询 | 性能一般,扩展性有限 | 开放数据、语义网场景 |
我个人习惯用图数据库。原因很简单——投研场景里,查「A公司通过哪些路径影响到B公司」这种问题,图数据库一条查询语句就搞定了。换成关系型数据库,得写好几层JOIN。
小建议:如果数据量在千万级以下,Neo4j就够用了。如果到了亿级,考虑JanusGraph或Nebula Graph。
2.7 知识应用:让图谱真正用起来
最后一步,也是最关键的一步——让图谱产生价值。
投研领域常见的应用场景:
- 关联查询:输入一家公司,展示其股东、子公司、供应商
- 路径发现:找两个公司之间的最短关联路径
- 事件传导分析:某个行业政策变化,会影响哪些公司
- 智能问答:用自然语言问「宁德时代的上游供应商有哪些」
举个例子。研究员想查「某公司最近被哪些机构调研过」。传统做法是翻公告、手动整理。有了知识图谱,一条查询就能返回所有调研记录,还能按时间排序、按机构分类。
核心思路:知识图谱不是终点,而是工具。它的价值在于让投研人员更快、更准地找到信息之间的关联。
好了,七个步骤讲完了。从需求分析到知识应用,每一步都有它的意义。你想想看,如果跳过需求分析直接做数据采集,很可能白费功夫。如果跳过知识融合,图谱里全是重复实体,查出来的结果谁敢信?
嗯,这就是构建投研知识图谱的完整流程。下一章咱们会深入讲本体设计的具体方法,到时候再细聊。
公众号:蓝海资料掘金营,微信deep3321