[PYTHON] Essayons la Wikification ~ Extraction d'informations à l'aide de Wikipedia et désambiguïsation ~

Que présenter dans cet article

Qu'est-ce que Wikifcation en premier lieu? ??

En un mot, __associer des mots dans le texte aux articles de Wikipedia __.

À titre d'exemple, disons que vous avez une phrase comme celle-ci:

«Depuis 2016, il y a cinq constructeurs, Yamaha, Honda, Suzuki, Ducati et Aprilia, et une équipe satellite qui peut prêter des machines de travaux. ''

Il s'agit du [Championnat de course sur route](https://ja.wikipedia.org/wiki/%E3%83%AD%E3%83%BC%E3%83%89%E3%83%AC%E3%83%BC C'est un passage de% E3% 82% B9% E4% B8% 96% E7% 95% 8C% E9% 81% B8% E6% 89% 8B% E6% A8% A9).

À l'heure actuelle, le «Suzuki» qui existe dans le texte est [Suzuki (société)](https://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%BA%E3%82% Il y a du travail à relier à AD_ (% E4% BC% 81% E6% A5% AD)). Ce processus s'appelle «Wikification».

Quels sont les avantages de la Wikification?

Il existe un bon article qui résume les avantages plus intelligemment que la lecture de cet article de l'UNCO, alors jetez-y également un œil.

Extraction de mots-clés importants

Il n'est pas exagéré de dire que les articles de Wikipédia sont généralement keywords.

Dans l'exemple de texte ci-dessus, «2016, Yamaha, Honda, Suzuki, Ducati, Aprilia, Maker, Works Machine, Loan», etc. peut être associé à Wikipedia.

Les mots clés «2016» et «prêt» sont-ils? Vous vous demandez peut-être, mais tant que l'article de Wikipédia existera, ce sera un mot-clé.

Après avoir ramassé des mots, y compris des mots inutiles sur Wikipédia, si vous les gérez bien, cela sera très utile comme extraction de mots-clés.

Désambiguïsation

Dans le processus de Wikification, un mot signifiant résolution d'ambiguïté (WSD) est également implémenté. C'est parce qu'il est courant dans le monde réel qu'un mot ait plusieurs significations.

Par exemple, «Aujourd'hui, je suis allé à TSUTAYA et j'ai pris un nouveau DVD de Bud. Disons que vous avez le texte `. [^ 1]

A ce moment, s'il s'agit d'une simple correspondance de texte, une ambiguïté se produira dans le "bourgeon". [Bouton d'actrice AV](https://ja.wikipedia.org/wiki/%E3%81%A4%E3%81%BC%E3%81%BF_(AV%E5%A5%B3%E5%84%] AA)) ou Flower Bud ou Kobukuro Song /% E8% 95% BE_ (% E3% 82% B3% E3% 83% 96% E3% 82% AF% E3% 83% AD% E3% 81% AE% E6% 9B% B2)) ・ Il existe plusieurs possibilités.

Bien sûr, nous, humains, pouvons déduire du contexte que "je vais à TSUTAYA et je joue un DVD, donc c'est probablement un bourgeon (actrice audiovisuelle)!" C'est une excellente capacité humaine. La sélection de la signification du mot correct dans le contexte de cette manière s'appelle WSD. Il s'agit d'un domaine de recherche sur le traitement du langage naturel.

Wikification fait également du WSD lors du travail «d'association de mots avec des articles wikipedia».

Fonctionnalités pour l'apprentissage automatique

L'un des avantages de Wikipedia est qu'il s'agit de __ données structurées __. Plus précisément, le système de catégories et les modèles d'article jouent ce rôle.

Vous pouvez créer des graphiques de réseau à l'aide de la structure des catégories et des modèles d'article. Cela signifie que vous pouvez les utiliser comme informations utiles pour les tâches de classification et de regroupement de documents.

Malheureusement, Wikipédia n'est pas très bien adapté à cette fin. Les points suivants ont été signalés comme étant les causes. [^ 3]

Nous vous recommandons d'utiliser les données publiées par DBpedia ou WikiData. [^ 2] DBpedia et WikiData sont basés sur des règles, mais ils nettoient les données.

Alors, comment l'utilisez-vous?

J'ai créé un package de Wikification.

Le paquet lui-même sera installé avec pip install word2vec-wikification-py. (Je n'ai testé qu'avec Python 3.5.x.) Comme numpy et gensim sont nécessaires pour l'installation, nous vous recommandons d'utiliser Anaconda3.

Puis lancez ce script avec sh download_model.sh. Cela ne fonctionnera pas sans ce fichier modèle.

À partir de là, ce que vous faites dépend du cas d'utilisation.

Je veux Wikify à partir de l'état de texte brut, je veux Wikify à partir de l'état morphologiquement divisé

Tout d'abord, vous aurez besoin des deux éléments suivants.

Environnement de division morphologique

Si vous ne disposez pas d'un environnement pour la division morphologique, veuillez vous reporter à Mon article pour référence.

Préparation des données de vidage Mysql et Wikipedia

Concernant la configuration de Mysql, cela dépend de l'environnement, alors faites de votre mieux! (Marunage)

Pour les données de vidage de Wikipédia, voir Cette section du README.

Mettre en œuvre la wikificaion

Utilisez la fonction de word2vec_wikification_py.interface.predict_japanese_wiki_names_with_wikidump ().

La valeur de retour est «word2vec_wikification_py.word2vec_wikification_py.models.SequenceScore» stockée dans la liste. "Série de noms d'articles wikipedia plausible" par ordre décroissant de score

Pour le moment, si vous voulez une séquence de mots, vous pouvez obtenir la séquence de mots avec word2vec_wikification_py.word2vec_wikification_py.models.SequenceScore.get_tokens ().

Voir exemple pour plus de détails.

Je connais la liste des candidats aux titres d'articles de Wikipédia. Je veux faire du WSD.

Peut-être que certains d'entre vous ont déjà fini de lister les candidats à l'article de Wikipédia par certains moyens.

Dans ce cas, suivez les étapes ci-dessous pour exécuter WSD.

  1. Générez word2vec_wikification_py.word2vec_wikification_py.models. WikipediaArticleObject
  2. Lisez le fichier du modèle
  3. Appelez word2vec_wikification_py.interface. Compute_wiki_node_probability ()

Création d'informations sur les candidats

Commencez par créer une liste de candidats. Pour Yamaha, comme dans le code ci-dessous, entrez Yamaha ou Yamaha Motor et le nom de l'article wikipedia du candidat. À ce stade, n'oubliez pas de mettre le nom __article entre []. __ Si vous ne le placez pas entre «[]», la précision sera considérablement réduite.


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

Charger le fichier de modèle

C'est fait en une seule ligne. Sélectionnez ʻentity_vector.model.bin` pour le fichier modèle.


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

