TransE算法是知识图谱补全的经典方法。
目前网络上存在大量知识库(KBs):如OpenCyc、WordNet、Freebase、Dbpedia等等,它们因不同目的建成,因此很难用到其他系统上。为发挥知识库的图(graph)性,也为得到统计学习(包括机器学习和深度学习)的优势,需要将知识库嵌入(embedding)到一个低维空间里(比如10、20、50维)。获得向量后,就可以运用各种数学工具进行分析。
表示学习 :学习一系列低维稠密向量来表征语义信息,知识表示学习是面向知识库中实体和关系的表示学习。大规模知识库(知识图谱)的构建为许多NLP任务提供了底层支持,但由于其规模庞大且不完备,如何高效存储和补全知识库成为了一项非常重要的任务,这就依托于知识表示学习。
TransE算法 是一个非常经典的知识表示学习,它的提出,是为了解决多关系数据(multi-relational data) 的处理问题。它用分布式表示(distributed representation) 来描述知识库中的三元组。这类表示法既避免了庞大的树结构构造,又能通过简单的数学计算获取语义信息,因此成为了当前表示学习的根基。
知识图谱 的集合,链接起来成为一个图(graph),每个节点是一个一个实体,每条边是一个关系,或者说是一个事实(fact)。也就是有向图,主体指向客体。
TransE的直观含义:即TransE基于实体和关系的分布式向量表示,将每个三元组实例(head,relation,tail) 中的关系relation看做从实体head到实体tail的翻译,通过不断调整h、r和t(head、relation和tail的向量),使(h + r) 尽可能与 t 相等,即 h + r = t 。
光有这一个约束不够,还需设置一个损失函数。表示学习没有明显的监督信号,也就是不会明确告诉模型学到的表示对不对。想要快速收敛,引入“相对”概念,即相对负例来说,正例的打分要更高,方法学名“negative sampling”。损失函数 设计如下:
L = ∑ ( h , ℓ , t ) ∈ S ∑ ( h ′ , ℓ , t ′ ) ∈ S ( h , ℓ , t ) ′ [ γ + d ( h + ℓ , t ) − d ( h ′ + ℓ , t ′ ) ] + \mathcal{L}=\sum_{(h, \ell, t) \in S} \sum_{\left(h^{\prime}, \ell, t^{\prime}\right) \in S_{(h, \ell, t)}^{\prime}}\left[\gamma+d(\boldsymbol{h}+\ell, \boldsymbol{t})-d\left(\boldsymbol{h}^{\prime}+\boldsymbol{\ell}, \boldsymbol{t}^{\prime}\right)\right]_{+} L=∑(h,ℓ,t)∈S∑(h′,ℓ,t′)∈S(h,ℓ,t)′[γ+d(h+ℓ,t)−d(h′+ℓ,t′)]+
其中(h′,l,t′)称为corrupted triplet ,是随机替换头或尾实体得到(非同时,其实也可以替换relation)。γ为margin。此公式就是SVM的soft margin损失函数,所以transE针对给定三元组进行二分类任务,其中负例是通过替换自行构造的,目标是使得最相近的正负例样本距离最大化,尽可能将对的和错的分开。margin值一般设为1。
参考文献:
https://blog.csdn.net/shunaoxi2313/article/details/89766467
https://blog.csdn.net/u012102306/article/details/80047103