最近看到一篇论文“KG-HTC: Integrating Knowledge Graphs into LLMs for
Effective Zero-shot Hierarchical Text Classification”,介绍了文本分类的技巧,这篇文航主要利用了知识图谱+大模型的思路,实验效果不错,里面的一些论述也很符合实践经验,因此想推荐给大家。
论文解读网上已经有一些了,这里主要用一个实际案例来做分享,这个案例是大模型结合原文内容生成的,大家可以结合网络解读和论文原文一起看看。这篇文章的例子可能有些不太准确,大家只需要理解algorithm1和algorithm2,以及In-context Learning即可。
这个场景大概是这样:
- 待分类文本:居民区水泥杆上,在10m的位置悬挂警示牌,
- 潜在类别:三级分类,例如(输电-铁塔-高处作业,输电铁塔-横担作业)假设我有20个一级分类,100个二级分类,500个3级分类。
- 真实答案:配网-电线杆-悬挂警示牌。
- 说明:实际场景可能是多分类,关于论文如何进行多分类,请看“L2 预测 (基于 y1=“配网” 的约束 + Q2)
1.工作安全文本分类任务示例
输入文本: “居民区水泥杆上,在10m的位置悬挂警示牌,作业人员已佩戴安全帽和安全带。”
假设待匹配分类 (三级标签体系,还有其他的很多类别):
- 输电-铁塔-高处作业
- 输电-铁塔-横担作业
- 输电-铁塔-塔身作业
- 配网-电线杆-高处作业
- 配网-电线杆-警示牌悬挂
- 配网-高处作业-树障清理
- 配网-高处作业-鸟巢清理
- 个人防护-安全帽-正确佩戴
- 个人防护-安全带-正确使用
2.KG-HTC 流程模拟(包含多分类筛选)😗*
2.1 存储层级标签 (准备阶段)** :
- VectorDB (向量数据库): 存储所有安全分类标签的语义嵌入,包括我们假设的 20 个一级、100 个二级和 500 个三级分类的向量表示。例如,“水泥杆”、“警示牌悬挂”、“安全帽”、“安全带”、“铁塔”、“吊臂车”等所有标签的语义都被数字化存储。
- GraphDB (图数据库): 存储这些标签之间的层级关系。例如,配网 --is_parent_of–> 电线杆,电线杆 --is_parent_of–> 高处作业,高处作业 --is_parent_of–> 警示牌悬挂。同时,个人防护 --is_parent_of–> 安全帽,安全帽 --is_parent_of–> 正确佩戴。这些层级关系构成了分类的“知识图谱” 。
2.2 根据输入的文本,检索相关标签并初步构建子图 (RAG 增强)** :
- 输入文本嵌入: 首先,计算输入文本 “居民区水泥杆上,在10m的位置悬挂警示牌,作业人员已佩戴安全帽和安全带” 的向量嵌入 Ψ(x) 。
- 层级相似度检索 (使用阈值 τl) :
- Level 1 (Q1): LLM 会计算输入文本与所有 20 个一级标签的余弦相似度 。根据预设的相似度阈值 τ1,可能检索到最相关的几个一级标签,例如:“配网” (因为"水泥杆"通常与配网相关) 和 “个人防护” (因为提到"安全帽和安全带") 。
- Level 2 (Q2): LLM 会计算输入文本与所有 100 个二级标签的相似度 。根据 τ2,可能检索到:
- 与“配网”相关的子类:“电线杆” (因为提到"水泥杆")。
- 与“高处作业”相关的类别:“高处作业” (因为提到"10m高"、“悬挂”)。
- 与“个人防护”相关的子类:“安全帽”、“安全带” 。
- 也可能检索到一些与“输电”相关的但在此情境下弱相关的标签,例如:“铁塔” (因为“高处作业”可能也发生在铁塔上)。
- 此时,Q2 可能包含多个候选:“电线杆”、“高处作业”、“铁塔”、“安全帽”、“安全带”。
- Level 3 (Q3): LLM 会计算输入文本与所有 500 个三级标签的相似度 。根据 τ3,可能检索到:
- 与“电线杆”和“高处作业”相关的:“警示牌悬挂” (直接匹配任务)、高处作业
- 与“铁塔”相关的:“横担作业”、“塔身作业” (虽然关联性弱,但因为 Level 2 检索到了“铁塔”,Level 3 可能会带出其子类)。
- 与“安全帽”和“安全带”相关的:“正确佩戴”、“正确使用”。
- 此时,Q3 可能包含多个候选:“警示牌悬挂”、“”高处作业“、”“横担作业”、“塔身作业”、“正确佩戴”、“正确使用”。
- 构建有效子图 (Algorithm 1) :
- 系统会根据父子关系严格验证这些检索到的候选标签。只有当一个子标签的父标签也在其上一层的候选集中时,这个子标签才会被保留在子图中 。
- 例如:
- 警示牌悬挂 (L3) 的父级 电线杆 (L2) 在 Q2 中,且 电线杆 (L2) 的父级 配网 (L1) 在 Q1 中 → 保留路径:配网 -> 电线杆 -> 警示牌悬挂、
- 类似的,保留:配网-电线杆-高处作业*
- 横担作业 (L3) 的父级 铁塔 (L2) 在 Q2 中,但铁塔 (L2) 的父级 输电 (L1)不 在 Q1 中 → 不保留路径:输电 -> 铁塔 -> 横担作业 。
- 塔身(L3) 的父级 铁塔 (L2) 在 Q2 中,但铁塔 (L2) 的父级 输电 (L1)不 在 Q1 中 → 不保留路径:输电 -> 铁塔 -> 塔身作业 。
- 正确佩戴 (L3) 的父级 安全帽 (L2) 在 Q2 中,且 安全帽 (L2) 的父级 个人防护 (L1) 在 Q1 中 → 保留路径:个人防护 -> 安全帽 -> 正确佩戴
- 类似的,保留:个人防护 -> 安全带-> 正确使用。
- 最终形成的子图 G 可能包含4条有效的层级路径,反映了输入文本可能涉及的多个相关方面。
2.3 从子图转换为提示 (Algorithm 2)** :
-
系统会从这个子图 G 中,通过向上回溯算法,枚举所有从叶节点到根节点的有效层级路径 。
-
将这些路径反转,使其从根节点开始,并用“->”连接,形成结构化的文本提示 。
-
结构化提示 (Prompt of Subgraph): 可能包含多条路径,例如:
配网 -> 电线杆 -> 高处作业
配网 -> 电线杆 -> 警示牌悬挂
个人防护 -> 安全帽 -> 正确佩戴
个人防护 -> 安全带 -> 正确使用
这个提示将被插入到分类模板中,作为 LLM 理解和推理的“知识上下文” 。
2.4 LLM 逐层分类并进行最终筛选 (In-context Learning)** :
-
构建分类提示 (Prompt 2) : 将原始输入文本、步骤 3 中生成的结构化知识图谱提示,以及当前层级的候选标签(基于前一层的预测和 Ql)拼接起来,输入 LLM 。
-
L1 预测:
- 候选标签: 所有 20 个一级分类标签。
- LLM 推理: LLM 会根据文本内容和知识图谱提示,识别出文本主要涉及“配网”和“个人防护”领域。
- LLM 生成 (y1): “配网” (更直接描述场景主要活动),但也可能同时识别出“个人防护”这个方面。在严格的单分类输出要求下,LLM 会基于其内部权重和上下文关联度选择一个最佳匹配。假设第一次迭代主要选择**“配网”。**
-
L2 预测 (基于 y1=“配网” 的约束 + Q2):
-
候选标签: 仅考虑“配网”的子类别(如“电线杆”、“高处作业”、“箱变”等)以及 Q2 中与文本更相关的二级标签。 Q2 中的二级标签在 L2 预测时起到了一个重要的补充和纠错作用。 它扩展了仅依赖 L1 预测结果子类别的候选空间,使得 LLM 能够更灵活地应对复杂或模糊的文本,并有机会修正上一层可能存在的潜在错误,从而提高最终分类的准确性
-
LLM 推理: LLM 看到“水泥杆”会进一步聚焦到“电线杆”这个类别,而“10m位置悬挂”则指向“高处作业”。
-
LLM 生成 (y2): 此时,LLM 可能会识别出两个强相关的二级类别:“电线杆” 和 “高处作业”。 ,忽略掉配网子类别中的箱变和其他Q2中的二级标签。
- 此处进行筛选: 如果 LLM 被指示只能输出一个最相关的二级标签,它会根据文本中“水泥杆”和“10m位置”的关联性,选择更直接的“电线杆”。
- 然而,如果 LLM 被允许识别多个相关方面,它可能会在内部考虑两者,并在下一层(L3)中融合它们。 对于严格的层级路径,LLM 需要在此时确定一个主路径。
- 我们假设 LLM 优先选择更具体的物理对象: $y^2 = $ “电线杆”。
-
-
L3 预测 (基于 y2=“电线杆” 的约束 + Q3):
- 候选标签: 仅考虑“电线杆”的子类别(如“警示牌悬挂”、“高处作业”、“登杆作业”、“杆塔巡检”),以及 Q3 中检索到的相关三级标签。 同理,这里扩展了电线杆的子类别,也是为了提供更多选择,减轻之前模型的判断失误。
- LLM 推理: 基于“电线杆”和文本中的“悬挂警示牌”,LLM 会准确锁定“警示牌悬挂”。虽然“高处作业”和“登杆作业”也是一个重要方面,但“警示牌悬挂”是更具体的任务描述。
- LLM 生成 (y3): “警示牌悬挂”
2.5 多分类筛选的体现:**
- RAG 阶段的初步筛选: 通过余弦相似度 (dC) 和阈值 (τl),RAG 系统已经对所有 500 个三级分类、100 个二级分类进行了第一轮的“粗筛”,只检索出语义上最相关的一小部分候选标签 (Ql) 。这大大减小了后续 LLM 处理的标签空间 。
- 子图构建中的结构筛选: Algorithm 1 进一步保证了检索到的标签在层级上的一致性 。它会剔除那些虽然语义相似但没有正确父子关系的标签。例如,如果“塔身作业”被检索到,但它的父级“铁塔”没有和“输电”构成一条完整的、从一级到三级的路径,或者与文本的整体语义关联度非常低,那么这条路径在构建结构化提示时可能就不会被优先考虑或直接被排除。
- LLM 推理时的上下文筛选与优先级判断:
- In-context Learning: LLM 在接收到包含多条路径的“Prompt of Subgraph”时,它会利用自身的理解和推理能力,结合原始输入文本,判断哪条路径与当前文本的核心意图最匹配。即使提示中存在多条可能性路径(如“输电 -> 铁塔 -> 横担作业”),LLM 会根据文本中“水泥杆”这一强特征,将权重更多地分配给“配网 -> 电线杆 -> 警示牌悬挂”这条路径。
- 逐层预测的精炼: 每一层的预测结果都会作为下一层预测的约束 。例如,一旦确定一级是“配网”,那么二级就只会从“配网”的子类或与“配网”强相关的类别中选择,从而排除了“输电”下的大量二级和三级分类。这是一种“漏斗式”的筛选,逐步缩小了搜索空间。
- 缓解前一层错误: 即使前一层的预测偶尔出现偏差,通过结合当前层级的 Ql (通过相似度直接检索到的候选),LLM 仍然有机会纠正方向,提高分类的鲁棒性。这意味着它不完全依赖于上一步的硬性选择,而是会重新评估所有相关候选。
最终,通过 RAG 的语义筛选、知识图谱的结构筛选,以及 LLM 自身的上下文理解和逐层推理,KG-HTC 能够在多个潜在分类中,精确地锁定最符合输入文本描述的唯一或最佳匹配的层级分类路径。