知识图谱—知识表示(二)

28b4394ec6cdf3314abd74eb15a34f01.png

导读:

             知识图谱—知识提取


上篇文章,介绍了知识表示学习的常见的代表模型:距离模型、单层神经网络模型、能量模型、双线性模型、张量神经网络模型、矩阵分解模型。在本篇文章中,我们介绍翻译模型(Trans模型)。

1.TransH模型

在处理1-N,N-1,N-N复杂关系时的局限性,TransH模型提出让一个实体在不同的关系下拥有不同的表示。

22f13d2fdb23978d85ba98bfbe433f4a.png

损失函数:

f79a2017df0d435717a872c8cca5ca6d.png

728685855f240411a46fe9329a1ebf5b.png

2.TransR/CTransR模型

虽然TransH模型使每个实体在不同关系下拥有不同的表示,它仍然假设实体和关系处于相同的语义空间R中,在一定程度上限制了TransH的表达能力。TransR模型认为,一个实体是多种属性的综合体,不同关系关注实体的不同属性。TransR认为不同的关系拥有不同的语义空间,对每个三元组,首先应将实体投影到对应的关系空间中,然后再建立从头实体到尾实体的翻译关系。

2ae39c33891b65acbac9d3a2372b7df9.png

上图是TransR模型的简单示例,对于每个三元组(h,r,t),我们首先将实体向量向关系r空间投影,原来在实体空间中与头(圆圈表示)、尾实体相似的实体(三角形表示),在关系r空间内被区分开了。具体而言,对于每一个关系r,TransR定义投影矩阵 outside_default.png ,将实体向量从实体空间投影到关系r的子空间,用 outside_default.png 和 outside_default.png 表示如下:

outside_default.png

outside_default.png

然后 outside_default.png .因此 TransR定义了如下损失函数:

outside_default.png outside_default.png

相关研究表明,某些关系还可以进行更细致的划分。于是,Lin等人进一步提出了CTransR模型,通过把关系r对应的实体对的向量差值 outside_default.png 进行聚类,将关系r细分为多个子关系 outside_default.png .CTransR模型为每一个子关系 outside_default.png 分别学习向量表示,对于每个三元组 outside_default.png ,定义了如下损失函数:

outside_default.png

TransR模型的缺点:

(1)在同一个关系r下,头、尾实体共享相同的投影矩阵。然而,一个关系的头、尾实体的类型或属性可能差异巨大。例如(美国,总统,奥巴马),美国和奥巴马的类型不同,一个是国家,一个是人物。

(2)从实体空间到关系空间的投影是实体和关系的交互过程。因此TransR让投影矩阵仅与关系有关是不合理的。

(3)与TransE和TransH相比,TransR引入了空间投影,使得TransR模型参数急剧增加,计算复杂率大大提高。

3.TransD模型

为了解决TransR模型的缺点,Ji等人提出了TransD模型,如下图所示,给定三元组 outside_default.png,TransD模型设置了2个分别将头实体和尾实体投影到关系空间的投影矩阵 outside_default.png 和 outside_default.png ,具体定义如下:

6a621e2431af352acbf56c3bccdd79e9.png

outside_default.png , outside_default.png

利用2个投影向量构建投影矩阵,解决了原来TransR模型参数过多的问题。最后,TransD模型定义了损失函数:

outside_default.png

4.TransSpare模型

知识库中实体和关系的异质性和不平衡性是制约知识表示学习的难题:

(1)异质性:知识库中某些关系可能会与大量的实体有连接,而某些关系则可能仅仅与少量实体有连接。

(2)不均衡性:在某些关系中,头实体和尾实体的种类和数量可能差别巨大。

为了解决实体和关系的异质性。TransSparse提出使用稀疏矩阵 outside_default.png 的稀疏度由关系r连接的实体对数量决定。这里头、尾实体共享同一个投影矩阵 outside_default.png ,投影矩阵 outside_default.png 的稀疏度 outside_default.png 定义如下:

outside_default.png

outside_default.png 表示关系r连接的实体对数量, outside_default.png 表示连接实体对数量最多的关系。这样,投影向量可定义为:

outside_default.png , outside_default.png

为了解决关系的不平衡性问题,TranSparse对于头实体和尾实体分别使用2个不同的投影矩阵 outside_default.png 和 outside_default.png .;两者的稀疏度定义如下:

outside_default.png

其中, outside_default.png 表示关系r在位置l处连接不同实体的数量。 outside_default.png 表示 outside_default.png 中最大的数。这样,投影向量可定义为

outside_default.png , outside_default.png

TranSparse对于以上2种形式,均定义如下损失函数:

outside_default.png

5.TransA模型

Xiao等人提出TransA模型,将损失函数中的距离度量改为马氏距离,并为每一维学习不同的权重,对于每个三元组 outside_default.png .TransA模型定义了如下评分函数:

outside_default.png

如下图所示:

outside_default.png

6.TransG模型

TransG模型提出使用高斯混合模型描述头、尾实体之间的关系。该模型认为,一个关系会对应多种语义,每种语义用一个高斯分布来刻画,其中I表示单位矩阵。

TransG模型与传统模型的对比如下图所示。其中三角形表示正确的尾实体,圆形表示错误的尾实体。

outside_default.png

