logo
咨询企业版

技术分享

用 NebulaGraph + DeepSeek 解锁元宵节文化知识图谱,你知道几个?

一、前言

东风夜放花千树,更吹落,星如雨” —— 南宋词人辛弃疾笔下描绘的元宵盛景,穿越 800 年时空依然让我们心驰神往。这个起源于汉代太一神祭祀的古老节日,在历史长河中不断焕发新生:东汉时期与佛教燃灯习俗融合,唐代发展为全民狂欢的"上元节",宋代市井中诞生猜灯谜等民俗…元宵节作为中华民族历史悠久、内涵丰富的重要传统节日,其意义早已超越了“节日”的单一范畴,而成为家庭团圆、祈福迎祥的象征。

图片

在漫长的历史演进中不断融合和创新,形成了历史、传说、民俗、美食、诗词等多重文化。这些文化要素构成了一幅多层次、跨领域、互联互通的文化全景图。我们如何用现代科技来传承和弘扬这一古老节日的文化内涵?本文将带你走进元宵节的文化世界,通过 NebulaGraph 和 DeepSeek 构建直观易懂的元宵节知识图谱

二、元宵节的多重文化维度

在构建元宵知识图谱之前,我们必须对元宵节文化进行系统性拆解,将其内涵细分为多个独立但又相互关联的知识域。从知识图谱建模的角度来看,每一个知识域都可以视为一个节点类别(Tag),而这些类别之间的关系则由边(Edge)来表示。下面我们详细介绍元宵节的四大文化维度。

-- 插入类别节点
INSERT VERTEX `Category` (name) VALUES "元宵节传说";
INSERT VERTEX `Category` (name) VALUES "关于元宵的诗";
INSERT VERTEX `Category` (name) VALUES "民俗活动";
INSERT VERTEX `Category` (name) VALUES "美食文化";

2.1 历史传说

元宵节中流传着大量的传说和民间故事,这些传说不仅为节日增添了神秘色彩,同时也反映了古人对自然、神祇以及命运的理解。在图谱建模时,每一个传说故事都可以构建为一个节点,其属性包括传说名称、来源文献、相关朝代和地域。通过定义“传说关联”边,将不同传说故事与历史传承、民俗活动相互链接,形成完整的文化脉络。

# 历史传说(含时空维度)
CREATE TAG `HistoricalLegend` (
    name string NOT NULL,          # 传说名称
    era string,                    # 所属朝代
    region string DEFAULT "中国",  # 地域分布
    description string,            # 详细描述
    source string                  # 文献来源
) COMMENT = "历史传说实体";

2.2 民俗风情

元宵节作为民间传统节日,其民俗活动丰富多彩,涵盖了赏花灯、猜灯谜、踩高跷、扭秧歌等多个方面。每一种民俗活动都深深植根于地方文化,并具有鲜明的地域特色。在知识图谱中,民俗活动作为一个独立的知识领域,其节点属性包括活动名称、起始年份、流行指数、地域分布及文化意义等,通过“民俗关联”边将其与历史、传说等领域关联起来。

# 民俗活动(带时空特征)
CREATE TAG `FolkActivity` (
    name string NOT NULL,          # 活动名称
    start_year int,                # 起始年份
    popularity double,             # 流行度指数
    spatial_scope string,          # 地域分布
    cultural_significance string   # 文化意义
) COMMENT = "民俗活动实体";

2.3 美食文化

元宵节的美食是传统节日中不可或缺的一部分,每种食品都蕴含着独特的文化象征意义:

  • 元宵/汤圆:象征团圆与和谐,寓意家庭和睦、生活甜蜜。

  • 年糕:寓意年年高升、步步高升,是对美好未来的期盼。

在知识图谱中,美食文化节点需包含食品名称、热量、原料成分(以字符串形式存储多个原料)、及象征意义等属性。通过“美食关联”边,可以将美食与民俗活动、历史传承等关联起来,形成完整的文化生态链。

# 美食文化(含营养成分)
CREATE TAG `FoodCulture` (
    name string NOT NULL,          # 食物名称
    calories double,               # 热量(kcal)
    ingredients string,      # 原料成分
    symbolic_meaning string        # 象征意义
) COMMENT = "美食文化实体";

2.4 诗词雅韵

