图卷积(一)-图结点表示

PPT:Node Representation Learning

  • 结点表示方法有:LINE(Large-scale Information Network
    Embedding)、DeepWalk、node2vec.

  • 图和高维数据可视化:LargeVis

  • 知识图谱嵌入:RotatE

  • 一种高性能的结点表示系统

结点表示方法

一、 LINE

  1. LINE 1st:一阶领域的LINE,几即把当前节点周边的一阶节点融合起来,表示这点的信息。
    在这里插入图片描述优化目标:在这里插入图片描述
  2. LINE 2st :二阶领域的LINE,通过中间节点去连接两个节点,交叉的越多表示连接越紧密。
    在这里插入图片描述优化目标:在这里插入图片描述讨论:(1)若映射点包含太少的邻居信息:1.加入高阶领域点 2.广度优先遍历 3.在大多数情况下有二阶信息已经够了
    (2)嵌入新的点:1.固定一个存在的点;2.对新结点相关嵌入进行优化

二、DeepWalk

随机游走就是在网络上不断重复地随机选择游走路径,最终形成一条贯穿网络的路径。从某个特定的端点开始,游走的每一步都从与当前节点相连的边中随机选择一条,沿着选定的边移动到下一个顶点,不断重复这个过程。
在这里插入图片描述根据随机游走中包含的顶点来估计下一个顶点出现的概率:
在这里插入图片描述
可将在网络上的随机游走当成是句子上的随机游走
得到的
可看此

三、Node2Vec

网络中的节点一般有两种相似度量:1.内容相似性,2.结构相似性。内容相似性用的是BFS采样,而结构相似性用的DFS采样。文章的核心思想是采用Random Walk来代替DFS或者BFS。文章定义了一种二阶的Random Walk,拥有两个参数,来控制多大的概率反复经过一些Node和控制所谓的Inward和Outward。然后再通过跟LINE总之,整个Random Walk的目的就是在DFS和BFS之间采取某种平衡。

文章虽然提出的是关于Node Feature提取的算法,但是Edge Feature也可以很容易从Node Feature导出。

p:控制在游走中反复访问单个结点的概率,q:表示往外走的概率

图和高维数据可视化

在这里插入图片描述超低维2D/3D表示可视化

  • t-SNE
    t-SNE算法和它的改进算法都得到广泛应用,但存在两个不足:一是处理大规模高维数据时,t-SNE的效率显著降低(包括改进后的算法);二是t-SNE中的参数对不同数据集较为敏感,我们辛辛苦苦的在一个数据集上调好了参数,得到了一个不错的可视化效果,却发现不能在另一个数据集上适用,还得花费大量时间寻找合适的参数,所以现在用的LargeVIs则很好的解决了这些问题

LargeVis 优点

参考

预备知识: KNN图定义:从一个点 x i x_i xi出发,寻找周边与他相邻的距离最近的 k k k个点,连成线就成为KNN graph。

-w70
优点:

  • 高效KNN图构建算法
    在t-SNE的改进算法中,高维空间距离相似性我们只考虑与 x i x_i xi最接近的若干个邻居点,这实质上就是一个构建kNN图的过程。Maaten使用了VP树来构建一个精确的kNN图,但是效率依然堪忧。而LargeVis采用了一种更巧妙的方式,不追求一步到位,先近似再提高准确率。
    构建kNN图一般有三类方法,LargeVis的做法是将第一类方法和第三类方法相结合。具体来说,第一步先利用随机投影树得到一个空间划分,在此基础上寻找每个点的k近邻,得到一个初步kNN图,这个kNN图不要求完全准确。第二步根据“邻居的邻居可能也是我的邻居”的思想,利用邻居搜索算法寻找潜在的邻居,计算邻居与当前点、邻居的邻居与当前点的距离并放入一个小根堆之中,取距离最小的k个节点作为k近邻,最终得到一个精确的kNN图。
  1. 学习KNN图结构
  • 在2D/3D空间中国维持结点相似性。(1)将每个点用2或者3维向量表示,(2)保持相似的靠得近,不相似的离得远。

  • 二值边存在的概率
    p ( e i j = = 1 ) = 1 1 + ∣ ∣ y → i − y → j ∣ ∣ 2 p(e_{ij}==1)= \frac{1}{1+||\overrightarrow{y}_i-\overrightarrow{y}_j||^2 } p(eij==1)=1+y iy j21

  • 带权边的生成概率:
    p ( e i j = = w i j ) = p ( e i j = = 1 ) w i j p(e_{ij}==w_{ij})=p(e_{ij}==1)^{w_{ij}} p(eij==wij)=p(eij==1)wij
    优化目标

  • 随机抽取一些负边

  • 通过异步随机梯度下降优化

  • 线性时间复杂度(与数据点的数量成线性关系)

