1. 项目概述:当古典诗词遇上现代AI技术
这个毕业设计项目将传统中华古诗词文化与前沿人工智能技术相结合,打造了一个多功能综合系统。作为一名长期从事自然语言处理开发的工程师,我认为这种跨界组合非常具有创新价值——它不仅需要处理诗词这种特殊的语言形式,还要实现知识图谱构建、情感分析、智能问答和自动创作等复杂功能。
整套系统包含四大核心模块:基于Python的知识图谱可视化展示、古诗词情感倾向分析、智能问答系统以及AI自动写诗功能。每个模块都涉及不同的技术栈和实现难点,比如知识图谱需要处理古诗词中特有的意象关联,情感分析要适应文言文的表达特点,而自动写诗则对语言模型的文学素养提出了极高要求。
提示:这类综合性项目最关键的挑战在于各模块间的数据流转和功能整合,需要提前设计统一的数据接口和交互协议。
2. 系统架构与技术选型
2.1 整体架构设计
系统采用分层架构设计,自下而上分为数据层、算法层、服务层和应用层:
- 数据层:包含原始诗词库(约10万首)、结构化知识库、预训练模型和用户交互数据
- 算法层:
- 知识图谱构建算法
- 情感分析模型
- 问答系统引擎
- 诗歌生成模型
- 服务层:提供RESTful API接口服务
- 应用层:Web前端可视化界面
2.2 核心技术选型对比
| 技术需求 | 候选方案 | 最终选择 | 选择理由 |
|---|---|---|---|
| 知识图谱存储 | Neo4j, JanusGraph, Nebula | Neo4j | 对关联查询性能最优 |
| 情感分析 | LSTM, BERT, RoBERTa | 微调RoBERTa | 对古文语义捕捉更好 |
| 问答系统 | ElasticSearch, Faiss | ElasticSearch+BM25 | 支持混合检索 |
| 诗歌生成 | GPT-2, GPT-3, 文心一格 | 自研GPT-2变体 | 可控性更强 |
| 可视化 | ECharts, D3.js, Three.js | ECharts+D3.js | 平衡开发效率与表现力 |
实操心得:古诗词数据处理要特别注意繁简转换、异体字处理和标点规范化,我们开发了专门的预处理流水线,错误率从最初的15%降到了2%以下。
3. 核心模块实现细节
3.1 知识图谱构建与可视化
3.1.1 知识抽取流程
- 实体识别:采用BiLSTM-CRF模型识别诗中的人名、地名、意象等实体
- 关系抽取:基于依存句法分析提取"创作于""描写""引用"等关系
- 属性抽取:提取创作年代、体裁、押韵方式等特征
# 知识图谱构建示例代码 def build_poem_graph(poem_text): entities = ner_model.predict(poem_text) relations = relation_extractor.extract(poem_text) graph_data = { "nodes": [{"id": e.id, "label": e.type} for e in entities], "edges": [{"source": r.head, "target": r.tail} for r in relations] } return graph_data3.1.2 可视化交互设计
- 采用力导向图布局展示诗人社交网络
- 热力图呈现不同朝代的地域分布
- 时间轴展示诗词流派演变
- 支持多维度筛选和关联探索
3.2 古诗词情感分析
3.2.1 情感标注规范
我们制定了专门的情感标注指南:
- 正面:喜悦、豪迈、闲适(权重0.6-1.0)
- 中性:叙事、写景(权重-0.2-0.2)
- 负面:忧愁、愤懑、孤寂(权重-1.0--0.6)
3.2.2 模型训练细节
- 使用11000首人工标注的诗词进行微调
- 采用RoBERTa-wwm-ext作为基础模型
- 添加BiGRU层捕捉诗句间依赖
- 最终测试集准确率达到89.2%
# 情感分析接口示例 def analyze_sentiment(poem): inputs = tokenizer(poem, return_tensors="pt") outputs = model(**inputs) probs = torch.softmax(outputs.logits, dim=1) return { "positive": probs[0][0].item(), "neutral": probs[0][1].item(), "negative": probs[0][2].item() }4. 智能问答与自动写诗
4.1 问答系统实现
4.1.1 混合检索架构
- 语义检索:使用Sentence-BERT编码问题
- 关键词检索:BM25算法处理具体事实查询
- 规则匹配:处理"有多少首""最早的诗"等统计类问题
4.1.2 答案生成策略
- 直接返回:适用于事实型问题
- 片段抽取:适用于解释型问题
- 模板生成:适用于比较型问题
4.2 AI自动写诗模块
4.2.1 诗歌生成模型架构
采用两阶段生成策略:
- 规划阶段:确定主题、格律、情感基调
- 生成阶段:基于Transformer的解码过程
def generate_poem(theme, style="七言绝句", emotion="neutral"): # 生成约束条件 constraints = build_constraints(style, emotion) # 使用受限解码生成 poem = model.generate( input_ids=theme_embedding, max_length=48, num_beams=5, no_repeat_ngram_size=2, **constraints ) return decode_poem(poem)4.2.2 质量评估指标
- 韵律合格率:98.7%
- 意象相关性:91.2%
- 情感一致性:85.4%
- 人工评分(100首):平均7.8/10分
5. 系统部署与优化
5.1 性能优化方案
- 缓存策略:
- 高频查询结果缓存(Redis)
- 模型预测结果缓存(LRU缓存)
- 异步处理:
- 诗歌生成任务放入Celery队列
- 知识图谱更新采用增量构建
- 模型压缩:
- 使用知识蒸馏缩小情感分析模型
- 量化自动写诗模型
5.2 典型问题排查
5.2.1 知识图谱可视化卡顿
现象:超过500个节点时渲染延迟明显解决方案:
- 实现LOD(Level of Detail)分级加载
- 采用WebWorker进行图布局计算
- 添加可视化采样阈值设置
5.2.2 生成诗歌内容重复
现象:相同主题多次生成相似结果解决方案:
- 在beam search中增加diversity penalty
- 引入主题关键词变异机制
- 添加用户历史生成记录约束
6. 项目扩展方向
在实际开发中,我们发现几个有价值的扩展点:
- 跨模态扩展:关联古代书画作品,构建"诗画合一"体验
- 教学应用:开发诗词格律检测与修改建议功能
- 社交功能:用户原创诗词分享与AI点评
- 移动端适配:开发AR诗词场景可视化应用
避坑指南:处理古文数据时务必注意字符编码问题,我们曾因一个BOM头导致整个知识图谱构建失败。建议统一转换为UTF-8无BOM格式,并在每个处理阶段添加编码检查。