想象你接手了一所大学的智慧校园项目。学校里有学生、老师、课程、教室,他们之间既有“选课”“任教”“上课地点”这样的正式关系,也有“同桌”“同事”这类普通社交。如果只画一张“谁认识谁”的朋友关系图,就会丢失大量信息;而把每种角色、每种关系都画进同一张图,你就得到了一张“异构图”——由多种节点和多种边组成的关系网络。普通的图神经网络擅长处理只有一种节点、一种边的“同构图”,好比只会管理一个班级的班主任;而异构图网络更像一位校长,要同时协调学生、老师、课程、教室四类角色,还要从“学生选课、老师授课”这样的关系链中挖掘深层语义。本文就用这座大学校园作向导,带你认识异构图网络的表示方法、元路径设计、类型特定的特征变换,以及 R-GCN、HAN、HGT 等经典模型。
学习异构图网络,能让你在知识图谱、推荐系统、风控等真实业务中构建更完整的图模型,是图算法工程师从“能跑通 GCN”迈向“能解决多关系问题”的关键一步。
可视化演示
动态展示随机森林中多棵决策树独立预测后通过多数投票集成最终结果的过程,直观呈现Bagging思想和集成学习降低方差的核心原理。
本节配有交互动效(进入视口后自动加载,约 3KB)。
随机森林 - Bagging集成多数投票 每棵树独立训练于自助采样数据集 多数投票:最终预测=argmax票数 f=mode(h) 集成降低方差
异构图基础
校园项目的第一次会议上,你面前摆着两张图。第一张只记录了学生之间的“朋友”关系,所有的点都是学生,所有的线都叫“朋友”——这就是同构图,简单但信息单薄。第二张把学生、老师、课程、教室都画成点,把“选课”“任教”“上课地点”都画成线,每个点和每条线都自带类型标签——这就是异构图。标签一多,一张平平无奇的关系网立刻变成了信息丰富的校园全景图。
用数学语言来定义,异构图是一张“带类型识别”的图。它比普通的图多出两个映射函数:节点类型映射 φ 把每个节点归入某个类型集合,边类型映射 ψ 把每条边归入某个关系集合。这两个函数,相当于给校园里的每个角色和每种关系发了一张身份标签。同样是邻居节点,学生通过“选课”找到的邻居,和课程通过“任教”找到的邻居,含义完全不同。
现实中,异构图的例子俯拾皆是。学术网络中,论文、作者、机构、会议是四种不同类型的节点,“撰写”“发表”“任职”是不同类型的边;知识图谱中,实体和关系的类型就更多了。判断一张图是不是异构图,标准很简单:只要节点或边的类型标签多于一种,它就是异构图。这个标准虽然简单,却是后续一切设计的前提。
回到校园项目,校长的第一步永远是“建花名册”:把每个角色归好类,把每种关系命好名。只有先完成这步分类,后面才能谈得上表示、元路径和聚合——异构图的一切智慧,都始于这张贴满标签的地图。
- 图的骨架$\mathcal{V}$ 是所有节点的集合,$\mathcal{E}$ 是所有边的集合,它们构成异构图的基本骨架。
- 节点类型映射$\phi$ 把每个节点映射到它所属的类型集合 $\mathcal{A}$,例如“学生”“老师”。
- 边类型映射$\psi$ 把每条边映射到关系集合 $\mathcal{R}$,例如“选课”“任教”。
异构图表示
花名册建好后,接下来要解决一个实际问题:怎么把这张多角色、多关系的校园关系网存进计算机?同构图只需一张邻接矩阵;而异构图就像学校有多个部门,教务处一份选课表,人事处一份授课表,后勤处一份教室安排表——每种关系,都得单独建一张表。
这就是邻接矩阵扩展的思想:不再用一张邻接矩阵描述整张图,而是为每个关系类型 r 各准备一张邻接矩阵 A_r。若存在 (u, r, v) 这条边,A_r 的第 u 行第 v 列就记为 1,否则记为 0。这些矩阵合在一起,就是异构图在计算机中的完整骨架;节点自身的属性特征(学生的成绩、老师的职称、课程的学分)则按类型分别存储,与之相互配套。
另一种常见表示是关系三元组。每条边写作 (u, r, v),分别代表起点、关系、终点;在知识图谱领域,它有个更响亮的名字——(头实体,关系,尾实体)。三元组表示与邻接矩阵族本质等价,但更贴近自然语言,方便存储和查询。把邻接矩阵族和三元组结合起来看,异构图的存储方案就齐了。
教务处、人事处、后勤处的三张表,各管各的关系,互不混淆。异构图表示的秘诀也正在于此:宁可多建几张表,也绝不把不同语义的关系揉在一起。
- 关系矩阵族为每个关系 r 建立一张方阵,所有方阵组成集合 $\mathcal{M}$。
- 连通判定$A_r[u,v]$ 取 1 当且仅当存在从 u 出发、经关系 r 指向 v 的边。
- 三元组展开每条边都可用(起点、关系、终点)的三元组唯一描述。
元路径机制
现在校园数据已经存好了,但校长提出了一个新问题:想找到“教过某个学生的那些老师”,或者“和某位老师有共同选课的学生”。这类问题没法靠单条边回答,必须沿着关系链走。这正是元路径的用武之地——它像一条从宿舍出发、途经图书馆、最终抵达老师办公室的有意义路线。
元路径的定义很简洁:它是一条由节点类型和关系交替组成的路径,写作 $T_1 \xrightarrow{R_1} T_2 \xrightarrow{R_2} \cdots \xrightarrow{R_l} T_{l+1}$。以“学生-选课-课程-任教-老师”为例,它表达了一个完整语义:学生选了一门课,这门课由某位老师教。元路径的价值在于,它把多步关系折叠成一种可被模型利用的复合语义。
设计元路径时有两个要点。第一,路径必须承载明确语义,长度不宜过长,2 到 3 步通常最实用——路径越长,语义越稀薄,噪声邻居越多。第二,元路径往往成对出现,比如学术网络中经典的 APA(作者-论文-作者,寻找合著者)与 APV(作者-论文-会议,寻找同会议发表者)。不同的元路径,就像从不同角度观察同一个校园。
校长很快学会了这个工具:想找科研伙伴就走“作者-论文-作者”,想给学生推荐课程就走“学生-选课-课程-任教-老师”。每条元路径都是一条精心设计的校内路线,路线的终点,就是某个业务问题的答案。
- 节点类型序列路径上依次经过的节点类型,比如学生、课程、老师。
- 关系连接符相邻两个类型之间由一种关系连接,比如“选课”“任教”。
- 整条路径类型与关系从起点交替到终点,构成完整的元路径表达式。
类型特征变换
数据类型就绪、语义路径也设计好了,但模型还面临一个尴尬的问题:学生的特征可能是“成绩、出勤、兴趣”,老师的特征是“职称、工龄、方向”,课程的特征是“难度、学分”。三种特征的描述维度都不一样,就像学生用学号、老师用工号、课程用课号,谁也听不懂谁。
同构图中,所有节点共享同一个特征变换矩阵 W,因为大家的特征空间相同。而异构图必须“因类施策”:为每种节点类型 φ(v) 准备一个专属的投影矩阵 $W_{\phi(v)}$,把该类型的原始特征 $x_v$ 映射到一个统一的特征空间。这一操作称为类型特定的特征变换。
变换之后,所有节点都变成了相同维度的向量,可以进同一个聚合层比较、求和、加权。需要注意的是,这里的矩阵数量会随类型数线性增长,因此工程上常采用参数共享或基分解来控制规模——比如让相近类型共享部分参数,就像学校给不同年级设计校服,款式不同但版型共用一个模板。
翻译工作做完后,学生、老师、课程终于能坐进同一间会议室,用同一种语言沟通。类型特定的特征变换,就是异构图模型发给全校师生的一本统一字典。
- 原始特征节点 v 的特征向量 $x_v$ 位于它所属类型自己的空间中。
- 专属矩阵$W_{\phi(v)}$ 是按节点类型挑选出的投影矩阵,把输入维度变为统一维度。
- 统一输出矩阵乘特征,得到统一维度的表示。
层次聚合
特征统一后,聚合就要登场了。但校园里可不止一条语义链:推荐课程要看“学生-选课-课程”,评估老师要看“课程-任教-老师”,两条链各有各的道理。头脑清醒的校长决定分层开会:先在每条语义链内部组织讨论,再把各组的结论拿到全校大会上综合——这就是层次聚合。
层次聚合的第一层是节点级聚合:给定一条元路径 $\Phi$,把该路径上的邻居集合 $\mathcal{N}_v^{\Phi}$ 加权求和。权重由注意力机制自动学习,重要的邻居获得更大的系数。第二层是语义级聚合:把多条元路径各自得到的表示再次加权融合,权重同样由注意力学习。两层一组合,模型既看清了局部,也兼顾了全局。
HAN 是这一思想的代表作。它先用注意力在每条元路径上聚合邻居,得到“某个视角下的节点表示”,再用语义级注意力把多个视角融合成最终表示。相比无脑平均,注意力能让模型自己决定“谁更重要”,好比讨论时由老师判断每位同学发言的分量。工程落地时还会对邻居做采样,比如每种关系固定抽 5 个邻居,控制显存与计算量。
校长满意地点点头:教研组先内部统一意见,全校大会再做决策,每一层的讨论都有明确的议题与权重。层次聚合,就是异构图模型里那套层层递进的议事流程。
- 路径邻居集合$\mathcal{N}_v^{\Phi}$ 是节点 v 沿元路径 $\Phi$ 能够到达的邻居。
- 节点级注意力$\alpha$ 通过注意力函数计算并归一化,衡量邻居 u 对 v 的重要性。
- 路径内部聚合对路径邻居做加权求和并套上激活函数。
- 语义级融合$\beta$ 是各条元路径的注意力权重,加权融合成最终表示。
经典模型
理解了层次聚合,再来看三位著名“教练”就轻松多了。三位教练都带校园队,但执教风格迥异。第一位教练 R-GCN 信奉“按关系分班”;第二位 HAN 擅长“按语义路线分层训练”;第三位 HGT 则坚信“哪怕是同一条边,也要根据头尾节点类型动态调整考察方式”。
R-GCN 把 GCN 推广到多关系图:每种关系 r 单独使用一个权重矩阵 $W_r$,聚合时对各类关系的邻居分别变换再求和,并除以归一化系数 c 防止高度数节点主导;同时保留自环项 $W_0$ 防止自身信息丢失。HAN 的本质是用两层注意力完成元路径内、元路径间的聚合。HGT 则更进一步,把 Transformer 的注意力机制拓展到异构图,注意力权重由头节点类型、尾节点类型和边类型三者共同决定。
三者的共同点是不再把类型差异当作噪声,而是当作必须尊重的先验信息。选择哪一个取决于业务:关系类型不多但语义清晰时,R-GCN 简单可靠;元路径容易设计时,HAN 效果出众;关系复杂、类型极多的海量图,HGT 的表达力更强,代价是参数量和训练成本更高。
三位教练风格各异,但入职培训手册的第一条都是同一句话:“永远不要无视类型差异。” R-GCN 分关系、HAN 分层级、HGT 调注意力——殊途同归,都是在异构图上当一位合格的校长。
- 关系邻居集合$\mathcal{N}_v^r$ 是经关系 r 指向 v 的邻居集合。
- 关系专属权重$W_r$ 是关系 r 自己的变换矩阵,体现“分班教学”。
- 归一化系数$1/c$ 与邻居数量成反比,避免大度节点主导聚合。
- 自环信息$W_0$ 处理节点自身的表示,防止信息在多层传递中丢失。
实践应用
理论学习完毕,校长终于把方案落到校园的日常运营中。三件事最紧迫:给学生推荐合适的选修课,给科研处梳理知识资产,给新入学的学生匹配学习伙伴。这三件事,恰好对应异构图的三大经典战场:推荐系统、知识图谱与学术分析。
推荐系统里,用户、商品、品牌、类目被建模成异构图,点击、购买、属于、上架是多样的边。传统协同过滤在冷启动时束手无策,而异构图可以通过元路径“用户-点击-商品-属于-品牌”把新商品与老品牌关联起来,缓解冷启动。知识图谱本身就是异构图,R-GCN 等模型常被用于链接预测——推断不完整三元组,比如补全“某公司的法定代表人是谁”。学术网络分析则用“作者-论文-会议”等元路径挖掘合著关系、推荐审稿人。
这些应用的共同套路是三步走:先把多关系数据组织成异构图,再设计有业务含义的元路径,最后用类型特定变换加层次聚合学出节点表示。只要多关系数据存在,异构图就是比“压平为同构图”更诚实的选择。
从学生会到校长办,从选课推荐到科研合作,异构图网络已经成为校园里最忙碌的一支队伍。它的工作方式始终如一:尊重每一个角色,珍惜每一条关系,在类型与关系的交错中,发现单一视角永远看不见的联系。
- 路径表示u、v 分别沿元路径 $\mathcal{P}$ 得到各自的嵌入向量。
- 语义内积内积衡量两者在“用户-点击-商品-属于-品牌”这条语义下的契合度。
- 概率输出$\sigma$ 把契合度映射为推荐概率。
AI 应用场景
推荐系统:多行为建模与冷启动缓解
阶段:特征工程与模型训练
解决的问题:传统协同过滤只建模“用户-商品”二元交互,新用户和新商品几乎没有交互记录,冷启动效果差。异构图将品牌、类目、属性等高阶信息作为节点类型,用点击、购买、收藏等多关系边建模,配合元路径在稀疏交互之间搭桥,让冷门商品也能获得可学习的表示。
具体案例:某电商平台将用户、商品、品牌、类目组成异构图,用 HAN 学习嵌入。用户只浏览过某品牌的一台空气炸锅,模型通过“用户-点击-商品-属于-品牌”元路径,召回该品牌的全系小家电,点击率提升约 18%。
知识图谱:关系补全与风控
阶段:模型推理与链路分析
解决的问题:知识图谱经常存在缺失的关系(漏掉的“任职”“投资”等三元组),直接查询难以发现。R-GCN 等异构图模型通过邻居聚合推断缺失关系,把“推理”变成“预测”,为图谱补全与风控刻画提供可行方案。
具体案例:某金融风控团队构建“用户-企业-法人-账户”异构图,边类型包括控股、任职、转账。R-GCN 学习嵌入后,链路预测发现某空壳企业通过多层“任职”关系与控制人关联,成功识别出隐蔽的异常交易团伙。
学术网络:合著预测与审稿人推荐
阶段:图挖掘与下游任务
解决的问题:学术库中作者、论文、会议、机构的关系天然异构,统计方法只能数共现次数,无法建模深层语义。异构图用元路径“作者-论文-作者”表征合著语义,“作者-论文-会议”表征研究方向,再学习节点嵌入,实现更高质量的链接预测。
具体案例:在 DBLP 数据集上,研究者用 HAN 学习作者嵌入,预测两位作者未来是否合作,AUC 比同构 GCN 基线高约 6 个百分点;同一套表示还能用于推荐匹配审稿人。
Python 演示
import numpy as np # 迷你学术异构图: 0-2号学生, 3-4号课程, 5号老师node_type = {0: "student", 1: "student", 2: "student", 3: "course", 4: "course", 5: "teacher"} # 边以三元组(起点, 终点, 关系)存储, 关系有 enroll 与 teach 两类edges = [(0, 3, "enroll"), (1, 3, "enroll"), (1, 4, "enroll"), (2, 4, "enroll"), (3, 5, "teach"), (4, 5, "teach")] in_dim = {"student": 4, "course": 5, "teacher": 6}out_dim = 8rng = np.random.default_rng(42) # 每种节点类型有自己的特征维度feature = {n: rng.normal(size=in_dim[node_type[n]]) for n in node_type} # 类型特定的特征变换: 每种类型一张投影矩阵, 统一到 out_dim 维project_w = {t: rng.normal(size=(out_dim, in_dim[t])) for t in in_dim} def project(nid): """按节点类型挑选矩阵, 把特征映射到统一空间""" return project_w[node_type[nid]] @ feature[nid] def in_neighbors(nid, rel): """找通过关系 rel 指向 nid 的邻居""" return [u for (u, v, r) in edges if v == nid and r == rel] def aggregate(nid, hop=1): """关系感知聚合: 按关系分别收集消息, 再均值融合""" h = project(nid) for _ in range(hop): msgs = [project(u) for rel in ("enroll", "teach") for u in in_neighbors(nid, rel)] if msgs: h = h + 0.5 * np.mean(msgs, axis=0) return h def meta_path_semantics(sid, teacher=5): """元路径: 学生-选课-课程-任教-老师""" courses = [v for (u, v, r) in edges if u == sid and r == "enroll"] if not courses: return None teachers = {v for (u, v, r) in edges if u in courses and r == "teach"} if teacher not in teachers: return None return np.mean([project(c) for c in courses], axis=0) + project(teacher) if __name__ == "__main__": print("学生0投影后维度:", project(0).shape) print("学生0聚合向量:", np.round(aggregate(0), 3)) e0 = meta_path_semantics(0) e1 = meta_path_semantics(2) if e0 is not None and e1 is not None: sim = float(e0 @ e1) / (np.linalg.norm(e0) * np.linalg.norm(e1)) print("学生0与学生2的老师语义余弦相似度:", round(sim, 4))
feature = {n: rng.normal(size=in_dim[node_type[n]]) for n in node_type}每种节点类型拥有不同维度的特征,模拟“学号、工号、课号”各不相同的档案。project_w = {t: rng.normal(size=(out_dim, in_dim[t])) for t in in_dim}为每种类型准备专属投影矩阵,是类型特定特征变换的核心。return project_w[node_type[nid]] @ feature[nid]按节点类型挑选矩阵,把原始特征映射到统一维度。msgs = [project(u) for rel in ("enroll", "teach") for u in in_neighbors(nid, rel)]分别沿不同关系收集邻居消息,避免语义混淆。h = h + 0.5 * np.mean(msgs, axis=0)对关系邻居的消息求均值并做残差更新,是简化的关系感知聚合。courses = [v for (u, v, r) in edges if u == sid and r == "enroll"]元路径第一步:找出学生选过的课程。teachers = {v for (u, v, r) in edges if u in courses and r == "teach"}元路径第二步:沿“任教”边到达老师。sim = float(e0 @ e1) / (np.linalg.norm(e0) * np.linalg.norm(e1))用余弦相似度比较两位学生与老师的语义契合度。
常见误区
误区既然都是节点,把学生、老师、课程的特征拼接一下,丢进 GCN 里训练不就行了?类型差异反正能用特征数值区分出来。
正解异构图的“异”在结构与语义层面:不同类型节点的特征原本就在不同的空间,共享参数会让模型学不到类型差异。就像学校开大会,学生按学号、老师按工号、课程按课号点名,格式都不统一,没法直接比较。必须用类型特定的特征变换先对齐到统一空间。
为何常见:GCN 教程里基本都是同构图,初学者误以为所有图结构都一样,忽略了类型映射 φ 和 ψ 携带的关键信息。
误区反正都是邻居,把选课、任教、上课地点全揉进一张邻接矩阵,邻居多了信息自然就全了。
正解合并后模型无法区分“选修”和“任教”,语义被彻底打乱。就像把“学生-课程”选课名单和“老师-课程”授课表混成一张纸,你分不清谁是学生谁是老师。正确做法是关系分解:每种关系 r 对应一张邻接矩阵 $A_r$,让模型按关系分别聚合。
为何常见:同构图里只有一种关系,初学者习惯性地把异构图“压平”成同构图来处理。
误区元路径越长,跨越的节点越多,捕获的语义越丰富,那就把整张图能连的都连起来。
正解元路径的价值在于“有明确语义的复合关系”,长度过长会稀释语义,还引入大量噪声邻居。就像“学生→选课→课程→任教→老师”有清晰意义;若再加几步“→上课→教室→保洁→……”,含义就模糊了。实践中常用 2-3 步的短元路径。
为何常见:直觉上觉得“越多越好”,忽略了元路径是人工设计的先验语义,而非越深越好的通用结构。
误区类型特定特征变换不就是给每种类型加一个矩阵吗?矩阵越多越准,直接给每种边也配一个独立矩阵。
正解参数会随类型数量急剧膨胀,小数据集上极易过拟合。R-GCN 用归一化系数和基分解共享参数来控制复杂度;工程中也常按类型分组共享。就像学校不会给每个班配一套完全独立的校规,而是“年级共享 + 班级微调”。参数共享是异构图工程化的关键权衡。
为何常见:只看到公式里有 $W_{\phi(v)}$,以为矩阵独立越多越好,忽略了参数效率与泛化能力。
面试题
Q1. 关于异构图,下列说法正确的是?
- A.图中所有节点类型必须相同
- B.图中节点或边存在多种类型← 正确答案
- C.异构图只能包含一种边类型
- D.异构图与同构图没有任何区别
答案:B。异构图的关键特征是节点或边存在多种类型,选项 B 正确。A 和 C 描述的是同构图或更受限的图,D 完全错误。就像校园图里学生、老师、课程并存,类型标签大于一种,才算异构图。
Q2. 异构图 G=(V, E, φ, ψ) 中,φ 的作用是什么?
- A.将节点映射到节点类型集合← 正确答案
- B.将边映射到边类型集合
- C.将节点投影到低维向量空间
- D.将边映射到新的节点集合
答案:A。φ: V→A 是节点类型映射,给每个节点发“角色身份证”;ψ: E→R 才是边类型映射。C、D 描述的是特征投影或类型混淆,都不是 φ 的定义。
Q3. 元路径“学生-选课-课程-任教-老师”表达的核心语义是什么?
- A.学生和老师住在同一个宿舍
- B.学生选了某位老师教的课← 正确答案
- C.老师给学生布置了作业
- D.学生帮老师管理了课程
答案:B。元路径把“学生选课、老师任教”两步折叠成“教过这个学生的老师”这一复合语义。B 准确描述了这条路径。A、C、D 与路径中的关系和语义不匹配。
Q4. 关于类型特定的特征变换,下列说法正确的是?
- A.不同节点类型特征维度不同← 正确答案
- B.需要对齐到统一特征空间← 正确答案
- C.每类节点学习专属映射矩阵← 正确答案
- D.所有类型共享同一个权重矩阵
答案:ABC。异构图中学生、老师、课程的特征维度各异(A),所以要为每类节点学专属矩阵(C),把特征映射到统一空间(B)。D 是同构图的做法,违背了“因类施策”的思想,故错误。
Q5. 元路径“作者-论文-会议”的字母简写是哪一个?
- A.APA 表示作者-论文-作者
- B.APV 表示作者-论文-会议← 正确答案
- C.PVP 表示论文-会议-论文
- D.AVA 表示作者-会议-作者
答案:B。APV 依次取 Author、Paper、Venue 的首字母,对应“作者-论文-会议”。APA 是“作者-论文-作者”,PVP、AVA 是别的路径,都不匹配题干。
Q6. 邻接矩阵扩展表示异构图时,邻接矩阵的数量取决于什么?
- A.与边类型的数量保持一致← 正确答案
- B.与节点类型的数量相同
- C.只由节点总数决定
- D.始终只有一张大矩阵
答案:A。每种关系类型 r 对应一张邻接矩阵 $A_r$,所以矩阵数等于边类型数。就像教务处、人事处各有一张表。B、C、D 都与“按关系建表”的原则不符。
Q7. R-GCN 处理多关系边的核心做法是什么?
- A.每种关系使用独立的权重矩阵← 正确答案
- B.所有关系共享同一个权重矩阵
- C.完全忽略边类型的信息
- D.把多关系图拆成多个独立图
答案:A。R-GCN 为每种关系 r 配备专属矩阵 $W_r$,再按关系分别聚合,体现“分班教学”。B、C 丢弃了关系差异,D 只是分解预处理而非模型核心。
Q8. 关于 HAN 的层次聚合机制,下列说法正确的是?
- A.节点级聚合在每条元路径内进行← 正确答案
- B.语义级聚合融合多条元路径结果← 正确答案
- C.所有元路径的权重必须完全相同
- D.注意力权重由模型自动学习得到← 正确答案
答案:ABD。HAN 第一层在每条元路径内做节点级注意力聚合(A),第二层用语义级注意力融合各路径(B),两层权重都由注意力自动学习(D)。C 与“不同路径重要度不同”相悖,错误。
Q9. 为什么同构图模型不能直接处理异构图?
- A.因为异构图的规模一定更大
- B.它忽略了节点和边的类型差异← 正确答案
- C.异构图的特征维度必然更高
- D.同构图无法使用卷积操作
答案:B。同构图模型(如 GCN)假设所有节点、边同质,共享参数,无法利用类型标签。就像班主任只会用“学生”视角看世界,看不懂课程与老师的关系。A、C、D 都不是本质原因。
Q10. 异构图网络的典型应用有哪些?
- A.推荐系统中的多行为交互建模← 正确答案
- B.知识图谱中的实体关系补全← 正确答案
- C.学术网络中的合著者挖掘← 正确答案
- D.单张图片的像素分类任务
答案:ABC。推荐系统把用户、商品、品牌建成异构图(A),知识图谱本身由多关系三元组构成(B),学术网络用元路径挖掘合著关系(C)。D 是图像领域的网格任务,与图结构无关。