知识图谱

知识图谱定义

知识图谱是一种特殊的图数据,它是语义的和可复用的:知识图谱数据一经获取即可被多领域应用重复使用,这也是知识图谱服务的构建动机。

(1)首先,知识图谱是一种特殊的图数据,它是一个混杂的图,里边有多种关系。具体来说,知识图谱是一种带标记的有向属性图。知识图谱中每个结点都有若干个属性和属性值,实体与实体之间的边表示的是结点之间的关系,边的指向方向表示了关系的方向,而边上的标记表示了关系的类型。例如,“汤姆·克鲁斯”和“碟中谍”是两个实体,“出演”则是这两者之间的关系。两个实体分别对应着现实世界中的人和电影,而边则对应了他们所表示的人和电影之间的现实关联。前者是关系的起始结点,后者是关系的目标结点。实体“汤姆·克鲁斯”具有“出生日期”等属性,其属性值为“1962年7月3日”等。表示为一个三元组 ∗ ∗ ( h e a d e n t i t y , r e l a t i o n , t a i l e n t i t y ) ∗ ∗ **(head entity, relation, tail entity)** headentity,relation,tailentity
(2)其次,知识图谱是一种人类可识别且对机器友好的知识表示。知识图谱采用了人类容易识别的字符串来标识各元素;同时,图数据表示作为一种通用的数据结构,可以很容易地被计算机识别和处理。
(3)再次,知识图谱自带语义,蕴涵逻辑含义和规则。知识图谱中的结点对应现实世界中的实体或者概念,每条边或属性也对应现实中的一条知识。在此之上,我们可以根据人类定义的规则,推导出知识图谱数据中没有明确给出的知识。比如,已知“张三是个人”,我们就可以根据“人都有父母,都有大脑,需要呼吸”等规则得到很多新知识,而无需在知识图谱中逐条给出。再比如,“外公”的“儿子”是“舅舅”,据此可以推导出很多实体之间的亲属等关系。
根据观测的事实推测出知识图谱的关系模型。

知识图谱嵌入的相关工作

  1. 将实体表示为嵌入(Embedding),(这里的实体相当于数据库网络中的那个实体),
  2. 将关系表示为嵌入或者矩阵
    在这里插入图片描述

Task:知识图谱的完成

  • 基础任务:预测失去的联结
  • 核心观点:根据已知知识建模与推理知识图谱的关系模型
  • Parents of Parents are Grandparents
    关系模型分为3类:
  1. 对称与非对称关系,婚姻关系为对称,亲子关系为非对称关系
  2. 反转关系,上位和下位,丈夫和妻子
  3. 组合关系,妈妈的丈夫是我爸爸
    并不是所有模型都可以推理三种所有关系。而RotatE却可以将三种类型的关系都进行推理。代码
    在这里插入图片描述

RotatE—一种新的知识图谱嵌入模型