元宵节在文人墨客笔下同样是一座灵感的宝库。历代文人以元宵为题,创作了大量优美诗词,这些诗词不仅反映了当时的社会风貌,更承载了深厚的情感与审美:经典作品:如辛弃疾的《青玉案·元夕》、欧阳修的《生查子·元夕》等,均成为千古绝唱。在知识图谱中,诗词作品节点包括标题、作者、创作朝代、韵律模式、情感分析值和完整内容等,通过“诗词关联”边将诗词与民俗活动、历史传承、传说故事等多维信息建立联系。

# 诗词作品(带文学特征)
CREATE TAG `Poetry` (
    title string NOT NULL,         # 诗词标题
    author string,                 # 作者
    dynasty string,                # 创作朝代
    rhyme_scheme string,           # 押韵模式
    sentiment_analysis double,     # 情感分析值
    content string                 # 完整内容
) COMMENT = "诗词作品实体";

三、NebulaGraph + DeepSeek

构建元宵节知识图谱

3.1 数据建模

在构建元宵知识图谱过程中,我们首先需要对各个文化维度进行数据建模。基于前文介绍的四大维度,我们已经将数据分为以下四大节点类别:

HistoricalLegend(历史传说)属性:名称、朝代、地域、描述、文献来源。

FolkActivity(民俗活动)属性:活动名称、起始年份、流行指数、地域分布、文化意义。

FoodCulture(美食文化)属性:食品名称、热量、原料成分(字符串存储)、象征意义。

Poetry(诗词作品)属性:标题、作者、朝代、韵律模式、情感分析值、完整内容。

接下来,我们需要定义边类型来表达不同领域之间的关联:

# 定义多维关联边类型
# ================================================
# 时空关联边(带权重)
CREATE EDGE `HistoricalContinuity` (
    start_year int,                # 起始年份
    end_year int,                  # 终止年份
    influence_factor double        # 影响力系数
) COMMENT = "历史延续性关联";

# 文化传播边(带地理编码)
CREATE EDGE `CulturalDiffusion` (
    from_region string,            # 发源地
    to_region string,              # 传播地
    diffusion_path string          # 传播路径
) COMMENT = "文化传播路径";

# 语义关联边(带置信度)
CREATE EDGE `SemanticLink` (
    relation_type string,          # 关系类型
    confidence double,             # 置信度
    source string                  # 知识来源
) COMMENT = "语义关系关联";

# 创建边类型:RelatedTo
CREATE EDGE RelatedTo (
    description string,  # 关系描述
) COMMENT = "历史传说与民俗活动之间的关联关系";

# 创建边类型:AssociatedWith
CREATE EDGE AssociatedWith (
    description string,  # 关系描述
) COMMENT = "民俗活动与美食文化之间的关联关系";

# 创建边类型:WrittenFor
CREATE EDGE WrittenFor (
    description string,  # 关系描述
) COMMENT = "民俗活动与诗词作品之间的关联关系";

经过数轮和 DeepSeek 的沟通,得到了以下数据:

图片

3.2 通过 DeepSeek 做元宵节文化知识抽取

在构建元宵知识图谱过程中,需要大量非结构化的元宵节文化文本转换为结构化数据,再通过图谱表达各实体与关系。以下介绍如何利用 DeepSeek 对元宵节文化文本进行知识抽取,并将抽取结果以 nGQL 语句导入 NebulaGraph。这里给出两种方法:

方法一:直接与 DeepSeek 对话

构建提问策略 根据元宵节文化知识的需求,设计几个关键问题,例如:

  • “元宵节的起源和历史背景是什么?”

  • “元宵节有哪些传统民俗活动?”

  • “元宵节的代表美食有哪些?它们分别象征什么?”

  • “请解析《青玉案·元夕》中描绘的元宵盛景。”

通过 DeepSeek 的在线接口或对话系统,直接输入上述问题。DeepSeek 会返回结构化或半结构化的回答,其中可能包含实体及其属性、关系等信息。例如,返回的数据可能类似于:

实体:元宵节 属性:起源 → “汉代祭祀太一神”、历史记载 → “《史记》记载…”

实体:赏花灯 属性:地域 → “华北,江南”、文化意义 → “象征光明与希望”

实体:元宵 属性:美食寓意 → “象征团圆与美满”

实体:青玉案·元夕 属性:作者 → “辛弃疾”、朝代 → “宋代”

同时,还会返回诸如:

("元宵节", "hasTradition", "赏花灯")

("元宵节", "hasFood", "元宵")

("赏花灯", "describedIn", "青玉案·元夕")

根据 DeepSeek 返回的结构化知识,我们整理出各个节点及关系,然后生成 nGQL 语句。例如:

