Как именно рассчитывается эта позиционная кодировка?
Предположим, что это сценарий машинного перевода, и это входные предложения,
english_text = [this is good, this is bad]
german_text = [das ist gut, das ist schlecht]
Теперь размер нашего входного словаря равен 4, а размер встраивания равен 4.
#words #embeddings
this - [0.5, 0.2, 0.3, 0.1]
is - [0.1, 0.2, 0.5, 0.1]
good - [0.9, 0.7, 0.9, 0.1]
bad - [0.7, 0.3, 0.4, 0.1]
В соответствии с инструкциями по преобразованию мы добавляем кодировку позиции каждого слова с встраиванием каждого слова, а затем передаем ее кодировщику, как показано на изображении ниже.
Что касается бумаги, они дали эту формулу для расчета кодировки позиции каждого слова,
Итак, вот как, я думаю, я могу это реализовать:
d_model = 4 # Embedding dimension
positional_embeddings = np.zeros((max_sentence_length, d_model))
max_sentence_length = 3 # as per my examples above
for position in range(maximum_sentence_length):
for i in range(0, d_model, 2):
positional_embeddings[position, i] = (
sin(position / (10000 ** ( (2*i) / d_model) ) )
)
positional_embeddings[position, i + 1] = (
cos(position / (10000 ** ( (2 * (i + 1) ) / d_model) ) )
)
Тогда новый вектор вложения будет
[[0.5, 0.2, 0.3, 0.1],
[0.1, 0.2, 0.5, 0.1],
[0.9, 0.7, 0.9, 0.1]] + positional_embeddings = NEW EMBEDDINGS
## shapes
3 x 4 + 3 x 4 = 3 x 4
Так будет производиться расчет в реализации? Исправьте меня, если в моей псевдо-реализации есть ошибка.
Если все верно, то у меня есть три сомнения, надеюсь, кто-то сможет их устранить,
1) Из приведенной выше реализации мы используем формулу sin для четных позиций и формулу cos для нечетных позиций, но я не мог понять причину этого? Я читал, что он использует циклические свойства, но не мог этого понять.
2) Есть ли причина для выбора 10000/(2i/d)
или 10000/(2i+1/d)
в качестве коэффициента масштабирования в формуле.
3) Все предложения не будут равны максимальной длине предложения, поэтому нам, возможно, придется дополнить предложение, поэтому мы также рассчитываем позиционные присоединения к маркерам заполнения.