(1)其把每种关系都作为一个在复向量空间中从源实体到目标实体的元素旋转,(2)能够建模和推理出三种类型的关系;(3)优化RotatE的一种高效的反取样算法;(3)在知识图谱标准测试集上的关系预测达到state-of-art。

  • 关系视作为复空间的元素旋转
    (1) 将头实体和尾实体表示成负空间中复向量 i.e., h,t ∈ C k \textbf{h,t}\in\mathbb{C}^k h,tCk
    (2) 定义每种关系r作为单个元素从头关系到尾关系的旋转,i.e.
    t = a ∘ b , 这 里 ∣ r i ∣ = 1 t=a\circ{b},这里|r_i|=1 t=abri=1
    ∘ 是 元 素 乘 积 \circ是元素乘积 ,更准确有 t i = h i r i t_i=h_ir_i ti=hiri
    r i = e i θ r , i r_i=e^{i\theta_{r,i}} ri=eiθr,i
    这里 θ r , i \theta_{r,i} θr,ir的第i个维度的幅角
    定义距离函数
    d r ( h,t ) = ∣ ∣ h ∘ t − t ∣ ∣ d_r(\textbf{h,t})=||\textbf{h}\circ\textbf{t}-\textbf{t}|| dr(h,t)=htt
    在这里插入图片描述- 关系模式建模
    (1)r是对称的当且仅当 r i = ± 1 r_i=\pm1 ri=±1,i.e.
    θ r , i = 0 o r π \theta_{r,i}=0 or \pi θr,i=0orπ
    r i = − 1 r_i=-1 ri=1时,可以看到
    在这里插入图片描述
    (2)当 r ∘ r ≠ 1 r\circ r\neq1 rr=1时,则是不对称关系
    (3)两种关系是反转的: r 2 = r ˉ 1 r_2=\bar{r}_1 r2=rˉ1,i.e.,
    θ 2 , i = − θ 1 , i \theta_{2,i}=-\theta{1,i} θ2,i=θ1,i
    (4)一种关系 r 3 \bm{r_3} r3两种关系 r 1 = e i θ 1 \bm{r_1}=e^{i\theta_1} r1=eiθ1 r 2 = e i θ 1 \bm{r_2}=e^{i\theta_1} r2=eiθ1组成,当且仅当 r 3 = r 1 ∘ r 2 \bm{r_3}=\bm{r_1}\circ\bm{r_2} r3=r1r2,i.e.,
    θ 3 = θ 1 + θ 2 \theta_3=\theta_1+\theta_2 θ3=θ1+θ2

  • 负采样损失
    在这里插入图片描述 γ \gamma γ是固定的边缘, σ \sigma σ是sigmoid函数, ( h i ′ , r , t i ′ ) (\bm{h}'_i,\bm{r},\bm{t}'_i) (hi,r,ti)是第i个负三元组。

  • 自对抗负采样
    传统的负采样总是以同一的方式来取,而存在以下问题:1.训练的低效性,因为很多样本都是明显错误的,2.其不能提供有用的信息
    但自对抗反采样优点是:

  1. 根据当前的嵌入模型对负三维数组进行采样
  2. 从简单的样本到越来越复杂的样本
  3. 课程学习:
    在这里插入图片描述KaTeX parse error: Undefined control sequence: \apha at position 1: \̲a̲p̲h̲a̲是采样温度, f r ( h j ′ , t j ′ ) f_r(h'_j,t'_j) fr(hj,tj)测量三元组的显著性.
    最后的目标函数(这里将采样概率作为权重):
    在这里插入图片描述实验数据集:FB15K、WN18、FB15K-237、WN18RR
    在这里插入图片描述

总结

  • 对关系模式进行建模是知识库完成的关键
    如:对称,非对称,相反,组合
  • RotaE:在复空间中用元素旋转定义从头到尾实体的关系,能够对所有三种关系模式进行建模和推理
  • 一种用于知识图嵌入训练的自负抽样技术
  • 所有现有基准数据集的最新结果

软件

  • LINE: https://github.com/tangjianpku/LINE
  • LargeVis :https://github.com/lferry007/LargeVis
    (C++&Python)
  • RotatE :https://github.com/DeepGraphLearning/
    KnowledgeGraphEmbedding

一种用于节点嵌入的高性能的CPU-GPU混合系统(2019)

  • 通过算法和系统协同设计,设计了节点嵌入的具体系统:1.cpu:在线随机漫步生成 2.gpu:训练节点嵌入 3.cpu与gpu之间高效的协作策略
  • 比现有系统快50倍
  • 对于一个拥有一百万个节点的网络只需一分钟

summary

  • Node Representation Methods
    • LINE, DeepWalk, node2vec
  • Graph and High-dimensional Data Visualization
    • LargeVis
  • Knowledge Graph Embedding
    • RotatE
  • A High-performance Node Representation System
在数据结构中,结点(Node)是指数据元素的逻辑结构中的基本单位。每个结点通常由两部分组成:数据域和指针域。数据域用于存储数据元素的信息,而指针域用于指向与之相关的其他结点,从而构成一个复杂的结构。 结点的数据类型定义一般会包含以下几个要素: 1. 数据域:存储该结点特定类型的数据。这些数据可以是基本数据类型(如int、char、float等),也可以是复杂的结构体或对象。 2. 指针域:包含指向其他结点的指针。对于不同的数据结构,指针域的数量和类型会有所不同。例如,在链表中,每个结点通常有一个指针指向下一个结点;在二叉树中,每个结点可能有两个指针,分别指向左子结点和右子结点。 3. 结点类型标识:为了区分不同类型的结点,在某些高级数据结构中,结点可能会包含一个类型标识字段,用于表明该结点所属的子类型。 4. 结点操作函数:一些数据结构的结点定义可能还包含用于操作结点的方法或函数,比如在链表中添加或删除相邻结点的函数。 举一个简单的例子,假设我们定义一个链表中的结点类型,它可能看起来像这样: ```c typedef struct Node { int data; // 数据域,用于存储数据元素的值 struct Node *next; // 指针域,用于指向下一个结点 } Node; ``` 在这个例子中,`Node` 结构体定义了一个链表结点,包含一个 `int` 类型的数据域 `data` 和一个指向同类型结点的指针域 `next`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值