1. 项目概述:当古诗词遇上知识图谱与AI
这个毕业设计项目将传统中华古诗词文化与现代计算机技术深度融合,打造了一个多功能古诗词智能系统。核心功能模块包括:基于知识图谱的古诗词可视化展示、诗词情感分析、智能问答系统以及AI大模型自动写诗。整套系统采用Python作为主要开发语言,结合自然语言处理(NLP)和机器学习技术,为古诗词研究提供了全新的数字化解决方案。
我在实际开发中发现,这类系统特别适合以下几类用户:
- 文学研究者:可以通过可视化图谱快速发现诗人间的关联和风格演变
- 教育工作者:智能问答系统能辅助诗词教学,自动写诗功能可激发学生兴趣
- 文化爱好者:情感分析帮助理解诗词深层意境,可视化展示让欣赏更直观
- 技术学习者:完整项目涵盖Python、NLP、知识图谱等热门技术栈
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统架构与技术选型
2.1 整体架构设计
系统采用典型的三层架构:
- 数据层:负责古诗词数据的采集、清洗和存储
- 业务逻辑层:包含知识图谱构建、情感分析、问答处理等核心算法
- 展示层:提供可视化界面和交互功能
提示:在实际部署时,建议将知识图谱服务与Web应用分离部署,避免资源竞争导致性能下降。
2.2 核心技术组件
2.2.1 知识图谱构建
选用Neo4j作为图数据库,相比传统关系型数据库,它在处理复杂关系查询时性能优势明显。构建流程包括:
- 实体识别:使用BiLSTM-CRF模型识别诗词中的诗人、朝代、地点等实体
- 关系抽取:基于规则和深度学习结合的方式提取实体间关系
- 图谱存储:将结构化数据导入Neo4j,建立节点和边的关系
2.2.2 情感分析模块
采用BERT预训练模型微调的方式进行诗词情感分类。关键步骤:
- 标注数据集:将诗词情感分为"喜、怒、哀、乐、思、忧、惊、恐"八类
- 模型训练:使用HuggingFace的transformers库进行微调
- 接口封装:将模型部署为RESTful API供系统调用
2.2.3 智能问答系统
基于知识图谱和语言模型的混合架构:
- 简单事实类问题:通过Cypher查询直接从知识图谱获取答案
- 复杂理解类问题:使用微调后的ChatGLM模型生成回答
- 混合策略:先尝试图谱查询,失败时fallback到大模型
3. 核心功能实现细节
3.1 知识图谱可视化
使用PyVis库实现动态可视化展示,核心代码如下:
python复制from pyvis.network import Network
def visualize_kg(nodes, edges):
net = Network(height="750px", width="100%", bgcolor="#222222")
# 添加节点
for node in nodes:
net.add_node(node['id'], label=node['label'],
color=node['color'], size=node['size'])
# 添加边
for edge in edges:
net.add_edge(edge['from'], edge['to'],
title=edge['relation'], width=edge['weight'])
# 设置物理布局
net.set_options("""
{
"physics": {
"barnesHut": {
"gravitationalConstant": -80000,
"centralGravity": 0.3
},
"minVelocity": 0.75
}
}
""")
return net
可视化效果优化技巧:
- 按朝代给节点着色(唐-红、宋-蓝等)
- 根据诗人知名度调整节点大小
- 边权重反映诗人间的关联强度
- 添加时间轴过滤器实现动态展示
3.2 情感分析实现
情感分析模型训练关键参数配置:
python复制from transformers import BertTokenizer, BertForSequenceClassification
tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
model = BertForSequenceClassification.from_pretrained(
'bert-base-chinese',
num_labels=8,
output_attentions=False,
output_hidden_states=False
)
training_args = TrainingArguments(
output_dir='./results',
num_train_epochs=3,
per_device_train_batch_size=16,
per_device_eval_batch_size=64,
warmup_steps=500,
weight_decay=0.01,
logging_dir='./logs',
logging_steps=10,
evaluation_strategy="epoch"
)
注意:古诗词语言与现代汉语差异较大,直接使用预训练BERT效果可能不理想。建议先在古诗词语料上继续预训练(continual pretraining),再进行微调。
3.3 智能问答系统
问答系统处理流程示例:
python复制def answer_question(question):
# 先尝试从知识图谱获取答案
kg_answer = query_knowledge_graph(question)
if kg_answer and kg_answer.confidence > 0.8:
return kg_answer
# 图谱查询失败时使用大模型
prompt = f"根据以下知识回答关于古诗词的问题:\n{context}\n问题:{question}"
response = chatglm.generate(prompt)
return process_response(response)
为提高问答准确率,我们采用了以下策略:
- 问题分类:将问题分为"作者查询"、"作品查询"、"内容理解"等类型
- 查询重写:使用少量示例微调模型改写问题为更适合图谱查询的形式
- 答案验证:对模型生成的答案进行事实性检查
4. AI自动写诗模块
4.1 模型选型与训练
经过对比测试,我们最终选择了GPT-2架构进行微调,而非更大的模型,原因包括:
- 古诗词生成不需要太强的通用知识
- GPT-2在短文本生成上表现优秀
- 训练和推理成本更低
训练数据准备要点:
- 收集10万首经典古诗词作为训练集
- 按"五言绝句"、"七言律诗"等体裁分类
- 添加平仄、押韵等格式约束
4.2 生成控制策略
为避免生成内容不符合古诗规范,实现了多重控制:
python复制def generate_poem(prompt, style="七言绝句"):
# 根据体裁设置不同生成参数
if style == "七言绝句":
params = {
"max_length": 32,
"temperature": 0.7,
"repetition_penalty": 1.2,
"num_beams": 5
}
elif style == "五言律诗":
params = {
"max_length": 48,
"temperature": 0.6,
"repetition_penalty": 1.5,
"num_beams": 7
}
# 添加格式约束
constraints = get_constraints(style)
# 生成并后处理
output = model.generate(prompt, **params)
output = apply_constraints(output, constraints)
return output
5. 系统部署与优化
5.1 技术栈选择
前端:
- Vue.js + Element UI 构建管理后台
- ECharts 实现数据可视化
- WebSocket 实现实时问答交互
后端:
- Flask 提供RESTful API
- Neo4j 存储知识图谱
- Redis 缓存热点数据
- Nginx 作为反向代理
5.2 性能优化实践
在大规模数据测试中遇到的性能问题及解决方案:
-
知识图谱查询慢:
- 为常用查询路径创建索引
- 实现查询缓存层
- 将复杂查询拆分为多个简单查询
-
情感分析响应延迟:
- 使用ONNX Runtime加速模型推理
- 实现批量处理接口
- 部署多个模型实例负载均衡
-
自动写诗结果质量不稳定:
- 引入多候选生成+排序策略
- 添加基于规则的后处理
- 实现用户反馈循环优化
6. 项目开发经验分享
6.1 数据收集与处理
古诗词数据来源多样,质量参差不齐,我们建立了严格的数据处理流程:
-
数据采集:
- 从权威古籍数据库获取基础数据
- 爬取诗词网站补充现代注释
- 人工校验重要数据
-
数据清洗:
- 统一编码格式(全部转为UTF-8)
- 标准化作者名称(如"李白"vs"李太白")
- 去重处理(不同来源的同一首诗)
-
数据增强:
- 使用回译技术生成同义表达
- 人工添加情感标签
- 构建诗人关系网络
6.2 模型训练技巧
在有限的计算资源下提升模型效果的实用方法:
-
知识图谱嵌入:
- 使用TransE算法学习实体表示
- 将嵌入向量作为特征输入其他模型
-
小样本学习:
- 对稀有类别使用数据增强
- 应用few-shot learning技术
- 设计专门的损失函数
-
模型压缩:
- 使用知识蒸馏训练小模型
- 应用量化技术减少模型大小
- 选择性层冻结减少计算量
6.3 前端展示优化
让技术展示更吸引非技术用户的技巧:
-
可视化设计原则:
- 按朝代设计主题色系
- 使用书法字体增强文化感
- 添加动画过渡效果
-
交互设计要点:
- 实现"点击诗人-关联作品-情感分析"的探索式交互
- 添加"与我写诗"的趣味功能
- 支持多种视图切换(时间轴、关系图等)
-
移动端适配:
- 响应式布局适应不同设备
- 手势操作支持缩放和平移
- 离线缓存核心数据
7. 扩展方向与未来改进
虽然项目已经实现了核心功能,但在实际使用中仍发现一些可以改进的地方:
-
知识图谱方面:
- 增加更多维度的关系(如师承、唱和)
- 引入跨语言关联(如汉诗与日本和歌)
- 构建时空可视化能力
-
AI模型方面:
- 尝试多模态生成(根据诗意生成配图)
- 实现风格迁移(让AI模仿特定诗人风格)
- 开发交互式创作助手
-
应用场景扩展:
- 教育领域:开发诗词教学辅助工具
- 文旅领域:构建数字文化展示平台
- 研究领域:提供文学分析新方法
这个项目最让我惊喜的是,当技术遇上传统文化时产生的化学反应。通过知识图谱,我们发现了许多传统研究方法难以察觉的诗人间隐