# 建立元宵节与赏花灯的关联(例如,历史传承到民俗活动) 
INSERT EDGE RelatedTo (description) VALUES "HL001" -> "FA001":("元宵节催生了赏花灯这一民俗活动"); 
# 建立赏花灯与元宵之间的关联(民俗活动与美食文化) 
INSERT EDGE AssociatedWith (description) VALUES "FA001" -> "FC001":("赏花灯与元宵相辅相成,共同构成节日风貌"); 
# 建立赏花灯与诗词作品之间的关联 INSERT EDGE WrittenFor (description) VALUES "FA001" -> "P001":("《青玉案·元夕》描绘了赏花灯的盛景");

方法二:本地部署 DeepSeek

对于大规模数据或需要对抽取过程进行精细控制的场景(事实是总是遇到“服务器繁忙,请稍后再试”),可以选择在本地部署 DeepSeek。此方法适合批量处理、自动化知识库构建,步骤如下:

本机部署 DeepSeek-R1

i、下载安装 Ollama;

ii、运行:ollama run deepseek-r1;

iii、下载安装 ChatBox;

iV、在ChatBox 的设置中选择 "OllamaAPI" 并选择 DeepSeek-R1 模型

准备元宵节相关的海量语料,如历史文献、民间故事、网络文章、诗词资料等,并进行文本格式化处理。

文本预处理对语料进行清洗、分词,将预处理后的文本组织成适合 DeepSeek 模型输入的格式。

批量知识抽取运行本地部署的 DeepSeek 模型,对处理后的文本数据进行批量推理。模型会自动识别出文本中的关键实体、属性及其之间的关系,并生成结构化输出。

输出数据示例(JSON 格式):

{
  "entity": "元宵节",
  "attributes": {
    "起源": "汉代祭祀",
    "传统": "赏花灯,猜灯谜",
    "美食": "元宵,汤圆",
    "诗词": "青玉案·元夕"
  },
  "relations": [
    {
      "subject": "元宵节",
      "predicate": "hasOrigin",
      "object": "汉代"
    },
    {
      "subject": "元宵节",
      "predicate": "hasTradition",
      "object": "赏花灯"
    },
    {
      "subject": "元宵节",
      "predicate": "hasFood",
      "object": "元宵"
    },
    {
      "subject": "赏花灯",
      "predicate": "describedIn",
      "object": "青玉案·元夕"
    }
  ]
}

数据转换与 nGQL 导入,如:

# 插入美食文化节点:元宵 
INSERT VERTEX FoodCulture(name, calories, ingredients, symbolic_meaning) VALUES "FC001":("元宵", 450, "糯米,芝麻,白糖", "象征团圆与美满");

# 插入诗词作品节点:青玉案·元夕 
INSERT VERTEX Poetry(title, author, dynasty, rhyme_scheme, sentiment_analysis, content) VALUES "P001":("青玉案·元夕", "辛弃疾", "宋代", "xyz", 0.85, "东风夜放花千树,更吹落、星如雨..."); 

持续更新与调优根据实际抽取效果,不断优化 DeepSeek 模型参数和抽取策略,提升实体和关系的准确性。

3.3 数据导入与知识图谱构建

将 DeepSeek 提取的数据导入到 NebulaGraph 中,可以使用以下 nGQL:

# 1. 插入历史传说数据
INSERT VERTEX `HistoricalLegend` (
    name, era, region, description, source
) VALUES
"HL001":("元宵节起源", "汉代", "中国", 
    "源于汉代祭祀太一神的活动,《史记·乐书》记载:'汉家常以正月上辛祠太一甘泉'", 
    "《史记》"),
"HL002":("燃灯习俗起源", "东汉", "洛阳",
    "东汉明帝时期佛教传入,敕令正月十五燃灯表佛,《僧史略》载:'西域十二月三十日...汉明帝令烧灯,表佛法大明也'",
    "《洛阳伽蓝记》"),
"HL003":("舞龙舞狮起源", "唐代", "中原",
    "舞龙舞狮起源于唐代,最初是宫廷表演,后流传至民间,象征驱邪避灾、吉祥如意",
    "《唐书》"),
"HL004":("踩高跷起源", "北宋", "北方",
    "踩高跷起源于北宋时期,最初是民间表演艺术,后成为元宵节常见活动",
    "《宋史》"),
"HL005":("扭秧歌起源", "明代", "北方",
    "扭秧歌起源于明代,最初是农民庆祝丰收的舞蹈,后成为元宵节传统活动",
    "《明史》");
# ================================================

