[PYTHON] Versuchen wir Wikification ~ Informationsextraktion mit Wikipedia & Disambiguation ~

Was in diesem Artikel einzuführen

Was ist Wikifcation überhaupt? ??

Kurz gesagt: __ Verknüpfen von Wörtern im Text mit Wikipedia-Artikeln__.

Nehmen wir als Beispiel an, Sie haben einen Satz wie diesen:

`Ab 2016 gibt es fünf Hersteller, Yamaha, Honda, Suzuki, Ducati und Aprilia, und ein Satellitenteam, das Arbeitsmaschinen ausleihen kann. ``

Dies ist [Straßenrennen-Meisterschaft](https://ja.wikipedia.org/wiki/%E3%83%AD%E3%83%BC%E3%83%89%E3%83%AC%E3%83%BC Es ist eine Passage aus% E3% 82% B9% E4% B8% 96% E7% 95% 8C% E9% 81% B8% E6% 89% 8B% E6% A8% A9).

Zu diesem Zeitpunkt ist das im Text vorhandene "Suzuki" [Suzuki (Firma)](https://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%BA%E3%82% Es gibt Arbeit, um an AD_ zu binden (% E4% BC% 81% E6% A5% AD)). Dieser Vorgang wird als "Wikification" bezeichnet.

Was sind die Vorteile von Wikification?

Es gibt einen guten Artikel, der die Vorteile intelligenter zusammenfasst als das Lesen dieses unco-Artikels.

Extraktion wichtiger Schlüsselwörter

Es ist keine Übertreibung zu sagen, dass Wikipedia-Artikel im Allgemeinen keywords sind.

Im obigen Beispieltext "2016" können Yamaha, Honda, Suzuki, Ducati, Aprilia, Hersteller, Werksmaschine, Darlehen usw. mit Wikipedia verknüpft werden.

Sind "2016" und "Leihen" Schlüsselwörter? Sie wundern sich vielleicht, aber solange der Wikipedia-Artikel existiert, wird es ein Schlüsselwort sein.

Wenn Sie nach dem Aufnehmen von Wörtern einschließlich Müllwörtern aus Wikipedia gut damit umgehen, ist dies als Schlüsselwortextraktion sehr nützlich.

Begriffsklärung

Im Prozess der Wikifizierung wird auch die Wortbedeutung der Mehrdeutigkeitsauflösung (WSD) implementiert. Dies liegt daran, dass es in der realen Welt üblich ist, dass ein Wort mehrere Bedeutungen hat.

Zum Beispiel: Heute bin ich zu TSUTAYA gegangen und habe eine neue DVD von Bud genommen. Angenommen, Sie haben den Text . [^ 1]

Zu diesem Zeitpunkt tritt, wenn es sich um eine einfache Textübereinstimmung handelt, eine Mehrdeutigkeit in der "Knospe" auf. [AV-Schauspielerin Knospe](https://ja.wikipedia.org/wiki/%E3%81%A4%E3%81%BC%E3%81%BF_(AV%E5%A5%B3%E5%84% AA)) oder Flower Bud oder Kobukuro Song /% E8% 95% BE_ (% E3% 82% B3% E3% 83% 96% E3% 82% AF% E3% 83% AD% E3% 81% AE% E6% 9B% B2)) ・ Es gibt mehrere Möglichkeiten.

Natürlich können wir Menschen aus dem Kontext schließen, dass "ich nach TSUTAYA gehe und eine DVD abspiele, also ist es wahrscheinlich eine Knospe (AV-Schauspielerin)!". Es ist eine ausgezeichnete menschliche Fähigkeit. Die Auswahl der richtigen Wortbedeutung aus dem Kontext auf diese Weise wird als WSD bezeichnet. Dies ist ein Forschungsgebiet der Verarbeitung natürlicher Sprache.

Wikification führt WSD auch während der Arbeit durch, "Wörter mit Wikipedia-Artikeln zu verknüpfen".

Funktionen für maschinelles Lernen

Einer der Vorteile von Wikipedia ist, dass es sich um __strukturierte Daten __ handelt. Insbesondere das Kategoriesystem und die Artikelvorlagen spielen diese Rolle.

Sie können Netzwerkdiagramme mithilfe der Kategoriestruktur und der Artikelvorlagen erstellen. Dies bedeutet, dass Sie es als nützliche Information für Dokumentklassifizierungs- und Clustering-Aufgaben verwenden können.

Leider ist Wikipedia für diesen Zweck nicht sehr gut geeignet. Die folgenden Punkte wurden als Ursachen genannt. [^ 3]

Wir empfehlen die Verwendung von Daten, die von DBpedia oder WikiData veröffentlicht wurden. [^ 2] DBpedia und WikiData sind regelbasiert, führen jedoch eine Datenbereinigung durch.

Wie benutzt man es?

Ich habe ein [Wikification-Paket] erstellt (https://pypi.python.org/pypi/word2vec_wikification_py).

Das Paket selbst wird mit pip install word2vec-wikification-py installiert. (Ich habe nur mit Python 3.5.x getestet.) Da für die Installation Numpy und Gensim erforderlich sind, empfehlen wir die Verwendung von Anaconda3.

Führen Sie dann dieses Skript mit sh download_model.sh aus. Ohne diese Modelldatei funktioniert es nicht.

Von hier aus verzweigt sich das, was Sie tun, je nach Anwendungsfall.

Ich möchte Wikify aus dem Nur-Text-Zustand, ich möchte Wikify aus dem morphologisch geteilten Zustand

Zunächst benötigen Sie die folgenden zwei Elemente.

Morphologische Teilungsumgebung

Wenn Sie keine Umgebung für die morphologische Unterteilung haben, lesen Sie bitte Mein Artikel als Referenz.

MySQL und Wikipedia Dump Datenaufbereitung

Das Setup von MySQL hängt von der Umgebung ab. Geben Sie also bitte Ihr Bestes! (Marunage)

Wikipedia-Dump-Daten finden Sie unter Dieser Abschnitt von README.

Implementieren Sie Wikificaion

Verwenden Sie die Funktion von word2vec_wikification_py.interface.predict_japanese_wiki_names_with_wikidump ().

Der Rückgabewert ist "word2vec_wikification_py.word2vec_wikification_py.models.SequenceScore", der in der Liste gespeichert ist. "Plausible Wikipedia-Artikelnamensserie" in absteigender Reihenfolge der Punktzahl.

Wenn Sie eine Wortfolge wünschen, können Sie die Wortfolge vorerst mit "word2vec_wikification_py.word2vec_wikification_py.models.SequenceScore.get_tokens ()" abrufen.

Weitere Informationen finden Sie unter Beispiel.

Ich kenne die Liste der Wikipedia-Titelkandidaten. Ich möchte WSD machen.

Vielleicht haben einige von Ihnen die Auflistung von Wikipedia-Artikelkandidaten bereits abgeschlossen.

Führen Sie in diesem Fall die folgenden Schritte aus, um WSD durchzuführen.

  1. Generieren Sie word2vec_wikification_py.word2vec_wikification_py.models. WikipediaArticleObject
  2. Lesen Sie die Modelldatei
  3. Rufen Sie word2vec_wikification_py.interface. Compute_wiki_node_probability () auf

Erstellung von Kandidateninformationen

Erstellen Sie zunächst eine Kandidatenliste. Geben Sie für Yamaha wie im folgenden Code Yamaha oder Yamaha Motor und den Kandidaten wikipedia-Artikelnamen ein. Vergessen Sie zu diesem Zeitpunkt nicht, den __article-Namen in [] einzuschließen. __ __ Wenn Sie es nicht in "[]" einschließen, wird die Genauigkeit erheblich verringert.


seq_wikipedia_article_object = [
            WikipediaArticleObject(page_title='Yamaha', candidate_article_name=['[Yamaha]', '[Yamaha発動機]']),
            WikipediaArticleObject(page_title='Suzuki', candidate_article_name=['[Suzuki_(Unternehmen)]', '[Suzuki_(Fisch)]']),
            WikipediaArticleObject(page_title='Ducati', candidate_article_name=['[Ducati]'])
        ]

Modelldatei laden

Es ist in einer Zeile erledigt. Wählen Sie als Modelldatei "entity_vector.model.bin" aus.


model_object = load_entity_model.load_entity_model(path_entity_model=path_model_file, is_use_cache=True)

Rufen Sie die Schnittstelle auf

Rufen Sie word2vec_wikification_py.interface. Compute_wiki_node_probability () auf, um Kandidateninformationen und eine Modelldatei zu erhalten.


sequence_score_objects = interface.compute_wiki_node_probability(
          seq_wiki_article_name=seq_wikipedia_article_object,
            entity_vector_model=model_object,
            is_use_cache=True
        )

Der Rückgabewert ist "word2vec_wikification_py.word2vec_wikification_py.models.SequenceScore", der in der Liste gespeichert ist. "Plausible Wikipedia-Artikelnamensserie" in absteigender Reihenfolge der Punktzahl.

Wenn Sie eine Wortfolge wünschen, können Sie die Wortfolge vorerst mit "word2vec_wikification_py.word2vec_wikification_py.models.SequenceScore.get_tokens ()" abrufen.

Wie funktioniert es

Zunächst einmal basiert dieses Paket auf japanischem Wikipedia Entity Vector. Dies sind die [Forschungsergebnisse] von Herrn Suzuki (http://www.anlp.jp/proceedings/annual_meeting/2016/pdf_dir/A5-2.pdf) vom Inui Laboratory der Tohoku-Universität. Herr Suzuki, der so wunderbare Forschungsergebnisse veröffentlicht, ist enttäuscht.

Um die Rolle des japanischen Wikipedia-Entitätsvektors kurz zu erläutern, ist es __ "word2vec-Modell zwischen Wikipedia-Artikeln" __. Daher ist es möglich, den ähnlichen Abstand zwischen Artikeln auf Wikipedia zu berechnen.

Dann lautet die Geschichte: "Was hast du getan?" Folgendes machen wir mit diesem Paket:

  1. Erstellen Sie Wikipedia-Artikelkandidaten aus Eingabewörtern
  2. Erstellen Sie ein Diagramm mit einer Kombination von Artikelkandidaten
  3. Wählen Sie den optimalen Pfad aus dem Diagramm aus (der japanische Wikipedia-Entitätsvektor wird zur Berechnung des optimalen Pfads verwendet).

Wenn Sie den Betriebsprozess von MeCab kennen, können Sie sich den zweiten Prozess vorstellen. Es gibt einen guten Artikel, der den Betriebsprozess von MeCab auf dem technischen Blog von Cookpad vorgestellt hat, also werde ich ihn veröffentlichen. In diesem Artikel ist die Struktur "Gitter" das Diagramm, das wir hier erstellen.

Übrigens hängen die Wikipedia-Artikelinformationen von den Wortinformationen des japanischen Wikipedia-Entitätsvektormodells ab. Neue Artikel, die nach der zweiten Jahreshälfte 2016 erschienen sind, unterliegen daher keiner Wikifizierung. Ich hoffe, dass auch der japanische Wikipedia-Entitätsvektor aktualisiert wird (|ω ・`) Chira|ω ・`) Chira|ω ・`) Chira

Zusammenfassung

-Ich habe [Wikification-Paket] erstellt (https://pypi.python.org/pypi/word2vec-wikification-py) ――Wenn Sie Wikify verwenden können, können Sie Schlüsselwörter erwerben und Mehrdeutigkeiten beseitigen. ――Tohoku University Inuiken ist unglaublich! ――Bitte spenden Sie an Wikipedia und schreiben Sie Artikel für die Wikification-Technologie.


[^ 1]: Die Knospen sind süß, nicht wahr (* ´ω ` *) [^ 2]: In Bezug auf WikiData werde ich einen Artikel darüber schreiben, wie man es benutzt. [^ 3]: Auf diese Weise wird in der Welt von Wikipedia darauf hingewiesen: "Es besteht die Gefahr einer unabhängigen Recherche. Bitte geben Sie die Quelle an."

Recommended Posts

Versuchen wir Wikification ~ Informationsextraktion mit Wikipedia & Disambiguation ~
Versuchen wir die neuronale maschinelle Übersetzung mit Transformer
Versuchen wir die Echtzeit-Objekterkennung mit Faster R-CNN