Behält das Hinzufügen einer Reihe von Nullen zu Wort -Einbettungen die semantische Bedeutung bei?Python

Python-Programme
Anonymous
 Behält das Hinzufügen einer Reihe von Nullen zu Wort -Einbettungen die semantische Bedeutung bei?

Post by Anonymous »

Ich habe vor heruntergeladene 300-dimensionale Vektoren in 768 dimensionale Vektoren analysiert, indem sie einfach weitere 468 Nullen hs. Ich habe dies getan, damit es mit der Abfrage-, Schlüssel- und Wertmatrizen, die ich von Distilbert mit der Transformers Library heruntergeladen habe, kompatibel ist. Unten ist mein Code < /p>
from transformers import DistilBertModel
import numpy as np

model = DistilBertModel.from_pretrained("distilbert-base-uncased")

layer_0 = model.transformer.layer[0]

W_q = layer_0.attention.q_lin.weight.detach().numpy()
W_k = layer_0.attention.k_lin.weight.detach().numpy()
W_v = layer_0.attention.v_lin.weight.detach().numpy()

zeros = np.zeros((len(input_matrix), 468))
expanded_matrix = np.hstack((input_matrix, zeros))
< /code>
Die Eingabematrix ist eine Matrix (nDarray) aller Wörter, die meine Benutzer eingibt. Dies ist Teil des Selbstaufmerksamkeitsmechanismus, den ich geschrieben habe und der eine modifizierte Matrix erzeugt, die ich in ein Feed -Forward -Netzwerk einfügen werde, das mir dann den emotionalen Ton des Textes meines Benutzers gibt. Ich muss wissen, ob das Hinzufügen dieser zusätzlichen Nullen dazu führt, dass meine Ergebnisse aufgrund eines falschen Selbstaufschlagsmechanismus verzerrt werden. Es ist wichtig zu beachten, dass der Grund, warum ich diese Nullen hinzugefügt habe, darin besteht, dass die 3 extrahierten Matrizen von jeweils Form (768, 768) sind und ich muss mit diesen Parametern die Eingangsmatrix multiplizieren. Wenn man bedenkt, dass die Form der Eingangsmatrix ohne das Hinzufügen der Nullen (num_of_words_of_input, 300) ist, gibt die Matrix -Multiplikation (mit @) einen Fehler zurück (300! = 768). Ich bin mir bewusst, dass ich den Distilbert -Tokener verwenden kann, aber es ist unbedingt erforderlich, dass ich es nicht tue. Beachten Sie auch, dass meine Logik dahinter darin besteht, dass Sie, wenn Sie Nullen zum Ende eines Vektors hinzufügen, um sie in einen höherdimensionalen Raum einzugeben, die gleiche Größe und Richtung beibehält, nur der Raum, in dem es sich befindet, hat mehr Abmessungen. Zum Beispiel, wenn der 2D -Vektor (3, 2) durch die Herstellung von (3, 2, 0) in die gleiche Richtung und mit der gleichen Größe nur in einem 3D -Raum zeigt.Q = expanded_matrix @ W_q
#Q = Query of matrix so that the query of the first word in my input corresponds with the first row of Q
K = expanded_matrix @ W_k
#Same here
V = expanded_matrix @ W_v
#Same her as well
< /code>
Ich habe Ergebnisse erhalten, die erwartete Beziehungen zwischen Wörtern zeigten. Hier scheint nichts wirklich zu sein. Für die Schicht 0 (ich habe Punktprodukte für alle 6 Schichten berechnet) befanden sich alle DOT -Produktwerte in den Negativen. Bedeutet das, was ich als falsch gemacht habe? Für die anderen 5 Schichten waren einige Ergebnisse 0 oder unter (erwartet) und andere waren höher (auch erwartet). Wenn Sie einen anderen Transformator mit vorgebildeter Abfrage-, Schlüssel- und Wertmatrizen kennen, die mit meiner Eingangsmatrix (num_of_words_of_input, 300) (vor der Erweiterung) kompatibel sind, informieren Sie mich. Danke!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post