课程导论与知识图谱基础

各位同学,欢迎来到《知识图谱驱动的金融问答系统实战》。我是这门课的主讲人,一个在金融科技领域摸爬滚打了十来年的老工程师。今天咱们先不急着敲代码,坐下来聊聊这门课到底要做什么,以及知识图谱这东西,在金融领域到底能玩出什么花来。

金融问答系统:为什么非它不可?

先问大家一个问题:你平时在银行App或者券商软件里问客服问题,体验怎么样?

说实话,我自己的体验是——挺糟心的。问个「我买的基金最近为什么跌了」,客服机器人给你甩一堆产品说明书链接。问个「科创板开户条件」,它给你念一遍证监会原文。你想想看,这哪是问答?这分明是「关键词检索」。

真正的金融问答系统,应该像一位资深客户经理坐在你对面。你问「我月薪两万,想攒钱买房,有什么理财建议?」它得知道你的收入、风险偏好、当前市场利率、房产政策……把这些信息串起来,给你一个靠谱的答案。

这就引出了核心问题:金融知识是高度关联的。一个实体(比如「茅台」)连着无数关系(「属于白酒行业」、「被张坤持有」、「2023年营收XX亿」)。传统数据库处理这种网状关系,就像用筷子喝汤——费劲。

核心观点:金融问答系统的本质,是把「散落的知识点」变成「一张互联的知识网」。知识图谱,就是这张网的最佳载体。

知识图谱核心概念:实体、关系、属性

好,咱们来拆解一下知识图谱的三大基石。说白了,就是三个词:实体、关系、属性

实体(Entity)——就是「谁」或者「什么」。在金融领域,实体可以是「贵州茅台」、「张坤」、「2023年」、「白酒行业」。每个实体都有一个唯一的ID,就像人的身份证号。

关系(Relation)——就是「怎么连」。实体之间不是孤立的。「贵州茅台」和「白酒行业」之间是「属于」关系。「张坤」和「易方达基金」之间是「任职于」关系。关系是有方向的,而且可以带属性(比如「任职于」可以带「起始日期」)。

属性(Property)——就是「长什么样」。实体本身有属性,比如「贵州茅台」的「市值」、「市盈率」、「成立日期」。关系也可以有属性,比如「张坤任职于易方达基金」这个关系,可以带「职位:基金经理」这个属性。

我举个例子,大家感受一下:

实体:贵州茅台(ID: stock_600519)
  属性:市值 = 2.1万亿
  属性:市盈率 = 30.5
  属性:行业 = 白酒

关系:贵州茅台 -[属于]-> 白酒行业
关系:张坤 -[持有]-> 贵州茅台(属性:持仓比例 = 9.8%)
关系:贵州茅台 -[发布]-> 2023年年报(属性:营收 = 1500亿)

你看,这一小段数据,就把「茅台是谁」、「它属于哪个行业」、「谁在买它」、「它最近表现如何」全串起来了。这就是知识图谱的威力。

个人经验:我在做第一个金融知识图谱项目时,犯过一个低级错误——把「实体」和「属性」搞混了。比如把「白酒行业」当成「贵州茅台」的一个属性,而不是一个独立的实体。结果后来要查「所有白酒股有哪些」时,代码写得痛不欲生。记住:凡是需要被独立查询、关联的东西,都应该是一个实体,而不是属性。

知识图谱 vs 传统数据库

很多同学会问:我用MySQL或者MongoDB也能存这些数据啊,为什么非要搞个知识图谱?

嗯,这个问题问得好。咱们来做个对比:

维度 传统关系型数据库 知识图谱
数据模型 表 + 行 + 列 节点 + 边 + 属性
查询方式 SQL(JOIN 多表) SPARQL / Cypher(图遍历)
关联查询深度 3层JOIN以上性能急剧下降 10层以上依然高效
模式灵活性 需要预先定义Schema Schema可动态扩展
典型场景 交易记录、用户信息 知识推理、关联分析

说白了,传统数据库擅长「查已知」,知识图谱擅长「找未知」

举个例子:你想查「张坤管理的基金中,哪些重仓了白酒股?」在MySQL里,你得JOIN四张表(基金经理表、基金表、持仓表、股票表),写一个20行的SQL。在知识图谱里,一句Cypher就搞定:

MATCH (manager:Person {name:'张坤'})-[:管理]->(fund:Fund)
      -[:持有]->(stock:Stock)-[:属于]->(industry:Industry {name:'白酒'})
RETURN fund.name, stock.name, stock.持仓比例

你看,这就像在脑子里画了一张关系图,顺着箭头走就行了。我曾经在项目中用知识图谱做「股权穿透分析」,查一个公司背后的实际控制人。传统数据库跑了5分钟没出结果,换成图数据库,0.3秒就出来了。

避坑指南:不要以为知识图谱能取代所有数据库。我见过有人非要用图数据库存交易流水,结果查询效率还不如MySQL。记住:知识图谱擅长的是「关系密集型」场景,不是「数据密集型」场景。金融问答系统正好是关系密集型的典型代表。

课程项目全景图

好,咱们来看看这门课到底要做什么。整个课程围绕一个完整的项目展开——「智能金融问答系统」。我把它拆成了四个阶段:

  1. 知识建模阶段:设计金融领域的本体(Ontology),定义实体类型、关系类型、属性约束。说白了,就是给知识图谱「画蓝图」。
  2. 知识抽取阶段:从非结构化数据(研报、公告、新闻)中抽取出实体和关系。这部分会用到NLP技术,比如命名实体识别、关系抽取。
  3. 知识存储与查询阶段:把抽取出来的知识存入图数据库(Neo4j),并编写高效的查询语句。
  4. 问答系统构建阶段:把自然语言问题转换成图查询,再把结果组织成自然语言答案。这里会用到意图识别、实体链接、答案生成等技术。

下面这张图,就是整个项目的核心架构。我建议你多看几遍,后面每个章节都会对应到这张图的某个部分。

金融问答系统项目全景图 阶段一:知识建模 本体设计 实体/关系/属性定义 阶段二:知识抽取 NER / 关系抽取 研报/公告/新闻 阶段三:知识存储 Neo4j图数据库 Cypher查询 阶段四 问答 系统 数据源 上市公司公告 · 券商研报 · 财经新闻 核心技术栈 Protégé / OWL BERT / BiLSTM-CRF Neo4j / Cypher Flask / FastAPI 意图识别 + 实体链接 输出:智能金融问答系统

这张图里,我特意把「数据源」和「核心技术栈」也标出来了。你会发现,整个项目其实是一个数据流水线:从原始文本出发,经过建模、抽取、存储,最终变成可交互的问答系统。

我的建议:学这门课的时候,别急着跳到自己感兴趣的部分。先把这个全景图刻在脑子里。每学完一章,回来看看这张图,问自己:「我学的东西,在图里的哪个位置?」这样学下来,知识才不会散。

好了,第一章的内容就到这里。咱们把基础打牢,后面才能跑得快。记住:知识图谱不是银弹,但在金融问答这个场景里,它确实是最趁手的工具。


公众号:蓝海资料掘金营,微信deep3321