1. 项目概述:当古诗词遇见AI与知识图谱
古诗词作为中华文化的瑰宝,蕴含着丰富的情感表达和历史文化内涵。传统的情感分析方法往往局限于简单的关键词匹配或浅层机器学习模型,难以捕捉"月落乌啼霜满天"中的孤寂,或"大江东去浪淘尽"的豪迈。这个毕业设计项目创造性地将Django框架、大语言模型(LLM)和知识图谱技术相结合,构建了一个能深度理解古诗词情感内涵的智能分析系统。
我在实际开发中发现,单纯依靠算法模型的分析结果往往缺乏文化语境的支持。比如李白的《静夜思》,模型可能识别出"明月"和"故乡"两个关键词,但如果没有盛唐时期文人游历背景的知识,就很难真正理解其中蕴含的思乡情感深度。这正是本系统的创新点所在——通过知识图谱构建诗人、朝代、历史事件、文学典故之间的关联网络,为AI分析提供文化语境支撑。
2. 系统架构设计解析
2.1 技术栈选型背后的思考
选择Django作为后端框架主要基于三点考量:首先,其自带的ORM能高效处理结构化诗词数据;其次,Admin后台可快速构建数据管理界面;最重要的是,Django REST framework能完美支持前后端分离架构。实际部署时,我特别推荐使用Django Channels来处理LLM服务的异步请求,避免阻塞主线程。
LLM模型选型上,经过对比测试,7B参数的LLaMA-2在古诗词理解任务上表现出色,且对消费级GPU友好。关键技巧是在Hugging Face模型库中选择已进行中文优化的版本,并采用8-bit量化降低显存占用。知识图谱选用Neo4j而非传统关系数据库,因为诗词中的"诗人-作品-意象"关系用图结构表达更为自然。
2.2 模块化设计实践
系统采用经典的三层架构,但在数据层特别设计了双通道处理机制:
- 结构化数据通道:MySQL存储诗词原文、作者等基础信息
- 图数据通道:Neo4j管理诗人社交关系、历史事件关联等复杂网络
这种混合存储方案在实现时需要注意数据同步问题。我的解决方案是使用Django信号机制,在基础数据变更时自动触发图谱更新。例如当新增杜甫的诗作时,系统会自动建立与"安史之乱"节点的关联。
分析层采用微服务架构,将LLM推理、知识图谱查询等功能拆分为独立服务。这带来一个实战经验:务必为每个服务配置超时重试机制,我曾在初期因LLM服务响应延迟导致整个系统卡死。
3. 核心实现细节揭秘
3.1 知识图谱构建实战
构建高质量的古诗词知识图谱需要解决三个关键问题:
数据获取:除了爬取公开的诗词数据库,我还发现了一个宝贵资源——《中国历史人物传记数据库》。通过编写特定的SPARQL查询,可以提取诗人之间的社交关系数据。例如以下Cypher语句可建立李白与杜甫的关联:
cypher复制MATCH (libai:Poet {name:"李白"}), (dufu:Poet {name:"杜甫"})
CREATE (libai)-[:FRIEND_WITH {source:"《唐才子传》"}]->(dufu)
实体识别:在NER模型选择上,经过对比测试,LAC(Lexical Analysis for Chinese)在古诗词专名识别上准确率比通用模型高约15%。但对于"烽火连三月"中的"烽火"这类文化意象词,仍需人工定义补充规则。
关系定义:设计了六类核心关系:
- 诗人-朝代:隶属关系
- 诗人-诗人:社交关系
- 诗词-意象:包含关系
- 意象-情感:象征关系
- 事件-诗人:影响关系
- 典故-诗词:引用关系
3.2 LLM微调的特殊技巧
古诗词语言的特殊性给模型微调带来挑战。我总结出三个有效方法:
-
数据增强:对原始诗句进行文言文风格的近义替换。如把"举头望明月"扩展为"抬头观婵娟"、"仰首瞻玉盘"等变体。
-
注意力引导:在训练时对诗句中的意象词(如"柳"-离别)增加loss权重。这需要先构建一个包含200+常见意象的词典。
-
少样本学习:采用prompt模板引导模型理解任务。例如:
code复制[诗词]"感时花溅泪"
请分析情感倾向,并从以下标签中选择:{怀古|思乡|忧国|离别}
思考过程:诗句通过"花溅泪"的拟人手法,表达诗人对时局的感伤...
最终答案:忧国
实际测试表明,经过领域微调的模型在情感分类任务上比通用模型准确率提升27.3%。
4. 系统集成中的典型问题与解决方案
4.1 性能优化实战记录
初期版本面临的最大挑战是LLM推理延迟。当并发用户超过5人时,API响应时间会飙升到8秒以上。通过以下优化手段最终将99%的请求控制在1秒内:
-
缓存策略:对经典诗词的分析结果进行Redis缓存,设置30天过期时间。缓存键设计为"诗词MD5_模型版本"。
-
请求合并:当多个用户查询同一首诗时,通过Celery任务队列合并处理请求。这需要精心设计锁机制避免重复计算。
-
模型量化:将LLaMA-2从FP32转为INT8精度,推理速度提升3倍而精度损失不到2%。
4.2 知识图谱与LLM的协同问题
如何让两种技术优势互补是个有趣课题。我们最终采用的融合方案是:
- LLM先对诗句进行初步情感判断
- 提取诗句中的实体(人物、地点、意象)
- 在图谱中查询这些实体的关联路径
- 综合两方面证据进行最终判断
例如分析杜甫《春望》时:
- LLM输出:忧国(0.7)、悲凉(0.6)
- 图谱路径:杜甫→安史之乱→战乱描写
- 最终判定:忧国(置信度提升至0.85)
5. 效果展示与评估
系统界面采用响应式设计,主要功能区域包括:
- 诗词输入框:支持文本粘贴或从经典库选择
- 情感轮盘图:直观展示多重情感维度
- 知识图谱视图:可交互的关联网络展示
- 解释面板:逐句分析情感依据
在300首标注数据的测试集上,系统达到82.4%的准确率。特别值得注意的是,对于包含典故的诗句(如"商女不知亡国恨"),系统表现显著优于纯LLM方法,这验证了知识图谱的价值。
一个令我惊喜的发现是,系统能识别某些微妙的情感转变。比如在分析苏轼《水调歌头》时,系统准确捕捉到从"明月几时有"的怅惘到"但愿人长久"的豁达这一情感变化轨迹。
6. 项目扩展方向
在实际使用过程中,我发现几个有价值的改进方向:
-
意象网络分析:将"明月-思乡"、"杨柳-离别"等常见意象关系可视化,帮助用户理解传统文化符号系统。
-
风格对比功能:比较不同时期(如盛唐vs晚唐)或不同诗人(李白vs杜甫)的情感表达差异。
-
创作辅助:基于用户输入的情感关键词,推荐合适的意象和典故使用方案。
-
移动端适配:开发微信小程序版本,增加拍照识诗等实用功能。
这个项目最让我有成就感的是,它不仅是技术组件的简单堆砌,而是真正建立了传统文化与现代AI技术的对话桥梁。当看到系统能解读出"春风又绿江南岸"中"绿"字蕴含的欣喜情感时,那些调试神经网络参数的深夜都变得值得了。