Appelez l'interface

Appelez word2vec_wikification_py.interface. Compute_wiki_node_probability () pour donner des informations sur le candidat et un fichier modèle.


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
        )

La valeur de retour est «word2vec_wikification_py.word2vec_wikification_py.models.SequenceScore» stockée dans la liste. "Série de noms d'articles wikipedia plausible" par ordre décroissant de score

Pour le moment, si vous voulez une séquence de mots, vous pouvez obtenir la séquence de mots avec word2vec_wikification_py.word2vec_wikification_py.models.SequenceScore.get_tokens ().

Comment ça marche?

Tout d'abord, comme principe majeur, ce paquet est construit sur Japanese Wikipedia Entity Vector. Voici les [résultats de recherche] de M. Suzuki (http://www.anlp.jp/proceedings/annual_meeting/2016/pdf_dir/A5-2.pdf) du laboratoire Inui de l'université de Tohoku. M. Suzuki, qui publie des résultats de recherche aussi merveilleux, est déçu.

Pour expliquer brièvement le rôle du vecteur d'entité Wikipedia japonais, il s'agit de __ "modèle word2vec entre les articles wikipedia" __. Par conséquent, il est possible de calculer la distance similaire entre les articles sur wikipedia.

Ensuite, l'histoire est: "Qu'as-tu fait?" Voici ce que nous faisons avec ce package:

  1. Créez des candidats à l'article wikipedia à partir des mots d'entrée
  2. Créez un graphique en utilisant une combinaison d'articles candidats
  3. Sélectionnez le chemin optimal dans le graphique (le vecteur d'entité Wikipedia japonais est utilisé pour calculer le chemin optimal)

Si vous connaissez le processus de fonctionnement de MeCab, vous pouvez imaginer le deuxième processus. Il y a un bon article qui a présenté le processus de fonctionnement de MeCab sur le blog technique de Cookpad, donc je le posterai. Dans cet article, la structure appelée "Lattice" est le graphique que nous créons ici.

À propos, les informations de l'article wikipedia dépendent des informations de mot du modèle vectoriel d'entité wikipedia japonais. Par conséquent, les nouveaux articles parus après la seconde moitié de 2016 ne sont pas soumis à la wikification. J'espère que le vecteur d'entité wikipedia japonais sera également mis à jour (|ω ・`) Chira|ω ・`) Chira|ω ・`) Chira

Résumé

-J'ai créé package de Wikification ――Si vous pouvez Wikify, vous pouvez acquérir des mots-clés et éliminer toute ambiguïté. ――Tohoku University Inuiken est incroyable! ――Veuillez faire un don à Wikipédia et rédiger des articles sur la technologie de Wikification.


[^ 1]: Les bourgeons sont mignons, n'est-ce pas (* ´ω ` *) [^ 2]: Concernant WikiData, j'écrirai un article sur la façon de l'utiliser. [^ 3]: L'écriture de cette manière est signalée dans le monde de Wikipédia, "Il y a un risque de recherche indépendante. Veuillez préciser la source."

Recommended Posts

Essayons la Wikification ~ Extraction d'informations à l'aide de Wikipedia et désambiguïsation ~
Essayons la traduction automatique neuronale avec Transformer
Essayons la détection d'objets en temps réel en utilisant Faster R-CNN