1. 项目背景与核心价值
古诗词作为中华文化的瑰宝,蕴含着丰富的情感表达和意象关联。传统的人工解读方式效率低下且难以系统化,而现代自然语言处理技术为这一领域带来了新的可能性。这个毕业设计项目正是基于这样的背景,将前沿的大模型技术与知识图谱相结合,打造一个智能化的古诗词分析系统。
项目的核心创新点在于:
- 首次将DeepSeek大模型应用于古诗词情感分析领域
- 构建了结构化的古诗词知识图谱
- 实现了情感分析与知识图谱的协同推理
- 开发了直观的可视化交互界面
这个系统不仅能帮助文学研究者快速分析诗词情感倾向,还能为学生提供直观的学习工具,甚至可以作为文化传播的数字平台。从技术角度看,它展示了如何将NLP、知识图谱和Web开发技术有机结合,解决传统文化领域的实际问题。
2. 系统架构设计
2.1 整体技术栈
系统采用典型的三层架构:
后端层:
- Django 4.0+作为核心框架
- Neo4j图数据库存储知识图谱
- Py2neo实现Python与Neo4j的交互
- DeepSeek-R1/V3大模型进行情感分析
前端层:
- Vue.js构建用户界面
- D3.js实现知识图谱可视化
- ECharts展示情感分布图表
数据处理层:
- Pandas进行数据清洗和预处理
- Jieba和Spacy完成中文分词和实体识别
- 自定义规则和模型进行关系抽取
2.2 数据流设计
系统数据处理流程分为四个关键阶段:
-
数据采集与预处理:
- 从公开古籍库获取诗词原文
- 清洗文本,去除注释和标点干扰
- 人工标注情感标签作为基准数据
-
知识图谱构建:
- 实体识别:人物、地点、意象、典故等
- 关系抽取:诗人-朝代、意象-情感等
- 图谱存储:使用Neo4j的Cypher查询语言
-
模型训练与推理:
- 基于DeepSeek进行迁移学习
- 输入诗词文本和知识图谱上下文
- 输出情感分类和解释文本
-
结果可视化:
- 将模型输出转换为前端可渲染的数据结构
- 实现交互式图谱探索
- 支持多维度情感分布展示
3. 知识图谱构建详解
3.1 数据准备与实体定义
我们定义了12类核心实体:
- 诗人(姓名、字号、朝代、生平)
- 诗词(标题、内容、创作时间)
- 意象(名称、类型、象征意义)
- 典故(出处、原始含义)
- 地点(古今地名对照)
- 季节(春夏秋冬)
- 情感(喜怒哀乐思等)
- 主题(送别、怀古、田园等)
- 修辞(比喻、夸张等)
- 韵律(平仄、押韵)
- 流派(婉约、豪放等)
- 历史事件(安史之乱等)
3.2 关系抽取方法
采用混合式关系抽取策略:
基于规则的方法:
python复制# 示例:提取"折柳-送别"关系
def extract_willow_relation(text):
if "折柳" in text and ("送" in text or "别" in text):
return ("折柳", "象征", "送别")
return None
基于模型的方法:
- 使用DeepSeek生成候选关系
- 通过人工定义的约束条件过滤
- 计算关系置信度得分
关键关系类型:
- 诗人-创作-诗词
- 诗词-包含-意象
- 意象-象征-情感
- 典故-关联-主题
- 诗词-表达-情感
- 诗人-属于-流派
3.3 图谱存储优化
针对古诗词领域特点,我们进行了以下优化:
-
索引设计:
- 为高频查询实体创建索引
- 对诗人姓名、诗词标题等建立全文索引
-
数据分区:
- 按朝代分图(唐诗、宋词等)
- 热门诗人单独子图
-
查询优化:
- 使用APOC库的图算法
- 实现多跳查询缓存
- 限制复杂查询的深度
4. 情感分析模型开发
4.1 数据标注规范
我们制定了详细的情感标注指南:
-
情感分类体系:
- 7大类:喜、怒、哀、惧、爱、恶、思
- 21子类:如思乡、怀古、忧国等
-
标注规则:
- 以整首诗为单位标注
- 允许多重情感标签
- 标注置信度(1-5级)
-
质量控制:
- 双人独立标注
- 分歧由专家仲裁
- 定期评估标注一致性
4.2 模型架构设计
采用两阶段混合模型:
第一阶段:基础情感分类
- 输入:诗词文本
- 输出:粗粒度情感类别
- 模型:DeepSeek微调版本
第二阶段:增强情感推理
- 输入:诗词文本+知识图谱上下文
- 输出:细粒度情感标签+解释
- 模型:图注意力网络+DeepSeek集成
python复制class EnhancedSentimentModel(nn.Module):
def __init__(self, pretrained_model, graph_dim):
super().__init__()
self.text_encoder = pretrained_model
self.graph_attention = GraphAttentionLayer(graph_dim, 256)
self.classifier = nn.Linear(256, 21)
def forward(self, text_input, graph_embeddings):
text_features = self.text_encoder(**text_input).last_hidden_state[:,0]
graph_features = self.graph_attention(graph_embeddings)
combined = text_features + graph_features
return self.classifier(combined)
4.3 模型训练技巧
-
数据增强:
- 同义词替换(保持格律)
- 意象替换(相同情感类别)
- 生成对抗样本
-
损失函数设计:
- 主损失:带权重的交叉熵
- 辅助损失:解释文本的BLEU分数
- 正则化:知识图谱一致性约束
-
训练策略:
- 两阶段训练(先文本后图谱)
- 渐进式解冻
- 混合精度训练
5. 系统实现关键点
5.1 后端API设计
采用RESTful风格设计主要接口:
-
诗词检索:
- GET /api/poems?author=李白&emotion=思乡
- 支持分页和高级筛选
-
情感分析:
- POST /api/analyze
- 请求体:
- 响应:情感标签+解释+相关实体
-
图谱查询:
- GET /api/graph?entity=月亮&depth=2
- 返回子图结构和属性
-
用户交互:
- POST /api/feedback
- 接收用户对分析结果的修正
5.2 前端可视化方案
知识图谱可视化:
- 力导向布局展示核心关系
- 颜色编码不同实体类型
- 交互功能:
- 点击展开关联实体
- 拖拽重新布局
- 搜索定位节点
情感分布展示:
- 雷达图显示多重情感强度
- 时间轴展示情感演变
- 热力图呈现意象-情感关联
5.3 性能优化措施
-
缓存策略:
- Redis缓存热门诗词分析结果
- 浏览器端缓存静态资源
- CDN加速图谱可视化库
-
异步处理:
- Celery任务队列处理耗时分析
- WebSocket推送处理进度
-
数据库优化:
- Neo4j查询计划分析
- 定期重建索引
- 读写分离部署
6. 部署与测试
6.1 容器化部署方案
使用Docker Compose定义服务:
yaml复制version: '3'
services:
web:
build: ./web
ports:
- "8000:8000"
depends_on:
- redis
- neo4j
neo4j:
image: neo4j:4.4
ports:
- "7474:7474"
- "7687:7687"
volumes:
- neo4j_data:/data
redis:
image: redis:6
ports:
- "6379:6379"
volumes:
neo4j_data:
6.2 测试策略
-
单元测试:
- 测试关键业务逻辑
- 验证模型预测一致性
-
集成测试:
- API端点功能测试
- 前后端数据流测试
-
性能测试:
- Locust模拟并发用户
- 监测响应时间和资源占用
-
用户体验测试:
- A/B测试不同可视化方案
- 收集用户反馈迭代改进
7. 项目总结与展望
在实际开发过程中,我们遇到了几个关键挑战和对应的解决方案:
-
古诗词语言特殊性:
- 问题:文言文与现代汉语差异导致模型性能下降
- 解决:收集更多文言文语料进行预训练
-
意象的多义性:
- 问题:同一意象在不同语境表达不同情感
- 解决:引入上下文感知的关系推理
-
数据稀缺性:
- 问题:标注数据不足
- 解决:设计半监督学习方案
未来可能的扩展方向:
- 增加多模态分析(书法、吟诵音频)
- 构建跨语言知识图谱(中日韩古诗对比)
- 开发移动端应用
- 引入用户生成内容机制
这个项目展示了如何将前沿AI技术与传统文化研究相结合,不仅具有学术价值,也为文化遗产的数字化保护提供了可行方案。通过实际开发,我们深刻体会到:好的系统设计需要在技术先进性和领域特性之间找到平衡点,而这往往需要跨学科的深入理解和反复迭代。
