Я читал и кодировал для задачи машинного перевода и наткнулся на два разных руководства.
Одним из них является бумажная реализация создания подписей с использованием визуального внимания, в которой они использовали функции изображения [64,2048]
таким образом, что каждое изображение представляет собой предложение из 64 слов, а каждое слово в предложении имеет вложение длиной 2048. Я полностью понимаю эту реализацию, и вот код для Bahdanau's Additive style Attention
ниже:
class BahdanauAttention(tf.keras.Model):
def __init__(self, units):
super(BahdanauAttention, self).__init__()
self.W1 = tf.keras.layers.Dense(units)
self.W2 = tf.keras.layers.Dense(units)
self.V = tf.keras.layers.Dense(1)
def call(self, features, hidden):
hidden_with_time_axis = tf.expand_dims(hidden, 1)
attention_hidden_layer = (tf.nn.tanh(self.W1(features) + self.W2(hidden_with_time_axis)))
score = self.V(attention_hidden_layer)
attention_weights = tf.nn.softmax(score, axis=1)
context_vector = attention_weights * features
context_vector = tf.reduce_sum(context_vector, axis=1)
return context_vector, attention_weights
Но когда я перешел к Задаче перевода нейронного машинного языка, я обнаружил там этот комплекс, который я я не могу понять, что здесь происходит:
class BahdanauAttention(tf.keras.layers.Layer):
def __init__(self, units):
super().__init__()
self.W1 = tf.keras.layers.Dense(units, use_bias=False)
self.W2 = tf.keras.layers.Dense(units, use_bias=False)
self.attention = tf.keras.layers.AdditiveAttention()
def call(self, query, value, mask):
w1_query = self.W1(query)
w2_key = self.W2(value)
query_mask = tf.ones(tf.shape(query)[:-1], dtype=bool)
value_mask = mask
context_vector, attention_weights = self.attention(inputs = [w1_query, value, w2_key],mask=[query_mask, value_mask],return_attention_scores = True,)
return context_vector, attention_weights
Я хочу спросить
- В чем разница между ними?
- Почему мы не можем использовать код для создания титров во втором или наоборот?
decoder_state_t
из оценок, текущего слова иhidden_decoder state_t-1
. А потом снова использовать это слово, очки и этоnew_decoder_state_t
для создания векторов? Я думаю, они делают это на втором коде. Вы можете прокомментировать? - person Deshwal   schedule 28.05.2021