《知识图谱——概念与技术》笔记:基础篇

1 知识图谱概述

1.1 知识图谱的基本概念

1.1.1 知识图谱的狭义概念

作为一种知识表示形式,知识图谱是一种大规模语义网络,包含实体(Entity)、概念(Concept)及其之间的各种语义关系。

语义网络是一种以图形化的形式通过点和边表达知识的方式。语义网络中的点可以是实体、概念和值(Value)。知识图谱中的边可以分为属性(Property)与关系(Relation)两类。语义网络中的边按照其两端节点的类型可以分为概念之间的子类(subclassOf)关系、实体与概念之间的实例(instanceOf)关系,以及实体之间的各种属性与关系。

1.1.2 知识图谱的广义概念

如今在更多实际场景下,知识图谱作为一种技术体系,指代大数据时代知识工程的一系列代表性技术的总和。

1.2 知识图谱的分类

1.2.1 知识图谱中的知识分类
  1. 事实知识(Factual Knowledge)
    事实知识是关于某个特定实体的基本事实。
  2. 概念知识(Taxonomy Knowledge)
    概念知识分为两类:一类是实体与概念之间的类属关系(isA 关系);另一类是子概念与父概念之间的子类关系(subclassOf)。
  3. 词汇知识(Lexical Knowledge)
    词汇知识主要包括实体与词汇之间的关系(比如,实体的命名、称谓、英文名等)以及词汇之间的关系(包括同义关系、反义关系、缩略词关系、上下位词关系等)。
  4. 常识知识(Commonsense Knowledge)
    常识是人类通过身体与世界交互而积累的经验与知识,是人们在交流时无须言明就能理解的知识。
1.2.2 知识图谱的领域特性

随着近几年知识图谱技术的进步,其研究与落地日益从通用领域转向特定领域和特定行业,于是就有了领域或行业知识图谱(Domain-specific Knowledge Graph,DKG),其与通用知识图谱(General-purpose Knowledge Graph,GKG)之间既有显著区别也有十分密切的联系。

另一个趋势就是,越来越多的企业关注自身的知识图谱建设与应用,于是就有了企业知识图谱(Enterprise Knowledge Graph)。企业知识图谱是指横贯企业各核心流程的知识图谱。与 CKG 和 DKG 相比,企业知识图谱具有典型的「小、杂、专」的特点。

2 基础知识

2.1 知识表示

2.1.1 基本概念

知识表示是对现实世界的一种抽象表达。评价知识表示的两个重要因素是表达能力(Expressiveness)与计算效率(Efficiency)。知识的表示方式主要分为符号表示和数值表示。在实际应用中,根据不同的学科背景,人们发展了基于图论、逻辑学、概率论的各种知识表示。

2.1.2 知识图谱的图表示
  1. 基于图的表示
    概念与图论中的一致,包括有向图/无向图、出度/入度、邻接矩阵、路径、可达性等。
  2. 基于三元组的表示
    RDF(Resource Description Framework)是用于描述现实中资源的 W3C 标准,它是描述信息的一种通用方法,使信息可以被计算机应用程序读取并理解。现实中任何实体都可以表示成 RDF 模型中的资源,每个资源的一个属性及属性值,或者它与其他资源的一条关系,都可以表示成三元组。

    一个三元组包括三个元素:主体(Subject)、谓词(Predicate)及客体(Object)。当某个三元组描述了某个资源的属性时,其三个元素也被称为主体、属性(Property)及属性值(Property Value)。比如,三元组 <亚里士多德,出生地,Chalcis> 表达了亚里士多德出生于 Chalcis 的事实。

    DBpedia 的 RDF 数据集片段如下图所示。一个知识图谱可以视作三元组的集合,可以选择关系型数据库或者图数据库进行存储。相应的,可以使用 SQL 或者 SPARQL 作为三元组数据的查询语言。

2.1.3 知识图谱的数值表示

将知识图谱作为背景知识融合进深度学习模型的基本思路是,将知识图谱中的点与边表示成数值化的向量。知识图谱的表示学习旨在将知识图谱中的元素(包括实体、属性、概念等)表示为低维稠密实值向量。

