第一节 知识图谱与 Neo4j 安装 一、什么是知识图谱 知识图谱(Knowledge Graph, KG) 源于自然语言理解,其目标是用一种结构化的方式,来描述现实世界中的实体及其相互关系。它主要由两个核心要素构成: 节点(Nodes):代表现实世界中的“实体”(Entities),例如一个人、一部电影、一家公司或一个具体概念。 边(Edges):代表实体与实体之间的“关系”(Relations)。 这些元素共同构成了一个庞大的语义网络,其基本结构可以表示为 (实体)- [关系] -> (实体) 的三元组(Triples)。例如,“饺子”和“哪吒2”是两个实体,“导演”就是它们之间的关系,构成一个知识三元组:(饺子)- [导演] -> (哪吒2)。
知识图谱(Knowledge Graph, KG) 源于自然语言理解,其目标是用一种结构化的方式,来描述现实世界中的实体及其相互关系。它主要由两个核心要素构成:
这些元素共同构成了一个庞大的语义网络,其基本结构可以表示为 (实体)- [关系] -> (实体) 的三元组(Triples)。例如,“饺子”和“哪吒2”是两个实体,“导演”就是它们之间的关系,构成一个知识三元组:(饺子)- [导演] -> (哪吒2)。
知识图谱并非一个孤立的学术概念,它在工业界有着广泛且深入的应用,尤其是在需要深度结合领域知识的场景中。
俗话说“近朱者赤,近墨者黑”,在许多领域,一个实体的风险或属性,往往与其关联的其他实体有很强的相关性。知识图谱正是挖掘这种关联性的利器。
对于通用领域的开放式聊天,大语言模型(LLM)已展现出强大的能力。但在许多垂直领域,基于知识图谱的问答系统(KBQA)因其答案的准确性和可解释性,仍然具有不可替代的价值。其工作流程通常如下:
景点: 故宫, 时间: 明天上午, 数量: 一张。这种方式虽然不如 LLM 灵活,但在机票预订、酒店查询、银行客服等业务逻辑明确的场景中,能够提供更加可靠和可控的服务。
如何从海量的、非结构化的文本(如新闻、财报、医疗记录)中,自动地构建出结构化的知识图谱,是整个技术流程的核心挑战。
传统的知识图谱构建过程主要依赖于两项关键的 NLP 技术:
通过对大量文本进行这两步处理,我们就能源源不断地抽取出知识三元组,最终汇聚成一个庞大的知识图谱。
随着大语言模型的兴起,传统的 NLP 任务流程正在被重塑。LLM 同样具备强大的实体识别和关系抽取能力,但这并不意味着对传统流程的简单替代,而是呈现出深度融合的趋势。
知识图谱需要专门的数据库进行存储和查询,这类数据库被称为 图数据库 (Graph Database)。其中,与传统的关系型数据库(如 MySQL)相比,图数据库的优势在于其对“关系”的查询性能。对于需要进行多层关系遍历的复杂查询(例如,查询“我朋友的朋友”),图数据库的效果远超关系型数据库。而 Neo4j 就是目前比较流行的一款开源图数据库。
Neo4j 的数据模型主要包含以下几个概念:
节点 (Node):节点是图中的基本数据单元,用于表示现实世界中的实体,例如一个人、一家公司、一本书或一个账户。在关系型数据库中,节点可以类比为表中的一行。
标签 (Label):用于为节点分类或打上“类型”标记。一个节点可以拥有一个或多个标签。例如,一个节点可以同时拥有 :Person 和 :Author 两个标签,表示这个人既是一个普通人,也是一位作者。
关系 (Relationship):这是图数据库的精髓所在,它以一种富有表现力的方式连接两个节点,并明确地定义了它们之间的联系。每个关系都具有以下特点:
:FRIENDS_WITH, :PURCHASED),用来描述连接的性质。:PURCHASED 关系可以有一个 date 属性来记录购买日期。属性 (Property):属性是以键值对(Key-Value)形式存储在节点和关系上的详细信息。键是字符串,值可以是各种基本数据类型(如字符串、数字、布尔值)或它们的数组。
这四个概念共同构成了一个灵活而强大的数据模型。
在上图中,
Alice和Bob是 节点,:Person是 标签,{name: 'Alice'}是 属性,KNOWS则是连接它们的 关系 类型,而{since: 2020}是这段关系上的 属性。
Cypher 是 Neo4j 的声明式图形查询语言,它的语法灵感来源于 SQL,但针对图的特性进行了优化。通过 Cypher,我们可以用一种直观且高效的方式来查询和操作图数据。
例如,要查找在电影《黑客帝国》(The Matrix) 中出演过的所有演员,可以使用以下查询:
MATCH (actor:Person)-[:ACTED_IN]->(movie:Movie {title: 'The Matrix'}) RETURN actor.name
官方的 Cypher 语法速查表(在线版本)汇总了常用的命令、操作符和语法结构,可供读者快速查阅。
图 1.1: Cypher 语法速查表 (Cypher Refcard)
对于初学者和开发者,推荐以下两种主流的安装方式。
Neo4j Desktop (推荐用于本地学习)
图 1.2: 在官网点击下载
图 1.3: 填写注册表单
图 1.4: 首次启动并同意许可协议
Docker (推荐用于服务器部署与跨平台开发)
docker run \ --name my-neo4j \ -p 7474:7474 -p 7687:7687 \ -d \ -v $HOME/neo4j/data:/data \ -v $HOME/neo4j/logs:/logs \ --env NEO4J_AUTH=neo4j/password \ neo4j:latest
-p 7474:7474: 将容器的 HTTP 端口映射到本机,用于浏览器访问。-p 7687:7687: 将容器的 Bolt 驱动端口映射到本机,用于代码连接。-v $HOME/neo4j/data:/data: 将数据目录挂载到本机,确保数据持久化。--env NEO4J_AUTH=neo4j/password: 设置数据库的初始用户名和密码(此处为 neo4j/password)。neo4j:latest: 使用最新的官方镜像。