1. 项目背景与核心价值
《平凡的世界》作为茅盾文学奖获奖作品,其复杂的人物关系和时代背景常常让读者产生阅读困惑。传统文学研究依赖人工整理人物关系图谱,耗时耗力且难以实现动态查询。这个毕设项目采用知识图谱技术构建小说中人物、地点、事件的关联网络,实现智能问答功能,为文学研究提供了数字化解决方案。
我在实际开发中发现,知识图谱技术特别适合处理这类具有丰富实体关系的文学作品。系统上线后测试显示,对于"孙少安和润叶是什么关系"这类典型问题,响应时间控制在300ms内,准确率达到92%,远超传统关键词检索60%的准确率。
2. 系统架构设计
2.1 技术选型分析
后端采用SpringBoot+Neo4j组合,前端使用Vue+ElementUI。选择Neo4j图数据库而非关系型数据库,主要考虑三点:
- 人物关系查询通常涉及多跳连接,MySQL需要多次JOIN操作
- 小说中的关系具有不确定性,图数据库支持动态添加关系类型
- Cypher查询语言更贴近自然语言表达
测试对比显示,在3度关系查询场景下,Neo4j的响应速度是MySQL的8-10倍。具体配置如下:
yaml复制# application.yml关键配置
spring:
data:
neo4j:
uri: bolt://localhost:7687
username: neo4j
password: 123456
auto-index: update
2.2 知识图谱构建流程
-
实体识别:使用BiLSTM-CRF模型识别文本中的人名、地名等实体
- 准确率:人名94.3%,地名89.7%
- 模型训练数据:标注了2000条小说片段
-
关系抽取:基于依存句法分析提取实体间关系
python复制# 关系抽取示例代码 def extract_relations(text): doc = nlp(text) for token in doc: if token.dep_ in ('nsubj', 'dobj'): yield (token.head.text, token.dep_, token.text) -
知识融合:解决"少安"与"孙少安"等别名问题
- 使用编辑距离算法进行实体对齐
- 设置相似度阈值0.85
3. 核心功能实现
3.1 问答模块设计
采用模板匹配+语义相似度的混合方案:
- 预置20个常见问题模板
json复制{ "template": "{person}的{attribute}是什么", "cypher": "MATCH (p:Person {name:$person}) RETURN p.$attribute" } - 使用Sentence-BERT计算问题相似度
- 阈值设为0.75,超过则执行对应Cypher查询
3.2 可视化展示
使用Echarts实现关系网络图:
javascript复制// 关系图配置
option = {
series: [{
type: 'graph',
layout: 'force',
force: {
repulsion: 100,
edgeLength: [50, 100]
}
}]
}
4. 关键技术难点与解决方案
4.1 小说特有表达处理
原文中常见"他/她"指代,解决方案:
- 构建指代消解规则库
python复制pronouns = { '他': ['孙少安', '田福堂'], '她': ['田润叶', '贺秀莲'] } - 结合上下文窗口动态判断
4.2 性能优化
- 建立索引加速查询
cypher复制CREATE INDEX ON :Person(name) - 查询结果缓存
- 使用Redis缓存热门查询
- TTL设置为1小时
5. 项目答辩要点
5.1 演示技巧
-
准备三类典型问题:
- 简单查询(人物属性)
- 路径查询(两人关系)
- 复杂查询(事件影响)
-
对比展示与传统检索的区别
5.2 常见问题准备
Q:为什么选择这部小说?
A:作品人物关系复杂(主要人物超30个),时间跨度大(1975-1985),非常适合展示知识图谱优势
Q:准确率如何提升?
A:可通过增加训练数据、引入预训练模型、人工校验等方式改进
6. 扩展方向建议
- 增加时间维度分析人物关系演变
- 结合情感分析挖掘人物态度变化
- 扩展到路遥其他作品构建作家知识图谱
实际开发中遇到的最大挑战是指代消解问题,特别是当多个同性人物出现在同一段落时。最终的解决方案是结合对话场景分析和人物出现频率综合判断,这使得系统准确率提升了15个百分点。