I Проанализировали предварительно загруженные 300-размерные векторы в 768-размерные векторы, просто проведя дополнительные 468 нулей. Я сделал это так, чтобы это было совместимо с матрицами запроса, ключей и значений, которые я загрузил в Дистильберт с помощью библиотеки трансформаторов. Ниже мой код < /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>
Матрица ввода представляет собой матрицу (ndarray) всех слов, которые вводят мой пользователь. Это часть механизма самостоятельного внимания, который я написал, который будет создавать модифицированную матрицу, которую я подам в сеть подачи вперед, которая затем даст мне эмоциональный тон текста моего пользователя. Мне нужно знать, приведет ли добавление этих дополнительных нулей к тому, что мои результаты будут искажены из -за неверного механизма самообслуживания. Важно отметить, что причина, по которой я добавил эти нули, заключается в том, что 3 извлеченные матрицы имеют форму (768, 768) каждый, и я должен размножить входную матрицу на эти параметры. Учитывая, что без добавления нулей форма входной матрицы составляет (num_of_words_of_input, 300), умножение матрицы (с помощью @) вернет ошибку (300! = 768). Я знаю, что я могу использовать токенизатор дистильберта, как не очень важно, чтобы я этого не сделал. Также обратите внимание, что моя логика, стоящая за этим, заключается в том, что когда вы добавляете нули к концу вектора, чтобы ввести его в более высокое пространство, он поддерживает такую же величину и направление, только пространство, в котором он находится, имеет больше размеров. Например, если 2D -вектор (3, 2) помещается в 3D, сделав его (3, 2, 0), то он указывает в одном и том же направлении и с одинаковой величиной только в трехмерном пространстве.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>
Я получил результаты, которые показали ожидаемые отношения между словами. Здесь нет ничего не кажется. Дело в том, что для слоя 0 (я вычислял точечные продукты для всех 6 слоев) все значения точечных продуктов были в негативных. Значит ли это, что я сделал не так? Для остальных 5 слоев некоторые результаты были 0 или ниже (ожидаемые), а другие были выше (также ожидаемые). < /P>
Я заинтригован, услышав любые возможные идеи, и любые ответы очень высоко ценится. Если вы знаете другой трансформатор с предварительно обученным запросом, матрицами ключей и значений, которые совместимы с моей входной матрицей (num_of_words_of_input, 300) (до расширения), то сообщите мне. Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/796 ... ic-meaning
Сохраняет ли добавление куча нулей в встраивание слов в семантическое значение? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Сохраняет ли добавление куча нулей в встраивание слов в семантическое значение?
Anonymous » » в форуме Python - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-