心理学研究日趋复杂和大规模,对结构化访问知识的需求也日益增长。尽管学术论文仍然是科学交流的主要载体,但它们难以搜索、比较和整合,尤其是在跨概念、测量方法和方法论的情况下。本文将介绍一个实用的流程,该流程使用 OpenAI 的函数调用功能将非结构化的心理学文章转换为结构化的知识三元组,从而为构建一个轻量级的知识图谱奠定基础。目标是从心理学概念及其相关的测量工具中提取信息,生成干净的、机器可读的输出,从而填充知识图谱。
1. 核心问题:概念与测量方法深埋文本之中
心理学研究富含概念结构,例如自尊、工作记忆或拖延症,这些概念通常通过经验验证的测量量表进行研究。然而,这种概念与测量之间的关系通常嵌入在叙述形式中,使得重用于语义搜索或元分析变得困难。举例来说,一篇心理学论文中可能写到:“为了评估情绪调节,我们使用了情绪调节困难量表 (DERS)……” 然而,我们希望能够将这段叙述转化为结构化的数据,例如:
{
"topic_or_construct": ["情绪调节"],
"measured_by": ["情绪调节困难量表"],
"justification": "为了评估情绪调节,我们使用了 DERS。"
}
这便引出了核心问题:如何有效地从大量的心理学文献中提取这些关键信息,并将它们转化为结构化的形式,以便于机器理解和进一步的分析?传统的解决方案,如手动标注或基于规则的系统,效率低下且难以扩展。而借助大模型和结构化信息提取技术,我们能显著提高效率和精度。
2. 解决方案:基于 OpenAI + TEI XML 的精简流程
本文提供的解决方案主要包含三个关键步骤:
- 解析 TEI XML 全文文章: 将心理学文章从非结构化的文本格式转化为便于程序处理的结构化格式。
- 定义结构化输出模式: 使用 Pydantic 定义清晰的数据结构,确保提取的信息具有一致性和规范性。
- 提示 LLM 提取结构化三元组: 利用 OpenAI 的函数调用能力,引导大模型从文章中提取目标信息,并将其转化为预定义的结构化格式。
下面将逐步介绍实现这些步骤的 Python 代码。
3. 结构化输出模式定义:Pydantic 的力量
Pydantic 是一个强大的 Python 库,用于数据验证和设置管理。它可以用来定义数据模型,并在运行时强制执行类型检查。在本案例中,我们使用 Pydantic 来定义提取的知识三元组的模式。
from pydantic import BaseModel, List
class PsychTriple(BaseModel):
topic_or_construct: List[str]
measured_by: List[str]
justification: str
class PsychTripleList(BaseModel):
extractions: List[PsychTriple]
PsychTriple
类定义了知识图谱中一个三元组的结构,包含概念 (topic_or_construct)、测量方法 (measured_by) 和佐证 (justification) 三个字段。PsychTripleList
类则定义了包含多个 PsychTriple
对象的列表。通过定义这些模式,我们确保了从大模型中提取的信息具有一致的格式,方便后续的处理和分析。
4. 大模型提示工程:引导 LLM 进行结构化提取
提示工程是利用大模型的关键。一个精心设计的提示可以有效地引导模型完成特定的任务。在本案例中,我们定义了一个基于角色的系统提示,指示 LLM 扮演心理学和计算知识表示领域的专家,并指导它提取概念和测量方法之间的关系。
SYSTEM_PROMPT = '''You are an expert in psychology and computational knowledge representation. Your task is to extract key scientific information from psychology research articles to build a structured knowledge graph. The knowledge graph aims to represent the relationships between psychological **topics or constructs** and their associated **measurement instruments or scales**. Specifically, for each article, you will extract information of the form:
1) "Topic or Construct"
2) [Property: "measured by"] -> [Value: "Measure"]
Each article may contain multiple such records. These extractions help build a machine-readable semantic network that connects psychological concepts with their empirical operationalizations.
For each extraction, provide a short justification from the text (1-3 sentences) that supports why this construct was measured by the identified measure.
As far as possible, extract meaningful **phrases** (rather than whole sentences or vague descriptions) as **entities** suitable for inclusion in a knowledge graph for both `topic_or_construct` and `measured_by` fields.
However, not all articles are relevant to this task. If the article does not discuss psychological constructs and how they are measured (e.g., does not mention constructs, measurement techniques, or instruments), return an empty list `[]`.'''
这个提示包含了以下关键要素:
- 角色定义: 将 LLM 定义为心理学和计算知识表示领域的专家。
- 任务描述: 明确告知 LLM 的任务是从心理学研究文章中提取关键信息,构建知识图谱。
- 格式要求: 指明需要提取的信息形式,即概念和测量方法之间的关系。
- 约束条件: 强调提取的信息必须有文本佐证,并尽可能提取有意义的短语作为实体。
- 例外处理: 说明如果文章不包含相关信息,则返回空列表。
有了清晰的提示,我们就可以调用 OpenAI 的 API,并使用 responses.parse
函数将 LLM 的输出解析为预定义的 PsychTripleList
格式。
from openai import OpenAI
client = OpenAI()
response = client.responses.parse(
model="o3", # 可以替换为更强大的模型,如 gpt-4-1106-preview
input=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": f"Extract the constructs and their measures from the following article:\n{article_text}"},
],
text_format=PsychTripleList
)
print(response)
5. TEI XML 解析:从结构化文档中提取文本
TEI (Text Encoding Initiative) 是一种用于表示文本的 XML 标准,常用于学术文献的数字化。许多心理学文章以 TEI XML 格式存储。我们需要一个函数来从 TEI XML 文件中提取文本,以便将其提供给 LLM 进行处理。
from bs4 import BeautifulSoup
def extract_text_from_tei(tei_path):
with open(tei_path, 'r', encoding='utf-8') as file:
soup = BeautifulSoup(file, 'lxml-xml')
body = soup.find('text')
return body.get_text(separator='\n') if body else ''
这个函数使用 BeautifulSoup 库来解析 TEI XML 文件,并提取 text
元素中的文本内容。提取的文本将作为输入提供给 LLM。
6. 案例演示:结构化提取示例
以下是一个结构化提取的示例输出:
[
{
"topic_or_construct": ["自我效能感"],
"measured_by": ["一般自我效能感量表"],
"justification": "一般自我效能感量表被用于评估参与者的自我效能感。"
},
{
"topic_or_construct": ["学业动机"],
"measured_by": ["学业动机量表"],
"justification": "为了测量学业动机,作者使用了 AMS。"
}
]
这个 JSON 数据清晰地表示了概念和测量方法之间的关系,以及提取的佐证信息。这些信息可以用于构建知识图谱,支持语义搜索、工具发现和问答系统等应用。
7. 扩展应用:构建更强大的心理学知识图谱
上述流程只是构建心理学知识图谱的起点。我们可以通过以下方式进一步扩展和完善它:
- 元数据提取: 添加对作者、标题和摘要等元数据的提取支持。
- 模式丰富: 在模式中添加出版背景或样本大小等信息。
- 图数据库集成: 与 SPARQL 后端或可视化工具集成,以便进行查询和分析。例如,将提取的三元组存储在 Neo4j 等图数据库中,可以方便地进行复杂的知识推理和关系挖掘。
- 多模态数据融合: 除了文本数据,还可以将图像、音频和视频等多模态数据融入知识图谱中,以获得更全面的知识表示。例如,可以提取脑电图数据与认知概念之间的关联,构建一个更精细的认知神经科学知识图谱。
- 主动学习: 利用主动学习技术,不断优化 LLM 的提示和训练数据,提高提取的准确性和效率。
- 细粒度情感分析: 结合情感分析技术,识别文章中与特定概念相关的积极、消极或中性情绪,从而更深入地理解这些概念。
- 因果关系识别: 尝试从文本中提取因果关系,例如,”A (干预措施) 导致 B (结果)”,这将大大丰富知识图谱的语义信息。
8. 重要意义:降低领域特定知识图谱的构建门槛
传统的知识图谱构建方法需要训练定制的 NLP 流程或构建基于规则的系统,这通常需要大量的专业知识和资源。本文介绍的流程利用通用 LLM,通过模式和专家提示进行指导,从而降低了构建领域特定知识图谱的门槛。通过这种方式,我们将曾经锁在文本中的经验心理学知识转化为可用于结构化推理和重用的形式。
9. 结论:拥抱 LLM 赋能的知识图谱构建
大模型技术正在深刻地改变知识图谱的构建方式。通过结合 OpenAI 的函数调用能力、Pydantic 的数据验证功能和 TEI XML 的结构化文本表示,我们可以高效地从心理学文献中提取关键信息,构建高质量的知识图谱。这种方法不仅提高了效率,还降低了成本,为心理学研究人员和实践者提供了强大的工具,以更好地理解和利用心理学知识。希望本文能够帮助你了解如何利用 LLM 赋能的结构化信息提取技术,构建你自己的领域特定知识图谱。 让我们拥抱 LLM 带来的机遇,共同探索知识图谱构建的新 frontiers!