# 2. 插入民俗活动数据
INSERT VERTEX `FolkActivity` (
    name, start_year, popularity, spatial_scope, cultural_significance
) VALUES
"FA001":("赏花灯", 180, 0.95, ARRAY["华北","江南"], "象征光明与希望,促进社区凝聚力"),
"FA002":("猜灯谜", 960, 0.88, ARRAY["全国"], "智力活动与传统文化的结合体现"),
"FA003":("舞龙舞狮", 618, 0.92, ARRAY["中原","华南"], "寓意驱邪避灾、吉祥如意"),
"FA004":("踩高跷", 1046, 0.85, ARRAY["北方"], "传统表演艺术,增加节日欢乐气氛"),
"FA005":("扭秧歌", 1368, 0.90, ARRAY["北方"], "传统舞蹈,表达喜庆和丰收的喜悦");
# ================================================

# 3. 插入美食文化数据
INSERT VERTEX FoodCulture(name, calories, ingredients, symbolic_meaning)
VALUES
    "FC001":("元宵", 450, "糯米,芝麻,白糖", "象征团圆与美满"),
    "FC002":("汤圆", 350, "糯米,红豆,椰蓉", "寓意家庭和睦、生活甜蜜"),
    "FC003":("年糕", 320, "糯米,红枣,花生", "象征年年高升,生活步步高"),
    "FC004":("炸元宵", 500, "糯米,豆沙,植物油", "外酥里嫩,寓意生活红火"),
    "FC005":("饺子", 280, "面粉,猪肉,白菜", "象征团圆和财富");
# ================================================

# 4. 插入诗词作品数据
INSERT VERTEX `Poetry` (
    title, author, dynasty, rhyme_scheme, sentiment_analysis, content
) VALUES
"P001":("青玉案·元夕", "辛弃疾", "宋代", "xyz", 0.85, "东风夜放花千树,更吹落、星如雨。宝马雕车香满路。凤箫声动,玉壶光转,一夜鱼龙舞。蛾儿雪柳黄金缕,笑语盈盈暗香去。众里寻他千百度,蓦然回首,那人却在、灯火阑珊处。"),
"P002":("生查子·元夕", "欧阳修", "宋代", "abd", 0.78, "去年元夜时,花市灯如昼。月上柳梢头,人约黄昏后。今年元夜时,月与灯依旧。不见去年人,泪湿春衫袖。"),
"P003":("正月十五夜", "苏味道", "唐代", "abc", 0.80, "火树银花合,星桥铁锁开。暗尘随马去,明月逐人来。游伎皆秾李,行歌尽落梅。金吾不禁夜,玉漏莫相催。"),
"P004":("十五夜观灯", "卢照邻", "唐代", "aabb", 0.82, "锦里开芳宴,兰缸艳早年。缛彩遥分地,繁光远缀天。接汉疑星落,依楼似月悬。别有千金笑,来映九枝前。"),
"P005":("元夕无月", "丘逢甲", "清代", "aabb", 0.75, "三年此夕月无光,明月多应在故乡。欲向海天寻月去,五更飞梦渡鲲洋。"),
"P006":("京都元夕", "元好问", "金代", "aabb", 0.80, "袨服华妆着处逢,六街灯火闹儿童。长衫我亦何为者,也在游人笑语中。"),
"P007":("鹧鸪天·元夕有所梦", "姜夔", "宋代", "aabb", 0.78, "肥水东流无尽期,当初不合种相思。梦中未比丹青见,暗里忽惊山鸟啼。春未绿,鬓先丝,人间别久不成悲。谁教岁岁红莲夜,两处沉吟各自知。"),
"P008":("清平乐·上元月蚀", "纳兰性德", "清代", "aabb", 0.85, "瑶华映阙,烘散蓂墀雪。比拟寻常清景别,第一团圆时节。影蛾忽泛初弦,分辉借与宫莲。七宝修成合璧,重轮岁岁中天。"),
"P009":("元夕二首", "王守仁", "明代", "aabb", 0.75, "故园今夕是元宵,独向蛮村坐寂寥。赖有遗经堪作伴,喜无车马过相邀。"),
"P010":("元夕影永冰灯", "唐顺之", "明代", "aabb", 0.80, "正怜火树千春妍,忽见清辉映月阑。出海鲛珠犹带水,满堂罗袖欲生寒。烛花不碍空中影,晕气疑从月里看。为语东风暂相借,来宵还得尽余欢。");

图片

在建立关联关系和创建索引后,执行到数据库中,让我们看看效果~

图片

图片

环形关系图彩蛋 🎉 祝大家元宵节团团圆圆