构建知识图谱的双重方法:传统NLP技术或大型语言模型

最近在默沙东制药的内部研讨会分享了一下我们医学图书馆如何利用知识图谱和大模型技术构建文档级别知识图谱和打标签能力并应用于智能知识库建设以及推荐和检索、问答等应用场景。

知识图谱本身也是一种丰富的语义标签,编辑摘录部分关于用传统NLP技术以及大模型LLM技术构建知识图谱的方法及对比,后续将详细介绍我们的方案并如何应用于知识库、情报和Chatbot系统中。

正文

知识图谱是以结构化格式表示实体之间关系的强大工具。它们广泛用于医疗保健、金融、电子商务等各个行业,以组织大量数据、启用高级搜索功能并提供更好的决策能力。但是,构建知识图谱需要从原始文本中提取相关实体及其关系,这就是命名实体识别 (NER) 发挥作用的地方。

传统上,NER 一直是知识图谱构建中实体提取的首选方法。然而,大型语言模型 (LLM) 的出现带来了新的可能性,因此有必要比较这两种方法并评估哪种方法对构建知识图谱更有效。在这篇博客中,我们将深入探讨传统 NER 和 LLM 在构建知识图谱方面的区别,以及每种方法如何影响流程。

什么是知识图谱?

知识图谱是由互连实体及其关系组成的网络。它将信息组织成机器可以解释的结构化形式。该图包括:

  • 节点(实体) :表示人员、地点、组织、概念等。

  • Edges (Relationships) :定义实体之间的连接(例如,‘works at’、‘is located in’)。

知识图谱在 AI、数据集成和自然语言处理 (NLP) 等领域特别有用,这些领域的目标是从非结构化数据中提取有意义的信息。

传统命名实体识别 (NER)

命名实体识别 (NER) 是信息提取的一个子任务,旨在识别和分类文本中的命名实体(例如人员、组织、位置等)。它是最早用于提取信息以构建知识图谱的技术之一。

传统 NER 的工作原理:

传统的 NER 模型依赖于预定义的字典和基于规则的系统,或者在标记数据集上训练的机器学习算法来检测实体。

  1. 基于规则的 NER :使用一组规则或正则表达式来标识实体。例如,所有大写的单词都可能被视为专有名词,因此也被视为实体。这速度很快,但灵活性有限。

  2. 机器学习 NER :基于机器学习的 NER 模型在带注释的数据集上进行训练。这些模型采用决策树、条件随机字段 (CRF) 或支持向量机 (SVM) 等技术从文本数据中学习。

  3. 深度学习 NER:现代 NER 系统使用深度学习模型,如递归神经网络 (RNN)、长短期记忆 (LSTM) 网络或变压器。这些模型可以捕获单词的上下文,并在看不见的数据上表现得更好。

使用传统 NER 构建知识图谱的步骤:

  1. 数据预处理 :清理并规范化输入文本(删除特殊字符、小写字母等)。

  2. 实体提取 :使用经过训练的 NER 模型从文本中提取实体。

  3. 关系提取 :使用依赖关系解析或共现分析等技术识别实体之间的关系。

  4. 图谱构造 :将提取的实体表示为图形数据库(例如 Neo4j)中的节点,将关系表示为边缘。

  5. 图谱融合:通过集成来自多个来源的数据来添加其他实体和关系。

  6. 查询图形 :使用 Cypher 等图形查询语言来搜索或遍历知识图谱。

其中一种方法是使用 GLiNER 等神经模型,它通过利用深度学习技术简化了 NER。
GLiNER 模型针对命名实体识别 (NER) 进行了预训练,并在此处使用特定于域的实体标签进行初始化。然后,该模型根据文本中的上下文预测实体。

  • 模型初始化:GLiNER 使用 GLiNER.from_pretrained() 加载。定义了标签列表(例如,“人员”、“组织”等)以指导模型识别特定实体类型。

  • 实体提取 :模型扫描文本以查找与提供的标签匹配的实体。这就是 GLiNER 的亮点,因为它可以检测实体,而无需预定义的字典或严格的规则。

