Dies ist die Aufzeichnung der 87. "Wortähnlichkeit" von Language Processing 100 Knock 2015. Verwenden Sie schließlich den Wortvektor, um die Ähnlichkeit zwischen Wörtern zu ermitteln. Es fühlt sich an, als wäre die Vorverarbeitung endlich vorbei und es ist das Hauptthema. Ich möchte die Ähnlichkeit zwischen Wörtern mithilfe meiner E-Mail oder des Protokolls einer Besprechung feststellen. Verwenden Sie Cosinus-Ähnlichkeit für Ähnlichkeit. Als ich in der High School Dreiecksfunktionen lernte, war es wirklich nützlich zu fühlen, "wofür ist es nützlich?" Programmatisch ist es nicht schwierig.
Verknüpfung | Bemerkungen |
---|---|
087.Wortähnlichkeit.ipynb | Antwortprogramm GitHub Link |
100 Klicks Amateur-Sprachverarbeitung:87 | 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 einen 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 in> 85 erhaltenen Wortbedeutungsvektor und berechnen Sie die Kosinusähnlichkeit zwischen "USA" und "USA". Beachten Sie jedoch, dass "USA" intern als "USA" ausgedrückt wird.
Die Kosinusähnlichkeit ist die folgende Formel, die durch Teilen des inneren Produkts von Vektoren durch das Produkt von Normen erhalten wird. Weitere Informationen erhalten Sie bei Google. Dort finden Sie viele Informationen.
\frac{\boldsymbol{A}\cdot\boldsymbol{B}}{|\boldsymbol{A}|\,|\boldsymbol{B}|}
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)
# 'United States'Wann'U.S'Wortvektoranzeige
v1 = matrix_x300[group_t.index.get_loc('United_States')]
v2 = matrix_x300[group_t.index.get_loc('U.S')]
print(np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2)))
Die erste Hälfte ist das gleiche Programm wie das vorherige Klopfen. Jeder Wortvektor wird als Variablen "v1" und "v2" extrahiert.
# 'United States'Wann'U.S'Wortvektoranzeige
v1 = matrix_x300[group_t.index.get_loc('United_States')]
v2 = matrix_x300[group_t.index.get_loc('U.S')]
Alles was Sie tun müssen, ist zu berechnen. Das innere Produkt wird mit "Punkt" berechnet, und die Norm wird mit "Norm" berechnet.
print(np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2)))
Da der Maximalwert 1 ist (1 ist der gleiche), wäre 0,83 ziemlich ähnlich.
0.837516976284694