日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ConvE:Convolutional 2D Knowledge Graph Embeddings

發(fā)布時間:2024/3/13 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ConvE:Convolutional 2D Knowledge Graph Embeddings 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

論文:Convolutional 2D Knowledge Graph Embeddings

1 介紹

1.1 提出原因

之前提出的模型如disMult,Trans系列模型,成為淺層模型,雖然比較簡單,參數(shù)較少、訓練模型速度較快,但是這些模型相比于深的模型,更少能夠抓到復雜的信息。因此,提出模型ConvE模型,利用卷積的方式進行知識圖譜補全,能夠適用于更加復雜的圖。

在淺層模型中增加特征數(shù)量的唯一方法,就是增加embedding的維度,但是隨之而來存在一個問題,不能擴展到更大的知識圖譜,因為嵌入?yún)?shù)的總數(shù)與圖中實體和關系的數(shù)量成正比。此外,以往的多層知識圖嵌入體系結(jié)構(gòu)都是全連接的,容易出現(xiàn)過擬合問題。

1.2ConvE優(yōu)勢

ConvE采取卷積的形式,由于高度優(yōu)化的GPU實現(xiàn),它的參數(shù)效率和計算速度快。由于其的普遍使用,在訓練多層卷積網(wǎng)絡時,已經(jīng)建立了魯棒方法來控制過擬合。在本文中,我們引入了ConvE模型,該模型使用二維卷積在嵌入上預測知識圖中的缺失環(huán)節(jié)。ConvE是用于鏈接預測的最簡單的多層卷積體系結(jié)構(gòu):它由單個卷積層、嵌入維數(shù)的投影層和內(nèi)積層定義。相比于GCN框架僅限于無向圖,而知識圖自然是有向的,并且可能受到限制的內(nèi)存需求的影響。

1.3 貢獻

  • 介紹了一個簡單的,有競爭力的2D卷積鏈路預測模型,ConvE。
  • 開發(fā)一個1-N的評分程序,加速三倍的訓練和300倍的評估。
  • 系統(tǒng)地研究了在常用的鏈接預測數(shù)據(jù)集中報告的逆關系測試集泄漏,在必要時引入數(shù)據(jù)集的魯棒版本,使其無法用簡單的基于規(guī)則的模型來解決。

2 模型

2.1 1D vs 2D Convolutions

1D Convolutions
([a a a] ; [b b b]) = [a a a b b b]
若采用filter, 其 size k = 3, 結(jié)果為維度 1 × 4 1\times4 1×4

2D Convolutions
( [ a a a a a a ] ; [ b b b b b b ] ) = [ a a a a a a b b b b b b ] \begin{pmatrix} \begin{bmatrix} a & a & a \\ a& a & a\\ \end{bmatrix}; \begin{bmatrix} b&b&b\\ b&b&b\\ \end{bmatrix} \end{pmatrix}= \begin{bmatrix} a&a&a\\ a&a&a\\ b&b&b\\ b&b&b\\ \end{bmatrix} ([aa?aa?aa?];[bb?bb?bb?]?)=?????aabb?aabb?aabb??????
若采用filter, 其 size k = 3 × 3 \times3 ×3, 結(jié)果為維度 2 × 1 2\times1 2×1
二維卷積運算能夠模擬a和b之間更多的交互作用(與m, n, k成比例的動作)。因此,與一維卷積相比,二維卷積能夠提取兩個嵌入之間更多的特征交互作用

2.2 模型圖


模型講解:

  • 頭實體和關系的one-hot編碼進行embedding,維度為k
  • 將頭實體和關系的embeding 進行reshape,并拼接
  • 進行卷積操作
  • 全連接操作,映射維度為k
  • 將全連接的結(jié)果乘以所有embedding結(jié)果,即實現(xiàn)1-N的評分方法,也就是說結(jié)果乘所有實體。

2.3 評分函數(shù)


其中 r r ∈ R k , e  ̄ s , r  ̄ r 分 別 代 表 e s , r r , 2 D 進 行 r e s h a p e 結(jié) 果 。 e s , r r ∈ R k , e  ̄ s , r  ̄ r ∈ R k w × k h , 其 中 k = k w × k h \mathbf r_{r}\in \mathbb R _{k}, \overline \mathit e_{s},\overline \mathit r_{r}分別代表e_{s}, r_{r},2D進行reshape結(jié)果。e_{s}, r_{r}\in\mathbb R_{k},\overline \mathit e_{s},\overline \mathit r_{r}\in \mathbb R^{k_{w}\times k_{h}},其中k=k_{w}\times k_{h} rr?Rk?,es?,rr?es?,rr?,2Dreshape結(jié)es?,rr?Rk?,es?,rr?Rkw?×kh?,k=kw?×kh?

2.4 損失函數(shù)

2.5 正則化

我們通過在幾個階段使用drop out來規(guī)范我們的模型,防止過擬合。 特別地,我們在嵌入、卷積后的feature map以及全連通層后的hidden units上使用了dropout。此外,我們BatchNorm進行歸一化,在卷積輸入之前,卷積輸入之后,
feature map之后進行BatchNorm歸一化。

3 代碼

論文原作代碼使用一個框架難以理解,找到替代的一個代碼。
參考代碼:點我
模型代碼

import torch import torch.nn as nn import torch.nn.functional as F from torch.nn import Parameter class ConvE(nn.Module):def __init__(self, config):super(ConvE, self).__init__()self.config = configself.ent_embs = nn.Embedding(self.config.ent_num, self.config.dim)self.rel_embs = nn.Embedding(self.config.rel_num, self.config.dim)self.input_drop = nn.Dropout(config.inputDrop)self.hide_drop = nn.Dropout(config.hideDrop)self.feature_drop = nn.Dropout2d(config.featureDrop)self.conv = nn.Conv2d(1, 32, (3, 3), bias=True)self.bn0 = nn.BatchNorm2d(1)self.bn1 = nn.BatchNorm2d(32)self.bn2 = nn.BatchNorm1d(config.dim)self.fc = nn.Linear(config.hide_size, config.dim)self.dim = config.dim #dim = 200self.dim1 = config.dim1 #dim1 = 20self.dim2 = self.dim // self.dim1 # dim2 = 10self.loss = nn.BCELoss()self.register_parameter('b',Parameter(torch.zeros(config.ent_num)))self.init()def init(self):nn.init.xavier_normal_(self.ent_embs.weight.data)nn.init.xavier_normal_(self.rel_embs.weight.data)def forward(self, e1, rel):e1_emb = self.ent_embs(e1).view(-1, 1, self.dim1, self.dim2)#el_emb; batch*1*20*10rel_emb = self.rel_embs(rel).view(-1, 1 ,self.dim1, self.dim2)conv_input = torch.cat([e1_emb, rel_emb], dim = 2)#con_input: bath*1*40*10conv_input = self.bn0(conv_input)x = self.input_drop(conv_input)x = self.conv(conv_input)x = self.bn1(x)x = F.relu(x)x = self.feature_drop(x)x = x.view(x.shape[0], -1)#bacth*hide_size(38*8*32 = 9728)x = self.fc(x)x = self.hide_drop(x)x = self.bn2(x)x = F.relu(x)#batch*dim ent_ems.weight dim*ent_num#print(x.shape, self.ent_embs.weight.shape)x = torch.mm(x, self.ent_embs.weight.transpose(1, 0))x += self.b.expand_as(x)pred = torch.sigmoid(x)return pred

總結(jié)

以上是生活随笔為你收集整理的ConvE:Convolutional 2D Knowledge Graph Embeddings的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。