1. 项目概述:当古诗词遇上AI知识图谱
作为一名长期从事自然语言处理与知识图谱开发的工程师,我最近完成了一个极具挑战性的项目——基于Django框架和LLM大模型的古诗词情感分析系统。这个项目源于我对传统文化与人工智能交叉领域的浓厚兴趣,也回应了当前古诗词数字化研究中的几个关键痛点。
传统古诗词分析面临三大困境:首先是语义理解的局限性,像"月落乌啼霜满天"这样的诗句,传统情感词典可能只能识别出"霜"这个负面词汇,却无法理解整句营造的孤寂意境;其次是文化语境的缺失,比如不了解杜甫的生平背景,就很难真正体会"国破山河在"中蕴含的忧国之情;最后是多模态数据的割裂,诗词的平仄韵律、意象象征等要素往往被分开处理。
我们的系统通过三大技术支柱解决这些问题:
- 使用Qwen-7B等大语言模型进行领域微调,使其掌握古汉语特有的隐喻和典故
- 构建包含诗人、朝代、意象等实体的大型知识图谱,目前已有超过8万个节点
- 开发多模态融合算法,将文本、韵律和视觉意象统一分析
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统架构设计解析
2.1 三层架构设计理念
系统采用经典的三层架构,但在每层都做了针对性优化:
数据层采用混合存储策略:
- MySQL存储结构化数据:诗词原文、作者信息等,利用InnoDB引擎的事务特性保证数据一致性
- MongoDB存储非结构化数据:用户评论、分析结果等JSON文档,方便扩展字段
- Neo4j图数据库存储实体关系:使用Cypher查询语言实现复杂关系遍历,如"李白-创作-静夜思-包含-明月意象"
服务层的核心创新点:
- 开发了基于Django REST Framework的异步API接口
- 实现LLM模型的服务化封装,支持动态加载不同规模的模型(从7B到72B参数)
- 知识图谱推理引擎采用图嵌入(TransE)和规则引擎混合推理
表现层特点:
- Vue.js前端实现组件化开发
- ECharts用于常规图表展示
- D3.js处理复杂的力导向图谱可视化
- 特别开发了移动端适配方案,确保在平板等设备上的良好体验
2.2 关键技术选型考量
选择Django而非Spring Boot主要基于:
- Python生态对NLP任务更友好
- Django ORM简化了多数据库操作
- 内置Admin后台方便非技术人员管理内容
LLM模型选型时对比了:
- ChatGLM3:中文理解能力强但推理速度较慢
- Qwen-7B:在古汉语任务上微调效果突出
- LLaMA2:需要额外进行中文预训练
最终选择Qwen-7B并采用LoRA微调技术,仅训练1.2%的参数就达到了85%的准确率,极大节省了计算资源。
3. 核心模块实现细节
3.1 知识图谱构建全流程
数据采集阶段遇到的最大挑战是数据源的异构性:
- 使用Scrapy框架开发分布式爬虫集群
- 针对不同网站定制XPath解析规则
- 实现自动去重和脏数据清洗管道
实体识别采用BERT-BiLSTM-CRF组合模型:
- BERT层获取字符级上下文表示
- BiLSTM捕捉长距离依赖
- CRF确保标签转移合法性
在自建测试集上F1值达到92.3%
关系抽取的创新点:
- 引入对抗训练增强模型鲁棒性
- 设计注意力机制聚焦关键上下文
- 对稀有关系类型采用过采样策略
3.2 LLM大模型微调实战
构建了10万条古诗问答指令集,包含:
- 事实类问题:"静夜思的作者是谁?"
- 分析类问题:"如何理解'低头思故乡'的情感?"
- 比较类问题:"李白和杜甫的创作风格有何不同?"
采用两阶段微调策略:
- 通用古诗理解:在百万级古诗文本上继续预训练
- 特定任务微调:使用LoRA技术高效适配下游任务
实测发现,加入韵律特征(平仄模式)能使情感分析准确率提升4.2%,而结合意象知识图谱能再提升6.8%。
4. 多模态融合技术创新
4.1 文本与韵律的融合
开发了专门的韵律分析模块:
- 基于《平水韵》建立古音韵数据库
- 使用BiGRU建模诗句平仄模式
- 发现五言诗"仄仄平平仄"格式多表达昂扬情感
创新性地将韵律特征通过门控机制融入文本表示:
code复制韵律特征 → 门控单元 → 加权融合 → 联合表示
↑
文本特征 →
4.2 意象知识图谱的应用
构建了包含300+古典意象的知识图谱,每个意象包含:
- 情感极性(正向/负向)
- 强度值(1-5级)
- 时代演变特征(如"梅"在唐宋的不同象征意义)
设计图注意力网络(GAT)来捕捉意象间的复杂关联,例如:
"月亮"→"思念"(权重0.87)
"柳枝"→"离别"(权重0.92)
5. 系统优化与性能调优
5.1 知识图谱查询优化
针对Neo4j的优化措施:
- 建立复合索引加速高频查询
- 使用APOC库实现并行查询
- 对深度遍历查询设置最大深度限制
将平均查询延迟从1200ms降至380ms
5.2 大模型推理加速
采用的优化组合:
- 使用vLLM推理框架实现连续批处理
- 采用8-bit量化减小模型体积
- 实现动态批处理自动调整batch_size
QPS从3提升到18,满足并发需求
5.3 缓存策略设计
四级缓存体系:
- 前端本地缓存静态资源
- Redis缓存热点查询结果
- 内存缓存模型中间表示
- 磁盘缓存预处理数据
缓存命中率达89%,大幅降低数据库压力
6. 可视化交互设计精要
6.1 情感时空分布图
使用ECharts实现:
- 热力图展示不同朝代的情感倾向
- 时间轴动画呈现情感演变
- 支持按诗人籍贯地域筛选
发现盛唐时期"乐"类情感占比达43%,晚唐降至27%
6.2 诗人关系网络
D3.js实现的创新功能:
- 力导向布局自动优化节点位置
- 动态聚焦查看子图
- 右键展开诗人详情面板
揭示李白与杜甫的实际交往仅3次,但后世关联度评分高达9.2/10
6.3 移动端适配方案
采用响应式设计:
- 使用Flexbox布局自动调整
- 针对触摸操作优化交互
- 实现画布动态缩放功能
在iPad Pro上测试触控响应时间<150ms
7. 项目实践中的经验总结
7.1 数据质量决定上限
踩过的坑:
- 早期使用自动标注数据导致准确率停滞在75%
- 某些网站的诗文版本存在讹误
- 诗人生卒年信息存在多个版本
解决方案:
- 组建5人专家团队进行数据校验
- 建立数据质量评分体系
- 开发自动化校验工具
经过3轮清洗后数据质量评分从68提升到92
7.2 模型可解释性实践
采用的方案:
- 开发Attention可视化工具
- 输出推理过程链(Chain-of-Thought)
- 生成对比分析报告
例如系统会解释:"将'梧桐'判断为悲伤意象,因为:1)知识图谱中82%相关诗词属悲情 2)该诗人其他作品中的梧桐均表达离愁"
7.3 工程化部署经验
值得分享的实践:
- 使用Docker-compose管理多服务
- 实现灰度发布机制
- 开发自动化监控看板
系统上线后平均无故障时间达99.95%
8. 效果评估与对比分析
8.1 量化指标对比
在自建测试集上的表现:
| 模型 | 情感准确率 | 典故召回率 | 推理速度(诗/秒) |
|---|---|---|---|
| 传统词典法 | 71.2% | 65.8% | 120 |
| BERT-base | 83.5% | 78.4% | 35 |
| 本系统 | 89.7% | 85.2% | 28 |
虽然推理速度稍慢,但准确率显著提升,且能提供解释性分析。
8.2 教育场景实测
在某重点中学的对照实验:
- 实验组使用本系统辅助学习
- 对照组采用传统教学方法
结果显示实验组在: - 意象识别准确率提高31%
- 情感理解深度评分高42%
- 学习兴趣提升27%
9. 未来优化方向
在项目开发过程中,我们发现几个值得深入的方向:
- 增加书法、绘画等多模态数据融合
- 开发轻量化版本适配边缘设备
- 构建诗人情感变迁时间线分析
- 引入用户反馈闭环优化系统
特别在模型优化方面,我们正在试验将知识图谱信息直接注入大模型预训练过程(而不仅仅是推理阶段),初步实验显示这能进一步提升3-5%的准确率。另一个有趣的发现是,不同朝代的诗词需要差异化的分析策略——比如宋词中的长调更适合用篇章级分析,而唐诗绝句则需要更精细的字词层面处理。
