[PYTHON] Ich habe versucht, das Wissensdiagramm mit OpenKE zu ergänzen

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.

Artikelfluss

  1. [Ziel dieses Artikels](https://qiita.com/yuta0919/private/b49b5a8120bd3336d1d3#%E6%9C%AC%E8%A8%98%E4%BA%8B%E3%81%AE%E5% AF% BE% E8% B1% A1)
  2. [Was ist ein Wissensdiagramm?](Https://qiita.com/yuta0919/private/b49b5a8120bd3336d1d3#%E7%9F%A5%E8%AD%98%E3%82%B0%E3%83%A9%E3% 83% 95% E3% 81% A8% E3% 81% AF)
  3. Was ist OpenKE
  4. [Zu verwendendes Programm](https://qiita.com/yuta0919/private/b49b5a8120bd3336d1d3#%E5%AE%9F%E8%A1%8C%E3%83%97%E3%83%AD%E3%82 % B0% E3% 83% A9% E3% 83% A0% E3% 81% AE% E4% BD% 9C% E6% 88% 90)
  5. Ausführungsergebnis
  6. [Vergleich / Bewertung mit GitHub](https://qiita.com/yuta0919/private/b49b5a8120bd3336d1d3#%E8%AB%96%E6%96%87%E3%81%A8%E3%81%AE% E6% AF% 94% E8% BC% 83% E8% A9% 95% E4% BE% A1)
  7. Zusammenfassung

Betreff dieses Artikels

Dieser Artikel gilt für Personen, die unter eine der folgenden Bedingungen fallen.

Was ist ein Wissensgraph?

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.

Was ist OpenKE?

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

Programm zu verwenden

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.

In Bezug auf Einstellungen

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.

Ausführungsergebnis

Das Ausführungsergebnis ist wie folgt. Ich habe keinen GPU-Computer, daher habe ich ihn mit Google Colaboratory ausgeführt. スクリーンショット 2020-05-27 19.13.33.png

Vergleich / Bewertung mit GitHub

Wir werden es mit der Experiments-Tabelle auf GitHub vergleichen. Die Tabelle scheint der Wert bei Hits @ 10 (Filter) zu sein. スクリーンショット 2020-05-28 13.14.24.png

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.

Zusammenfassung

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

Ich habe versucht, das Wissensdiagramm mit OpenKE zu ergänzen
Ich habe versucht, die Sündenfunktion mit Chainer zu approximieren
[Python] Ich habe versucht, die Top 10 der Lidschatten grafisch darzustellen
Ich habe versucht, die Sprache mit CNN + Melspectogram zu identifizieren
Ich habe versucht, das Bild mithilfe von maschinellem Lernen zu komprimieren
Ich habe versucht, die checkio-API zu verwenden
Ich habe versucht, den Abschnitt zu schätzen.
Ich habe versucht, die Anzeigenoptimierung mithilfe des Banditenalgorithmus zu simulieren
[TF] Ich habe versucht, das Lernergebnis mit Tensorboard zu visualisieren
Ich habe versucht, die Sündenfunktion mit Chainer zu approximieren (Re-Challenge)
Ich habe versucht, das Zugriffsprotokoll mit Node.js auf dem Server auszugeben
Ich habe versucht, Azure Speech to Text zu verwenden.
Ich versuchte das Weckwort zu erkennen
Ich habe versucht, Text mit TensorFlow zu klassifizieren
Ich habe versucht, die grafische Modellierung zusammenzufassen.
Ich habe versucht, den auf Papier gestempelten Stempel mit OpenCV zu digitalisieren
Ich habe versucht, das Umfangsverhältnis π probabilistisch abzuschätzen
Ich habe versucht, die BigQuery-Speicher-API zu verwenden
Ich habe versucht, das Gesichtsbild mit sparse_image_warp von TensorFlow Addons zu transformieren
Ich habe versucht, die Trefferergebnisse von Hachinai mithilfe der Bildverarbeitung zu erhalten
Ich habe versucht, die Ähnlichkeit der Frageabsicht mit Doc2Vec von gensim abzuschätzen
Ich habe versucht, die Phase der Geschichte mit COTOHA zu extrahieren und zu veranschaulichen
Ich habe es mit den Top 100 PyPI-Paketen versucht.> Ich habe versucht, die auf Python installierten Pakete grafisch darzustellen
Ich habe versucht, den Höhenwert von DTM in einem Diagramm anzuzeigen
Ich habe die übliche Geschichte ausprobiert, Deep Learning zu verwenden, um den Nikkei-Durchschnitt vorherzusagen
Mit COTOHA habe ich versucht, den emotionalen Verlauf des Laufens von Meros zu verfolgen.
Ich habe versucht, die Neujahrskarte selbst mit Python zu analysieren
vprof - Ich habe versucht, den Profiler für Python zu verwenden
Ich habe versucht, beim Trocknen der Wäsche zu optimieren
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich habe versucht, WAV-Dateien mit Pydub zu synthetisieren.
Ich habe versucht, PyCaret mit der schnellsten Geschwindigkeit zu verwenden
Ich habe versucht, die Google Cloud Vision-API zu verwenden
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Ich habe versucht, das Datetime-Modul von Python zu verwenden
Qiita Job Ich habe versucht, den Job zu analysieren
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
LeetCode Ich habe versucht, die einfachen zusammenzufassen
Ich habe versucht, die funktionale Programmierbibliothek toolz zu verwenden
Ich habe versucht, das Problem des Handlungsreisenden umzusetzen
Ich habe versucht, die Texte von Hinatazaka 46 zu vektorisieren!
Ich habe versucht, parametrisiert zu verwenden
Ich habe versucht, Argparse zu verwenden
Ich habe versucht, Mimesis zu verwenden
Ich habe versucht, anytree zu verwenden
Ich habe versucht, aiomysql zu verwenden
Ich habe versucht, Coturn zu verwenden
Ich habe versucht, Pipenv zu verwenden
Ich habe versucht, Matplotlib zu verwenden
Ich habe versucht, "Anvil" zu verwenden.
Ich habe versucht, Hubot zu verwenden
Ich habe versucht, ESPCN zu verwenden
Ich habe versucht, openpyxl zu verwenden
Ich habe versucht, Ipython zu verwenden
Ich habe versucht zu debuggen.
Ich habe versucht, ngrok zu verwenden