Dies ist die Aufzeichnung der 94. "Ähnlichkeitsberechnung mit WordSimilarity-353" von Language Processing 100 Knock 2015. Berechnet die Ähnlichkeit zwischen Wörtern in der Datei. Technisch gesehen ist es nur eine kleine Änderung in der Codierung für das, was ich bisher gemacht habe.
Verknüpfung | Bemerkungen |
---|---|
094.WordSimilarity-Ähnlichkeitsberechnung bei 353_1.ipynb | Antwortprogramm GitHub Link |
094.WordSimilarity-Ähnlichkeitsberechnung bei 353_2.ipynb | GitHub-Link für das Antwortprogramm der Gensim-Version |
100 Klicks Amateur-Sprachverarbeitung:94 | Ich bin Ihnen immer zu Dank verpflichtet, wenn ich auf 100 Sprachverarbeitung klopfe |
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 |
---|---|
gensim | 3.8.1 |
numpy | 1.17.4 |
pandas | 0.25.3 |
In Kapitel 10 werden wir weiter daran arbeiten, Wortvektoren aus dem vorherigen Kapitel zu lernen.
Geben Sie die Bewertungsdaten von The WordSimilarity-353 Test Collection ein und verwenden Sie die Wörter in der ersten und zweiten Spalte. Erstellen Sie ein Programm, das die Ähnlichkeit von berechnet und den Ähnlichkeitswert am Ende jeder Zeile hinzufügt. Wenden Sie dieses Programm auf den in 85 erstellten Wortvektor und den in 90 erstellten Wortvektor an.
Als ich die ZIP-Datei heruntergeladen habe, gab es mehrere Dateien, in denen ich "kombiniert.tab" verwendet habe. Die erste Zeile ist die Kopfzeile, es gibt zwei Wörter in den ersten beiden Spalten, und es scheint, dass der numerische Wert, den Menschen die Ähnlichkeit beurteilen, in die dritte Spalte kommt (Ähnlichkeit von 10 Punkten). Berechnen Sie für die Kosinusähnlichkeit, wie ähnlich sie ist, und setzen Sie sie in die 4. Spalte.
combined.tab
Word 1 Word 2 Human (mean)
love sex 6.77
tiger cat 7.35
tiger tiger 10.00
book paper 7.46
computer keyboard 7.62
computer internet 7.58
plane car 5.77
train car 6.31
telephone communication 7.50
Unterlassung
import csv
import numpy as np
import pandas as pd
#Ich habe beim Speichern keine Argumente angegeben'arr_0'Gespeichert in
matrix_x300 = np.load('./../09.Vektorraummethode(I)/085.matrix_x300.npz')['arr_0']
print('matrix_x300 Shape:', matrix_x300.shape)
group_t = pd.read_pickle('./../09.Vektorraummethode(I)/083_group_t.zip')
#Berechnung der Kosinusähnlichkeit
def get_cos_similarity(line):
try:
v1 = matrix_x300[group_t.index.get_loc(line[0])]
v2 = matrix_x300[group_t.index.get_loc(line[1])]
#Wenn der Vektor alle Null ist-Rückgabe 1
if np.count_nonzero(v1) == 0 \
or np.count_nonzero(v2) == 0:
line.extend([-1])
else:
line.extend([np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))])
except:
line.extend([-1])
return line
#Bewertungsdaten lesen
with open('./combined.tab') as file_in:
reader = csv.reader(file_in, delimiter='\t')
header = next(reader)
result = [get_cos_similarity(line) for line in reader]
with open('094.combine_1.txt', 'w') as file_out:
writer = csv.writer(file_out, delimiter='\t', lineterminator='\n')
writer.writerows(result)
Es gibt keine technische Erklärung, da es sich bisher nur um eine Kombination der Inhalte handelt. Das Ergebnis wird als tabulatorgetrennte Textdatei ohne Kopfzeilen ausgegeben. Es mag natürlich sein, aber es unterscheidet sich stark von der Ähnlichkeit, die der Mensch festlegt. Dies extrahiert keine ähnlichen Wörter, daher dauert es weniger als eine Sekunde.
text:094.combine_1.txt
love sex 6.77 0.28564147035983395
tiger cat 7.35 0.848285056343736
tiger tiger 10.00 1.0000000000000002
book paper 7.46 0.4900762715360672
computer keyboard 7.62 0.09513773584009234
computer internet 7.58 0.2659421289876719
plane car 5.77 0.48590778050802136
train car 6.31 0.2976902017313069
telephone communication 7.50 0.1848868997304664
television radio 6.77 0.7724947668094843
Unterlassung
import csv
import numpy as np
from gensim.models import Word2Vec
model = Word2Vec.load('./090.word2vec.model')
print(model)
#Berechnung der Kosinusähnlichkeit
def get_cos_similarity(line):
try:
v1 = model.wv[line[0]]
v2 = model.wv[line[1]]
#Wenn der Vektor alle Null ist-Rückgabe 1
if np.count_nonzero(v1) == 0 \
or np.count_nonzero(v2) == 0:
line.extend([-1])
else:
line.extend([np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))])
except KeyError:
line.extend([-1])
return line
#Bewertungsdaten lesen
with open('./combined.tab') as file_in:
reader = csv.reader(file_in, delimiter='\t')
header = next(reader)
result = [get_cos_similarity(line) for line in reader]
with open('094.combine_2.txt', 'w') as file_out:
writer = csv.writer(file_out, delimiter='\t', lineterminator='\n')
writer.writerows(result)
Es ist nicht viel anders als mein eigenes Programm. Das Ergebnis ist in der Gensim-Version viel besser als im selbst erstellten Programm.
text:094.combine_2.txt
love sex 6.77 0.5481953
tiger cat 7.35 0.7811356
tiger tiger 10.00 1.0
book paper 7.46 0.5549785
computer keyboard 7.62 0.6746693
computer internet 7.58 0.6775914
plane car 5.77 0.5873176
train car 6.31 0.6229327
telephone communication 7.50 0.52026355
television radio 6.77 0.7744317
Unterlassung
Recommended Posts