from gliner import GLiNER  
#Model Initialization  
model = GLiNER.from\_pretrained("numind/NuNerZero")  
#Merging and Displaying Entities  
\# NuZero requires labels to be lower-cased!  
labels=\[  
    "people",  
    "organizations",  
    "concepts/terms",  
    "principles",  
    "documents",  
    "dates"  
\]  
labels = \[l.lower() for l in labels\]  
text = content\_process  
entities = model.predict\_entities(text, labels)  
entities = merge\_entities(entities)  
for entity in entities:  
    print(entity\["text"\], "=>", entity\["label"\])

输出

传统 NER 的挑战

  1. 有限范围 :传统的 NER 模型通常仅限于预定义的实体类型,如人员、位置或组织。自定义实体(例如,“品牌名称”或“化合物”)需要特定于领域的训练数据。

  2. 手动特征工程 :NER 模型通常依赖于手动特征工程,例如词性标记或标记化,这可能非常耗时且容易出错。

  3. 缺乏上下文理解:NER 系统可能难以理解复杂或模棱两可的句子中的上下文。例如,“Apple”一词可以指代水果或公司,具体取决于上下文。

大型语言模型 (LLM)

大型语言模型 (LLM),例如 GPT-4、LLaMA 和 OpenAI 模型,通过利用大量数据和先进的深度学习技术以更细致和上下文化的方式理解语言,改变了 NLP。与传统的 NER 不同,LLM 可以捕捉到对语言和关系的更广泛理解。

LLM 在知识图谱构建中的工作原理:

LLM 可以直接从非结构化文本中提取实体和关系,而无需预定义标签。它们具有很强的适应性,可以通过及时的工程设计或微调来识别各种实体类型和复杂的关系。

  1. 上下文实体识别 :LLM 根据上下文而不是固定规则识别实体,使其对于各种和看不见的数据更加健壮。

  2. 关系推理 :LLM 可以通过理解自然语言上下文和语义来推断实体之间的隐式关系。

  3. 动态知识更新 :LLM 可以动态处理新的、看不见的数据,从而在获得新信息时更轻松地更新知识图谱。

使用 LLM 构建知识图谱的步骤:

  1. Text Collection :收集大量非结构化文本,从中提取实体和关系。

  2. 使用 LLM 进行实体和关系提取:

  • 使用 LLM 从文本中提取实体和关系。

  • 使用特定查询提示模型,例如“从以下文本中提取实体及其关系”。

  1. 特定于域的实体的微调(可选):
  • 在特定于域的数据集上微调 LLM 以提高专用实体的准确性。
  1. 图谱构建 :使用 Neo4j 等图形数据库或自定义构建的解决方案将实体和关系构建到知识图谱中。

  2. 图查询与分析 :使用图遍历算法查询关系或从知识图谱中发现新的见解。

像 GPT 这样的大型语言模型 (LLM) 提供了一种灵活的方法来提取实体和关系。通过最少的设置,系统会提示模型直接从文本中识别实体(例如,人员、组织)并推断关系(例如,works for、located in)。与传统模型不同,LLM 可以理解上下文并返回结构化的 JSON 数据,因此非常适合动态、实时的知识图谱构建。

import openai  
import json  
\# Function to generate entities and relationships from the given text using OpenAI's API  
def generate\_entities\_and\_relationships(text, api\_key):  
    \# Set the OpenAI API key  
    openai.api\_key = api\_key  
    \# Create the prompt that will be sent to the OpenAI API.  
    \# The prompt asks the model to identify entities and relationships within the provided text  
    \# and format the response in JSON format.  
    prompt = f"""  
    Given the following text, identify the main entities and their relationships:  
    Text: {text}  
    Please provide the output in the following JSON format:  
    {{  
        "entities": \[  
            {{"name": "Entity1", "type": "PersonType"}},  
            {{"name": "Entity2", "type": "OrganizationType"}},  
            ...\],  
        "relationships": \[  
            {{"subject": "Entity1", "predicate": "works\_for", "object": "Entity2"}},  
            {{"subject": "Entity2", "predicate": "located\_in", "object": "Entity3"}},  
            ...\]}}"""  
    \# Send the request to the OpenAI API using the 'gpt-3.5-turbo' model.  
    \# The API call is structured as a chat completion with system and user messages.  
    response = openai.chat.completions.create(  
        model="gpt-4o",  
        messages=\[  
            {"role": "system", "content": "You are a helpful assistant that identifies entities and relationships in text."},  
            {"role": "user", "content": prompt}  
        \]  
    )\# Extract and clean up the response by removing extra characters or code format markers  
    result = response.choices\[0\].message.content.strip().strip('\`\`\`json').strip().strip('\`\`\`')  
    return json.loads(result)

