1. 项目概述:当大语言模型遇见中华古诗词
作为一名长期从事知识图谱与自然语言处理技术落地的开发者,我最近完成了一个将大语言模型与传统中华诗词文化相结合的毕业设计项目。这个系统通过Django框架整合了LLaMA、ChatGLM等大模型的能力,构建了一个包含5万+诗词节点、10万+关系边的中华古诗词知识图谱,并实现了可视化探索与智能问答功能。
在实际开发过程中,我发现现有诗词数据库普遍存在三个痛点:一是数据孤立,难以展现"杜甫与李白如何通过共同好友贾至产生交集"这类隐含关系;二是检索方式单一,用户只能用关键词匹配这种"机械"方式查找;三是缺乏语义理解,系统无法回答"与《静夜思》情感相似的诗有哪些"这类高阶问题。而本项目正是通过知识图谱+大模型的技术组合拳来解决这些问题。
系统最核心的价值在于:当用户查询"苏轼在黄州时期的豪放词"时,不仅能获取相关作品列表,还能看到这些词作与《念奴娇·赤壁怀古》的创作脉络关联、与同时期其他文人的唱和关系,甚至通过情感分析模型展示苏轼在这一阶段的心境变化曲线。这种多维度的文化挖掘,正是传统诗词数据库难以实现的。
2. 系统架构设计与技术选型
2.1 整体技术栈设计
系统采用典型的三层架构,但在技术选型上针对诗词数据处理特点做了特殊优化:
-
后端服务层:使用Django 4.2作为核心框架,其优势在于:
- 原生Admin后台可快速搭建数据管理界面(适合非技术背景的文史研究者使用)
- ORM支持多数据库连接(同时操作MySQL结构化数据和Neo4j图数据)
- Django REST framework构建的API天然支持前后端分离
-
知识图谱层:选择Neo4j 5.11图数据库,主要考虑:
- 白名单机制避免诗词中的生僻字存储问题(如"龘"等Unicode扩展字符)
- 路径查询性能优于关系型数据库(查找"从陶渊明到王维的隐逸诗传承路径"仅需200ms)
- 可视化插件可直接生成初步关系图供调试使用
-
大模型服务层:采用混合部署方案:
- 轻量级模型(Alpaca-7B)本地部署处理实体识别等基础任务
- 通过API调用云端Qwen-72B处理复杂语义理解(需注意诗词中的通假字问题)
2.2 核心数据处理流程
诗词数据的加工处理是整个系统的基础,我们设计了五步标准化流程:
-
数据采集与清洗
- 使用Scrapy爬取古诗文网、中华经典古籍库等权威来源
- 关键挑战:处理古籍中的异体字(如"峯"→"峰")、脱字("□"标记)等情况
- 解决方案:构建包含3万+条目的诗词专用替换词表
-
实体识别与关系抽取
python复制# 使用prompt优化后的实体识别示例 prompt_template = """ 请从以下唐诗中提取实体及关系,按JSON格式返回: 1. 识别人物(作者、诗中提及人物),标注朝代、字号 2. 识别地点(需区分今古地名,如"长安"→"西安") 3. 识别意象("月"、"柳"等),标注情感倾向 示例输入:《送元二使安西》王维 示例输出:{ "entities": [ {"name": "王维", "type": "人物", "dynasty": "唐"}, {"name": "安西", "type": "地点", "modern_name": "新疆库车"} ], "relations": [ {"source": "王维", "target": "安西", "type": "创作地点"} ] } """ -
知识融合与冲突解决
- 建立诗词权威知识库处理争议(如《静夜思》存在宋代与明代两个版本)
- 开发基于规则的校验模块(如检测"李白与杜甫合作写诗"这类明显错误)
-
图谱构建优化
- 采用分朝代子图策略提升查询效率
- 为高频查询路径(如"诗人-流派-代表作")建立预计算索引
-
可视化数据预处理
- 使用Gephi进行布局预计算,生成力导向图的初始坐标
- 对超大规模子图(如"全唐诗")采用社区发现算法聚类
3. 关键技术创新点实现
3.1 基于大模型的诗词语义理解
传统NLP模型在处理古诗词时面临三大难题:文言语法特殊、用典频繁、意象隐喻丰富。我们的解决方案是:
-
领域自适应微调
- 在1.2万首标注诗词上继续预训练BERT模型
- 重点优化以下任务:
- 通假字识别("见"→"现")
- 用典检测("商女不知亡国恨"涉及陈后主典故)
- 意象情感分析("梧桐"多表离情别绪)
-
混合精度推理优化
bash复制# 使用LLaMA.cpp量化部署7B模型 ./main -m models/llama-7b-ggml-q4_0.bin \ -p "分析《春望》的情感倾向" \ --ctx-size 2048- 在NVIDIA T4显卡上实现每秒15token的生成速度
- 内存占用从13GB降至6GB
-
查询意图理解模块
- 构建诗词领域专属的意图分类体系:
mermaid复制graph LR A[用户查询] --> B{意图分类} B -->|检索类| C["精确查询(标题/作者)"] B -->|探索类| D["关联发现(相同意象)"] B -->|分析类| E["情感/风格分析"] - 使用Few-shot Learning提升小众意图识别准确率
- 构建诗词领域专属的意图分类体系:
3.2 知识图谱可视化交互设计
前端采用Vue3 + D3.js + ECharts技术栈,针对诗词关系展示做了深度定制:
-
动态布局算法优化
- 改进力导向算法参数:
javascript复制const simulation = d3.forceSimulation(nodes) .force("charge", d3.forceManyBody().strength(-500)) // 排斥力调强 .force("link", d3.forceLink(links).id(d => d.id).distance(150)) .force("x", d3.forceX().strength(0.05)) .force("y", d3.forceY().strength(0.05)); - 添加"朝代引力"辅助布局(唐代节点自动靠左)
- 改进力导向算法参数:
-
渐进式加载策略
- 初始只加载中心节点的直接关联(1度关系)
- 根据视图窗口动态加载2度关系
- 对超大规模子图提供"鱼眼透镜"聚焦交互
-
多视图协同分析
- 主视图:力导向图展示核心关系
- 辅助视图:
- 时间轴(诗人活跃年代分布)
- 词云(高频意象统计)
- 情感雷达图(作品风格分析)
4. 典型应用场景与效果展示
4.1 教学研究场景
为某高校古代文学课程开发的定制功能:
- 流派传承分析:可视化展示"江西诗派"从黄庭坚到陈师道的师承关系
- 跨时代对比:叠加显示杜甫与李商隐的"咏史"题材作品时空分布
- 意象演变追踪:生成"月亮"意象从《诗经》到清代的使用频率曲线
4.2 文化传播场景
在博物馆数字展厅的实际应用:
- AR增强展示:扫描《清明上河图》触发相关宋词推荐
- 情感地图:将苏轼贬谪路线与同期作品情感变化叠加在地图上
- 社交传播分析:重建白居易与元稹的诗歌唱和网络
4.3 系统性能指标
测试环境(4核CPU/16GB内存)下的关键数据:
| 指标 | 性能表现 |
|---|---|
| 知识抽取准确率 | 实体92.3%/关系88.7% (F1) |
| 平均查询响应时间 | 简单查询1.2s/复杂查询3.8s |
| 最大并发用户数 | 56请求/秒(带缓存) |
| 图谱可视化渲染帧率 | 30fps(1000节点规模) |
5. 开发经验与避坑指南
5.1 大模型应用实践心得
-
Prompt Engineering技巧
- 对于实体识别任务,加入示例比单纯描述更有效
- 多轮校验prompt效果:
python复制def validate_prompt(prompt, test_cases): for case in test_cases: response = call_llm(prompt, case["input"]) if not compare_result(response, case["expected"]): print(f"Failed on: {case['input']}") return False return True
-
本地模型优化经验
- 使用LoRA微调比全参数训练更高效
- 量化时注意保护关键维度(诗词中的情感分析头)
5.2 知识图谱构建陷阱
-
关系爆炸问题
- 限制"相关"这类模糊关系的使用
- 为高频关系设置上限(如单首诗最多关联10个意象)
-
数据版本控制
- 使用Neo4j的时态图插件记录知识演变
- 对学术争议内容(如作者归属)保留多版本注解
5.3 性能优化关键点
-
缓存策略
- 对常见查询路径(诗人-代表作)预生成子图
- 使用Redis缓存热门诗词的分析结果
-
查询优化示例
cypher复制// 低效查询 MATCH (a:Author)-[:WROTE]->(p:Poem) WHERE a.name = "李白" RETURN p // 优化后(使用索引提示) MATCH (a:Author {name: "李白"})-[:WROTE]->(p:Poem) USING INDEX a:Author(name) RETURN p
6. 项目扩展方向
当前系统已在以下方面展开延伸开发:
-
多模态扩展
- 关联历代书画作品中的题诗
- 基于Stable Diffusion生成"诗意图"
-
创作辅助功能
- 格律检查器(支持平水韵/中华新韵)
- 智能续写(给定首句生成完整律诗)
-
教育应用深化
- 知识点自动关联教材章节
- 生成个性化学习路径图
这个项目的核心启示在于:当AI技术与人文领域深度结合时,开发者必须既是技术专家,也要成为领域知识的"翻译者"。我在处理"云想衣裳花想容"这样的诗句时,需要与文学研究者共同确定"云"在这里是比喻而非实体,这种跨学科协作的经验可能比技术细节更值得分享。
