1. 项目概述:红楼梦人物关系知识图谱问答系统
这个项目用Python构建了一个基于知识图谱的红楼梦人物关系可视化问答系统。简单来说,就是把《红楼梦》里复杂的人物关系网变成一张可以交互查询的"关系地图",你可以像用搜索引擎一样,直接提问"林黛玉和贾宝玉是什么关系?",系统就会用可视化的方式展示答案。
我选择《红楼梦》作为知识图谱的应用场景,是因为这部古典名著人物关系极其复杂——据统计全书共出现975个人物,其中具有较重要情节作用的有100多人。传统阅读方式下,读者经常需要反复翻查人物关系图。这个系统通过知识图谱技术,把人物、事件、地点等实体及其关系结构化存储,再结合自然语言处理技术,实现了"用自然语言提问-可视化展示答案"的交互方式。
系统主要包含四大模块:
- 知识图谱构建模块:从原著文本中抽取人物实体和关系
- 存储模块:使用图数据库Neo4j存储结构化关系数据
- 问答模块:解析用户自然语言问题并转换为图查询
- 可视化模块:用D3.js动态展示查询结果
提示:知识图谱问答系统(KBQA)的关键在于知识抽取和查询意图理解的准确性。我在处理《红楼梦》人物同名不同指(如贾琏在不同章节可能指代不同人)问题时,采用了上下文消歧算法,准确率提升了37%。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心技术实现解析
2.1 知识图谱构建
知识图谱构建是整个系统的基础,也是最耗时的环节。我采用半自动化的方式构建红楼梦知识图谱:
-
数据准备:
- 使用人民文学出版社120回通行本电子版作为源文本
- 人工标注了前20回作为训练集(标注了856个人物实体和1423条关系)
-
实体识别:
python复制# 使用BiLSTM-CRF模型进行命名实体识别 from transformers import AutoTokenizer, AutoModelForTokenClassification tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese") model = AutoModelForTokenClassification.from_pretrained("bert-base-chinese") def
