1. 项目概述与核心价值
这个毕业设计项目将传统古诗词文化与现代AI技术深度融合,打造了一个基于知识图谱的智能分析系统。我在实际开发中发现,市面上大多数诗词类应用仅停留在简单的检索和展示层面,而这个系统的创新点在于通过大语言模型(DeepSeek)实现诗词的深度语义理解,结合知识图谱技术构建诗词间的多维关联,最终实现情感分析、个性化推荐和可视化展示三大核心功能。
系统采用Django作为后端框架,这是一个经过多个项目验证的可靠选择。Django自带的ORM能很好地处理诗词文本、作者信息、朝代关系等结构化数据,而其模板系统又为后续的可视化展示提供了灵活的前端集成方案。整个系统架构分为数据采集层、模型处理层、知识图谱构建层和应用展示层,每层都面临着独特的技术挑战。
提示:选择Django而非Flask等轻量框架,主要考虑到毕业设计需要展示完整的MVC架构和Admin后台管理功能,这在答辩环节是加分项。
2. 技术架构详解
2.1 核心组件选型
系统技术栈经过多次迭代优化,最终确定的版本组合如下:
| 组件类型 | 技术选型 | 选型理由 |
|---|---|---|
| 后端框架 | Django 4.2 | 自带Admin后台、完善ORM、成熟生态,适合快速构建复杂业务逻辑 |
| 大语言模型 | DeepSeek-MoE-16b | 在中文古诗词理解任务上表现优于同类模型,支持长文本分析 |
| 知识图谱工具 | Neo4j 5.0 | 图数据库天然适合表现诗词间的复杂关系,Cypher查询语言直观易用 |
| 可视化库 | ECharts 5.3 + D3.js | ECharts处理常规图表,D3.js实现复杂关系图谱,两者互补 |
| 前端框架 | Bootstrap 5 + jQuery | 毕业设计对前端要求不高,该组合能快速构建响应式界面 |
| 数据处理 | Pandas + Jieba | Pandas清洗结构化数据,Jieba进行基础分词,配合自定义诗词词典提升准确率 |
2.2 数据处理流水线
原始诗词数据通常来自两个渠道:公开数据集(如《全唐诗》电子版)和网络爬虫抓取。我们开发了专门的数据清洗管道:
- 文本规范化:统一繁体转简体、去除排版符号、校正错误标点
- 元数据提取:使用正则表达式从文本中分离标题、作者、朝代等结构化信息
- 诗句分割:根据句读规则将整诗拆分为独立诗句,保留原始顺序标记
- 数据增强:通过大模型为每首诗词生成3-5个现代文释义,丰富语义信息
python复制# 示例:使用Django模型定义诗词数据结构
class Poem(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey('Poet', on_delete=models.CASCADE)
dynasty = models.CharField(max_length=20)
content = models.TextField() # 保留原始格式
parsed_content = models.JSONField() # 结构化诗句数组
emotion_tags = models.JSONField(null=True) # 情感分析结果
3. 核心功能实现
3.1 知识图谱构建
知识图谱是本系统的中枢神经,我们设计了四层图结构:
- 实体层:诗词、作者、朝代、地点等基础实体
- 关系层:创作关系、引用关系、同主题关系等
- 语义层:通过大模型提取的意象、情感、风格等抽象特征
- 用户层:用户浏览记录、收藏偏好等行为数据
构建流程的关键步骤:
- 使用DeepSeek模型分析每首诗词,提取以下要素:
- 核心意象(如"月亮"、"杨柳")
- 情感倾向(使用valence-arousal二维模型量化)
- 风格特征(婉约/豪放、用典频率等)
- 将提取结果转化为图节点和边:
cypher复制// Neo4j创建节点示例 CREATE (p:Poem {title:'静夜思', emotion:'思乡'}) CREATE (i:Image {name:'明月'}) CREATE (p)-[r:CONTAINS_IMAGE]->(i) - 建立跨朝代、跨作者的语义关联:
- 计算诗词间的BERT嵌入相似度
- 对高频共现意象建立特殊关系
3.2 情感分析模块
不同于简单的情感分类,我们实现了多维情感分析:
- 基础情感:使用微调的RoBERTa模型进行九分类(喜、怒、哀、乐等)
- 情感强度:通过自定义规则计算词汇情感值的加权和
- 情感演化:分析长诗中情感随诗句的变化曲线
python复制# 情感强度计算示例
def calculate_emotion_intensity(text):
lexicon = load_emotion_lexicon() # 加载自定义情感词典
words = jieba.lcut(text)
intensity = 0
for word in words:
if word in lexicon:
intensity += lexicon[word] * (1.2 if is_amplifier(word) else 1.0)
return intensity / len(words) if words else 0
注意:直接使用公开情感词典对古诗词效果不佳,我们通过人工标注2000首唐诗构建了专用词典。
4. 推荐系统实现
4.1 混合推荐策略
系统采用三种推荐方式协同工作:
| 推荐类型 | 实现方式 | 适用场景 |
|---|---|---|
| 基于内容 | 计算诗词间的语义相似度 | 用户明确喜欢某类诗词时 |
| 基于图谱 | 通过图遍历发现关联实体 | 探索式浏览场景 |
| 协同过滤 | 分析相似用户的行为模式 | 用户积累足够行为数据后 |
推荐算法融合公式:
$$ score = \alpha \cdot S_{content} + \beta \cdot S_{graph} + \gamma \cdot S_{cf} $$
其中权重参数通过用户反馈动态调整,初期默认设置为α=0.6, β=0.3, γ=0.1
4.2 冷启动解决方案
针对新用户问题,我们设计了特殊处理机制:
- 朝代偏好引导:在注册流程中让用户选择感兴趣的朝代
- 名篇热度榜:展示历代被引用最多的100首诗词作为初始推荐
- 意象选择器:通过可视化界面让用户勾选喜欢的自然意象(梅兰竹菊等)
5. 可视化展示技术
5.1 多维数据呈现
系统提供五种视图满足不同分析需求:
- 时空地图:使用百度地图API展示诗词创作地点分布
- 情感雷达图:对比不同诗人的情感特征分布
- 关系图谱:Force-directed布局展示诗词关联网络
- 风格流变图:折线图呈现特定主题的历代演变
- 个人阅读画像:桑基图显示用户的兴趣迁移路径
javascript复制// ECharts关系图配置示例
option = {
series: [{
type: 'graph',
layout: 'force',
data: nodes,
links: edges,
emphasis: {
focus: 'adjacency',
label: {
show: true
}
},
categories: categories
}]
}
5.2 交互设计细节
为提高用户体验,我们实现了以下交互功能:
-
图谱探索:
- 鼠标悬停显示完整诗句
- 双击节点展开二级关联
- 滑动调节图谱密度
-
对比分析:
- 拖拽诗人头像到对比区
- 自动生成风格特征对比柱状图
- 支持导出对比结果为PNG
-
时间轴筛选:
- 拖动时间轴过滤特定朝代的诗词
- 动画过渡展示不同时期的创作热点
6. 部署与优化实践
6.1 性能调优方案
在开发后期,我们针对以下瓶颈进行了专项优化:
-
大模型推理加速:
- 使用FastAPI搭建模型微服务
- 实现基于LRU的请求缓存
- 对长诗采用分段处理策略
-
图谱查询优化:
cypher复制// 优化前的查询 MATCH (p:Poem)-[:HAS_EMOTION]->(e:Emotion) WHERE e.name = '悲伤' RETURN p // 优化后的查询 CREATE INDEX ON :Emotion(name) MATCH (p:Poem)-[:HAS_EMOTION]->(e:Emotion {name:'悲伤'}) USING INDEX e:Emotion(name) RETURN p -
前端加载策略:
- 对大型图谱数据采用分片加载
- 实现可视区域动态渲染
- 使用Web Worker处理复杂计算
6.2 答辩准备建议
根据多次模拟答辩经验,建议重点关注以下方面:
-
技术亮点展示:
- 演示知识图谱的动态构建过程
- 对比展示大模型分析前后的数据差异
- 用真实用户数据说明推荐效果
-
问答环节准备:
- 准备不同粒度的系统介绍(1分钟/3分钟/5分钟版本)
- 预先列出20个可能的技术问题及答案
- 录制关键功能的操作视频作为备用
-
文档规范技巧:
- 在源码中使用符合规范的注释
- 数据库设计文档包含ER图和字段说明
- PPT设计遵循"问题-方案-效果"三段式结构
7. 常见问题与解决方案
在开发过程中,我们遇到了若干典型问题,以下是排查指南:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 情感分析结果偏差大 | 现代汉语词典不适用古诗词 | 构建专用情感词典 |
| 图谱查询超时 | 未优化的跨度查询 | 添加索引+限制查询深度 |
| 推荐结果重复率高 | 冷启动策略单一 | 增加热度衰减因子+随机扰动 |
| 大模型响应慢 | 显存不足 | 启用8bit量化+设置最大token限制 |
| 可视化节点重叠 | 力导向布局参数不当 | 调整repulsion和gravity参数 |
8. 扩展方向与改进空间
当前系统仍有提升空间,可以从以下几个方向延伸:
-
多模态扩展:
- 引入名家书法作品图像
- 添加诗词吟唱音频数据
- 构建诗画关联分析
-
交互创新:
- 实现基于手势的图谱操控
- 开发VR诗词漫游场景
- 添加创作辅助功能
-
算法增强:
- 引入强化学习优化推荐策略
- 尝试多任务联合训练模型
- 应用可解释AI技术分析决策过程
这个项目让我深刻体会到,传统文化与现代技术的结合能碰撞出意想不到的火花。在开发知识图谱时,发现李清照与辛弃疾虽然风格迥异,但通过"中秋节"这个意象节点产生了有趣关联,这种发现正是技术赋能人文研究的典型案例。