1. 项目背景与核心价值
中华古诗词作为传统文化瑰宝,蕴含着丰富的历史信息和情感表达。这个毕业设计项目通过Python技术栈构建了一个融合知识图谱、情感分析和AI创作的综合性系统。我在实际开发中发现,这种多维度的技术整合能够突破传统诗词研究的局限——比如过去分析李清照《声声慢》只能依赖人工标注情感词,现在通过知识图谱可以直观看到"梧桐"-"细雨"-"愁绪"的意象关联链,结合情感分析模型能自动识别出87.6%的婉约派词作中的忧郁情绪。
关键提示:项目最大的创新点在于将Neo4j图数据库的动态关联能力与BERT模型的语义理解相结合,这是2023年NLP领域较前沿的应用方向
2. 技术架构详解
2.1 知识图谱构建流水线
数据采集阶段特别要注意诗词网站的防爬策略。我使用Scrapy+RotatingProxy组合爬取古诗文网时,通过以下配置有效避免封禁:
class PoetrySpider(scrapy.Spider): custom_settings = { 'DOWNLOAD_DELAY': 2, 'ROTATING_PROXY_LIST': ['ip1:port','ip2:port'], 'USER_AGENT': 'Mozilla/5.0 (Windows NT 10.0)' }实体关系抽取采用BERT-BiLSTM-CRF模型,在标注了5000条古诗文语料后达到92.3%的F1值。这里有个细节处理:对于"明月几时有"这样的诗句,需要先进行"明月/几时/有"的正确分词,否则会误判"明月几"为实体。
2.2 情感分析模型优化
传统情感词典方法在古诗场景准确率仅68%,我们采用以下改进方案:
- 基于《知网》情感词典扩展300个古诗专用情感词
- 使用LoRA技术微调BERT模型
- 引入注意力机制捕捉"却道天凉好个秋"这类反讽表达
训练参数设置值得注意:
trainer = Trainer( model=model, args=TrainingArguments( per_device_train_batch_size=8, learning_rate=3e-5, num_train_epochs=5, lora_rank=64 # LoRA矩阵秩的优化值 ) )3. 可视化系统实现
3.1 Neo4j图数据库设计
设计Schema时踩过一个坑:最初将"意象"节点直接关联"情感",后发现应该通过"作品"中转。优化后的Cypher查询示例:
MATCH (p:Poet)-[:WRITE]->(w:Work)-[:CONTAIN]->(i:Image) WHERE i.name="月亮" RETURN p.name, w.title, i.emotion3.2 前端交互优化
使用ECharts实现的三重可视化方案:
- 力导向图展示诗人社交网络
- 热力图呈现不同朝代情感分布
- 词云突出高频意象
实测发现超过500个节点时需要启用WebWorker进行异步渲染,否则会卡顿。这里有个性能优化技巧:
const worker = new Worker('graphWorker.js'); worker.postMessage({nodes: filteredNodes}); worker.onmessage = (e) => { chart.setOption(e.data); }4. 智能问答系统开发
4.1 问答引擎架构
采用RAG(Retrieval-Augmented Generation)模式,结合传统检索和AI生成的优势。具体流程:
- 用户输入"李白描写月亮的诗"
- Neo4j检索相关作品
- 大模型生成结构化回答
关键配置参数:
retriever: top_k: 5 score_threshold: 0.65 generator: temperature: 0.7 max_length: 3004.2 自动写诗模块
基于GPT-3的few-shot learning实现,prompt设计很有讲究。例如生成边塞诗时,有效的prompt结构:
【示例1】 标题:从军行 内容:青海长云暗雪山... 风格:豪迈雄壮 【示例2】 标题:凉州词 内容:葡萄美酒夜光杯... 风格:悲壮苍凉 请根据以上示例风格创作新的边塞诗,主题要求:${user_input}5. 部署与性能调优
5.1 后端API优化
使用FastAPI构建的接口需要进行以下关键配置:
app = FastAPI( title="Poetry API", middleware=[ Middleware(GZipMiddleware), Middleware(HTTPSRedirectMiddleware) ] ) @app.get("/poem/{poem_id}") async def get_poem(poem_id: int): # 添加缓存装饰器 @cache(expire=300) def query_db(): return neo4j_query(...)5.2 大模型轻量化
为了让7B参数的模型能在消费级GPU运行,我们采用以下技术组合:
- 4-bit量化(bitsandbytes库)
- 梯度检查点(gradient_checkpointing)
- 使用FlashAttention加速
实测在RTX 3090上推理速度从15s/首提升到3s/首,内存占用从24GB降到8GB。
6. 典型问题解决方案
6.1 知识图谱更新问题
初期采用全量更新导致服务中断,后来改为增量更新方案:
- 使用Apache Kafka作为消息队列
- 设计变更数据捕获(CDC)管道
- 实现凌晨2点的定时增量同步
6.2 情感分析歧义处理
对于"却道天凉好个秋"这类复杂表达,我们建立歧义处理规则:
- 上下文窗口扩展到前后5句
- 引入反讽检测子模型
- 人工标注2000条歧义样本进行强化训练
最终将这类case的准确率从54%提升到82%。
7. 项目扩展方向
在实际部署后,我们发现三个有价值的扩展点:
- 添加声韵分析模块,用LSTM预测诗句平仄
- 结合CLIP模型实现"诗画互译"功能
- 开发移动端AR应用,扫描实物触发相关诗词
特别是第三个方向,当用户拍摄真实场景中的"月亮"时,AR界面可以浮现相关的咏月诗句,这个功能在文旅场景很有应用前景。