Keras 'Embedding' katmanı nasıl çalışır?


70

Keras kütüphanesinde 'Katıştırma' katmanının çalışmasını anlamalısınız. Python'da şu kodu çalıştırıyorum

import numpy as np
from keras.models import Sequential
from keras.layers import Embedding

model = Sequential()
model.add(Embedding(5, 2, input_length=5))

input_array = np.random.randint(5, size=(1, 5))

model.compile('rmsprop', 'mse')
output_array = model.predict(input_array)

aşağıdaki çıktıyı verir

input_array = [[4 1 3 3 3]]
output_array = 
[[[ 0.03126476  0.00527241]
  [-0.02369716 -0.02856163]
  [ 0.0055749   0.01492429]
  [ 0.0055749   0.01492429]
  [ 0.0055749   0.01492429]]]

İnput_array'deki her değerin output_array'deki 2 element vektörüne eşlendiğini anlıyorum, bu yüzden 1 X 4 vektör 1 X 4 X 2 vektör veriyor. Ancak haritalanan değerler nasıl hesaplanır?


1
Belki iyi bir başlangıç: github.com/fchollet/keras/issues/3110 ?
fnl

Yanıtlar:


87

Aslında, çıkış vektörleri herhangi bir matematiksel işlem kullanılarak girdiden hesaplanmaz. Bunun yerine, her giriş tamsayı, tüm olası vektörleri içeren bir tabloya erişmek için dizin olarak kullanılır. Bu, kelimelerin boyutunu ilk argüman olarak belirtmenizin nedenidir (böylece tablo başlatılabilir).

Bu katmanın en yaygın uygulaması metin işleme içindir. Basit bir örnek görelim. Eğitim setimiz sadece iki cümleden oluşur:

Umarım yakında görüşürüz

Seni tekrar görmek güzel

Bu yüzden, her kelimeye benzersiz bir tamsayı numarası atayarak (örneğin eğitim veri setimizdeki görünüm sırasına göre) bu cümleleri kodlayabiliriz. Ardından ifadelerimiz şu şekilde yeniden yazılabilir:

[0, 1, 2, 3, 4]

[5, 1, 2, 3, 6]

Şimdi, ilk katmanı gömme katmanı olan bir ağı eğitmek istediğimizi hayal edin. Bu durumda, şu şekilde başlatmalıyız:

Embedding(7, 2, input_length=5)

İlk argüman (7), eğitim setindeki farklı kelimelerin sayısıdır. İkinci argüman (2), gömme vektörlerinin boyutunu belirtir. İnput_length argumet, tabii ki, her bir giriş dizisinin boyutunu belirler.

Ağ bir kez eğitildiğinde, bu durumda (7, 2) büyüklükte olacak ve vektörleri gömmek için tamsayıları eşleştirmek için kullanılan tablo olarak düşünülebilen gömme katmanının ağırlıklarını alabiliriz:

+------------+------------+
|   index    |  Embedding |
+------------+------------+
|     0      | [1.2, 3.1] |
|     1      | [0.1, 4.2] |
|     2      | [1.0, 3.1] |
|     3      | [0.3, 2.1] |
|     4      | [2.2, 1.4] |
|     5      | [0.7, 1.7] |
|     6      | [4.1, 2.0] |
+------------+------------+

Dolayısıyla, bu gömülmelere göre, ikinci eğitim ifademiz şöyle gösterilecektir:

[[0.7, 1.7], [0.1, 4.2], [1.0, 3.1], [0.3, 2.1], [4.1, 2.0]]