输出

合作链接

如何使用传统方法和 LLM 提取实体

使用 LLM 构建知识图谱的最佳实践

  1. 利用预先训练的模型:使用预先训练的 LLM 提取实体和关系,而无需大量标记的数据集。

  2. 针对特定领域的需求进行定制:针对特定行业(例如医疗保健、金融)微调 LLM,以提高基准任务的性能。

  3. 利用知识蒸馏:应用知识蒸馏技术将复杂的 LLM 输出转换为结构化知识图谱数据。

  4. 评估准确性:使用人机协同或自动评估技术持续评估提取的实体和关系的准确性。

  5. 优化性能:由于 LLM 的计算成本可能很高,因此请通过为实时应用程序部署更轻量级的版本来优化模型的性能

另请参阅:- https://www.bluetickconsultants.com/blogs/from-rag-to-graphrag-transforming-information-retrieval-with-knowledge-graphs.html

结论

传统的 NER 和基于 LLM 的方法在构建知识图谱中都有其一席之地。传统 NER 对于结构化的预定义实体类型是可靠的,并且在具有已建立分类法的域中运行良好。但是,LLM 提供了一种更灵活、上下文感知和可扩展的解决方案,用于从庞大的非结构化数据源中提取实体和关系。

对于上下文、细微差别和可扩展性至关重要的项目,LLM 是更好的选择。通过利用他们对自然语言的理解,LLM 可以更轻松地构建动态且高度上下文相关的知识图谱,这些知识图谱会随着新信息的出现而发展。

知识图谱的未来在于两种方法的混合,将传统 NER 模型的精度与 LLM 的适应性和强大功能相结合,以创建能够处理日益复杂的数据环境的强大系统。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

### 构建水利相关知识图谱方法技术 #### 数据收集与预处理 构建水利相关的知识图谱首要任务是从多个渠道获取高质量的数据集。这些数据可能来源于公开数据库、学术论文、政府报告以及特定于水利工程的标准文档,例如《水利水电工程设计术语标准》SL26-2012[^2]。 #### 实体识别与关系抽取 为了有效提取有用的信息并建立实体之间的联系,在此阶段将运用自然语言处理技术和机器学习算法来自动识别文本中的重要概念(即实体),并通过分析上下文环境确定它们之间存在的逻辑关联。这涉及到基于实体的关系抽取技术,用于发现不同对象间的潜在互动模式;同时也依赖于基于关系的实体识别方法,以提高准确性[^1]。 #### 图结构表示与优化 当完成了初步的数据整理工作之后,则需考虑如何高效地存储和查询所得到的知识体系。此时可借助图卷积神经网络等先进技术手段来进行知识表达形式的设计,并通过不断调整参数设置达到最佳性能表现。此外,还可以引入五元组模型扩展传统三元组架构,从而更好地支持复杂场景下的语义描述需求。 #### 集成通用与行业特性 值得注意的是,虽然专注于某一具体行业的垂直领域开发具有针对性强的优势特点,但在实际操作中往往还需要兼顾其他方面的一般规律性认识。因此建议采取综合策略——既重视挖掘本地化特色要素又不失广泛适用性的原则指导整个过程。也就是说,应该充分利用已有的大规模公共类目表作为基础框架支撑起更为细致入微的专业分支建设,最终形成一个兼具广度深度双重优势的整体解决方案[^3]。 ```python from py2neo import Graph, Node, Relationship # 创建节点实例 node_water_project = Node("WaterProject", name="三峡大坝") # 定义两个实体间的关系 relationship_between_nodes = Relationship(node_water_project, "位于", node_province) graph = Graph() # 初始化连接Neo4j数据库的对象 graph.create(relationship_between_nodes) # 将新创建的关系保存至数据库中 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值