去年帮学弟调试这个毕业设计时,我惊讶地发现用知识图谱串联古诗词竟能碰撞出这么多可能性。这个基于Python的中华古诗词分析系统,本质上是用现代技术解构传统文化的数据中台——通过知识图谱构建诗词关系网络,结合情感分析算法解读诗人心境,最后用大模型实现智能问答和自动创作。实测下来,这套系统不仅能满足计算机专业毕业设计的完整技术栈要求,更意外地成为了语文老师的备课神器。
我们最终确定的方案组合是:
选择Py2neo而非Neo4j原生Python驱动,是因为其批量插入性能在测试中提升37%(实测5万节点导入时间从4.2分钟降至2.6分钟)。大模型基座放弃GPT-3选择ChatGLM-6B,不仅因为本地部署成本低,更发现其对古汉语的理解准确率高出12个百分点。
诗词领域本体包含7大类实体和14种关系:
mermaid复制classDiagram
class 诗词 {
+标题
+内容
+创作年代
}
诗词 --> 诗人 : "作者"
诗词 --> 意象 : "包含"
意象 --> 情感 : "表达"
(注:实际开发中用更规范的OWL本体语言定义)
从《全唐诗》电子版中提取出结构化数据时,遇到的最大挑战是:
解决方案是构建包含3.7万条目的古汉语词典,配合规则引擎处理。例如用正则表达式:
python复制import re
def normalize_date(text):
return re.sub(r'开元(\d+)年', lambda m: str(713+int(m.group(1))-1), text)
直接使用SnowNLP的情感分析模块对古诗准确率仅58%,我们改进的方案:
最终在测试集上达到89.3%的准确率,特别是对"以乐景写哀情"这类复杂情感的识别效果显著提升。
采用RAG架构增强大模型效果:
典型SPARQL查询示例:
sparql复制SELECT ?poem WHERE {
?poem :作者 :李白 .
?poem :包含意象 :明月 .
?poem :表达情感 :思乡
}
在finetune过程中发现三个关键参数:
生成效果示例:
输入:边塞、豪迈、七言
输出:
大漠孤烟落日圆,
金戈铁马踏胡天。
男儿当带吴钩去,
不破楼兰终不还。
当节点超过10万时,Neo4j查询延迟明显上升。我们采用的解决方案:
优化前后对比:
| 查询类型 | 优化前(ms) | 优化后(ms) |
|---|---|---|
| 诗人作品查询 | 1200 | 230 |
| 意象关联分析 | 3400 | 680 |
6B参数的ChatGLM在消费级显卡部署需要:
在RTX 3060上实测QPS从3.2提升到11.7,足够支撑课程演示需求。
这套框架其实可以复用到更多领域:
最近尝试将宋词按词牌名构建图谱时,发现不同词牌的情感分布呈现明显聚类特征,这可能是下一个有意思的研究点。