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 **.
~~ Ich verstehe die Bedeutung nicht ~~ Ich bin mir nicht sicher, also habe ich nachgeschlagen.
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.
Es gibt zwei Hauptgründe.
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.
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 habe es so geschrieben, aber ich kann es nicht wirklich fühlen, wenn ich es nicht verschiebe, also schreibe ich den Code.
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 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.
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.
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.
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"]))