想象你翻出一本落满灰尘的家族相册。相册里贴着几十张泛黄的照片,每张照片下还用手写标签标着关系:“王大明是王小明他爸”“王小明是王小美他哥”。可惜相册被虫蛀了,不少照片被撕掉、标签也模糊了——你只知道“王大明”和某张照片有关系,却不知道具体是什么关系。要还原这本相册的全貌,只能靠已有的照片和标签去推断缺失的部分。 知识图谱补全(Knowledge Graph Completion)做的正是这件事:把现实世界里的“照片”称为实体(entity),把“标签”称为关系(relation),一张完整的“照片—标签—照片”组合叫做三元组(triple)。当三元组缺失了一角——比如缺了尾实体、头实体甚至整条关系——补全算法就像一位细心的家谱整理员,借助图中已有的大量三元组,推算出最可能被补上的那一块。无论是社交软件的好友推荐、药物研发中的新靶点发现,还是智能问答中的关系推理,背后都有这位“整理员”的身影。
学会知识图谱补全,你将掌握链接预测、嵌入表示、负采样与评估指标等一整套“配方”,能够为知识库自动补缺、挖掘新关系,是知识工程与推荐系统方向面试与实战的硬核技能。
目录
可视化演示
展示知识图谱三元组补全、TransE链接预测嵌入空间、负采样训练数据构造,理解缺失关系预测的核心机制。
本节配有交互动效(进入视口后自动加载,约 3KB)。
知识图谱三元组补全 (头实体,关系,尾实体)三元组存储知识 缺失尾实体通过链接预测补全 (h, r, ?) → predict t 自动发现和填充缺失关联
相册里的照片、标签与关系卡片(图谱基础知识)
翻开那本家族相册,每一张照片上是一个活生生的人——在知识图谱的世界里,这些人叫实体(Entity),比如“王大明”“王小明”“北京”;照片之间的手写标签,比如“父子”“居住于”“出生于”,叫作关系(Relation)。一张完整的“照片—标签—照片”组合(“王大明—父子—王小明”)就是三元组(Triple),它是相册最小的装订单元,也是知识图谱最基本的存储单位。
机器并不认识照片里的人脸,它认识的是关系卡片集合。我们把相册中所有三元组装订成一本大书,记作图谱 \(G\)。补全算法的全部素材都来自这里面:哪些人已经通过什么关系连在一起、哪些关系尚未浮现。你可以把每个三元组想成一张“被虫蛀过的卡片”,卡片上可能缺失了左边的人、右边的标签,或最右边的照片——补全任务的第一步,就是先厘清这本相册的“馆藏清单”。
相册里的每一张卡片都不是孤岛。家人之间的血缘像蛛网一样交织,知识图谱同样如此:一个实体往往通过多条关系卡片与许多其他实体相连。理解这份“馆藏清单”,是后续一切推断的地基。
- 集合符号 G整个知识图谱就是一张装订好的“关系卡片集”,用花括号把所有卡片框在一起。
- 三元组 (h, r, t)一张完整的关系卡片由三部分组成,顺序固定:头实体(照片 A)、关系(标签)、尾实体(照片 B)。
- 集合约束条件头实体 h 和尾实体 t 必须在实体集合 E 中,关系 r 必须在关系集合 R 中,相当于“相册里的人名都得在人物名单里找得到”。
找出缺失的关系卡片(链路预测任务)
相册翻到最后一页,你发现一行潦草的批注:“王大明的父亲是谁?待考证。”这正是图谱补全的核心场景:链路预测(Link Prediction)。某张关系卡片缺失了一角,可能是缺头实体、缺尾实体,甚至整根关系标签都模糊了。算法要做的,是看着其他完好的卡片,推测这个“待考证”的位置最可能填上谁。
链路预测任务通常分三类:尾实体预测(给定头和关系,猜尾巴)、头实体预测(给定关系和尾,猜头)、关系预测(给定头尾,猜关系)。其中尾实体预测最常见,因为它在推荐系统里可以直接转化为“给用户猜下一个喜欢的商品”。算法并不直接输出一个答案,而是给候选实体逐一打分排序,把最像的一个推到榜首。
补全的价值不止于修复相册,更在于“从旧关系中发现新关系”。比如由“王大明是王小明父亲”与“王小明是王小美哥哥”,可以推断“王大明也是王小美的父亲”——这些新推断会源源不断地丰富图谱,让它从一本残破相册升级为完整的家族史。
- 最优答案 t\*带星号的上标表示“我们最终选中的那个人”,就像家谱整理员最终落笔填上的名字。
- arg max 的含义“从所有候选人里挑出分数最高的那一位”——不是输出分数本身,而是输出分数最高者的名字。
- 打分函数 Score(h, r, t')对任意一个候选实体 t',用打分函数衡量它与“头实体 + 关系”的契合程度,得分越高越像正确答案。
把人物摆进“家庭坐标系”(嵌入表示方法)
现在问题来了:机器如何比较“王大明—父子—王小明”和“王大明—父子—李四”哪个更像真的?一个巧妙的思路是:像摆棋子一样,把每个实体映射到向量空间中的一个坐标点,每个关系映射成一个“移动向量”。这就是嵌入表示(Embedding)——用一串数字(向量)给每个实体和关系“定位”。
TransE 是这类方法中最简单也最经典的一个。它的核心假设只有一句话:头实体向量加上关系向量,应该约等于尾实体向量。翻译成家族相册的语言:从“王大明”的坐标出发,沿着“父子关系”这个固定的方向迈出一步,走到的位置应该恰好是“王小明”的坐标。就像你在城市里从家(h)出发,沿着“去学校”的方向(r)走固定的一段路,终点(t)就该是学校。
这套“家庭坐标系”有个妙处:一旦所有实体和关系都被摆到合适的位置,相似的人会自然聚在一起,相似的关系会共享方向。于是,补齐相册缺失卡片这个难题,就转化成一道直觉的几何题——走完关系向量那一步,看哪个棋子落在终点附近。
- 粗体符号 h, r, t带粗体的变量表示“向量”,也就是一串坐标数字,比如王大明在坐标系里的位置 (3, 5)。
- 加法运算向量加法就像“按方向走一段路”,从 h 的位置出发,沿着 r 的方向和长度移动。
- 约等于号理想情况下两者完全相等,但由于现实关系复杂,只要求非常接近即可。
用尺子量关系的可信度(相似度评分)
有了坐标系,还需要一把“尺子”来精确测量“接近”的程度。这把尺子就是打分函数(Scoring Function)。TransE 的打分函数写为 \(f_r(h, t)\),它计算的是“从头实体出发、沿关系向量走一步后”,偏离尾实体坐标有多远。偏离越少,得分越低,这条三元组就越可信——注意,这里的分数是“距离”,距离越小越好。
尺子有两种常见刻度:L1 距离(曼哈顿距离)把坐标差的绝对值相加,像在棋盘上只能横竖走;L2 距离(欧氏距离)计算直线距离,像两点间飞行的路径。无论用哪种,本质都是衡量“平移后是否精准落地”。预测时,把候选实体的坐标逐一放入公式求距离,按距离从小到大排序,排在最前面的就是最可能的答案。
有了尺子,原本见仁见智的“像不像亲戚”变成了精确的数值比较。整理员只需量出所有候选人与“平移落点”的距离,最短的那个落笔填上即可。打分函数是整个补全模型的心脏,后面的训练、评估、预测,全都围绕这把尺子展开。
- 打分函数 f_r(h, t)给定头实体 h 和尾实体 t,在关系 r 下算出“可信度分数”。
- 表达式 h + r − t先做向量加法得到“预测落点”,再减去尾实体坐标,得到“偏离向量”。
- 双竖线范数把偏离向量压缩成一个非负数值,表示偏离的总量;下标 L1 或 L2 表示用哪种方式计算这个总量。
别让模型“乱认亲戚”(负采样策略)
如果只给模型看真实的家族关系,它会很快学会懒惰的套路:把所有可能的组合都判成“一家人”。就像一个人只见过“父子”的正面例子,从没见过“陌生人”的例子,会把路边的陌生人当作亲爹。因此需要负采样(Negative Sampling)——主动制造一些“明显不是亲戚”的假卡片,让模型学会说“不”。
最经典的负采样方法是均匀随机替换:随机挑一个真实三元组,把它的头实体或尾实体替换成实体集合中任意一个其他实体。“王大明—父子—王小明”是正例,把它换成“王大明—父子—李四”就成了负例。替换时注意避开原实体,否则会生成一个正例造成混淆。更高级的困难负例策略则故意选那些“看着很像、其实不是”的替换对象,强迫模型学得更精细。
负采样让人想起“相亲踩坑”的智慧:光看理想对象不够,还得见过各种不合适的人才能珍惜对的人。模型在正例与负例的反复对比中,渐渐学会把真亲戚的卡片贴得紧密,把假亲戚的卡片推得远远的。
- 条件概率符号竖线左边是生成的负例三元组,右边是原始正例——表示“在给定真实三元组的条件下,抽到某个假组合的概率”。
- 等号右侧 1/|E||E| 是实体集合的大小,例如相册中有 100 人,那么随机抽到某一个人的概率就是 1/100。
- 替换规则负例中的头尾实体至少有一个与正例不同,且替换后组合不能是图谱中已有的真实三元组。
如何验收补全的族谱(评估指标体系)
族谱补完了,怎么知道补得准不准?整理员必须接受“家庭会议”的检验。最常用的两类验收指标,都基于一个朴素的实验:把每个真实三元组中要预测的实体遮住,让模型对所有候选实体排序,看正确答案排在第几位。
MRR(Mean Reciprocal Rank,平均倒数排名) 是所有测试样本“正确排名倒数”的平均值。正确答案排第 1,记 1 分;排第 2,记 1/2 分;排第 5,记 1/5 分。分数越高越好,满分是 1。Hits@K 则统计“正确答案排进前 K 名”的占比,比如 Hits@10 的含义是:“猜 10 次至少有一次把真正亲戚列进前十”的比例。还有一个直白的老指标 MR(Mean Rank),直接计算平均排名位置,数值越小越好。
家庭会议上,光看一个指标容易偏信。MRR 看重整体排名质量,Hits@K 看重“是否进短名单”,MR 则对极端坏排名极为敏感。三者结合,才能全面判断这份族谱是真靠谱还是偶尔蒙对。
- 求和符号与 1/N把 N 条测试样本的结果加在一起再除以 N,这是“取平均”的数学写法。
- 排名倒数 1/rank_i第 i 条样本中正确答案的排名取倒数,排名越靠前,这个值越大。
- 整体含义MRR 关注“平均来看,正确答案排得有多靠前”;Hits@K 则关注“排进前 K 名的情况占多大比例”,两者搭配使用更全面。
从零到一搭建补全流水线(训练流程蓝图)
知道了原理与尺子,接下来就是整套流水线作业:把一本残缺相册训练成一位专业整理员。第一步是数据准备——把图谱中的三元组划分为训练集、验证集和测试集,训练集用于学习,验证集用于调参,测试集用于最终验收。第二步是负采样——为每个正例生成对应负例,组成训练对。第三步是定义损失函数,让模型明确“什么该学、什么该改”。
TransE 使用的损失叫铰链损失(Margin Loss):要求正例的距离至少比负例的距离小一个“安全间隔” \(\gamma\)。如果正例分数已经足够低、负例分数足够高,损失为零,模型不更新;否则按差距大小进行梯度修正。优化时用随机梯度下降,不断微调实体与关系向量,让正例的三元组距离变小、负例的距离变大,如同一遍遍向族谱整理员演示“这个对、那个错”,直到他形成肌肉记忆。
整套流水线就像办培训班:准备教材(数据)、布置反例(负采样)、设定及格线(margin)、反复测验(迭代优化)。当训练损失收敛,验证集指标不再上升,这份族谱补全系统就可以正式上岗了。
- 累计求和对训练集 S 中的每一条真实三元组都计算一次损失,全部加起来作为这一轮的总体损失。
- 括号内差值 \(\gamma + f_{pos} - f_{neg}\)正例距离加上安全间隔,再减去负例距离。若正例距离已经比负例小很多,整体会变成负数。
- max(0, ·) 截断负数统一按 0 处理,意思是“已经达标,不必再改”。铰链损失因此只惩罚不合格的样本。
补全的族谱能做什么事(实战应用场景)
学完补全技术,这本家族相册的价值远不止“寻亲”。第一个最典型的落地场景是社交平台的好友推荐:把用户看作实体,“关注”“好友”“同学”看作关系,图谱补全能推断出“你可能认识的人”——这正是朋友圈里“可能认识的人”背后的逻辑。第二个场景是药物研发:把蛋白质、药物、疾病都建模为实体,关系建模为“抑制”“治疗”“相互作用”,补全算法可以在海量已知药品关系中发现新靶点,加速候选药物筛选。
第三个场景是智能问答与搜索引擎:当用户问“朗朗的老师是谁”时,系统先确定头实体“朗朗”、关系“老师”,再用链接预测找出最可能的尾实体,然后组织成自然语言回答。无论哪个场景,补全问题的数学形式都统一为“给定部分条件,给候选排序,取 TopK”。
从好友推荐到新药发现,“补全族谱”的思想一以贯之:世界是无数实体与关系的网络,而空缺之处,正是知识与价值诞生的地方。谁能把缺失的关系填得又准又快,谁就掌握了从数据中挖掘新知识的钥匙。
- TopK 记号表示“返回前 K 名”的排名列表,K 是用户指定的数量,例如推荐 5 个好友就令 K=5。
- 投影符号 top-K在候选实体集合上按打分函数值排序,取出排名最高的 K 个。
- 排序依据 f_r(h, t')打分的标准依旧是平移距离——距离越小,越像真正的关联,越应该排进前 K。
AI 应用场景
社交平台:“可能认识的人”
阶段:链接预测与推荐排序
解决的问题:传统好友推荐依赖共同好友数或联系人导入,冷启动时效果差;利用图谱补全,把用户与兴趣、学校、公司等实体连成知识图谱,直接预测缺失的“好友”关系边,覆盖完全没交集但兴趣重合的用户。
具体案例:某社交 App 将 3 亿用户及其签到地点、点赞内容建模为图谱,训练 TransE 模型预测用户之间的“关注”关系,将好友推荐点击率提升了 23%。
药物研发:发现药物—靶点新关联
阶段:关系发现与候选排序
解决的问题:传统药物筛选需要做大量湿实验,成本极高;知识图谱补全可将药物、蛋白质、疾病、基因作为实体,将“抑制”“激活”“治疗”作为关系,用打分函数对药物—靶点缺失边进行候选排序,缩小实验范围。
具体案例:某生物医药团队构建包含 20 万实体的药物知识图谱,用负采样 + 嵌入方法补全出 500 条未被标注的“药物—靶点”候选关系,其中 30 条在文献中被后续验证。
智能问答:回答关系类问题
阶段:知识推理与查询补全
解决的问题:用户问“周杰伦的妻子是谁”这类关系问题时,传统问答需要图谱中恰好存在该三元组,一旦缺失就答不上来;利用链接预测,系统可在问答时动态推断缺失关系,并给出带置信度的答案。
具体案例:某电商客服机器人在商品属性图谱上做链接预测,对“这款手机支持无线充电吗”这类缺失三元组的问题,给出 Top3 候选答案与置信度,转人工率降低 18%。
Python 演示
import mathimport random def vec_add(a, b): return [x + y for x, y in zip(a, b)] def vec_sub(a, b): return [x - y for x, y in zip(a, b)] def vec_norm(v): return math.sqrt(sum(x * x for x in v)) def vec_normalize(v): n = vec_norm(v) if n < 1e-9: return v return [x / n for x in v] class TransE: """极简版 TransE: 用向量平移预测缺失的三元组关联.""" def __init__(self, entities, relations, dim=8, lr=0.02, margin=1.0): self.ent = {e: vec_normalize([random.gauss(0, 0.1) for _ in range(dim)]) for e in entities} self.rel = {r: vec_normalize([random.gauss(0, 0.1) for _ in range(dim)]) for r in relations} self.lr = lr self.margin = margin def score(self, h, r, t): """打分函数: ||h + r - t||^2, 越小越可信.""" diff = vec_sub(vec_add(self.ent[h], self.rel[r]), self.ent[t]) return sum(x * x for x in diff) def corrupt(self, h, r, t): """负采样: 随机替换头实体或尾实体, 制造假三元组.""" keys = list(self.ent.keys()) while True: if random.random() < 0.5: h_neg = random.choice(keys) if h_neg != h: return h_neg, r, t else: t_neg = random.choice(keys) if t_neg != t: return h, r, t_neg def train_step(self, triple): h, r, t = triple h_neg, r_neg, t_neg = self.corrupt(h, r, t) pos = self.score(h, r, t) neg = self.score(h_neg, r_neg, t_neg) loss = max(0.0, self.margin + pos - neg) if loss <= 0: return loss err = vec_sub(vec_add(self.ent[h], self.rel[r]), self.ent[t]) g = 2.0 * self.lr for key, s in ((h, 1), (t, -1)): self.ent[key] = [v - s * g * e for v, e in zip(self.ent[key], err)] self.rel[r] = [v - g * e for v, e in zip(self.rel[r], err)] for key in (h, t, r): self.ent[key] = vec_normalize(self.ent[key]) return loss def predict_tail(self, h, r, candidates, top_k=3): """给定头实体和关系, 返回最可能的尾实体候选列表.""" ranked = sorted(candidates, key=lambda t: self.score(h, r, t)) return ranked[:top_k] def main(): entities = ["Alice", "Bob", "Cathy", "Dan", "Eve", "Frank"] relations = ["Friend", "Parent", "Teacher"] triples = [ ("Alice", "Parent", "Bob"), ("Bob", "Friend", "Cathy"), ("Cathy", "Teacher", "Dan"), ("Dan", "Friend", "Eve"), ("Eve", "Parent", "Frank"), ] model = TransE(entities, relations, dim=6) for epoch in range(200): total = 0.0 random.shuffle(triples) for tr in triples: total += model.train_step(tr) if epoch % 40 == 0: print("epoch", epoch, "loss", round(total, 4)) candidates = [e for e in entities if e != "Alice"] print("Alice -> Friend -> ?") print(model.predict_tail("Alice", "Friend", candidates)) if __name__ == "__main__": main()
class TransE:定义图谱补全模型类,相当于给“整理族谱的实习生”建立工作手册。self.ent = {e: vec_normalize([random.gauss(0, 0.1) ...])}为每个实体随机初始化坐标向量,并做归一化防止向量模长失控。def score(self, h, r, t):打分函数,计算 h + r 与 t 的欧氏距离平方,距离越小越可信。def corrupt(self, h, r, t):负采样核心:等概率地随机替换头实体或尾实体,且保证替换后组合不会恰好是原三元组。loss = max(0.0, self.margin + pos - neg)铰链损失:正例距离加上安全间隔后如果仍比负例小,就无需更新。err = vec_sub(vec_add(self.ent[h], self.rel[r]), self.ent[t])计算平移误差,作为梯度更新的方向依据。def predict_tail(self, h, r, candidates, top_k=3):推理阶段按分数对所有候选尾实体排序,返回最可能的 TopK。
常见误区
误区我总觉得负例越多模型学得越好,所以把每个正例配上几十个负例,结果训练变得又慢又差。
正解负例太多会让训练集严重失衡,模型把大量精力用于区分“明显错误的陌生人”,反而忽略了精细关系的建模。就像补族谱时,如果整天被灌输“街上的路人不是亲戚”,你会变得草木皆兵,连真正亲戚的特征都记不住。负采样比例通常控制在每个正例 1~5 个负例,并配合验证集调参。
为何常见:“见多看广”的生活经验让人下意识认为数据越多越准,忽略了负样本质量与训练成本的平衡。
误区TransE 这么简单好用,那 1 对 N、N 对 1 的复杂关系它也能轻松搞定吧。
正解TransE 假设 h + r ≈ t,当同一头实体 + 同一关系对应多个尾实体时(如“王小明—老师—张三”和“王小明—老师—李四”),一个落点难以同时贴近多个真实坐标,向量会被“拉扯”得面目全非。这时候需要更复杂的模型如 TransH、TransR 来处理超平面投影。补全不是“一招鲜”,要根据关系模式选模型。
为何常见:初学者往往先学最简单的模型,又缺乏对关系模式多样性的感知,容易把模型的适用范围无限放大。
误区模型在测试集上 MRR 到了 0.9,我觉得补全效果已经很完美,可以放心上线了。
正解MRR 反映的是“平均排名倒数”,一个模型可能在大部分样本上排名中上,却对少数关系类型完全失效。真正验收要同时看 Hits@1(首次命中率)、Hits@10 和分关系类型的细粒度指标。就像族谱整体补得不错,但“远房亲戚”全补错了,平均分掩盖了结构性问题。
为何常见:单一数字指标具有强大的心理暗示,人会本能地用一个分数简化复杂的评估问题。
误区实验时不小心把部分要预测的三元组也放进了训练集,感觉模型分数还挺高,应该没事吧?
正解这是典型的数据泄漏。模型在训练时已经“见过”正确答案,测试分数虚高,无法反映真实泛化能力。就像面试官把考题答案提前给了考生,考试分数再高也不能说明能力。补全任务中,所有评估用的三元组必须严格排除在训练集之外,且负采样不能与测试正例重叠。
为何常见:数据处理流水线中训练集、验证集、测试集划分混乱,人们又容易对“高分”产生盲目乐观,忽视了分数来源的合法性。
面试题
Q1. 知识图谱最基本的组成单元是什么?
- A.实体、关系与属性构成的三元组← 正确答案
- B.节点与边构成的简单图结构
- C.大规模稀疏矩阵形式的数据表
- D.统计学中的概率分布模型
答案:A。知识图谱的最小存储单位是三元组 (h, r, t),由头实体、关系和尾实体构成,就像相册里一张“照片—标签—照片”的关系卡片。B 描述的是通用图结构而非三元组单元,C、D 与知识图谱的基本表示无关。
Q2. 知识图谱补全(链路预测)的核心目标是什么?
- A.删除图谱中重复冗余的实体
- B.计算图谱所需的内存占用量
- C.预测实体之间缺失的关联边← 正确答案
- D.将图谱数据压缩成图形文件
答案:C。链路预测的目标是预测图谱中缺失的三元组,即推断实体间最可能存在的关联边,相当于补全相册中缺失的关系卡片。A 是实体消歧,B、D 是工程问题,均不属于补全任务。
Q3. TransE 模型最核心的假设是什么?
- A.头实体向量等于尾实体向量加噪声
- B.头实体向量加关系向量近似尾实体← 正确答案
- C.所有实体向量彼此完全独立
- D.关系向量由随机初始化直接决定
答案:B。TransE 的核心假设是 h + r ≈ t,即从头实体出发沿关系向量平移,落点应接近尾实体。A 描述的是噪声模型而非平移,C 违背了图谱中实体相互关联的本质,D 忽略了训练过程中关系向量会被不断优化。
Q4. 构建负样本的主要作用是什么?
- A.扩大训练数据集的整体规模
- B.提升实体向量的初始化速度
- C.降低模型对超参数的敏感程度
- D.让模型学会拒绝虚假的三元组← 正确答案
答案:D。负采样的核心价值是给模型提供“反例”,让它能区分真实关系与虚假组合,避免把所有三元组都判真。虽然负样本客观上增加了数据量,但那只是副产品。B、C 与负采样的原理无关。
Q5. 在 TransE 中,打分函数值 \( \lVert \mathbf{h} + \mathbf{r} - \mathbf{t} \rVert \) 越小说明什么?
- A.该三元组成立的可信度越低
- B.实体向量之间的夹角必然更大
- C.关系向量的模长会变得越小
- D.该三元组成立的可信度越高← 正确答案
答案:D。打分值表示平移后的落点与尾实体坐标的距离。距离越小,说明“头实体 + 关系”越贴近尾实体,三元组越可能是真的,类似从家出发沿关系方向走一步正好踩到目的地的门口。A 说反了,B、C 与距离语义没有直接关系。
Q6. 下列哪些是知识图谱补全常用的评估指标?
- A.平均倒数排名 MRR 指标← 正确答案
- B.正确答案排进前 K 的 Hits@K← 正确答案
- C.Accuracy 精确率是最核心指标
- D.正确实体的平均排名 MR 值← 正确答案
答案:ABD。链接预测是排序任务,MRR、Hits@K、MR 都是基于“正确答案排名位置”的标准指标。Accuracy 需要设定阈值,在开放候选集排序任务中不常用,故不选 C。
Q7. 关于负采样策略,下列说法正确的有哪些?
- A.替换后的实体不应与原实体相同← 正确答案
- B.负例必须真实存在于知识图谱中
- C.负例组合大概率不在图谱中出现← 正确答案
- D.每次负采样都要保持实体类别一致
答案:AC。替换实体时若仍取原实体,会生成一个正例而非负例,故 A 对。负例必须“不存在于图谱中”才能作为反例,B 说反了。随机替换后组合大概率是图谱外的假卡片,C 对。保持实体类别并非负采样的通用要求,D 错。
Q8. TransE 在哪种关系模式下表现最差?
- A.一对多与多对一的复杂关系← 正确答案
- B.一对一且对称的简单关系
- C.实体数量较少的稀疏图谱
- D.关系类型非常丰富的图谱
答案:A。一对多或多对一关系中,同一个头实体和关系需要对应多个不同的尾实体,但 h + r 的平移落点只有一个,无法同时贴近多个真实尾实体,导致向量冲突。对称简单关系反而容易学习,B 排除;C、D 取决于数据质量而非关系模式,不是 TransE 最核心的短板。
Q9. 知识图谱补全可以应用在哪些实际场景?
- A.社交平台推荐“可能认识的人”← 正确答案
- B.药物与靶点相互作用的推断← 正确答案
- C.电商评论的情感倾向分类
- D.智能问答系统回答关系类问题← 正确答案
答案:ABD。好友推荐本质是预测用户间缺失的“关注/好友”关系,药物—靶点推断是补全生物知识图谱中的关系,智能问答需要动态推理缺失关系来作答,三者都是链接预测的典型应用。C 情感分类是文本分类任务,不涉及图谱关系补全。
Q10. 已知三元组缺失了尾实体,补全任务应当预测什么?
- A.同时预测图谱中的全部实体
- B.给定头实体与关系预测尾实体← 正确答案
- C.随机猜测一个候选实体
- D.给定尾实体与关系反推头实体
答案:B。尾实体预测的标准做法是给定 (h, r),从候选实体中挑出打分最高的 t,即“根据头与关系填尾巴”。D 描述的是头实体预测任务,A、C 没有利用已知条件,无法得到可靠结果。