构建知识图谱的两种方法:传统技术或LLM

2024年09月30日 由 alex 发表 1227 0

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


传统上,NER 是知识图谱构建中提取实体的常用方法。然而,大语言模型(LLM)的出现带来了新的可能性,因此有必要对这两种方法进行比较,并评估哪种方法对构建知识图谱更有效。在本文中,我们将深入探讨传统 NER 和 LLM 在构建知识图谱时的不同之处,以及每种方法对整个过程的影响。


1


什么是知识图谱?

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

  • 节点(实体): 代表人、地点、组织、概念等。
  • 边(关系): 定义实体之间的联系(如 “在...工作”、“位于...”)。


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


2


传统的命名实体识别(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.from_pretrained() 加载 GLiNER。定义了一个标签列表(如 “人”、“组织 ”等),以指导模型识别特定的实体类型。
  • 实体提取: 模型会扫描文本,寻找与提供的标签相匹配的实体。这正是 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"])


输出


3


传统 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. 文本收集: 收集大量非结构化文本,从中提取实体和关系。

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

  • 使用 LLM 从文本中提取实体和关系。
  • 用 “从以下文本中提取实体及其关系 ”这样的特定查询来提示模型。

3. 针对特定领域实体进行微调(可选):

  • 在特定领域的数据集上对 LLM 进行微调,以提高提取特定实体的准确性。

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)


输出


4


5


6


7


8


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

  1. 利用预训练模型: 使用预训练的 LLM 来提取实体和关系,而无需大量标记数据集。
  2. 根据特定领域的需求进行定制: 针对特定行业(如医疗保健、金融)对 LLM 进行微调,以提高利基任务的性能。
  3. 利用知识提炼: 应用知识提炼技术,将复杂的 LLM 输出转换为结构化的知识图谱数据。
  4. 评估准确性: 利用人工或自动评估技术,持续评估提取实体和关系的准确性。
  5. 优化性能: 由于 LLM 的计算成本较高,因此应通过为实时应用部署更轻量级的版本来优化模型的性能。


结论

传统的 NER 和基于 LLM 的方法在构建知识图谱中都有其用武之地。传统的 NER 对于结构化的、预定义的实体类型是可靠的,并且在具有既定分类标准的领域中效果良好。然而,LLM 为从大量非结构化数据源中提取实体和关系提供了更加灵活、具有上下文感知能力和可扩展的解决方案。


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


文章来源:https://medium.com/@bluetickconsultants/dual-approaches-to-building-knowledge-graphs-traditional-techniques-or-llms-400fee0f5ac9
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
写评论取消
回复取消