Die Ergänzung von Wissensgraphen wurde unter Verwendung eines Open-Source-Frameworks namens OpenKE durchgeführt. Als Memo für mich werde ich das Ergebnis transkribieren.
Dieser Artikel gilt für Personen, die unter eine der folgenden Bedingungen fallen.
Das Wissensdiagramm zeigt die Verbindung verschiedener Kenntnisse als Struktur.
** Beispiel) ** (obama, born-in, Hawaii)
Daten mit Beziehungen wie Subjekt, Beziehungsform und Objekt werden als Wissensgraph bezeichnet.
Wenn das Subjekt, die Form der Beziehungen und das Objekt $ s, r bzw. o $ sind, bleiben sie aus der Beziehung zwischen $ s $ und $ r $ oder $ o $ und $ r $. Der Zweck dieser Zeit ist es, $ o und s $ zu erraten.
OpenKE ist eine Open Source-Datei, die von Kinsei-Kaiseisei University, Raum für Verarbeitung natürlicher Sprache, Sozialwissenschaften, Buchhaltung und Berechnung (THUNLP) erstellt wurde. Es ist ein Rahmen.
Es ist ein Framework für Wissensgraphen, die in C ++ und Python geschrieben wurden, und scheint derzeit Pytorch und Tensorflow zu unterstützen.
Weitere Informationen finden Sie unter dem unten stehenden Github-Link oder auf der OpenKE-Homepage. OpenKE-Homepage OpenKE Github
Als nächstes wird das tatsächlich auszuführende Programm unten gezeigt. Dieses Mal werden wir in Beispielen train_distmult_WN18.py verwenden.
import openke
from openke.config import Trainer, Tester
from openke.module.model import DistMult
from openke.module.loss import SoftplusLoss
from openke.module.strategy import NegativeSampling
from openke.data import TrainDataLoader, TestDataLoader
# dataloader for training
train_dataloader = TrainDataLoader(
in_path = "./benchmarks/WN18RR/",
nbatches = 100,
threads = 8,
sampling_mode = "normal",
bern_flag = 1,
filter_flag = 1,
neg_ent = 25,
neg_rel = 0
)
# dataloader for test
test_dataloader = TestDataLoader("./benchmarks/WN18RR/", "link")
# define the model
distmult = DistMult(
ent_tot = train_dataloader.get_ent_tot(),
rel_tot = train_dataloader.get_rel_tot(),
dim = 200
)
# define the loss function
model = NegativeSampling(
model = distmult,
loss = SoftplusLoss(),
batch_size = train_dataloader.get_batch_size(),
regul_rate = 1.0
)
# train the model
trainer = Trainer(model = model, data_loader = train_dataloader, train_times = 2000, alpha = 0.5, use_gpu = True, opt_method = "adagrad")
trainer.run()
distmult.save_checkpoint('./checkpoint/distmult.ckpt')
# test the model
distmult.load_checkpoint('./checkpoint/distmult.ckpt')
tester = Tester(model = distmult, data_loader = test_dataloader, use_gpu = True)
tester.run_link_prediction(type_constrain = False)
test_dataloader ist "./benchmarks/WN18RR/" Modell ist distmult Die Verlustfunktion ist SoftplusLoss () Ich werde es verlassen. dim ist auf die Form 200 eingestellt. Alle sind die gleichen wie beim Herunterladen.
In Beispielen gibt es mehrere andere Arten von ausführbaren Programmen.
Es gibt drei Teile, die geändert werden können: Datensatz, Modell und Verlust.
Stellen Sie sicher, dass "./benchmarks/WN18RR/" in train_dataloader und test_dataloader identisch sind. Sie können den Datensatz im folgenden Link für diese Benchmarks verwenden. benchmarks
Die Variablen in TrainDataLoader können frei geändert werden. Zusätzlich zu nomal kann cross für sample_mode ausgewählt werden. (Die Kreuzeinstellung erfordert möglicherweise eine geringfügige Änderung der tieferen Einstellung.)
Das Modell finden Sie unter dem folgenden Link. Verfügbare Modelle
Zusätzlich zu Softplus Loss können Margin Loss und Sigmoid Loss für Verluste verwendet werden.
Das Ausführungsergebnis ist wie folgt. Ich habe keinen GPU-Computer, daher habe ich ihn mit Google Colaboratory ausgeführt.
Wir werden es mit der Experiments-Tabelle auf GitHub vergleichen. Die Tabelle scheint der Wert bei Hits @ 10 (Filter) zu sein.
Der Durchschnitt der experimentellen Ergebnisse betrug 0,463306, sodass die Genauigkeit um 0,015 niedriger war als der Wert von Dist Mult auf GitHub.
Die Verbesserung besteht darin, eine andere Verlustfunktion zu übernehmen. Ich denke auch, dass eine Möglichkeit darin besteht, die Werte von neg_ent, neg_rel und alpha zu ändern.
Dieses Mal habe ich versucht, das Wissensdiagramm mit OpenKE zu ergänzen. Infolgedessen konnten wir das erwartete Ergebnis nicht erzielen, aber es gab Raum für Verbesserungen. Daher möchten wir mit den oben gezeigten Verbesserungspunkten beginnen.
Vielen Dank für das Lesen bis zum Ende.
Recommended Posts