1. 项目概述:当古诗词遇上知识图谱与AI大模型
这个毕业设计项目将中华古诗词文化与现代计算机技术进行了深度融合,通过Python技术栈构建了一个包含知识图谱可视化、情感分析、智能问答和AI写诗功能的综合系统。作为一名做过类似项目的开发者,我认为这种将传统文化数字化的尝试特别有意义——它不仅能让更多人接触古诗词,还能通过技术手段发现诗词之间隐藏的关联。
系统核心功能可以分为四个模块:基于Neo4j的知识图谱构建与可视化展示、基于NLP技术的情感分析模块、结合大模型的智能问答系统,以及最吸引人的AI自动写诗功能。我在实际开发中发现,这类项目最难的不是单个功能的实现,而是如何让这些模块有机配合,形成一个完整的应用闭环。
2. 系统架构设计与技术选型
2.1 整体技术架构
系统采用典型的三层架构设计:
- 数据层:使用MongoDB存储原始诗词数据,Neo4j构建知识图谱关系
- 业务层:Python+Django处理核心业务逻辑
- 展示层:Vue.js+ECharts实现前端可视化
这种架构的优点是各层职责分明,我在实际部署时发现维护和扩展都很方便。特别是当需要增加新的数据分析功能时,只需要在业务层添加相应模块即可,不会影响其他部分。
2.2 关键技术选型解析
知识图谱构建:选用Neo4j而非传统关系型数据库,是因为诗词中的实体关系(如诗人、朝代、题材等)更适合用图数据库表示。我在项目中定义了几种核心关系:
- 诗人-属于->朝代
- 诗词-包含->意象
- 意象-关联->情感
情感分析模块:对比了几种NLP工具后,最终选用SnowNLP+自定义词典的方案。虽然准确率不如BERT等大模型,但对硬件要求低,适合毕业设计场景。我收集整理了3000多条古诗词情感标注数据来优化模型。
AI写诗功能:考虑到本地部署的限制,采用GPT-2模型进行微调而非直接使用ChatGPT。通过5000首唐诗进行训练,虽然生成的诗词质量不及顶级大模型,但已经能体现基本的格律和意境。
3. 知识图谱构建全流程
3.1 数据采集与清洗
数据来源主要有三个渠道:
- 公开的古诗词API(如古诗文网)
- 爬取的诗词网站数据
- 手动整理的专业典籍
清洗过程特别需要注意:
- 去除现代注释和标点
- 统一朝代名称(如"唐"和"唐代")
- 处理异体字和通假字
我编写了专门的清洗脚本,处理了约2万首诗词数据。一个实用技巧是先用小样本测试清洗规则,确认无误后再处理全集。
3.2 实体识别与关系抽取
使用LAC分词工具进行实体识别,主要提取以下实体类型:
- 诗人
- 朝代
- 地点
- 意象(如"明月"、"杨柳")
- 情感词(如"愁"、"喜")
关系抽取采用规则+统计的方法:
# 示例:提取"诗人-朝代"关系 def extract_dynasty(poem): poet = poem.author dynasty = get_dynasty_from_db(poet) if dynasty: return (poet, "属于", dynasty) return None3.3 Neo4j图数据库建模
设计了一个包含5类节点和8种关系的图谱模型:
(:诗人)-[:属于]->(:朝代) (:诗词)-[:创作于]->(:年代) (:诗词)-[:包含]->(:意象) (:意象)-[:关联]->(:情感) (:地点)-[:出现在]->(:诗词)导入数据时建议使用批量导入而非单条插入,速度能提升百倍以上。我用的命令是:
neo4j-admin import --nodes=import/poets.csv --relationships=import/belongs_to.csv4. 可视化实现细节
4.1 前端技术栈选择
经过对比几种可视化方案,最终选择:
- Vue.js作为前端框架
- ECharts用于统计图表
- D3.js处理知识图谱可视化
这种组合既满足了美观需求,又保证了性能。特别是在展示大型图谱时,D3.js的力导向图布局算法能自动优化节点位置。
4.2 核心可视化效果实现
诗词关系图谱:
// D3.js力导向图配置 const simulation = d3.forceSimulation(nodes) .force("link", d3.forceLink(links).id(d => d.id)) .force("charge", d3.forceManyBody().strength(-1000)) .force("center", d3.forceCenter(width/2, height/2));情感趋势分析:使用ECharts的折线图展示不同朝代的情感倾向变化,并添加了brush组件实现细节筛选。
提示:大数据量下性能优化是关键。我采用了Web Worker进行数据处理,避免界面卡顿。
5. 情感分析模块深度解析
5.1 古诗词情感特点
与现代文本不同,古诗词情感表达更为含蓄,常见特点包括:
- 大量使用意象表达情感(如"梧桐"表离愁)
- 情感复杂多元(一首诗可能包含多种情感)
- 与时代背景强相关(如边塞诗的家国情怀)
5.2 模型构建过程
情感词典构建: 扩充基础情感词典,加入300+古诗词特有情感词,如:
- 正面:欢、乐、喜、欣
- 负面:愁、悲、哀、恨
特征工程: 除文本特征外,还加入了:
- 诗歌体裁(绝句、律诗等)
- 创作年代
- 使用意象
模型训练: 对比了多种算法后,选择SVM作为基础模型,在测试集上达到了82%的准确率。
5.3 典型问题与优化
遇到的主要问题是古今词义差异。例如,"可怜"在现代多为同情义,但在古诗中常表示"可爱"。解决方案是构建古今词义映射表,在分词阶段就进行转换。
6. 智能问答系统实现
6.1 系统架构设计
问答系统采用混合架构:
- 基于规则处理简单查询(如诗人基本信息)
- 基于检索处理事实性问题
- 基于大模型处理开放性问题
这种设计既保证了简单问题的高效响应,又能处理复杂的语义理解需求。
6.2 关键技术实现
知识图谱查询:
def query_poet_info(poet_name): query = """ MATCH (p:诗人{name:$name})-[:属于]->(d:朝代) RETURN p.name, p.birth_year, d.name """ return graph.run(query, name=poet_name).data()大模型接口封装:对GPT-3 API进行了二次封装,添加了诗词领域的prompt模板:
你是一位古诗词专家,请用专业但易懂的语言回答以下问题: 问题:{用户输入}6.3 性能优化技巧
- 缓存高频查询结果
- 对图谱查询添加索引
- 限制大模型响应长度
- 实现异步处理机制
7. AI自动写诗功能剖析
7.1 数据集准备
收集了5个高质量数据集:
- 《全唐诗》电子版
- 《宋词三百首》标注版
- 明清著名诗词集
- 现代人创作的格律诗
- 诗词格律规则库
7.2 模型训练细节
使用GPT-2 medium模型进行微调,关键参数:
- 学习率:3e-5
- 批量大小:8
- 训练轮次:10
- 最大长度:128
为避免生成内容过于自由,添加了以下约束:
- 格律检查器
- 押韵检测
- 意象相关性评估
7.3 效果评估与优化
初期生成的诗词常出现以下问题:
- 平仄错误
- 意象混乱
- 语义不通
通过添加规则后处理和强化相关训练数据,质量显著提升。现在系统能生成基本符合要求的五言、七言绝句。
8. 系统部署与性能优化
8.1 本地开发环境配置
推荐使用conda管理Python环境:
conda create -n poetry python=3.8 conda install -c pytorch pytorch torchvision pip install -r requirements.txt8.2 生产环境部署方案
对于毕业设计演示,建议使用:
- Nginx作为反向代理
- Gunicorn运行Django
- Docker容器化部署
我在阿里云学生服务器(2核4G)上的部署经验:
- 知识图谱查询响应时间<500ms
- AI写诗生成时间约3-5秒
- 支持20+并发用户
8.3 常见部署问题解决
Neo4j内存不足: 修改neo4j.conf中的内存设置:
dbms.memory.heap.initial_size=2G dbms.memory.heap.max_size=4G大模型加载失败: 使用量化后的模型减小体积 或者采用模型分片加载
跨域问题: 在Django settings.py中添加:
CORS_ALLOWED_ORIGINS = [ "http://localhost:8080", "http://your-domain.com" ]
9. 项目扩展方向
在实际开发过程中,我发现这个系统还有很大的扩展空间:
移动端适配: 将前端改造成响应式设计,或者开发微信小程序版本
增强学习功能: 添加用户反馈机制,让AI能持续优化写诗质量
多模态展示: 结合AI生成对应意境的图片或音乐
社交功能: 让用户可以分享自己创作的诗词
教学应用: 开发针对中小学古诗文教学的专项功能
这个项目最让我有成就感的是看到AI生成的诗词从最初的杂乱无章,到后来能基本符合格律要求,甚至偶尔会出现令人惊艳的句子。技术还原和传承传统文化,这是我觉得最有价值的方向。