[PYTHON] Wer ist Embedding?

Einführung

Wenn Sie die Verarbeitung natürlicher Sprache durch tiefes Lernen berühren, Ich stoße auf einen unbekannten Typen namens Embedding.

Direkt ins Japanische übersetzt, ist es ** eingebettet **. time_cupsule_kids_30.png

~~ Ich verstehe die Bedeutung nicht ~~ Ich bin mir nicht sicher, also habe ich nachgeschlagen.

Welche Art von Operation?

Das Konvertieren einer natürlichen Sprache in eine berechenbare Form scheint als Einbettung bezeichnet zu werden. In vielen Fällen bezieht es sich auf ** Operationen, die Wörter, Sätze usw. in Vektordarstellungen ** konvertieren.

Wofür?

Es gibt zwei Hauptgründe.

1. Damit der Computer verarbeiten kann

Grundsätzlich sind aktuelle Algorithmen für maschinelles Lernen nicht für die Verarbeitung von Zeichenfolgentypen ausgelegt. Daher muss es in eine berechenbare Form umgewandelt werden.

2. Da zu erwarten ist, dass sich die Genauigkeit je nach Konvertierungsmethode verbessert

Durch die Entwicklung einer Vektorausdrucksmethode wird nicht nur eine berechenbare Form erstellt. Sie können die Eigenschaften von Wörtern und Sätzen in einem Vektor ausdrücken.

Zum Beispiel durch Konvertieren von Wörtern mit ähnlichen Bedeutungen in enge Vektoren **, Sie können die Bedeutung (wie) eines Wortes durch die Entfernung und Ähnlichkeit des Vektors ausdrücken.

Ich werde es vorerst verschieben

Ich habe es so geschrieben, aber ich kann es nicht wirklich fühlen, wenn ich es nicht verschiebe, also schreibe ich den Code.

Technologie verwendet

Betten wir es in ** Word2Vec ** ein, eine Bibliothek namens gensim, die einfach zu implementieren ist. Ich habe das folgende vorgefertigte Modell so verwendet, wie es ist.

Versuchen Sie verschiedene einzubetten

Versuchen Sie vorerst, "Guten Morgen" und "Guten Abend" einzubetten.

print(model["Guten Morgen"])

# [ 0.36222297 -0.5308175   0.97112703 -0.50114137 -0.41576928  1.7538059
#  -0.17550747 -0.95748925 -0.9604152  -0.0804095  -1.160322    0.22136442
# ...

print(model["Guten Abend"])

# [-0.13505702 -0.11360763  0.00522657 -0.01382224  0.03126004  0.14911242
#   0.02867801 -0.02347831 -0.06687803 -0.13018233 -0.01413341  0.07728481
# ...

Sie können sehen, dass die Zeichenfolge in einen Vektor konvertiert wurde.

.. .. .. Deshalb fühlte ich mich wie gesagt, also werde ich prüfen, ob ich die Bedeutung ausdrücken kann.

Überprüfen Sie die Ähnlichkeit

Werfen wir einen Blick auf die Kosinusähnlichkeit, die häufig bei der Berechnung der Dokumentähnlichkeit verwendet wird. Übrigens wird die Kosinusähnlichkeit zwischen 0 und 1 ausgedrückt, und je näher sie an ** 1 liegt, desto ähnlicher ist sie **.

Schauen wir uns zunächst die Ähnlichkeit zwischen ** "Guten Morgen" und "Guten Abend" ** an.

print(cos_similarity(model["Guten Morgen"],model["Guten Abend"]))
# 0.8513177

Die Punktzahl betrug 0,85 ... Scheint ziemlich nah.

Betrachten wir nun den Grad der Ähnlichkeit zwischen Wörtern, die entfernte Bedeutungen haben.


print(cos_similarity(model["Guten Morgen"],model["Hijiki"]))
# 0.17866151

Die Punktzahl war 0,17 ... ** "Guten Morgen" und "Hijiki" ** können als weit weg bezeichnet werden.

Es scheint, dass der Vektor eine Bedeutung in Bezug auf die Erfahrung hat.

abschließend

Ich hatte das Gefühl, das Bild von Embedding erfassen zu können. Ich habe gehört, dass BERT's Embedding, das ich vor einiger Zeit gesummt habe, wirklich gut ist, also werde ich es versuchen.

Code

import numpy as np
import gensim

#Modell laden
model_path = "entity_vector/entity_vector.model.bin"
model = gensim.models.KeyedVectors.load_word2vec_format(model_path, binary=True)

#Kosinusähnlichkeit
def cos_similarity(a,b):
    return np.dot(a,b) / ((np.sqrt(np.dot(a,a))) * (np.sqrt(np.dot(b,b))))

print(model["Guten Morgen"])
print(model["Guten Abend"])

print(cos_similarity(model["Guten Morgen"],model["Guten Abend"]))
print(cos_similarity(model["Guten Morgen"],model["Hijiki"]))

Recommended Posts

Wer ist Embedding?
Was ist statistische Modellierung?
Welches ist schließlich das beliebteste Python-Visualisierungstool?
Immerhin ist es falsch, mit Python-Subprozess zu katzen.
[Linux] Wer ist der Hintergrundjob? ??