[PYTHON] Ich habe SIF Rank auf ein japanisches Dokument angewendet und versucht, Schlüsselphrasen zu extrahieren

Bis zum 18. August 2020 gab es keinen Artikel, in dem ich versucht habe, den SIF-Rang auf japanische Dokumente anzuwenden. Daher werde ich ihn bis zu dem Punkt aufschreiben, an dem ich tatsächlich Schlüsselphrasen extrahiere. Ich denke, es gibt einige Ecken und Kanten, daher würde ich es begrüßen, wenn Sie darauf hinweisen könnten.

Einführung

Das Papier, das den SIF-Rang vorgeschlagen hat, und das ursprüngliche Repository sind hier. • SIFRank: A New Baseline for Unsupervised Keyphrase Extraction Based on Pre-trained Language Modelsunyilgdx/SIFRank

Der diesmal verwendete Code wird im folgenden Repository gespeichert. • tanajp/SIFRank_ja_model

Umgebung

• Google Colaboratory • Python 3.6.9 • allennlp 0.8.4 • nltk 3.4.3 • torch 1.2.0 • stanza 1.0.0

Grundeinstellung

Klonen Sie zunächst das vorhandene Repository hier. Laden Sie dann die japanische Version von ELMo von der Website AllenNLP herunter und platzieren Sie sie unter auxiliary_data im Ordner SIF Rank_ja_model. (Hier können Sie nur Gewichte herunterladen.)

Dieses Mal legen wir einen Ordner unter "Mein Laufwerk" ab und fahren fort. Platzieren Sie den zuvor geklonten Ordner unter "Mein Laufwerk" in Google Drive. Wählen Sie als Nächstes für die Einstellung von Google Colab "Laufzeittyp ändern" unter "Laufzeit" oben links aus, um die GPU zu ändern. Wählen Sie es aus und speichern Sie es.

Auf Google Drive bereitstellen

from google.colab import drive
drive.mount('/content/drive')

Wenn die Ausgabe wie folgt ist, ist sie erfolgreich.

Enter your authorization code:
··········
Mounted at /content/drive

Installation

Installieren Sie die erforderlichen Bibliotheken.

!pip install -r '/content/drive/My Drive/SIFRank_ja_model/requirements.txt'

Laden Sie wordnet und das japanische Strophenmodell herunter.


import nltk
import stanza

nltk.download('wordnet')
stanza.download('ja')

Implementierung des SIF-Ranges

test.py



import sys
sys.path.append('/content/drive/My Drive/SIFRank_ja_model')
sys.path.append('/content/drive/My Drive/SIFRank_ja_model/embeddings')
import stanza
import sent_emb_sif, word_emb_elmo
from model.method import SIFRank, SIFRank_plus

#download from https://allennlp.org/elmo
options_file = "https://exawizardsallenlp.blob.core.windows.net/data/options.json"
weight_file = "/content/drive/My Drive/SIFRank_ja_model/auxiliary_data/weights.hdf5"

ELMO = word_emb_elmo.WordEmbeddings(options_file, weight_file, cuda_device=0)
SIF = sent_emb_sif.SentEmbeddings(ELMO, lamda=1.0)
ja_model = stanza.Pipeline(
    lang="ja", processors={}, use_gpu=True
)
elmo_layers_weight = [0.0, 1.0, 0.0]

text = "Bitte geben Sie hier den Text ein."
keyphrases = SIFRank(text, SIF, ja_model, N=5,elmo_layers_weight=elmo_layers_weight)
keyphrases_ = SIFRank_plus(text, SIF, ja_model, N=5, elmo_layers_weight=elmo_layers_weight)

print(keyphrases)
print(keyphrases_)

Ausführungsergebnis

