[PYTHON] 100 Sprachverarbeitung Knock-94 (mit Gensim): Ähnlichkeitsberechnung mit WordSimilarity-353

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.

Referenzlink

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

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
gensim 3.8.1
numpy 1.17.4
pandas 0.25.3

Aufgabe

Kapitel 10: Vektorraummethode (II)

In Kapitel 10 werden wir weiter daran arbeiten, Wortvektoren aus dem vorherigen Kapitel zu lernen.

94. Ähnlichkeitsberechnung mit WordSimilarity-353

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.

Problemergänzung

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

Antworten

Selbst erstelltes Antwortprogramm [094. Ähnlichkeitsberechnung mit WordSimilarity-353_1.ipynb](https://github.com/YoheiFukuhara/nlp100/blob/master/10.%E3%83%99%E3%82%AF % E3% 83% 88% E3% 83% AB% E7% A9% BA% E9% 96% 93% E6% B3% 95% 20 (II) /094.WordSimilarity-353%E3%81%A7%E3% 81% AE% E9% A1% 9E% E4% BC% BC% E5% BA% A6% E8% A8% 88% E7% AE% 97_1.ipynb)

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)

Kommentar beantworten

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

Antwortprogramm für die Gensim-Version [094. Ähnlichkeitsberechnung mit WordSimilarity-353_2.ipynb](https://github.com/YoheiFukuhara/nlp100/blob/master/10.%E3%83%99%E3%82% AF% E3% 83% 88% E3% 83% AB% E7% A9% BA% E9% 96% 93% E6% B3% 95% 20 (II) /094.WordSimilarity-353%E3%81%A7%E3 % 81% AE% E9% A1% 9E% E4% BC% BC% E5% BA% A6% E8% A8% 88% E7% AE% 97_2.ipynb)

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)

Kommentar beantworten

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

100 Sprachverarbeitung Knock-94 (mit Gensim): Ähnlichkeitsberechnung mit WordSimilarity-353
100 Sprachverarbeitung Knock-90 (mit Gensim): Lernen mit word2vec
100 Sprachverarbeitung Knock-95 (mit Pandas): Bewertung mit WordSimilarity-353
Sprachverarbeitung 100 Klopfen-88: 10 Wörter mit hoher Ähnlichkeit
Sprachverarbeitung 100 Knock-87: Wortähnlichkeit
100 Sprachverarbeitung Knock-92 (mit Gensim): Anwendung auf Analogiedaten
100 Sprachverarbeitungsklopfen mit Python (Kapitel 1)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 3)
Sprachverarbeitung 100 Knocks-31 (mit Pandas): Verben
100 Sprachverarbeitung Knock-73 (mit Scikit-Learn): Lernen
100 Sprachverarbeitung Knock-74 (mit Scicit-Learn): Vorhersage
100 Sprachverarbeitung Knock-38 (mit Pandas): Histogramm
100 Sprachverarbeitung Knock-97 (mit Scicit-Learn): k-bedeutet Clustering
Ich habe mit GiNZA v3.1 Kapitel 4 100 Sprachverarbeitungsklopfen 2020 durchgeführt
100 Sprachverarbeitung Knock-33 (mit Pandas): Sahen Nomen
100 Sprachverarbeitungsklopfen (2020): 28
100 Sprachverarbeitung Knock-71 (mit Stanford NLP): Stoppwort
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 2)
100 Sprachverarbeitung Knock-96 (unter Verwendung von Gensim): Extraktion des Vektors in Bezug auf den Ländernamen
100 Sprachverarbeitung Knock-35 (mit Pandas): Nomenklatur
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 1)
100 Sprachverarbeitungsklopfen (2020): 38
100 Sprachverarbeitung klopfen 00 ~ 02
100 Sprachverarbeitung Knock-39 (mit Pandas): Zipf-Gesetz
100 Sprachverarbeitung Knock-34 (mit Pandas): "B von A"
100-Sprach-Verarbeitung Knock-79 (mit Scikit-Learn): Präzisions-Recall-Grafikzeichnung
100 Sprachverarbeitung Knock-20 (unter Verwendung von Pandas): Lesen von JSON-Daten
100 Sprachverarbeitung Knock-32 (mit Pandas): Prototyp des Verbs
100-Sprach-Verarbeitung Knock-98 (unter Verwendung von Pandas): Clustering nach Ward-Methode
100 Sprachverarbeitung Knock-75 (mit Scicit-Learn): Gewicht der Identität
100 Sprachverarbeitung Knock-99 (mit Pandas): Visualisierung durch t-SNE
100 Sprachverarbeitung Knock-72 (unter Verwendung von Stanford NLP): Identitätsextraktion
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 Sprachverarbeitung Knock Kapitel 1
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 Sprachverarbeitung klopfen 2020 [00 ~ 59 Antwort]
100 Amateur-Sprachverarbeitungsklopfen: 67
Sprachverarbeitung 100 Knock-80 (ersetzt durch regulären Ausdruck): Korpusformatierung
100 Sprachverarbeitung Knock: Kapitel 2 UNIX-Befehlsgrundlagen (mit Pandas)
100 Sprachverarbeitung Knock-83 (mit Pandas): Messung der Wort- / Kontexthäufigkeit
100 Sprachverarbeitung Knock-30 (unter Verwendung von Pandas): Lesen der Ergebnisse der morphologischen Analyse
Lernen Sie mit "Google Colaboratory" ganz einfach 100 Sprachverarbeitungsklopfen 2020.
100 Sprachverarbeitung Knock-51: Wortausschnitt
100 Sprachverarbeitung Knock-58: Extraktion von Taple
100 Sprachverarbeitung Knock-57: Abhängigkeitsanalyse
100 Sprachverarbeitung Knock-50: Satzumbruch
100 Sprachverarbeitung Knock Kapitel 1 (Python)
100 Sprachverarbeitung Knock Kapitel 2 (Python)
100 Sprachverarbeitung Knock-25: Vorlagenextraktion