学习实体和关系的向量化表示的关键是,合理定义知识图谱中关于事实(即三元组 < h , r , t > <h,r,t> <h,r,t>)的损失函数 f r ( h , t ) f_r(\boldsymbol{h},\boldsymbol{t}) fr(h,t),其中 h \boldsymbol{h} h t \boldsymbol{t} t 是三元组的两个实体 h h h t t t 的向量化表示。可通过最小化 ∑ ( h , r , t ) ∈ O f r ( h , t ) \sum_{(h,r,t) \in O} f_r(\boldsymbol{h},\boldsymbol{t}) (h,r,t)Ofr(h,t) 来学习,其中 O O O 表示知识图谱中所有事实的集合。不同的表示学习使用不同的原则和方法定义相应的损失函数。

  1. 基于距离的模型
    SE 是其代表性模型,基本思想是当两个实体属于同一个三元组时,它们的向量表示在投影后的空间中也应该彼此靠近。因此,定义损失函数为向量投影后的距离:
    f r ( h , t ) = ∥ W r , 1 h − W r , 2 t ∥ l 1 f_r(\boldsymbol{h},\boldsymbol{t})=\Vert \boldsymbol{W}_{r,1} \boldsymbol{h}-\boldsymbol{W}_{r,2}\boldsymbol{t} \Vert_{l_1} fr(h,t)=Wr,1hWr,2tl1
    其中 W r , 1 \boldsymbol{W}_{r,1} Wr,1 W r , 2 \boldsymbol{W}_{r,2} Wr,2 分别为 h \boldsymbol{h} h t \boldsymbol{t} t 的投影矩阵, l 1 l_1 l1 表示使用 1-范数。由于 SE 模型引入了两个不同的投影矩阵,导致很难捕获实体和关系之间的语义相关性。
  2. 基于翻译的模型
    (1)TransE 模型
    TransE 模型认为在知识库中,三元组 < h , r , t > <h,r,t> <h,r,t> 可以看成头实体 h h h 到尾实体 t t t 利用关系 r r r 所进行的翻译。也就是说,头实体的向量加上关系的向量,应该尽可能和尾实体的向量接近,即 h + r ≈ t \boldsymbol{h}+\boldsymbol{r} \approx \boldsymbol{t} h+rt。于是得到损失函数:
    f r ( h , t ) = ∥ h + r − t ∥ l 1 / l 2 f_r(\boldsymbol{h},\boldsymbol{t})=\Vert \boldsymbol{h}+\boldsymbol{r}-\boldsymbol{t} \Vert_{l_1 / l_2} fr(h,t)=h+rtl1/l2
    在实际应用中,为了使正负例尽可能分开,TransE 模型使用了 Hinge Loss 目标函数(有时又称为 Max Margin):
    L = ∑ ( h , r , t ) ∈ S ∑ ( h ′ , r , t ′ ) ∈ S ′ [ γ + f r ( h , t ) − f r ( h ′ , t ′ ) ] + L=\sum_{(h,r,t) \in S} \sum_{(h',r,t') \in S'} [\gamma+f_r(\boldsymbol{h},\boldsymbol{t})-f_r(\boldsymbol{h}',\boldsymbol{t}')]_+ L=(h,r,t)S(h,r,t)S[γ+fr(
<think>好的,我现在要帮用户解答如何自学编程的问题。首先,我需要回顾用户之前的对话历史,确保回答的一致性和连贯性。用户之前询问了PCA,这是一个关于机器学习的降维方法,现在转向自学编程,可能用户对数据科学或机器学习感兴趣,所以可能需要结合这些领域来回答。 用户的问题是如何自学编程,这是一个比较广泛的问题,所以需要结构化的回答。首先,我应该考虑用户可能的背景和目标。他们可能刚开始学习,没有明确的编程经验,所以需要从基础开始指导。同时,用户可能对应用编程到数据分析或机器学习有兴趣,因为之前的问题涉及PCA。 接下来,我需要确定回答的结构。通常,自学编程的步骤包括明确目标、选择语言、学习资源、实践项目、社区参与、持续学习等。我需要分步骤详细说明每个部分,并给出具体例子和建议,特别是针对数据科学领域的语言如Python或R。 同时,用户之前的回答中提到了数学公式和结构化的步骤,可能希望同样清晰的列表和分点说明。需要确保回答结构清晰,步骤明确,并提供实用资源,如推荐书籍、在线课程、练习平台等。 还要注意用户可能遇到的常见问题,比如如何保持动力、如何调试代码、如何解决实际问题,这些都需要在回答中涵盖。此外,强调实践的重要性,因为编程是技能,需要不断练习。 最后,要确保语言口语化,避免使用专业术语过多,但又要准确。可能需要检查推荐的资源是否最新,是否有免费选项,以及是否适合初学者。例如,推荐Codecademy、LeetCode、Kaggle这些平台,并提供书籍如《Python编程:从入门到实践》等。 总结一下,回答需要包括明确目标、选择语言、学习资源、实践项目、社区参与、持续学习等步骤,每个部分给出具体建议,并结合用户可能的兴趣领域(如数据科学)来推荐相关工具和资源。同时,保持鼓励和支持,强调坚持和解决问题的态度。</think>自学编程需要系统规划和持续实践,以下是一份详细指南,结合技术学习与工程实践,帮助你高效入门: --- ### 一、明确学习目标(关键起点) 1. **领域定位** - **Web开发**:JavaScript + React + Node.js - **数据分析**:Python (Pandas/Numpy) + SQL - **人工智能**:Python (PyTorch/TensorFlow) + 数学基础 - **移动开发**:Swift (iOS) / Kotlin (Android) 2. **阶段目标拆解** - 第1个月:掌握基础语法 - 第3个月:完成小型项目 - 第6个月:构建完整应用 --- ### 二、选择编程语言(推荐路径) | 语言 | 学习难度 | 应用场景 | 新手友好度 | |-----------|----------|--------------------|------------| | **Python** | ⭐★ | AI/数据分析/自动化 | ★★★★★ | | **JavaScript** | ⭐⭐★ | Web全栈开发 | ★★★★☆ | | **Java** | ⭐⭐⭐ | 企业级后端/Android | ★★★☆☆ | > 建议:**从Python入手** → 语法简洁 + 生态丰富 + 跨领域适用 --- ### 三、高效学习路径 #### 阶段1:基础语法(2-4周) - **核心内容**: ✅ 变量/数据类型 ✅ 条件/循环语句 ✅ 函数与模块 ✅ 文件操作 ✅ 异常处理 - **实践工具**: - [Codecademy](https://www.codecademy.com/) 交互式学习 - 《Python编程:从入门到实践》手把手项目驱动 #### 阶段2:算法与数据结构(4-8周) - **必学内容**: 🔹 时间/空间复杂度分析 🔹 链表/栈/队列 🔹 排序算法(快排/归并) 🔹 二叉树/哈希表 - **训练平台**: - [LeetCode](https://leetcode.com/)(从Easy难度起步) - 《算法图解》可视化理解算法 #### 阶段3:项目实战(持续进行) - **项目演进路线**: ```markdown 1. 命令行工具:TODO清单/文件管理器 2. Web应用:博客系统/电商页面 3. 数据分析:COVID数据可视化 4. 机器学习:手写数字识别 ``` - **代码托管**: 立即注册[GitHub](https://github.com/),学习Git基础命令 ```bash git clone | commit | push | pull request ``` --- ### 四、关键技术栈扩展 1. **开发工具链** - IDE:VS Code(安装Python/Prettier扩展) - 调试:Python Debugger (pdb) - 环境管理:conda/pipenv 2. **工程化能力** - 单元测试:pytest框架 - 代码规范:PEP8标准 - 文档编写:Markdown + Sphinx --- ### 五、突破瓶颈的策略 1. **Debug方法论** - 使用`print()`定位问题范围 - 二分法注释代码 - 阅读错误堆栈信息(关键行标记) 2. **知识管理** - 建立代码片段库(如Gist) - 用Obsidian做学习笔记,建立知识图谱 3. **社区资源** - Stack Overflow提问模板: ``` 1. 问题现象 2. 已尝试方案 3. 错误日志截图 4. 相关代码段 ``` --- ### 六、学习路线图(以Python为例) ```mermaid gantt title 6个月Python学习计划 section 基础阶段 语法基础 :a1, 2023-10-01, 30d 数据结构 :a2, after a1, 20d section 进阶阶段 Web开发基础 :a3, after a2, 40d 数据库操作 :a4, after a3, 30d section 专项突破 数据分析 :a5, after a4, 50d 机器学习 :a6, after a5, 60d ``` --- ### 七、持续成长建议 1. **参与开源项目**:从修复文档开始(GitHub的"good first issue"标签) 2. **技术博客**:每月输出1技术总结(推荐用Hexo搭建博客) 3. **建立学习小组**:通过Discord/微信群组互相代码审查 --- 坚持每日编码,**100小时定律**比10000小时更适用于入门阶段。遇到问题记住: **"所有你卡住的问题,一定有前人解决过"** —— 善用搜索,保持耐心!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值