Als Beispiel [ANA, 500 Milliarden Yen Kapitalbeschaffungsgespräche - Wiki News](https://ja.wikinews.org/wiki/ANA%E3%80%815000%E5%84%84%E5%86%86 % E8% A6% 8F% E6% A8% A1% E3% 81% AE% E8% B3% 87% E6% 9C% AC% E8% AA% BF% E9% 81% 94% E5% 8D% 94% E8 Ich habe versucht, die Schlüsselphrase durch Eingabe des Textes von% AD% B0) zu extrahieren.

2020-08-17 17:21:13 INFO: Loading these models for language: ja (Japanese):
=======================
| Processor | Package |
-----------------------
| tokenize  | gsd     |
| pos       | gsd     |
| lemma     | gsd     |
| depparse  | gsd     |
=======================

2020-08-17 17:21:13 INFO: Use device: gpu
2020-08-17 17:21:13 INFO: Loading: tokenize
2020-08-17 17:21:13 INFO: Loading: pos
2020-08-17 17:21:14 INFO: Loading: lemma
2020-08-17 17:21:14 INFO: Loading: depparse
2020-08-17 17:21:15 INFO: Done loading processors!
(['Japan Policy Investment Bank', 'Kapitalbeschaffung', 'ana Holdings', 'Darlehen', 'Privates Finanzinstitut'], [0.8466373488741734, 0.8303728302151282, 0.7858931046897192, 0.7837600983935882, 0.7821878670623081])
(['Japan Policy Investment Bank', 'Nihon Keizai Shimbun', 'Alle Japan Air Transport', 'Kapitalbeschaffung', 'ana Holdings'], [0.8480482653338678, 0.8232344465718657, 0.8218706097094447, 0.8100789955114978, 0.8053839380458278])

Dies ist das Ergebnis des Extrahierens mit N = 5. Die endgültige Ausgabe sind die Schlüsselphrasen und ihre Punktzahlen. Das obere ist das Ausgabeergebnis von SIF Rank und das untere ist das Ausgabeergebnis von SIF Rank +. Da es sich um einen Artikel handelt, in dem ANA mit der Japan Policy Investment Bank und privaten Finanzinstituten Gespräche über die Finanzierung aufgenommen hat, scheint die Extraktion von Schlüsselphrasen erfolgreich zu sein.

Übrigens beziehen sich Tokenize, Pos, Lemma und Depparse auf Tokenisierung, POS-Tag-Zuweisung, Headword-Konvertierung und Analyse der Abhängigkeitsstruktur und werden derzeit per Zeilengruppe verarbeitet.

abschließend

Ich habe den SIF-Rang auf japanische Dokumente anwendbar gemacht und ihn tatsächlich verwendet. Der Parser kann alles sein, was ein japanisches Versionsmodell hat, aber diesmal habe ich eine Zeilengruppe verwendet. Darüber hinaus verwendet das japanische Stoppwortwörterbuch Slothlib. .. Sie können die Stoppwörter bearbeiten, indem Sie japanese_stopwords.txt unter auxiliary_data im Ordner SIFRank_ja_model neu schreiben.

Verweise

SIFRank: A New Baseline for Unsupervised Keyphrase Extraction Based on Pre-trained Language Modelsunyilgdx/SIFRankAllenNLPEinführung des ELMo-Modells (unter Verwendung von MeCab), mit dem umfangreiche japanische Wirtschaftsnachrichten gelernt wurdenÜberprüfung des Verwendungs- und Genauigkeitsvergleichs des ELMo-Modells (unter Verwendung von MeCab), mit dem ein umfangreiches japanisches Korpus von Wirtschaftsnachrichten gelernt wurdeGelernte ELMo mit AllenNLP-Rittanzu laden! -Slothlib

Recommended Posts

Ich habe SIF Rank auf ein japanisches Dokument angewendet und versucht, Schlüsselphrasen zu extrahieren
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe versucht, Bulls and Cows mit einem Shell-Programm zu erstellen
Ich habe versucht, Spieler- und Fertigkeitsnamen aus Sportartikeln zu extrahieren
Ich habe versucht, einen Linebot zu erstellen (Implementierung)
Ich habe versucht, einen Linebot zu erstellen (Vorbereitung)
Ich habe versucht, die Phase der Geschichte mit COTOHA zu extrahieren und zu veranschaulichen
Ich habe eine Web-API erstellt
Ich habe ein Beispiel für den Zugriff auf Salesforce mit Python und Bottle erstellt
Ich habe versucht, einen periodischen Prozess mit CentOS7, Selenium, Python und Chrome durchzuführen
Ich habe versucht, die Strichzeichnung mit Deep Learning aus dem Bild zu extrahieren
Ich habe versucht, eine einfache Bilderkennungs-API mit Fast API und Tensorflow zu erstellen
Ich habe versucht, eine Super-Resolution-Methode / ESPCN zu erstellen
Ich habe versucht, eine Super-Resolution-Methode / SRCNN build zu erstellen
Ich habe DCGAN implementiert und versucht, Äpfel zu generieren
Ich habe versucht, eine zufällige Zeichenfolge zu generieren
Ich habe versucht, eine Super-Resolution-Methode / SRCNN build zu erstellen
Ich habe versucht, eine Super-Resolution-Methode / SRCNN build zu erstellen
[Einführung in PID] Ich habe versucht, ♬ zu steuern und zu spielen
Ich habe ein ○ ✕ Spiel mit TensorFlow gemacht
Ich habe versucht, das Update von "Werde ein Romanautor" mit "IFTTT" und "Werde ein Romanautor API" zu benachrichtigen.
Ich habe versucht, einen "verdammt großen Literaturkonverter" zu machen.
Ich habe versucht, Funktionen mit SIFT von OpenCV zu extrahieren
Ich habe versucht, mit VOICEROID2 2 automatisch zu lesen und zu speichern
Ich habe versucht, DCGAN mit PyTorch zu implementieren und zu lernen
Ich habe eine Bibliothek erstellt, um japanische Sätze schön zu brechen
Ich habe versucht, CPython ein Post-Inkrement hinzuzufügen. Übersicht und Zusammenfassung
Ich habe versucht, einen Pseudo-Pachislot in Python zu implementieren
Ich habe versucht, ObjectId (Primärschlüssel) mit Pymongo zu generieren
Ich habe versucht, Linux Systemaufrufe und Scheduler hinzuzufügen
[Go + Gin] Ich habe versucht, eine Docker-Umgebung zu erstellen
Ich habe eine Python-Bibliothek erstellt, die einen rollierenden Rang hat
Ich habe versucht, Grad-CAM mit Keras und Tensorflow zu implementieren
Ich habe Kaokore, einen klassischen japanischen Datensatz, auf EfficientNet ausprobiert.
Python: Ich habe es mit Lügner und Ehrlichkeit versucht
Ich habe versucht, Scrapy auf Anaconda zu installieren und konnte es nicht
Ich habe versucht, ein Konfigurationsdiagramm mit Diagrammen zu zeichnen
Ich habe ein Tool erstellt, mit dem das Erstellen und Installieren eines öffentlichen Schlüssels etwas einfacher ist.
Als ich versuchte, PIL und matplotlib in einer virtuellen Umgebung zu installieren, war ich süchtig danach.
Als ich versuchte, eine Rails-Umgebung auf WSL2 (Ubuntu 20.04LTS) zu erstellen, stolperte ich und fiel hin.
Ich habe versucht, mit Kendra, das bei re: Invent 2019 angekündigt wurde, sofort einen Befehl zum Durchsuchen der Dokumentensuche auszuführen
Ich habe einen Server mit Python-Socket und SSL erstellt und versucht, über den Browser darauf zuzugreifen
Ich habe auch versucht, die Funktionsmonade und die Zustandsmonade mit dem Generator in Python nachzuahmen
[Grafikzeichnung] Ich habe versucht, ein mehrreihiges Balkendiagramm mit Matplotlib und Seaborn zu schreiben
Ich habe versucht zu debuggen.
Ich habe versucht, mit Quantx eine Linie mit gleitendem Durchschnitt des Volumens zu implementieren
Ich habe versucht, Überlebende der Titanic mit Kaggle vorherzusagen und einzureichen
Ich habe versucht, Zeichen aus Untertiteln zu extrahieren (OpenCV: tesseract-ocr edition)
Ich habe versucht, einen eindimensionalen Zellautomaten in Python zu implementieren
Ich habe versucht, automatisch einen Bericht mit der Markov-Kette zu erstellen
Ich habe versucht, die Informationen des Webs mit "Requests" und "lxml" abzurufen.
[Markov-Kette] Ich habe versucht, die Zitate in Python einzulesen.
Ich habe versucht, das Problem der Kombinationsoptimierung mit Qiskit zu lösen
Ich habe versucht "Wie man eine Methode in Python dekoriert"