1. 项目概述:当古诗词遇上知识图谱与AI大模型
这个毕业设计项目将传统中华古诗词文化与现代计算机技术进行了深度融合。作为一名长期从事自然语言处理开发的工程师,我认为这种跨界组合非常有创意——通过知识图谱技术构建古诗词的语义网络,再结合AI大模型实现智能问答和自动创作,最后用可视化方式呈现分析结果。整套系统涵盖了从数据处理、知识表示到智能应用的完整技术链条。
项目主要包含四大核心功能模块:
- 古诗词知识图谱构建与可视化
- 基于情感分析的古诗词情绪图谱
- 基于大模型的智能问答系统
- AI辅助诗词创作功能
从技术栈来看,项目涉及Python编程、自然语言处理、知识图谱构建、情感分析算法、大模型应用开发以及数据可视化等多个前沿技术领域。接下来我将详细解析每个模块的技术实现方案。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 知识图谱构建技术解析
2.1 数据采集与预处理
古诗词数据是项目的基础,我们需要从多个渠道获取结构化数据:
- 使用Scrapy或Requests爬取古诗文网等专业网站
- 调用开放API获取权威数据源
- 整理本地古籍电子版文本
数据清洗是关键环节,我通常会采用以下处理流程:
python复制# 示例数据清洗代码
import re
import jieba
def clean_poem(text):
# 去除特殊字符和注释
text = re.sub(r'[【】()()《》〈〉〔〕]', '', text)
# 分词处理
words = jieba.lcut(text)
# 去除停用词
with open('stopwords.txt') as f:
stopwords = set([line.strip() for line in f])
words = [w for w in words if w not in stopwords]
return ' '.join(words)
2.2 知识图谱建模
古诗词知识图谱的实体关系模型设计:
code复制实体类型:
- 诗词(标题、作者、朝代、内容)
- 人物(姓名、字号、生平)
- 地点(名称、古今对照)
- 意象(名称、类型、情感倾向)
关系类型:
- 创作关系(诗人-作品)
- 引用关系(作品-意象)
- 时空关系(作品-地点-朝代)
- 相似关系(作品-作品)
使用Neo4j图数据库存储的Cypher示例:
cypher复制CREATE (p:Poem {title:'静夜思', content:'床前明月光...'})
CREATE (a:Author {name:'李白', dynasty:'唐'})
CREATE (i:Image {name:'明月', type:'自然', emotion:'lonely'})
CREATE (a)-[:WROTE]->(p)
CREATE (p)-[:CONTAINS]->(i)
2.3 可视化实现方案
推荐使用以下技术栈实现可视化:
- Echarts或D3.js构建前端交互图表
- PyVis或NetworkX生成静态关系图
- Flask/Django提供后端API支持
可视化设计要点:
- 时空维度:用时间轴展示诗人作品分布
- 情感维度:用热力图展示情绪强度
- 关系维度:用力导向图展示实体关联
提示:可视化颜色搭配建议使用中国传统色系,如黛蓝、胭脂、竹青等,增强文化氛围。
3. 情感分析模块实现
3.1 情感词典构建
古诗词情感分析需要专门构建领域词典:
- 基础情感词库:整合知网Hownet、Boson等公开词库
- 专业扩充:人工标注500+古诗常用意象的情感倾向
- 上下文规则:制定"明月+秋=孤寂"等组合规则
情感强度计算算法:
python复制def calculate_sentiment(text, lexicon):
words = segment(text)
score = 0
for word in words:
if word in lexicon:
score += lexicon[word]['value'] * lexicon[word]['weight']
return 1/(1+math.exp(-score)) # Sigmoid归一化
3.2 多模态情感分析
结合文本与可视化元素进行综合判断:
- 文本特征:词性、意象、修辞手法
- 视觉特征:颜色饱和度、布局密度
- 时空特征:创作时期、地理位置
分析结果存储结构示例:
json复制{
"poem_id": "123",
"sentiment": {
"overall": 0.72,
"details": [
{"image": "明月", "score": 0.8, "type": "lonely"},
{"image": "故乡", "score": 0.9, "type": "nostalgia"}
]
}
}
4. 智能问答系统开发
4.1 知识图谱问答(KGQA)
实现流程:
- 问句解析:使用BERT+BiLSTM-CRF进行实体识别
- 意图识别:分类模型判断问题类型
- 查询生成:将自然语言转换为Cypher查询
- 答案生成:检索结果后处理
示例问答对:
code复制Q: "李白写过哪些关于月亮的诗?"
A: {
"query": "MATCH (a:Author{name:'李白'})-[:WROTE]->(p:Poem)-[:CONTAINS]->(i:Image{name:'月亮'}) RETURN p.title",
"answer": ["静夜思", "月下独酌"...]
}
4.2 大模型集成方案
推荐技术选型:
- 本地部署:ChatGLM2-6B+LoRA微调
- API调用:文心一言/通义千问+知识库增强
微调数据准备:
python复制# 构造指令微调数据
examples = [
{
"instruction": "根据以下情境创作唐诗",
"input": "主题:边塞,情感:豪迈",
"output": "秦时明月汉时关,万里长征人未还..."
}
]
注意:大模型生成内容需要设置审核机制,避免产生不符合格律的作品。
5. 自动写诗模块实现
5.1 传统方法对比
方法对比表:
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 模板填充 | 速度快,格律准确 | 创意有限 | 入门教学 |
| 序列生成 | 多样性好 | 需要大量数据 | 现代诗创作 |
| 大模型 | 语义连贯 | 计算资源大 | 专业创作 |
5.2 混合创作系统设计
我的推荐架构:
- 格律检查模块:验证平仄押韵
- 意象推荐引擎:基于情感分析结果
- 大模型生成器:产生候选诗句
- 人工修正接口:允许调整优化
创作流程示例代码:
python复制def generate_poem(theme, emotion):
# 获取相关意象
images = kg.query(f"MATCH (i:Image) WHERE i.emotion='{emotion}' RETURN i.name")
# 生成提示词
prompt = f"以{theme}为主题,用{','.join(images)}等意象创作七言绝句"
# 调用大模型
poem = llm.generate(prompt)
# 格律校验
if not check_rhythm(poem):
poem = adjust_poem(poem)
return poem
6. 系统集成与部署
6.1 技术架构设计
整体架构图:
code复制前端(Web/Vue) ←HTTP→ 后端(Flask) ←→ 知识图谱(Neo4j)
↑
↓
NLP服务(情感分析/问答)
↑
↓
AI服务(大模型+自动写诗)
6.2 关键配置参数
-
Neo4j配置:
- 内存:至少4GB
- 索引:为title,name等字段创建索引
- 缓存:配置查询缓存
-
大模型部署:
- 量化:使用4bit量化减少显存占用
- 加速:启用FlashAttention优化
- 并发:设置最大并行请求数
-
Web服务:
- Gunicorn工作进程数 = CPU核心×2+1
- 超时设置:问答接口适当延长
7. 常见问题解决方案
7.1 知识图谱构建问题
Q1:实体歧义如何处理?
A:建立消歧规则,如:
- "李白"优先指诗人而非地名
- 添加朝代限定:"唐·李白"
Q2:关系稀疏怎么办?
A:采用以下增强策略:
- 基于共现统计补充隐性关系
- 使用TransE等算法预测潜在关联
7.2 大模型应用问题
Q1:生成诗词不符合格律?
A:实现校验规则:
python复制def check_pingze(text):
# 平仄检查规则
pingze_rules = {
'五绝': [0,1,0,1,...],
'七律': [...]
}
# 实现校验逻辑...
Q2:问答出现幻觉回答?
A:采用以下约束:
- 设置知识边界提示词
- 检索增强生成(RAG)
- 置信度阈值过滤
在实际部署中,我发现将知识图谱查询结果作为大模型生成的上下文,可以显著提高回答准确性。例如先检索相关诗句,再让大模型基于这些真实文本进行总结和扩展。
