[PYTHON] Sprachverarbeitung 100 Klopfen-88: 10 Wörter mit hoher Ähnlichkeit

Dies ist die Aufzeichnung der 88. "10 Wörter mit hoher Ähnlichkeit" von Language Processing 100 Knock 2015. Extrahieren Sie ähnliche Typen aus jedem Wort. Dies ist auch der Vorgang, den Sie von Ihrem Postfach oder Protokoll aus ausführen möchten. Technisch ist es fast das gleiche wie der vorherige Inhalt.

Referenzlink

Verknüpfung Bemerkungen
088.10 Wörter mit hoher Ähnlichkeit.ipynb Antwortprogramm GitHub Link
100 Klicks Amateur-Sprachverarbeitung:88 Ich bin Ihnen immer mit 100 Sprachverarbeitungsklopfen zu Dank verpflichtet

Umgebung

Art Ausführung Inhalt
OS Ubuntu18.04.01 LTS Es läuft virtuell
pyenv 1.2.15 Ich benutze pyenv, weil ich manchmal mehrere Python-Umgebungen benutze
Python 3.6.9 python3 auf pyenv.6.Ich benutze 9
3.7 oder 3.Es gibt keinen tiefen Grund, keine 8er-Serie zu verwenden
Pakete werden mit venv verwaltet

In der obigen Umgebung verwende ich die folgenden zusätzlichen Python-Pakete. Einfach mit normalem Pip installieren.

Art Ausführung
numpy 1.17.4
pandas 0.25.3

Aufgabe

Kapitel 9: Vektorraummethode (I)

enwiki-20150112-400-r10-105752.txt.bz2 Ist der Text von 105.752 Artikeln zufällig 1/10 aus den Artikeln ausgewählt, die zum 12. Januar 2015 aus etwa 400 Wörtern oder mehr der englischen Wikipedia-Artikel bestehen und im bzip2-Format komprimiert sind. Gibt es. Mit diesem Text als Korpus möchte ich einen Vektor (verteilten Ausdruck) lernen, der die Bedeutung eines Wortes ausdrückt. In der ersten Hälfte von Kapitel 9 wird der Prozess des Lernens des Wortvektors implementiert, indem er in mehrere Prozesse unterteilt wird, indem die Hauptkomponentenanalyse auf die aus dem Korpus erstellte Matrix für das gleichzeitige Auftreten von Wortkontexten angewendet wird. In der zweiten Hälfte von Kapitel 9 wird der durch Lernen erhaltene Wortvektor (300 Dimensionen) verwendet, um die Ähnlichkeit von Wörtern zu berechnen und zu analysieren (analog).

Beachten Sie, dass bei gehorsamer Implementierung von Problem 83 eine große Menge (ca. 7 GB) Hauptspeicher erforderlich ist. Wenn Ihnen der Speicher ausgeht, erstellen Sie einen Prozess oder ein 1/100 Stichproben-Korpus enwiki-20150112-400-r100-10576.txt.bz2. Verwenden Sie /nlp100/data/enwiki-20150112-400-r100-10576.txt.bz2).

Diesmal * 1/100 Stichprobenkorpus enwiki-20150112-400-r100-10576.txt.bz2 400-r100-10576.txt.bz2) "* wird verwendet.

88. 10 Wörter mit hoher Ähnlichkeit

Lesen Sie den Bedeutungsvektor des in> 85 erhaltenen Wortes und geben Sie 10 Wörter mit hoher Kosinusähnlichkeit zu "England" und deren Ähnlichkeit aus.

Antworten

