Хобрук: Ваш путь к мастерству в программировании

Матрица встраивания слов Keras имеет первую строку нулей

Я смотрю на пример встраивания слова 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, то первая строка будет содержать только нули и случайные числа, если матрица инициализирована иначе. Есть ли причина пропустить первую строку?


Ответы:


1

Все началось с того, что программисты Tokenizer по какой-то причине зарезервировали индекс 0, возможно, для какой-то совместимости (некоторые другие языки используют индексацию от 1) или по причинам техники кодирования.

Однако они используют numpy, где они хотят индексировать с помощью простого:

embedding_matrix[i] = embedding_vector

индексации, поэтому [0] проиндексированная строка остается заполненной нулями, и нет случая, когда, как писал "случайные числа, если матрица инициализирована по-другому", потому что этот массив был инициализирован нулями< /сильный>. Таким образом, из этой строки нам вообще не нужна первая строка, но вы не можете удалить ее, так как массив numpy потеряет выравнивание своей индексации с индексацией токенизатора.

30.12.2019
  • Да, спасибо, при оценке матрицы встраивания используется другая инициализация. 31.12.2019
  • Новые материалы

    Не зря же это называют интеллектом
    Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

    LeetCode Проблема 41. Первый пропущенный положительный результат
    LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..

    Расистский и сексистский робот, обученный в Интернете
    Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

    Управление состоянием в микрофронтендах
    Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..

    Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
    LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

    Как я опубликовал свое первое приложение в App Store в 13 лет
    Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..


    © 2024 hobruk.ru, Хобрук: Ваш путь к мастерству в программировании