İlk başta karşı sezgisel görünebilir, ancak altta yatan otomatik farklılaşma motorları (örneğin, Tensorflow veya Theano), modelinizin diğer tüm parametreleri gibi her giriş tamsayısıyla ilişkili bu vektörleri optimize etmeyi başarır. Farklı yöntemlerde, başka yöntemlerle / insanlar tarafından öğrenilen yerleştirmeleri de kullanmak ilginçtir (bkz. Https://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.html ) [1] 'de yapıldı.

[1] López-Sánchez, D., Herrero, JR, Arrieta, AG ve Corchado, JM Uyarlanabilir clickbait tespiti için metrik öğrenmeyi ve vaka temelli akıl yürütmeyi hibritler. Uygulamalı Zeka, 1-16.


4
Cevap için teşekkür ederim. Katıştırma katmanının ağırlıkları nasıl elde edilir, sadece bir sorgu. 0 endeksi için olduğu gibi, [1.2, 3.1] nasıl elde edilir.
prashanth

5
İndeksleri gömme vektörleri ile ilişkilendiren tablonun içeriği (yani gömme katmanının ağırlıkları) rastgele başlatılır ve daha sonra eğitim algoritması (ör., Degrade İniş) ile optimize edilir.
Daniel López

3
Teşekkürler. Ben hala optimize edicinin neyi optimize edeceğini netleştirmiyorum. Mesela, bir kayıp fonksiyonunu hesaplamasına izin veren "doğru cevap" nedir? Ya da başka bir deyişle, ileri ve geri geçiş için ne yapıyor?
bwest87

2
böylece ... katıştırma temelde daha az girişlerine aşağı herhangi bir sıcak kodlanmış girdileri azaltan genel mimarinin sadece bir alt ağdır, AFAICT ..
Mike Campbell

1
Katıştırma katmanı eğitilebilir olduğundan, eğitim setinde eksik olan değerlere ne kadar duyarlıdır? Diyelim ki eğitim setinde on kelime ve test setinde beş kelime daha var - kelime dağarcığım 15 ... ama katman aslında eğitim sırasında bu beş 'test' kelimesi tarafından aktifleştirilmez. Lütfen bu durumu açıklayabilir misiniz?
mikalai

6

Ayrıca aynı soruyu sordum ve birkaç yazı ve materyali okuduktan sonra, katmanın rolünün ne olduğunu anladığımı düşünüyorum.

Bu yazının da anlaşılmasında yardımcı olduğunu düşünüyorum , ancak Daniel'in cevabını hazmetmek için uygun buluyorum. Ama aynı zamanda arkasındaki fikri de temelde gömülü kelimeleri anlayarak anladım .

Katmanları gömme işleminin bir-sıcak kodlama girişini daha az girişe düşürdüğünü söylemenin yanlış olduğuna inanıyorum. Sonuçta, bir sıcak vektör tek boyutlu bir veridir ve bizim durumumuzda aslında 2 boyuta dönüştürülür. Söylemesi daha iyi

gömme katmanı , girdilerin başka bir boyuttaki ilişkisi ile ortaya çıkar

2 boyutta veya daha yüksek olup olmadığı.

Ayrıca, Temel Bileşen Analizine gömülü kelime arasında çok ilginç bir benzerlik buluyorum. Adı karmaşık görünse de, kavram basit. PCA'nın yaptığı, bazı genel kurallara (temel bileşenler denir) dayalı bir dizi veri tanımlamaktır. Yani bir veriye sahip olmak gibidir ve tanımlamak istersiniz, ancak sadece 2 bileşen kullanırsınız. Bu anlamda kelime gömme işlemlerine çok benzer. İkisi de aynı işi farklı bağlamda yapıyorlar. Daha fazlasını burada bulabilirsiniz . Umarım PCA'yı anlamak, katmanları yerleştirmeyi analoji yoluyla anlamakta yardımcı olur.

Kaydırmak için, gönderinin asıl sorusunun cevabı " değeri nasıl hesaplar? " Olur:

  • Temel olarak sinir ağımız girdilerin yapısını (cümleleri) altta tutar ve kelime hazinemizdeki kelimeler arasındaki ilişkiyi optimizasyon ile daha yüksek bir boyuta (diyelim 2) koyar.
  • Daha derin bir anlayış, kelimelerin etkilerinden başka bir kelime ile görünen her kelimenin sıklığının (çok naif bir yaklaşımla elle hesaplayabiliriz) derdi.
  • Yukarıda bahsedilen frekans, NN'nin yakalayabileceği altta yatan yapılardan biri olabilir.
  • Sezgi'yi embeddings kelimesini açıklayan youtube linkinde bulabilirsiniz.

7
Güzel bakış açısı. Bununla birlikte, word2vec gibi kelime gömme teknikleri sonuçtaki gömme içindeki kelimelerin tam anlamını yakalamaya çalışırken, denetlenen bir ağdaki gömme katmanının böyle anlamsal olarak zengin ve genel bir gösterimi öğrenemeyebileceğini düşünüyorum. Örneğin, ağınız duyarlılık sınıflandırması yapacak şekilde eğitilmişse, büyük olasılıkla gömülü kelimeleri "duygusal" yüklerine göre gruplandırır / kümelendirebilir. Yine de, tecrübelerime dayanarak, gömme katmanınızı word2vec tarafından büyük bir corpus'ta öğrenilen ağırlıklarla başlatmak genellikle yararlıdır.
Daniel López

2
tek sıcak vektör, tek boyutlu veri değildir. Boyut, kelimelerin büyüklüğüdür.
Binu Jasim

2
@BinuJasim haklısın. Bir kelimeyi temsil eden bir sıcak vektörler , tek boyutlu bir veri değildir. Ancak onun temsil ettiği bilgiler aslında tek boyutludur ve kelime hazinesi içindeki her varlık tek boyutlu bir veridir. N * w (n = kelime boyutu, w = bit sayısı) öğelerine sahip olduğumuz doğrudur, ancak her ikili değer yine bir boyutlu giriş olan bir vektörü temsil eder.
Novin Shahroudi,

@ NovinShahroudi Brilliant, açıklama için teşekkürler.
Benyamin Jafari
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.