Friday, March 18, 2022

Understanding Embedding Layer in Keras

 В глубоком обучении встраивание слоя звучит как загадка, пока вы не овладеете им. Поскольку слой встраивания является неотъемлемой частью нейронных сетей, важно понимать, как он работает. В этой статье я попытаюсь объяснить, что такое встраиваемый слой, для чего он нужен и как он работает, а также приведу несколько примеров кода. Итак, давайте начнем.

Что такое встраиваемый слой

Слой внедрения — один из доступных слоев в Keras. Это в основном используется в приложениях, связанных с обработкой естественного языка, таких как языковое моделирование, но его также можно использовать с другими задачами, связанными с нейронными сетями. При решении проблем NLP мы можем использовать предварительно обученные вложения слов, такие как GloVe. В качестве альтернативы мы также можем обучать наши собственные встраивания, используя слой встраивания Keras.

Необходимость встраивания

Встраивание слов можно рассматривать как альтернативу горячему кодированию наряду с уменьшением размерности.

Как мы знаем, имея дело с текстовыми данными, нам нужно преобразовать их в числа, прежде чем передавать их в любую модель машинного обучения, включая нейронные сети. Для простоты слова можно сравнить с категориальными переменными. Мы используем однократное кодирование для преобразования категориальных признаков в числа. Для этого мы создаем фиктивные функции для каждой категории и заполняем их нулями и единицами.

Точно так же, если мы используем однократное кодирование слов в текстовых данных, у нас будет фиктивный признак для каждого слова, что означает 10 000 признаков для словаря из 10 000 слов. Это неприемлемый подход к встраиванию, поскольку он требует большого пространства для хранения векторов слов и снижает эффективность модели.

Слой внедрения позволяет нам преобразовать каждое слово в вектор фиксированной длины определенного размера. Результирующий вектор является плотным и имеет реальные значения, а не только 0 и 1. Фиксированная длина векторов слов помогает нам лучше представлять слова вместе с уменьшенными размерами.

Таким образом, встраиваемый слой работает как таблица поиска. Слова являются ключами в этой таблице, а плотные векторы слов являются значениями. Чтобы лучше понять это, давайте посмотрим на реализацию слоя Keras Embedding.

Реализация в Керасе

Мы можем создать простую модель Keras, просто добавив встраивающий слой.

модель = Последовательный()

embedding_layer = Embedding (input_dim = 10, output_dim = 4, input_length = 2)

model.add(embedding_layer)

model.compile('адам','mse')

Слой внедрения имеет три параметра

input_dim : Размер словаря

output_dim : Длина вектора для каждого слова

input_length : максимальная длина последовательности

В приведенном ниже примере мы устанавливаем 10 в качестве размера словаря, так как мы будем кодировать числа от 0 до 9. Мы хотим, чтобы длина вектора слов была равна 4, поэтому output_dim устанавливается равным 4. Длина входной последовательности равна слой внедрения будет 2.

Code 1

(.env) [boris@fedora34server KERAS]$ cat testKeras01.py

from numpy import array

from tensorflow.keras.preprocessing.text import one_hot

from tensorflow.keras.preprocessing.sequence import pad_sequences

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import Flatten,Embedding,Dense

# Define 10 restaurant reviews

reviews =[

          'Never coming back!',

          'horrible service',

          'rude waitress',

          'cold food',

          'horrible food!',

          'awesome',

          'awesome services!',

          'rocks',

          'poor work',

          'couldn\'t have done better'

]

#Define labels

labels = array([1,1,1,1,1,0,0,0,0,0])

Vocab_size = 50

encoded_reviews = [one_hot(d,Vocab_size) for d in reviews]

print(f'encoded reviews: {encoded_reviews}')

max_length = 4

padded_reviews = pad_sequences(encoded_reviews,maxlen=max_length,padding='post')

print(padded_reviews)

model = Sequential()

embedding_layer = Embedding(input_dim=Vocab_size,output_dim=8,input_length=max_length)

model.add(embedding_layer)

model.add(Flatten())

model.add(Dense(1,activation='sigmoid'))

model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['acc'])

model.fit(padded_reviews,labels,epochs=100,verbose=0)

print(model.summary())















References

https://medium.com/analytics-vidhya/understanding-embedding-layer-in-keras-bbe3ff1327ce


No comments:

Post a Comment