图(a)中为传统模型示例,由于将关系r的所有语义混为一谈,导致错误的实体无法被区分开,而图(b)所示,TransG模型通过考虑关系r的不同语义,形成多个高斯分布,就能区分出正确和错误实体。

7.KG2E模型

知识库中的关系和实体的语义 本身具有不确定性,这在过去模型中被忽略了。因此He等人提出KG2E,使得高斯分布来表示实体和关系。其中高斯分布的均值表示的是实体或关系在语义空间中的中心位置,而高斯分布的协方差则表示该实体或关系的不确定度。下图为KG2E的模型示例,每个圆圈代表不同实体与关系的表示,其中圈圈大小表示的是不同实体或关系的不确定度。

outside_default.png

TransR算法是一种用于知识图谱表示学习的算法,它是在TransE算法的基础上发展而来的,通过引入关系空间嵌入来解决TransE算法中的限制性问题。 在TransE算法中,每个实体和关系都用一个低维向量来表示,但是这种表示方式存在一定的限制:同一关系下的不同实体之间的向量是相同的,这会导致实体的向量表示可能被关系的限制所束缚。为了解决这个问题,TransR算法将实体和关系分别嵌入到不同的空间中,并通过定义一个投影矩阵来将实体从实体空间投影到关系空间中,从而避免了TransE算法中的限制性问题。 具体来说,TransR算法的流程如下: 1. 将实体和关系分别嵌入到实体空间和关系空间中,并定义一个投影矩阵将实体从实体空间投影到关系空间中。 2. 对于每个三元组$(h,r,t)$,计算$h$和$r$的投影向量,然后通过计算$t$与$h$和$r$的投影向量之间的距离来判断是否满足该三元组。 3. 使用负例采样来训练模型,并通过最小化损失函数来优化模型参数。 下面是TransR算法的官方代码: ```python class TransR(KnowledgeGraphEmbedding): def __init__(self, model_params): super(TransR, self).__init__(model_params) self.ent_embeddings = nn.Embedding(self.ent_total, self.ent_dim) self.rel_embeddings = nn.Embedding(self.rel_total, self.rel_dim) self.projection = nn.Embedding(self.rel_total, self.ent_dim * self.rel_dim) nn.init.xavier_uniform_(self.ent_embeddings.weight.data) nn.init.xavier_uniform_(self.rel_embeddings.weight.data) nn.init.xavier_uniform_(self.projection.weight.data) self.criterion = nn.MarginRankingLoss(self.margin, reduction='sum') self.optimizer = optim.Adam(self.parameters(), lr=self.learning_rate) def _calc(self, h, t, r): h_e = self.ent_embeddings(h) t_e = self.ent_embeddings(t) r_e = self.rel_embeddings(r) M_r = self.projection(r).view(-1, self.ent_dim, self.rel_dim) h_e = torch.mm(h_e, M_r).view(-1, self.rel_dim) t_e = torch.mm(t_e, M_r).view(-1, self.rel_dim) return h_e, t_e, r_e def forward(self, pos_h, pos_t, pos_r, neg_h, neg_t, neg_r): pos_h_e, pos_t_e, pos_r_e = self._calc(pos_h, pos_t, pos_r) neg_h_e, neg_t_e, neg_r_e = self._calc(neg_h, neg_t, neg_r) pos = torch.sum((pos_h_e + pos_r_e - pos_t_e) ** 2, dim=1, keepdim=True) neg = torch.sum((neg_h_e + neg_r_e - neg_t_e) ** 2, dim=1, keepdim=True) return pos, neg def predict(self, h, t, r): h_e = self.ent_embeddings(h) t_e = self.ent_embeddings(t) r_e = self.rel_embeddings(r) M_r = self.projection(r).view(-1, self.ent_dim, self.rel_dim) h_e = torch.mm(h_e, M_r).view(-1, self.rel_dim) t_e = torch.mm(t_e, M_r).view(-1, self.rel_dim) return torch.sum((h_e + r_e - t_e) ** 2, dim=1, keepdim=True) def regul(self, h, t, r): h_e = self.ent_embeddings(h) t_e = self.ent_embeddings(t) r_e = self.rel_embeddings(r) M_r = self.projection(r).view(-1, self.ent_dim, self.rel_dim) h_e = torch.mm(h_e, M_r).view(-1, self.rel_dim) t_e = torch.mm(t_e, M_r).view(-1, self.rel_dim) pos = torch.sum(h_e ** 2) + torch.sum(t_e ** 2) + torch.sum(r_e ** 2) neg = torch.sum(self.projection.weight ** 2) return pos, neg def forward2(self, h, t, r, M_r): h_e = self.ent_embeddings(h) t_e = self.ent_embeddings(t) r_e = self.rel_embeddings(r) h_e = torch.mm(h_e, M_r).view(-1, self.rel_dim) t_e = torch.mm(t_e, M_r).view(-1, self.rel_dim) return torch.sum((h_e + r_e - t_e) ** 2, dim=1, keepdim=True) ``` 这段代码实现了TransR算法的前向传播过程、预测过程和正则化过程,其中使用torch.nn中的Embedding层来定义实体和关系的嵌入向量以及投影矩阵,使用torch.nn中的MarginRankingLoss来定义损失函数,使用torch.optim中的Adam来定义优化器。在前向传播过程中,通过计算投影向量和距离来判断是否满足三元组,正则化过程则通过计算实体和关系向量的平方和来进行约束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值