Antwortprogramm [088. 10 Wörter mit hoher Ähnlichkeit.ipynb](https://github.com/YoheiFukuhara/nlp100/blob/master/09.%E3%83%99%E3%82%AF%E3%83 % 88% E3% 83% AB% E7% A9% BA% E9% 96% 93% E6% B3% 95% 20 (I) / 088.% E9% A1% 9E% E4% BC% BC% E5% BA % A6% E3% 81% AE% E9% AB% 98% E3% 81% 84% E5% 8D% 98% E8% AA% 9E10% E4% BB% B6.ipynb)

import numpy as np
import pandas as pd

#Ich habe beim Speichern keine Argumente angegeben'arr_0'Gespeichert in
matrix_x300 = np.load('085.matrix_x300.npz')['arr_0']

print('matrix_x300 Shape:', matrix_x300.shape)

# 'Lesen Sie den englischen Wortvektor und berechnen Sie die Norm
v1 = matrix_x300[group_t.index.get_loc('England')]
v1_norm = np.linalg.norm(v1)


#Berechnung der Kosinusähnlichkeit
def get_cos_similarity(v2):
    
    #Wenn der Vektor alle Null ist-Rückgabe 1
    if np.count_nonzero(v2) == 0:
        return -1
    else:
        return np.dot(v1, v2) / (v1_norm * np.linalg.norm(v2))

cos_sim = [get_cos_similarity(matrix_x300[i]) for i in range(len(group_t))]
print('Cosign Similarity result length:', len(cos_sim))

#Sortieren Sie, indem Sie den Index verlassen
cos_sim_sorted = np.argsort(cos_sim)

#Ab dem Ende des Arrays in aufsteigender Reihenfolge sortiert-11(-12)Ausgabe bis zu eins nach dem anderen(Die Spitze ist England selbst)
for index in cos_sim_sorted[:-12:-1]:
    print('{}\t{}'.format(group_t.index[index], cos_sim[index]))

Kommentar beantworten

Der Teil zur Berechnung der Kosinusähnlichkeit wird zu einer Funktion gemacht. Gemessen an der Funktion count_nonzero wird -1 zurückgegeben, wenn alle Vektoren Null sind.

#Berechnung der Kosinusähnlichkeit
def get_cos_similarity(v2):
    
    #Wenn der Vektor alle Null ist-Rückgabe 1
    if np.count_nonzero(v2) == 0:
        return -1
    else:
        return np.dot(v1, v2) / (v1_norm * np.linalg.norm(v2))

Das Ergebnis wird sofort mit der Einschlussnotation für das Array erhalten.

cos_sim = [get_cos_similarity(matrix_x300[i]) for i in range(len(group_t))]

Für die obige Berechnung dachte ich, dass es schneller wäre, diese apply_along_axis für numpy zu verwenden, aber sie war ziemlich langsam, daher wird sie nicht übernommen.

cos_sim = np.apply_along_axis(get_cos_similarity, 1, matrix_x300)

Dies ist das endgültige Ausgabeergebnis. Schottland und Italien liegen an der Spitze. Es ist überraschend, dass es auch Japan gibt. Ist es, weil es ein Inselland ist?

England	1.0000000000000002
Scotland	0.6364961613062289
Italy	0.6033905306935802
Wales	0.5961887337227456
Australia	0.5953277272306978
Spain	0.5752511915429617
Japan	0.5611603300967408
France	0.5547284075334182
Germany	0.5539239745925412
United_Kingdom	0.5225684232409136
Cheshire	0.5125286144779688

Recommended Posts

Sprachverarbeitung 100 Klopfen-88: 10 Wörter mit hoher Ähnlichkeit
100 Sprachverarbeitungsklopfen mit Python 2015
Sprachverarbeitung 100 Knock-87: Wortähnlichkeit
100 Sprachverarbeitung Knock-94 (mit Gensim): Ähnlichkeitsberechnung mit WordSimilarity-353
100 Sprachverarbeitungsklopfen mit Python (Kapitel 3)
100 Sprachverarbeitungsklopfen (2020): 28
100 Sprachverarbeitungsklopfen (2020): 38
100 Sprachverarbeitung klopfen 00 ~ 02
Ich habe mit GiNZA v3.1 Kapitel 4 100 Sprachverarbeitungsklopfen 2020 durchgeführt
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 1)
100 Sprachverarbeitung klopfen 2020 [00 ~ 39 Antwort]
100 Sprachverarbeitung klopfen 2020 [00-79 Antwort]
100 Sprachverarbeitung klopfen 2020 [00 ~ 69 Antwort]
100 Sprachverarbeitung Knock 2020 Kapitel 1
100 Amateur-Sprachverarbeitungsklopfen: 17
100 Sprachverarbeitung klopfen 2020 [00 ~ 49 Antwort]
100 Sprachverarbeitung Knock-52: Stemming
100 Amateur-Sprachverarbeitungsklopfen: 07
100 Sprachverarbeitung Knock 2020 Kapitel 3
100 Sprachverarbeitung Knock 2020 Kapitel 2
100 Amateur-Sprachverarbeitungsklopfen: 09
100 Amateur-Sprachverarbeitungsklopfen: 47
100 Sprachverarbeitung Knock-53: Tokenisierung
100 Amateur-Sprachverarbeitungsklopfen: 97
100 Amateur-Sprachverarbeitungsklopfen: 67
100 Sprachverarbeitung Knock-95 (mit Pandas): Bewertung mit WordSimilarity-353
100 Sprachverarbeitung Knock-51: Wortausschnitt
100 Sprachverarbeitung Knock-58: Extraktion von Taple
100 Sprachverarbeitung Knock-57: Abhängigkeitsanalyse
Sprachverarbeitung 100 Knock-80 (ersetzt durch regulären Ausdruck): Korpusformatierung
100 Sprachverarbeitung Knock-50: Satzumbruch
100-Sprach-Verarbeitung Knock-81 (Batch-Ersatz): Umgang mit Ländernamen, die aus zusammengesetzten Wörtern bestehen
100 Sprachverarbeitung Knock Kapitel 1 (Python)
100 Sprachverarbeitung Knock Kapitel 2 (Python)
100 Sprachverarbeitung Knock-25: Vorlagenextraktion
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020
100 Sprachverarbeitung Knock-56: Co-Referenz-Analyse
Lösen von 100 Sprachverarbeitungsklopfen 2020 (01. "Patatokukashi")
Lernen Sie mit "Google Colaboratory" ganz einfach 100 Sprachverarbeitungsklopfen 2020.
Verarbeitung natürlicher Sprache 2 Wortähnlichkeit
100 Amateur-Sprachverarbeitungsklopfen: Zusammenfassung
Studieren Sie die Verarbeitung natürlicher Sprache mit Kikagaku
100 Sprachverarbeitung Knock 2020 Kapitel 2: UNIX-Befehle
100 Sprachverarbeitung Knock 2015 Kapitel 5 Abhängigkeitsanalyse (40-49)
100 Sprachverarbeitung Knock Kapitel 1 in Python
100 Sprachverarbeitung Knock 2020 Kapitel 4: Morphologische Analyse
100 Sprachverarbeitung Knock 2020 Kapitel 9: RNN, CNN
100 Sprachverarbeitung Knock-76 (mit Scicit-Learn): Beschriftung
100 Sprachverarbeitung Knock-55: Extraktion eindeutiger Ausdrücke
[Verarbeitung natürlicher Sprache] Vorverarbeitung mit Japanisch
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020: Kapitel 3
100 Sprachverarbeitung Knock-82 (Kontextwort): Kontextextraktion
100 Sprachverarbeitungsklopfen: Kapitel 1 Vorbereitungsbewegung
100 Sprachverarbeitung Knock 2020 Kapitel 6: Maschinelles Lernen
100 Sprachverarbeitung Knock Kapitel 4: Morphologische Analyse
Sprachverarbeitung 100 knock-86: Wortvektoranzeige
100 Sprachverarbeitung Knock 2020 Kapitel 10: Maschinelle Übersetzung (90-98)
100 Sprachverarbeitung Knock 2020 Kapitel 5: Abhängigkeitsanalyse
100 Sprachverarbeitung Knock-28: Entfernen des MediaWiki-Markups
100 Sprachverarbeitung Knock 2020 Kapitel 7: Word Vector