构建知识图谱的双重方法:传统NLP技术或大型语言模型
构建知识图谱的双重方法:传统NLP技术或大型语言模型
知识图谱是组织和理解大量数据的强大工具,广泛应用于医疗保健、金融、电子商务等领域。构建知识图谱需要从原始文本中提取相关实体及其关系,这可以通过传统命名实体识别(NER)或大型语言模型(LLM)来实现。本文将深入探讨这两种方法的区别,并提供具体的技术实现细节。
什么是知识图谱?
知识图谱是由互连实体及其关系组成的网络。它将信息组织成机器可以解释的结构化形式。该图包括:
- 节点(实体):表示人员、地点、组织、概念等。
- Edges(Relationships):定义实体之间的连接(例如,‘works at’、‘is located in’)。
知识图谱在AI、数据集成和自然语言处理(NLP)等领域特别有用,这些领域的目标是从非结构化数据中提取有意义的信息。
传统命名实体识别(NER)
命名实体识别(NER)是信息提取的一个子任务,旨在识别和分类文本中的命名实体(例如人员、组织、位置等)。它是最早用于提取信息以构建知识图谱的技术之一。
传统 NER 的工作原理:
传统的 NER 模型依赖于预定义的字典和基于规则的系统,或者在标记数据集上训练的机器学习算法来检测实体。
- 基于规则的 NER:使用一组规则或正则表达式来标识实体。例如,所有大写的单词都可能被视为专有名词,因此也被视为实体。这速度很快,但灵活性有限。
- 机器学习 NER:基于机器学习的 NER 模型在带注释的数据集上进行训练。这些模型采用决策树、条件随机字段(CRF)或支持向量机(SVM)等技术从文本数据中学习。
- 深度学习 NER:现代 NER 系统使用深度学习模型,如递归神经网络(RNN)、长短期记忆(LSTM)网络或变压器。这些模型可以捕获单词的上下文,并在看不见的数据上表现得更好。
使用传统 NER 构建知识图谱的步骤:
- 数据预处理:清理并规范化输入文本(删除特殊字符、小写字母等)。
- 实体提取:使用经过训练的 NER 模型从文本中提取实体。
- 关系提取:使用依赖关系解析或共现分析等技术识别实体之间的关系。
- 图谱构造:将提取的实体表示为图形数据库(例如 Neo4j)中的节点,将关系表示为边缘。
- 图谱融合:通过集成来自多个来源的数据来添加其他实体和关系。
- 查询图形:使用 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 的挑战
- 有限范围:传统的 NER 模型通常仅限于预定义的实体类型,如人员、位置或组织。自定义实体(例如,“品牌名称”或“化合物”)需要特定于领域的训练数据。
- 手动特征工程:NER 模型通常依赖于手动特征工程,例如词性标记或标记化,这可能非常耗时且容易出错。
- 缺乏上下文理解:NER 系统可能难以理解复杂或模棱两可的句子中的上下文。例如,“Apple”一词可以指代水果或公司,具体取决于上下文。
大型语言模型(LLM)
大型语言模型(LLM),例如 GPT-4、LLaMA 和 OpenAI 模型,通过利用大量数据和先进的深度学习技术以更细致和上下文化的方式理解语言,改变了 NLP。与传统的 NER 不同,LLM 可以捕捉到对语言和关系的更广泛理解。
LLM 在知识图谱构建中的工作原理:
LLM 可以直接从非结构化文本中提取实体和关系,而无需预定义标签。它们具有很强的适应性,可以通过及时的工程设计或微调来识别各种实体类型和复杂的关系。
- 上下文实体识别:LLM 根据上下文而不是固定规则识别实体,使其对于各种和看不见的数据更加健壮。
- 关系推理:LLM 可以通过理解自然语言上下文和语义来推断实体之间的隐式关系。
- 动态知识更新:LLM 可以动态处理新的、看不见的数据,从而在获得新信息时更轻松地更新知识图谱。
使用 LLM 构建知识图谱的步骤:
- Text Collection:收集大量非结构化文本,从中提取实体和关系。
- 使用 LLM 进行实体和关系提取:
- 使用 LLM 从文本中提取实体和关系。
- 使用特定查询提示模型,例如“从以下文本中提取实体及其关系”。
- 特定于域的实体的微调(可选):
- 在特定于域的数据集上微调 LLM 以提高专用实体的准确性。
- 图谱构建:使用 Neo4j 等图形数据库或自定义构建的解决方案将实体和关系构建到知识图谱中。
- 图查询与分析:使用图遍历算法查询关系或从知识图谱中发现新的见解。
像 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 提取实体和关系,而无需大量标记的数据集。
- 针对特定领域的需求进行定制:针对特定行业(例如医疗保健、金融)微调 LLM,以提高基准任务的性能。
- 利用知识蒸馏:应用知识蒸馏技术将复杂的 LLM 输出转换为结构化知识图谱数据。
- 评估准确性:使用人机协同或自动评估技术持续评估提取的实体和关系的准确性。
- 优化性能:由于 LLM 的计算成本可能很高,因此请通过为实时应用程序部署更轻量级的版本来优化模型的性能。
结论
传统的 NER 和基于 LLM 的方法在构建知识图谱中都有其一席之地。传统 NER 对于结构化的预定义实体类型是可靠的,并且在具有已建立分类法的域中运行良好。但是,LLM 提供了一种更灵活、上下文感知和可扩展的解决方案,用于从庞大的非结构化数据源中提取实体和关系。
对于上下文、细微差别和可扩展性至关重要的项目,LLM 是更好的选择。通过利用他们对自然语言的理解,LLM 可以更轻松地构建动态且高度上下文相关的知识图谱,这些知识图谱会随着新信息的出现而发展。
知识图谱的未来在于两种方法的混合,将传统 NER 模型的精度与 LLM 的适应性和强大功能相结合,以创建能够处理日益复杂的数据环境的强大系统。
如何学习大模型 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 的正确特征了。