1. 项目概述:当古典诗词遇上AI技术栈
这个毕业设计项目将传统古诗词文化与现代AI技术进行了巧妙融合。核心思路是通过Django框架搭建Web应用,结合LLM大语言模型的知识抽取能力构建古诗词知识图谱,实现三大核心功能:基于情感分析的古诗词分类、个性化推荐系统以及交互式可视化展示。这种技术组合在文化数字化领域具有典型示范意义。
从技术架构来看,项目采用了前后端分离的设计模式:前端使用HTML+CSS+JavaScript实现可视化界面,后端采用Django REST framework构建API服务,数据处理层整合了LLM模型的知识抽取能力和传统NLP情感分析算法。特别值得注意的是,项目将静态知识图谱与动态LLM推理能力相结合,既保证了系统响应速度,又增强了语义理解深度。
2. 技术架构深度解析
2.1 Django框架选型与实践
选择Django作为后端框架主要基于三点考量:首先,其内置的ORM系统能高效处理结构化数据,特别适合知识图谱的存储与查询;其次,Admin后台提供了开箱即用的数据管理界面,极大简化了诗词元数据的维护工作;再者,Django REST framework可以快速构建符合RESTful规范的API接口。
在实际开发中,我们采用了这样的模型设计:
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() emotion_tags = ArrayField(models.CharField(max_length=10)) # 使用PostgreSQL的数组字段存储多情感标签 class KnowledgeGraph(models.Model): source_entity = models.CharField(max_length=50) relation_type = models.CharField(max_length=30) target_entity = models.CharField(max_length=50) confidence = models.FloatField()关键提示:使用Django的migration系统时,建议为每个迁移文件添加详细的注释说明,特别是在修改已有数据结构时。我们在实际开发中就遇到过因迁移顺序问题导致的生产环境数据冲突。
2.2 LLM在知识图谱构建中的创新应用
与传统基于规则的知识抽取不同,本项目创新性地采用LLM进行多阶段知识提取:
- 实体识别阶段:使用微调的BERT模型识别诗词中的时间、地点、人物等实体
- 关系抽取阶段:通过prompt engineering引导LLM输出实体间关系
- 知识验证阶段:结合历史典籍对提取的三元组进行可信度校验
具体prompt设计示例:
你是一位中国古代文学专家,请分析以下诗句中的实体关系: "李白乘舟将欲行,忽闻岸上踏歌声" 请用[实体1, 关系, 实体2]格式列出所有明确或隐含的关系,并标注关系类型(空间关系、社交关系、行为关系等)这种方法的优势在于能够捕捉诗词中隐含的深层关联,比如通过"明月几时有,把酒问青天"可以提取出[苏轼, 表达, 孤寂]、[酒, 象征, 愁绪]等富有文学解读价值的关系。
3. 核心功能实现细节
3.1 多维度情感分析系统
诗词情感分析面临独特挑战:既要识别显性情态词(如"愁"、"喜"),又要理解隐喻表达(如"梧桐更兼细雨"的凄凉意境)。我们的解决方案是构建混合分析模型:
- 词典层:整合《汉语情感词词典》与自建的古典诗词情感词库
- 规则层:定义30+种古典诗词常见修辞模式的情感映射规则
- 模型层:微调RoBERTa模型在5000首人工标注诗词上的表现
分析流程如下图所示(伪代码):
def analyze_emotion(poem): # 初级分析:基于情感词典的快速匹配 basic_emotion = lexicon_based_analysis(poem.content) # 深度分析:LLM语义理解 llm_analysis = query_llm( f"请从情感角度解读以下诗句,输出3个最突出的情感标签:\n{poem.content}" ) # 结果融合 return weighted_fusion(basic_emotion, llm_analysis)3.2 知识图谱可视化方案
可视化模块采用Echarts+D3.js的组合方案,实现了三种视图:
- 时空视图:以时间轴和地图展示诗人足迹与创作地点
- 关系图谱:力导向图呈现诗人社交网络与意象关联
- 情感热力图:用颜色梯度展示不同主题的情感分布
关键技术点包括:
- 使用WebSocket实现图谱数据的实时推送
- 采用QuadTree算法优化大规模节点渲染性能
- 设计渐进式加载策略,确保万级节点流畅交互
// 示例:Echarts关系图配置 option = { series: [{ type: 'graph', layout: 'force', force: { repulsion: 100, edgeLength: [50, 150] }, data: nodes.map(node => ({ name: node.name, category: node.type, symbolSize: Math.log(node.weight) * 5 })), links: relations.map(rel => ({ source: rel.source, target: rel.target, label: { show: true, formatter: rel.type } })) }] }4. 部署与优化实战经验
4.1 云服务器部署方案
项目最终采用Nginx+Gunicorn+Docker的部署架构,关键配置包括:
- 使用Gevent worker处理高并发请求
- 配置Nginx静态文件缓存策略
- 对知识图谱API接口实施分级限流
特别值得分享的是LLM服务的部署技巧:
- 使用FastAPI构建轻量级推理服务
- 采用模型量化技术将LLM体积压缩40%
- 实现动态加载机制,按需调入不同精度的模型版本
4.2 性能优化关键指标
通过以下优化手段,系统QPS从最初的15提升到120+:
- 为高频查询添加Redis缓存层,缓存命中率达92%
- 对知识图谱查询实现Gremlin到Cypher的转换优化
- 使用Celery异步处理耗时的LLM推理任务
压力测试数据对比:
| 优化措施 | 平均响应时间(ms) | 错误率 | 并发承载量 |
|---|---|---|---|
| 初始版本 | 850 | 3.2% | 50 |
| 添加缓存 | 210 | 1.1% | 120 |
| 查询优化 | 130 | 0.3% | 200 |
| 异步改造 | 90 | 0.1% | 300+ |
5. 典型问题排查实录
5.1 知识图谱数据不一致
现象:同一实体在不同诗词中出现关系矛盾排查:检查发现LLM提取时缺少上下文约束解决:增加朝代过滤器与逻辑一致性校验规则
def validate_relation(relation): # 时间逻辑校验 if relation.type == '师从' and relation.source.dynasty > relation.target.dynasty: return False # 事实性校验 if relation.source == '李白' and relation.target == '杜甫' and relation.type == '敌对': return False return True5.2 情感分析偏差问题
现象:对边塞诗的情感判断过于负面根因:训练数据中边塞诗样本不足方案:采用主动学习策略增强数据收集
- 识别低置信度预测样本
- 设计标注界面邀请专家复核
- 迭代更新模型
6. 项目扩展方向
在实际开发过程中,我们发现几个有价值的扩展点:
- 跨模态分析:结合历代书画作品验证情感分析结果
- 风格迁移应用:基于LLM实现现代诗到古典风格的转换
- 教育集成:开发配套的教学辅助功能模块
一个有趣的实验是将推荐系统与AR技术结合,当用户身处真实场景(如长江边)时,系统自动推送相关地理诗词(如《早发白帝城》),这种情境化推荐显著提升了用户参与度。