1. 项目概述:当古诗词遇上AI技术栈
这个毕业设计项目堪称传统文学与现代技术的完美联姻。作为一名同时深耕古典文学和Python技术栈的开发者,我花了三个月时间构建了一套覆盖古诗词全生命周期的智能系统。从知识图谱构建、情感分析到AI创作,这套系统不仅能可视化展示诗词关联,还能与用户进行智能问答,甚至模仿古人风格自动写诗。
核心功能模块包括:
- 基于Scrapy+Neo4j的诗词知识图谱构建
- Pyecharts+D3.js的多维可视化展示
- BERT+BiLSTM的情感分析模型
- LangChain+RAG的智能问答系统
- GPT-2微调的自动写诗模块
关键提示:项目采用模块化设计,各组件可独立运行,建议从知识图谱构建开始逐步实现,避免直接处理大模型带来的硬件压力。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 知识图谱构建实战
2.1 数据采集与清洗
诗词数据源选择需要兼顾权威性和覆盖面:
- 全唐诗/全宋词电子版(结构化程度高)
- 古诗文网API(含注释和赏析)
- 自制爬虫抓取百度百科人物关系
python复制# 示例:基于Scrapy的诗词元数据爬虫
class PoemSpider(scrapy.Spider):
name = 'gushiwen'
custom_settings = {
'ITEM_PIPELINES': {'mongo_pipeline': 300},
'DOWNLOAD_DELAY': 2
}
def parse_poem(self, response):
item = {
'title': response.css('h1::text').get(),
'dynasty': response.xpath('//div[@class="cont"]/p[1]/a[1]/text()').get(),
'author': {'name': response.css('.source a::text').get(),
'link': response.css('.source a::attr(href)').get()},
'content': '\n'.join(response.css('.contson *::text').getall())
}
2.2 Neo4j图数据库建模
诗词知识图谱的schema设计直接影响后续查询效率,推荐采用星型结构:
code复制(诗人)-[创作]->(诗词)
(诗词)-[属于]->(流派)
(诗词)-[提到]->(意象)
(意象)-[关联]->(情感标签)
cypher复制// 创建节点示例
CREATE (p:Poem {title:'静夜思', content:'床前明月光...'})
CREATE (a:Author {name:'李白', dynasty:'唐'})
CREATE (i:Image {name:'明月', type:'自然意象'})
CREATE (a)-[:CREATED]->(p)
CREATE (p)-[:CONTAINS]->(i)
避坑指南:批量导入时使用apoc.load.json效率比单条CREATE高50倍,但需要预先安装APOC插件。
3. 多维可视化呈现
3.1 时空分布热力图
使用Pyecharts的Geo组件展示诗人籍贯分布:
python复制from pyecharts import options as opts
from pyecharts.charts import Geo
geo = (
Geo()
.add_schema(maptype="china")
.add("诗人分布",
[("西安", 58), ("洛阳", 42), ("杭州", 37)],
type_=ChartType.HEATMAP)
.set_global_opts(title_opts=opts.TitleOpts(title="唐代诗人籍贯热力图"))
)
3.2 意象关联网络图
D3.js力导向图完美呈现意象共现关系:
javascript复制// 基于力导向布局的意象关系图
const simulation = d3.forceSimulation(nodes)
.force("link", d3.forceLink(links).id(d => d.id))
.force("charge", d3.forceManyBody().strength(-300))
.force("center", d3.forceCenter(width / 2, height / 2));
4. 情感分析模型构建
4.1 语料标注方案
采用三维情感标注体系:
- 情感极性(-1到1)
- 情感类别(喜/怒/哀/乐/愁)
- 情感强度(1-5级)
python复制# 使用transformers库构建BiLSTM模型
from transformers import BertTokenizer, BertModel
import torch.nn as nn
class EmotionClassifier(nn.Module):
def __init__(self, bert_path):
super().__init__()
self.bert = BertModel.from_pretrained(bert_path)
self.lstm = nn.LSTM(768, 256, bidirectional=True)
self.classifier = nn.Linear(512, 7) # 7种情感类别
def forward(self, input_ids):
outputs = self.bert(input_ids)
lstm_out, _ = self.lstm(outputs.last_hidden_state)
return self.classifier(lstm_out[:, -1, :])
4.2 模型优化技巧
- 使用对抗训练(FGM)提升泛化能力
- 采用分层学习率(bert层1e-5,顶层1e-3)
- 引入标签平滑(label smoothing=0.1)
5. 智能问答系统实现
5.1 RAG架构设计
mermaid复制graph TD
A[用户问题] --> B(问题分类)
B -->|知识查询| C[Neo4j检索]
B -->|创作相关| D[GPT-2生成]
C --> E[答案合成]
D --> E
E --> F[响应输出]
5.2 关键实现代码
python复制from langchain.chains import RetrievalQA
from langchain.vectorstores import Neo4jVector
retriever = Neo4jVector.from_existing_graph(
embedding=OpenAIEmbeddings(),
url="bolt://localhost:7687",
username="neo4j",
password="password",
index_name="poem_index"
)
qa = RetrievalQA.from_chain_type(
llm=ChatOpenAI(temperature=0),
chain_type="stuff",
retriever=retriever
)
6. AI写诗模块优化
6.1 数据预处理要点
- 保留诗词标题作为生成prompt
- 添加平仄标记作为特殊token
- 按朝代划分训练集/测试集
python复制# 微调GPT-2的示例配置
training_args = TrainingArguments(
output_dir="./poem_gpt2",
num_train_epochs=10,
per_device_train_batch_size=4,
save_steps=1000,
save_total_limit=2,
prediction_loss_only=True,
learning_rate=5e-5
)
6.2 生成效果控制策略
- 温度参数动态调整(开头0.7,结尾0.3)
- 添加韵脚约束(使用pypinyin库检测)
- 引入风格控制码([唐风]/[宋调])
7. 系统集成与部署
7.1 技术栈选型
| 模块 | 技术方案 | 备选方案 |
|---|---|---|
| 前端 | Vue3 + Element Plus | React + Ant Design |
| 后端 | FastAPI | Django REST |
| 数据库 | Neo4j + MongoDB | PostgreSQL + Redis |
| 部署 | Docker Compose | Kubernetes |
7.2 性能优化记录
- 知识图谱查询响应从1200ms降至200ms:添加索引+缓存
- 情感分析吞吐量提升3倍:ONNX运行时+量化
- 大模型内存占用降低60%:8bit量化+梯度检查点
8. 毕业设计答辩要点
-
演示路线设计:
- 从知识图谱可视化切入
- 展示情感分析过程
- 进行实时问答演示
- 最后生成即兴诗作
-
技术深度问题准备:
- 如何解决古文分词难题?
- 知识图谱的推理能力体现在哪?
- 怎样评估AI写诗的质量?
-
创新点提炼:
- 多模态情感分析框架
- 混合检索的问答机制
- 可控风格的生成算法
这个项目最让我惊喜的是,当用知识图谱分析杜甫的《春望》时,系统自动关联到13个战乱主题的诗词,并准确识别出"忧国"的情感倾向。这种跨时空的文学脉络呈现,正是数字人文的魅力所在。
