1. 项目概述:当古诗词遇上知识图谱与AI大模型
这个毕业设计项目将传统中华古诗词文化与现代AI技术进行了深度融合,打造了一个集知识图谱构建、情感分析、智能问答和自动写诗于一体的综合系统。作为一名长期从事自然语言处理开发的工程师,我认为这种跨界组合非常有创意——它不仅考验学生对Python全栈开发的能力,还需要对NLP、知识图谱构建和大模型应用有深入理解。
整套系统包含四个核心模块:基于知识图谱的古诗词可视化展示、古诗词情感倾向分析、基于AI的智能问答系统,以及利用大模型实现的自动写诗功能。从技术栈来看,项目涉及Python后端开发、Neo4j等图数据库应用、前端可视化(可能使用Echarts或D3.js)、情感分析算法实现,以及最新的大模型API调用或本地部署方案。
2. 系统架构设计与技术选型
2.1 整体架构设计
系统采用典型的三层架构:
- 数据层:负责古诗词数据的存储与管理,包括关系型数据库(MySQL)存储结构化数据、Neo4j存储知识图谱、Redis缓存热点数据
- 服务层:包含核心业务逻辑的实现,采用Python Flask/Django框架
- 展示层:前端可视化界面,可采用Vue.js+Echarts技术栈
提示:在实际部署时,建议将知识图谱服务与主应用服务分离部署,避免图数据库的高内存占用影响其他服务性能。
2.2 关键技术选型考量
知识图谱构建工具选择:
- Neo4j:社区版完全免费,Cypher查询语言直观,适合毕业设计场景
- Apache Jena:更适合学术研究,但学习曲线较陡
- Nebula Graph:性能优异但社区资源相对较少
情感分析方案对比:
- 传统机器学习:使用sklearn+TF-IDF,实现简单但准确率有限
- 深度学习:LSTM/TextCNN模型,需要足够标注数据
- 预训练模型:BERT/ERNIE微调,效果最好但需要GPU资源
大模型应用决策点:
- API调用:使用OpenAI或文心一言API,开发简单但可能有成本
- 本地部署:ChatGLM-6B等开源模型,需考虑显卡配置(至少16GB显存)
- 量化部署:使用4bit量化的模型版本,可在消费级显卡运行
3. 知识图谱构建全流程解析
3.1 古诗词数据采集与处理
构建高质量知识图谱的第一步是获取结构化的古诗词数据。推荐以下几个优质数据源:
- 古诗文网API(需申请)
- 中华诗词数据库(公开数据集)
- 爬取权威古诗网站(注意robots.txt限制)
数据清洗的关键步骤:
def clean_poem_data(raw_text): # 去除现代标点符号 text = re.sub(r'[,。、;:?!]', '', raw_text) # 标准化异体字 text = normalize_chars(text) # 提取诗句中的关键词 keywords = extract_keywords(text) return { 'cleaned_text': text, 'keywords': keywords, 'dynasty': detect_dynasty(text), 'author': extract_author(text) }3.2 实体识别与关系抽取
古诗词知识图谱的核心实体包括:
- 诗人节点:包含朝代、字号、生平等信息
- 诗歌节点:包含标题、内容、创作年代等
- 地点节点:诗中提及或创作地点
- 意象节点:诗中典型意象(明月、杨柳等)
关系类型设计示例:
(诗人)-[创作]->(诗歌) (诗歌)-[包含意象]->(意象) (诗人)-[属于]->(朝代) (诗歌)-[表达情感]->(情感类型)实体关系抽取的Python实现:
def extract_relations(poem): relations = [] # 使用预训练模型识别实体 ner_result = model.predict(poem['content']) # 构建作者-诗歌关系 relations.append({ 'source': poem['author'], 'target': poem['title'], 'type': 'CREATED' }) # 提取诗歌中的意象 for image in detect_images(poem['content']): relations.append({ 'source': poem['title'], 'target': image, 'type': 'CONTAINS_IMAGE' }) return relations3.3 知识图谱可视化实现
使用PyVis库实现基础可视化:
from pyvis.network import Network def visualize_kg(nodes, edges): net = Network(height="750px", width="100%") # 添加节点 for node in nodes: net.add_node(node['id'], label=node['label'], group=node['group']) # 添加边 for edge in edges: net.add_edge(edge['from'], edge['to'], title=edge['label']) # 生成HTML net.show("kg.html")更专业的可视化建议:
- 使用Echarts的力导向图实现更丰富的交互
- 对不同类型节点采用颜色编码(诗人-蓝色,诗歌-绿色等)
- 实现点击节点展开关联关系的功能
4. 情感分析模块深度实现
4.1 古诗词情感标注体系
不同于现代文的情感分析,古诗词情感有其特殊性。我们设计了三层情感标签体系:
基础情感(7类):
- 喜、怒、哀、乐、思、忧、惊
复合情感(组合基础情感):
- 离愁别绪(哀+忧+思)
- 豪情壮志(喜+乐+惊)
特殊诗体情感:
- 边塞诗的悲壮
- 田园诗的闲适
4.2 基于深度学习的情感分析模型
使用BERT+BiLSTM的混合模型架构:
import torch import torch.nn as nn from transformers import BertModel class PoetryEmotionModel(nn.Module): def __init__(self, num_classes): super().__init__() self.bert = BertModel.from_pretrained('bert-base-chinese') self.lstm = nn.LSTM(768, 256, bidirectional=True) self.classifier = nn.Linear(512, num_classes) def forward(self, input_ids, attention_mask): outputs = self.bert(input_ids, attention_mask=attention_mask) sequence_output = outputs.last_hidden_state lstm_out, _ = self.lstm(sequence_output) logits = self.classifier(lstm_out[:, -1, :]) return logits训练技巧:
- 使用古诗词语料继续预训练BERT(Domain Adaptation)
- 采用Focal Loss解决类别不平衡问题
- 使用学习率warmup策略
4.3 情感可视化设计
创新性的情感玫瑰图实现:
// Echarts配置示例 option = { title: { text: '《春望》情感分析' }, polar: {}, angleAxis: { type: 'category', data: ['哀', '忧', '思'] }, radiusAxis: { min: 0, max: 100 }, series: [{ type: 'bar', data: [85, 72, 68], coordinateSystem: 'polar', name: '情感强度', stack: 'a' }] };5. 智能问答系统实现方案
5.1 系统架构设计
混合式问答系统架构:
- 基于规则的问题分类器
- 知识图谱查询引擎(处理事实性问题)
- 大模型生成引擎(处理开放性问题)
- 答案融合与排序模块
5.2 知识图谱问答实现
Cypher查询示例:
// 查询李白描写月亮的诗 MATCH (a:Author{name:'李白'})-[:CREATED]->(p:Poem)-[:CONTAINS_IMAGE]->(i:Image{name:'月亮'}) RETURN p.title, p.contentPython接口封装:
from neo4j import GraphDatabase class KGQA: def __init__(self, uri, user, password): self.driver = GraphDatabase.driver(uri, auth=(user, password)) def query_poem_by_author(self, author): with self.driver.session() as session: result = session.run(""" MATCH (a:Author{name:$author})-[:CREATED]->(p:Poem) RETURN p.title as title, p.content as content LIMIT 10 """, author=author) return [dict(record) for record in result]5.3 大模型集成方案
本地部署ChatGLM-6B的实践要点:
- 硬件要求:至少16GB显存的GPU(如RTX 3090)
- 量化部署方案:
# 安装依赖 pip install transformers==4.33.3 icetk cpm_kernels torch==2.0.1 # 加载4bit量化模型 from transformers import AutoTokenizer, AutoModel tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b-int4", trust_remote_code=True) model = AutoModel.from_pretrained("THUDM/chatglm-6b-int4", trust_remote_code=True).half().cuda()- 提示词工程设计:
def generate_poetry_analysis_prompt(question, context): return f"""你是一位古诗词专家,请根据以下背景知识回答问题: {context} 问题:{question} 回答时请:1.保持专业但易懂 2.引用相关诗句 3.不超过200字"""6. 自动写诗模块创新实现
6.1 传统方法 vs 大模型方法对比
传统RNN方法:
class PoetryGenerator(nn.Module): def __init__(self, vocab_size): super().__init__() self.embedding = nn.Embedding(vocab_size, 256) self.lstm = nn.LSTM(256, 512, num_layers=3) self.fc = nn.Linear(512, vocab_size) def forward(self, x, hidden=None): x = self.embedding(x) x, hidden = self.lstm(x, hidden) x = self.fc(x) return x, hidden优点:模型小巧,训练速度快 缺点:生成质量有限,缺乏创造性
大模型方法:
- 使用LoRA微调技术适配古诗生成任务
- 示例提示词设计:
请模仿李白的风格创作一首七言绝句,主题为"秋夜思乡"。 要求:1.符合平仄规则 2.包含"月"意象 3.表达思乡之情6.2 诗歌质量评估体系
设计自动评估指标:
- 格律检测:检查平仄、押韵
- 意象连贯性:分析意象之间的逻辑关系
- 情感一致性:评估情感表达的连贯度
- 风格相似度:与目标诗人风格的余弦相似度
实现示例:
def evaluate_poem(poem, style='李白'): # 格律检测 rhythm_score = check_rhythm(poem) # 情感分析 emotion = emotion_model.predict(poem) # 风格相似度 style_sim = calculate_style_similarity(poem, style) return { 'rhythm_score': rhythm_score, 'emotion_consistency': emotion['consistency'], 'style_similarity': style_sim }7. 项目部署与性能优化
7.1 系统部署方案
推荐的分服务部署架构:
- Web服务:Gunicorn + Nginx(2核4G)
- 知识图谱服务:Neo4j(4核8G,至少4G JVM堆内存)
- 大模型服务:单独GPU服务器(如A10G实例)
- 缓存服务:Redis(1核2G)
使用Docker Compose编排示例:
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"]7.2 性能优化技巧
知识图谱查询优化:
- 为常用查询创建索引
CREATE INDEX ON :Author(name) CREATE INDEX ON :Poem(title)- 使用APOC库的过程优化复杂查询
大模型推理加速:
- 使用vLLM推理框架
- 开启Flash Attention优化
- 采用动态批处理技术
缓存策略设计:
- 热点诗词数据缓存到Redis
- 使用Memcached缓存情感分析结果
- 实现问答结果的LRU缓存
8. 毕业设计展示要点
8.1 演示系统设计技巧
准备多个典型演示场景:
- 知识图谱可视化探索
- 情感分析对比(不同诗人风格)
- 智能问答互动(事实性+开放性问答)
- 自动写诗实时生成
设计可视化看板:
- 使用Echarts实现实时数据展示
- 添加时间轴展示分析过程
- 准备对比分析视图(如不同朝代情感分布)
8.2 答辩常见问题准备
技术类问题:
- 如何处理古诗词中的通假字问题?
- 知识图谱的更新维护机制如何设计?
- 大模型生成结果的可控性如何保证?
业务类问题:
- 与传统诗词网站相比,系统的创新点在哪里?
- 情感分析模型在哪些场景下可能失效?
- 系统可能的商业化应用方向?
8.3 项目文档编写建议
技术文档必备章节:
- 系统架构设计图
- 核心算法流程图
- API接口文档
- 数据库设计ER图
毕业论文亮点打造:
- 突出传统文学与AI技术的结合创新
- 详细记录模型调优过程与结果对比
- 设计科学的系统评估方案
源码整理规范:
- 清晰的目录结构
- 完善的README
- 一键运行脚本
- 必要的中文注释
在实际开发过程中,有几个关键点需要特别注意:古诗词数据的版权问题、大模型API的调用成本控制、知识图谱的规模与查询效率的平衡。我们团队在开发类似系统时,曾因为初期没有考虑数据版权问题而不得不更换数据源,导致大量返工。建议优先考虑使用开放授权的数据源,如古诗文网的开放API。