知识图谱是以结构化格式表示实体间关系的强大工具。知识图谱广泛应用于医疗保健、金融、电子商务等各行各业,用于组织海量数据,实现高级搜索功能,并提供更好的决策能力。然而,构建知识图谱需要从原始文本中提取相关实体及其关系,这正是命名实体识别(NER)发挥作用的地方。
传统上,NER 是知识图谱构建中提取实体的常用方法。然而,大语言模型(LLM)的出现带来了新的可能性,因此有必要对这两种方法进行比较,并评估哪种方法对构建知识图谱更有效。在本文中,我们将深入探讨传统 NER 和 LLM 在构建知识图谱时的不同之处,以及每种方法对整个过程的影响。
什么是知识图谱?
知识图谱是由相互关联的实体及其关系组成的网络。它将信息组织成机器可以解读的结构化形式。知识图谱包括:
知识图谱在人工智能、数据集成和自然语言处理(NLP)等领域特别有用,这些领域的目标是从非结构化数据中提取有意义的信息。
传统的命名实体识别(NER)
命名实体识别(NER)是信息提取的一个子任务,旨在识别文本中的命名实体(如人物、组织、地点等)并对其进行分类。它是最早用于提取信息以构建知识图谱的技术之一。
传统 NER 的工作原理:
传统的 NER 模型依赖于预定义字典和基于规则的系统或机器学习算法,这些系统或算法在标注的数据集上经过训练来检测实体。
使用传统 NER 构建知识图谱的步骤:
其中一种方法是使用 GLiNER 等神经模型,通过利用深度学习技术简化 NER。
GLiNER 模型针对命名实体识别(NER)进行了预先训练,并使用特定领域的实体标签进行初始化。然后,该模型会根据文本中的上下文预测实体。
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 面临的挑战
大型语言模型 (LLM)
大型语言模型(LLM),如 GPT-4、LLaMA 和 OpenAI 模型,通过利用海量数据和先进的深度学习技术,以更细致入微、更符合语境的方式理解语言,从而改变了 NLP。与传统的 NER 不同,LLM 可以捕捉对语言和语言关系更广泛的理解。
LLM 如何在知识图谱构建中发挥作用:
LLM 可以直接从非结构化文本中提取实体和关系,而无需预定义标签。它们具有很强的适应性,可以通过提示工程或微调识别各种实体类型和复杂关系。
使用 LLM 构建知识图谱的步骤:
1. 文本收集: 收集大量非结构化文本,从中提取实体和关系。
2. 使用 LLM 提取实体和关系:
3. 针对特定领域实体进行微调(可选):
4. 图构建: 使用 Neo4j 等图数据库或定制解决方案,将实体和关系结构化为知识图谱。
5. 图查询和分析: 使用图遍历算法查询关系或从知识图谱中发现新的见解。
像 GPT 这样的大型语言模型(LLM)为提取实体和关系提供了一种灵活的方法。只需极少的设置,该模型就能直接从文本中识别实体(如人、组织)并推断关系(如工作单位、所在地)。与传统模型不同,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 构建知识图谱的最佳实践
结论
传统的 NER 和基于 LLM 的方法在构建知识图谱中都有其用武之地。传统的 NER 对于结构化的、预定义的实体类型是可靠的,并且在具有既定分类标准的领域中效果良好。然而,LLM 为从大量非结构化数据源中提取实体和关系提供了更加灵活、具有上下文感知能力和可扩展的解决方案。
对于上下文、细微差别和可扩展性至关重要的项目来说,LLM 是上佳的选择。通过利用对自然语言的理解,LLM 可以更轻松地构建动态和高度上下文化的知识图谱,并随着新信息的出现而不断发展。