☰
AI与知识图谱在古诗词分析中的应用实践
2026/10/27 11:44:38 网站建设 项目流程

1. 项目概述:当古诗词遇上知识图谱与AI大模型

这个毕业设计项目将传统中华古诗词文化与现代AI技术进行了深度融合,打造了一个集知识图谱构建、情感分析、智能问答和自动写诗于一体的综合系统。作为一名长期从事自然语言处理开发的工程师,我认为这种跨界组合非常有创意——它不仅考验学生对Python全栈开发的能力,还需要对NLP、知识图谱构建和大模型应用有深入理解。

整套系统包含四个核心模块:基于知识图谱的古诗词可视化展示、古诗词情感倾向分析、基于AI的智能问答系统,以及利用大模型实现的自动写诗功能。从技术栈来看,项目涉及Python后端开发、Neo4j等图数据库应用、前端可视化(可能使用Echarts或D3.js)、情感分析算法实现,以及最新的大模型API调用或本地部署方案。

2. 系统架构设计与技术选型

2.1 整体架构设计

系统采用典型的三层架构:

  1. 数据层:负责古诗词数据的存储与管理,包括关系型数据库(MySQL)存储结构化数据、Neo4j存储知识图谱、Redis缓存热点数据
  2. 服务层:包含核心业务逻辑的实现,采用Python Flask/Django框架
  3. 展示层:前端可视化界面,可采用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 relations

3.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")

更专业的可视化建议:

  1. 使用Echarts的力导向图实现更丰富的交互
  2. 对不同类型节点采用颜色编码(诗人-蓝色,诗歌-绿色等)
  3. 实现点击节点展开关联关系的功能

4. 情感分析模块深度实现

4.1 古诗词情感标注体系

不同于现代文的情感分析,古诗词情感有其特殊性。我们设计了三层情感标签体系:

  1. 基础情感(7类):

    • 喜、怒、哀、乐、思、忧、惊
  2. 复合情感(组合基础情感):

    • 离愁别绪(哀+忧+思)
    • 豪情壮志(喜+乐+惊)
  3. 特殊诗体情感:

    • 边塞诗的悲壮
    • 田园诗的闲适

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 系统架构设计

混合式问答系统架构:

  1. 基于规则的问题分类器
  2. 知识图谱查询引擎(处理事实性问题)
  3. 大模型生成引擎(处理开放性问题)
  4. 答案融合与排序模块

5.2 知识图谱问答实现

Cypher查询示例:

// 查询李白描写月亮的诗 MATCH (a:Author{name:'李白'})-[:CREATED]->(p:Poem)-[:CONTAINS_IMAGE]->(i:Image{name:'月亮'}) RETURN p.title, p.content

Python接口封装:

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的实践要点:

  1. 硬件要求:至少16GB显存的GPU(如RTX 3090)
  2. 量化部署方案:
# 安装依赖 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()
  1. 提示词工程设计:
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 诗歌质量评估体系

设计自动评估指标:

  1. 格律检测:检查平仄、押韵
  2. 意象连贯性:分析意象之间的逻辑关系
  3. 情感一致性:评估情感表达的连贯度
  4. 风格相似度:与目标诗人风格的余弦相似度

实现示例:

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 性能优化技巧

  1. 知识图谱查询优化:

    • 为常用查询创建索引
    CREATE INDEX ON :Author(name) CREATE INDEX ON :Poem(title)
    • 使用APOC库的过程优化复杂查询
  2. 大模型推理加速:

    • 使用vLLM推理框架
    • 开启Flash Attention优化
    • 采用动态批处理技术
  3. 缓存策略设计:

    • 热点诗词数据缓存到Redis
    • 使用Memcached缓存情感分析结果
    • 实现问答结果的LRU缓存

8. 毕业设计展示要点

8.1 演示系统设计技巧

  1. 准备多个典型演示场景:

    • 知识图谱可视化探索
    • 情感分析对比(不同诗人风格)
    • 智能问答互动(事实性+开放性问答)
    • 自动写诗实时生成
  2. 设计可视化看板:

    • 使用Echarts实现实时数据展示
    • 添加时间轴展示分析过程
    • 准备对比分析视图(如不同朝代情感分布)

8.2 答辩常见问题准备

技术类问题:

  • 如何处理古诗词中的通假字问题?
  • 知识图谱的更新维护机制如何设计?
  • 大模型生成结果的可控性如何保证?

业务类问题:

  • 与传统诗词网站相比,系统的创新点在哪里?
  • 情感分析模型在哪些场景下可能失效?
  • 系统可能的商业化应用方向?

8.3 项目文档编写建议

  1. 技术文档必备章节:

    • 系统架构设计图
    • 核心算法流程图
    • API接口文档
    • 数据库设计ER图
  2. 毕业论文亮点打造:

    • 突出传统文学与AI技术的结合创新
    • 详细记录模型调优过程与结果对比
    • 设计科学的系统评估方案
  3. 源码整理规范:

    • 清晰的目录结构
    • 完善的README
    • 一键运行脚本
    • 必要的中文注释

在实际开发过程中,有几个关键点需要特别注意:古诗词数据的版权问题、大模型API的调用成本控制、知识图谱的规模与查询效率的平衡。我们团队在开发类似系统时,曾因为初期没有考虑数据版权问题而不得不更换数据源,导致大量返工。建议优先考虑使用开放授权的数据源,如古诗文网的开放API。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询