1. 项目概述:当古诗词遇上知识图谱与AI
这个毕业设计项目将传统中华古诗词文化与现代计算机技术深度融合,打造了一个集知识图谱构建、可视化展示、情感分析、智能问答和AI创作于一体的综合系统。作为一名长期从事自然语言处理开发的工程师,我认为这种跨界融合非常有价值——它不仅考验学生的技术整合能力,更能让传统文化以全新的数字化形式焕发生机。
系统核心包含四大功能模块:基于Python的知识图谱构建与可视化展示、古诗词情感倾向分析、基于大模型的智能问答系统,以及AI自动写诗功能。整个项目采用前后端分离架构,前端使用Vue.js实现交互式可视化,后端采用Flask框架,数据存储使用Neo4j图数据库,情感分析采用预训练模型微调,而智能问答和自动写诗则基于开源大模型实现。
提示:项目完整度很高,从底层数据处理到上层应用开发都需考虑,建议按模块分阶段实现,每个功能都可独立验证。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 知识图谱构建与可视化
2.1 数据采集与清洗
古诗词知识图谱的数据源主要来自公开的古诗词数据库和权威文献。我们采用爬虫技术获取原始数据后,需要进行以下关键处理:
-
实体识别与关系定义:
- 核心实体:诗人、朝代、诗词、地点、意象(如"月亮"、"杨柳")
- 关系类型:创作于、属于、引用、相似于、影响等
- 示例关系:(李白)-[创作于]->(将进酒)、(杜甫)-[属于]->(唐代)
-
数据标准化处理:
python复制# 示例:朝代名称标准化
def normalize_dynasty(name):
dynasty_map = {
'唐': '唐代',
'宋': '宋代',
'清': '清代'
}
return dynasty_map.get(name, name)
- 知识图谱Schema设计:
cypher复制// Neo4j节点和关系定义示例
CREATE (p:Poet {name:'李白', era:'唐代'})
CREATE (w:Work {title:'静夜思', content:'床前明月光...'})
CREATE (i:Image {name:'明月', type:'自然意象'})
CREATE (p)-[:CREATED]->(w)
CREATE (w)-[:CONTAINS]->(i)
2.2 知识图谱存储与查询
选用Neo4j图数据库存储知识图谱数据,其优势在于:
- 直观展示诗词、诗人、意象间的复杂关系
- 支持高效的关联查询和路径发现
- 提供Cypher查询语言,便于复杂关系检索
典型查询示例:
cypher复制// 查询李白写过的包含"月"意象的诗词
MATCH (p:Poet {name:'李白'})-[:CREATED]->(w:Work)-[:CONTAINS]->(i:Image {name:'月'})
RETURN w.title, w.content
2.3 可视化实现技巧
使用Echarts和D3.js实现交互式可视化时,需注意:
-
布局优化:
- 诗人节点按朝代聚类
- 诗词节点按体裁着色
- 意象节点按类别使用不同形状
-
性能优化:
javascript复制// 大数据量时采用增量渲染
graph.on('zoom', _.debounce(function(){
// 只渲染可视区域内的节点
}, 300));
- 交互设计:
- 点击节点显示详细信息弹窗
- 右键菜单支持关系探索
- 时间轴筛选不同朝代的诗词
注意:当节点超过1000个时,建议启用Web Worker进行离屏渲染,避免主线程阻塞。
3. 古诗词情感分析模块
3.1 情感标注与模型训练
古诗词情感分析面临特殊挑战:
-
标注体系设计:
- 七种情感分类:喜、怒、哀、乐、思、忧、惊
- 采用三级强度标注(弱、中、强)
-
数据增强方法:
python复制# 基于同义词替换的数据增强
def augment_text(text, n=3):
synonyms = {'愁': ['忧','怅','悴'],
'喜': ['欢','欣','悦']}
variants = []
for _ in range(n):
new_text = text
for word, syns in synonyms.items():
if word in text:
new_text = new_text.replace(word, random.choice(syns))
variants.append(new_text)
return variants
- 模型选型对比:
| 模型 | 准确率 | 训练速度 | 适合场景 |
|---|---|---|---|
| BERT | 89.2% | 慢 | 高精度需求 |
| TextCNN | 85.7% | 快 | 快速部署 |
| LSTM | 86.3% | 中等 | 序列建模 |
3.2 情感可视化设计
将情感分析结果与知识图谱结合:
-
色彩映射方案:
- 喜:红色系
- 哀:蓝色系
- 思:紫色系
- 怒:深红色
-
交互式情感探索:
javascript复制// 基于情感值过滤节点
function filterByEmotion(emotion) {
graph.data.nodes.forEach(node => {
node.hidden = !(node.emotion === emotion);
});
graph.refresh();
}
- 情感趋势分析:
- 按朝代统计情感分布
- 诗人情感变化时间线
- 意象关联情感词云
4. 智能问答系统实现
4.1 系统架构设计
采用混合式问答架构:
code复制用户问题 → 意图识别 → 知识图谱查询 → 大模型生成 → 结果返回
│ │
↓ ↓
分类模型 Cypher生成器
4.2 关键实现步骤
- 问题分类模块:
python复制# 使用FastAPI创建分类端点
@app.post("/classify")
async def classify_question(question: str):
intent = classifier.predict(question)
entities = ner_model.extract(question)
return {"intent": intent, "entities": entities}
- Cypher查询生成:
python复制def generate_cypher(intent, entities):
templates = {
"poet_info": "MATCH (p:Poet) WHERE p.name='{name}' RETURN p",
"poem_query": """MATCH (p:Poet)-[:CREATED]->(w:Work)
WHERE w.title CONTAINS '{title}'
RETURN w"""
}
return templates[intent].format(**entities)
- 大模型集成方案:
python复制# 使用LangChain集成开源大模型
chain = LLMChain(
llm=ChatGLM(),
prompt=PromptTemplate(
input_variables=["context", "question"],
template="基于以下信息回答问题:{context}\n\n问题:{question}"
)
)
4.3 性能优化技巧
-
缓存机制:
- 高频问题结果缓存
- 相似问题语义缓存
-
混合检索策略:
- 简单事实型:直接查知识图谱
- 复杂推理型:调用大模型
- 创作型:纯大模型生成
-
限流与降级:
python复制# 使用令牌桶算法限流
limiter = TokenBucketLimiter(
rate=10, # 每秒10个请求
capacity=30
)
@app.post("/ask")
@limiter.limit
async def ask_question(question: str):
# ...
5. AI自动写诗功能实现
5.1 诗歌生成模型选型
对比主流诗歌生成方案:
| 模型 | 韵律控制 | 意象连贯性 | 训练难度 |
|---|---|---|---|
| GPT-3 | 中 | 高 | 无需训练 |
| Chinese-GPT | 高 | 中 | 需微调 |
| Seq2Seq | 高 | 低 | 需大量数据 |
5.2 可控生成策略
- 约束解码方法:
python复制# 使用logits processor控制韵脚
class RhymeProcessor(LogitsProcessor):
def __call__(self, input_ids, scores):
if len(input_ids) % 4 == 3: # 每行最后一个字
last_chars = [id[-1] for id in input_ids[-3:]]
rhyme_group = get_rhyme_group(last_chars[-1])
for token_id, score in enumerate(scores):
if token_id not in rhyme_group:
scores[token_id] = -float('inf')
return scores
- 多阶段生成流程:
code复制用户输入主题 → 意象选择 → 格律确定 → 初稿生成 → 润色优化
- 评估指标体系:
- 韵律合规率
- 意象相关度
- 情感一致性
- 通顺度评分
5.3 前端交互设计
关键交互元素:
-
创作控制面板:
- 诗体选择(五绝、七律等)
- 情感倾向滑块
- 意象多选器
-
生成历史管理:
- 版本对比
- 人工修正记录
- 收藏夹功能
-
社交分享功能:
javascript复制// 生成分享图片
function sharePoem(poem) {
const canvas = convertToImage(poem);
const dataUrl = canvas.toDataURL();
downloadImage(dataUrl, '生成的诗歌.png');
}
6. 系统集成与部署
6.1 技术栈整合
完整架构示意图:
code复制前端(Vue) ←HTTP→ 后端(Flask) ←→ Neo4j
↑
├── 情感分析模型
├── 问答系统
└── 诗歌生成API
6.2 关键接口设计
- 知识图谱查询API:
python复制@app.get("/graph/query")
def graph_query(q: str):
intent = classify(q)
if intent == "fact":
cypher = generate_cypher(q)
result = neo4j.query(cypher)
return simplify_result(result)
else:
return llm_answer(q)
- 批量导入接口:
python复制@app.post("/data/import")
async def import_data(file: UploadFile):
# 支持JSON/CSV格式自动检测
content = await file.read()
if file.filename.endswith('.json'):
data = parse_json(content)
else:
data = parse_csv(content)
# 分批导入避免内存溢出
batch_size = 1000
for i in range(0, len(data), batch_size):
batch = data[i:i+batch_size]
neo4j.import_batch(batch)
6.3 部署注意事项
- 资源配置建议:
| 组件 | 最低配置 | 推荐配置 |
|---|---|---|
| Neo4j | 4核8G | 8核16G |
| Flask | 2核4G | 4核8G |
| 大模型 | 8核16G+GPU | 16核32G+A100 |
- 容器化部署示例:
dockerfile复制# 后端服务Dockerfile
FROM python:3.9
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["gunicorn", "-w 4", "-b :5000", "app:app"]
- 性能监控方案:
- Prometheus收集指标
- Grafana展示仪表盘
- 关键指标:查询延迟、GPU利用率、并发数
7. 项目扩展方向
在实际开发中,可以考虑以下增强功能:
-
多模态展示:
- 诗词与名画关联
- 朗读功能添加
- AR/VR场景展示
-
协作标注平台:
- 众包式知识图谱完善
- 标注质量评估系统
- 激励机制设计
-
移动端适配:
- 微信小程序版本
- 离线知识库打包
- 拍照识诗功能
-
教育应用集成:
- 诗词学习进度跟踪
- 个性化推荐系统
- 课堂互动工具
开发这类文化科技融合项目,最关键的平衡点是保持传统文化的准确性同时发挥技术优势。我在实现过程中发现,过度依赖算法可能导致生成的诗词失去人文温度,而完全拘泥于传统又难以展现技术价值。最佳实践是建立专家-算法协作机制,比如设置人工审核环节,或者开发半自动化的创作辅助工具。
