Я смотрю на пример встраивания слова Keras Glove, и мне непонятно, почему первая строка матрицы встраивания заполнена нулями.
Во-первых, индекс внедрения создается там, где слова связаны с массивами.
embeddings_index = {}
with open(os.path.join(GLOVE_DIR, 'glove.6B.100d.txt')) as f:
for line in f:
word, coefs = line.split(maxsplit=1)
coefs = np.fromstring(coefs, 'f', sep=' ')
embeddings_index[word] = coefs
Затем создается матрица внедрения путем просмотра слов из индекса, созданного токенизатором.
# prepare embedding matrix
num_words = min(MAX_NUM_WORDS, len(word_index) + 1)
embedding_matrix = np.zeros((num_words, EMBEDDING_DIM))
for word, i in word_index.items():
if i >= MAX_NUM_WORDS:
continue
embedding_vector = embeddings_index.get(word)
if embedding_vector is not None:
# words not found in embedding index will be all-zeros.
embedding_matrix[i] = embedding_vector
Так как цикл будет начинаться с i=1
, то первая строка будет содержать только нули и случайные числа, если матрица инициализирована иначе. Есть ли причина пропустить первую строку?