Dies ist die Aufzeichnung der 89. "Analogie nach additivem Wahlkreis" von Language Processing 100 Knock 2015. Da es sich um eine "additive Zusammensetzung" handelt, wird das Ergebnis durch Ausführen einer Vektoroperation erhalten. Es ist die berühmte Berechnung "König + Frau-Mann = Prinzessin". Es ist eine Berechnung wie "Chef-kompetent =?", Die ich in verschiedenen Dingen der Welt ausprobieren möchte.
Verknüpfung | Bemerkungen |
---|---|
089.Analogie durch additive Zusammensetzung.ipynb | Antwortprogramm GitHub Link |
100 Klicks Amateur-Sprachverarbeitung:89 | Ich bin Ihnen immer mit 100 Sprachverarbeitungsklopfen zu Dank verpflichtet |
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 |
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.
Lesen Sie den Bedeutungsvektor des in 85 erhaltenen Wortes, berechnen Sie vec ("Spanien") --vec ("Madrid") + vec ("Athen") und finden Sie 10 Wörter mit hoher Ähnlichkeit zu diesem Vektor und deren Ähnlichkeit. Gib es aus.
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)
group_t = pd.read_pickle('./083_group_t.zip')
# 'vec("Spain") - vec("Madrid") + vec("Athens")Vektorberechnung
vec = matrix_x300[group_t.index.get_loc('Spain')] \
- matrix_x300[group_t.index.get_loc('Madrid')] \
+ matrix_x300[group_t.index.get_loc('Athens')]
vec_norm = np.linalg.norm(vec)
#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-10(-11)Ausgabe bis zu eins nach dem anderen
for index in cos_sim_sorted[:-11:-1]:
print('{}\t{}'.format(group_t.index[index], cos_sim[index]))
Dies ist der Hauptteil dieser Zeit. Es wird nur addiert und subtrahiert.
# 'vec("Spain") - vec("Madrid") + vec("Athens")Vektorberechnung
vec = matrix_x300[group_t.index.get_loc('Spain')] \
- matrix_x300[group_t.index.get_loc('Madrid')] \
+ matrix_x300[group_t.index.get_loc('Athens')]
Dies ist das endgültige Ausgabeergebnis. Ist Griechenland die richtige Antwort in Bezug auf die Bedeutung, da die Hauptstadt Madrid von Spanien abgezogen und Athen hinzugefügt wird? Griechenland belegte mit einer Kosinusähnlichkeit von 0,686 den 12. Platz.
Spain 0.8178213952646727
Sweden 0.8071582503798717
Austria 0.7795030693787409
Italy 0.7466099164394225
Germany 0.7429125848677439
Belgium 0.729240312232219
Netherlands 0.7193045612969573
Télévisions 0.7067876635156688
Denmark 0.7062857691945504
France 0.7014078181006329
Recommended Posts