W wielu bibliotekach sieci neuronowych istnieją „warstwy osadzania”, jak w Keras lub Lasagne .
Nie jestem pewien, czy rozumiem jego funkcję, pomimo przeczytania dokumentacji. Na przykład w dokumentacji Keras napisano:
Zamień dodatnie liczby całkowite (indeksy) na wektory den o stałym rozmiarze, np. [[4], [20]] -> [[0,25, 0,1], [0,6, -0,2]]
Czy osoba kompetentna może wyjaśnić, co robi i kiedy z niej skorzystasz?
EDYCJA: Jeśli chodzi o wklejanie w dokumentacji, nie ma wiele do wklejenia z dokumentacji, stąd moje pytanie. Nie rozumiem transformacji, której dokonuje, ani dlaczego należy jej używać.
W każdym razie tak to wyjaśniono w Keras:
Osadzanie
keras.layers.embeddings.Embedding (input_dim, output_dim, init = 'uniform', input_length = None, weight = None, W_regularizer = None, W_constraint = None, mask_zero = False) Zamień liczby całkowite (indeksy) na wektory o stałym rozmiarze np. [[4], [20]] -> [[0,25, 0,1], [0,6, -0,2]]
Kształt wejściowy: tensor 2D o kształcie: (nb_samples, sekwencja_długość). Kształt wyjściowy: tensor 3D o kształcie: (nb_samples, sekwencja_długość, wyjście_dim). Argumenty:
input_dim: int> = 0. Rozmiar słownictwa, tj. 1 + maksymalny wskaźnik liczb całkowitych występujących w danych wejściowych. output_dim: int> = 0. Wymiar gęstego osadzania
A oto jak to wyjaśniono w Lasagne:
Warstwa do osadzania słów. Dane wejściowe powinny być zmiennymi Tensor typu liczb całkowitych.
Parametry: przychodzące: instancja warstwy lub krotka
Warstwa podawana do tej warstwy lub oczekiwany kształt wejściowy.
input_size: int
Liczba różnych osadzeń. Ostatnie osadzenie będzie miało indeks rozmiar_wejściowy - 1.
rozmiar_wyjściowy: int
Rozmiar każdego osadzenia.
W: Theano wspólna zmienna, wyrażenie, tablica numpy lub możliwość wywołania
Wartość początkowa, wyrażenie lub inicjator macierzy osadzania. Powinna to być macierz o kształcie (rozmiar_wejściowy, rozmiar_wyjściowy). Aby uzyskać więcej informacji, zobacz lasagne.utils.create_param ().
Przykłady
>>> from lasagne.layers import EmbeddingLayer, InputLayer, get_output >>> import theano >>> x = T.imatrix() >>> l_in = InputLayer((3, )) >>> W = np.arange(3*5).reshape((3, 5)).astype('float32') >>> l1 = EmbeddingLayer(l_in, input_size=3, output_size=5, W=W) >>> output = get_output(l1, x) >>> f = theano.function([x], output) >>> x_test = np.array([[0, 2], [1, 2]]).astype('int32') >>> f(x_test) array([[[ 0., 1., 2., 3., 4.], [ 10., 11., 12., 13., 14.]], [[ 5., 6., 7., 8., 9.], [ 10., 11., 12., 13., 14.]]], dtype=float32)
Odpowiedzi:
Związek z Word2Vec
==========================================
Word2Vec na prostym zdjęciu:
Bardziej szczegółowe wyjaśnienie:
Uważam, że jest to związane z ostatnią innowacją Word2Vec w przetwarzaniu języka naturalnego. Z grubsza, Word2Vec oznacza, że nasze słownictwo jest dyskretne i nauczymy się mapy, która osadzi każde słowo w ciągłej przestrzeni wektorowej. Korzystanie z tego wektora reprezentacji przestrzeni pozwoli nam mieć ciągłą, rozproszoną reprezentację naszych słów słownictwa. Jeśli na przykład nasz zestaw danych składa się z n-gramów, możemy teraz korzystać z funkcji ciągłego słowa, aby utworzyć rozproszoną reprezentację naszych n-gramów. W trakcie szkolenia modelu językowego poznamy mapę osadzania słów. Mamy nadzieję, że dzięki ciągłej reprezentacji nasze osadzanie zamapuje podobne słowa na podobne regiony. Na przykład w przełomowym artykule Rozproszone reprezentacje słów i zwrotów oraz ich skład, zauważ w tabelach 6 i 7, że niektóre frazy mają bardzo dobre zwroty najbliższego sąsiada z semantycznego punktu widzenia. Przekształcanie się w tę ciągłą przestrzeń pozwala nam wykorzystywać ciągłe pojęcia podobieństwa do oceny jakości semantycznej naszego osadzania.
Wyjaśnienie za pomocą kodu Lasagne
Podzielmy fragment kodu Lasagne:
x jest macierzą liczb całkowitych. Dobrze, nie ma problemu. Każde słowo w słowniku może być reprezentowane liczbą całkowitą lub 1-gorącym kodowaniem rzadkim. Więc jeśli x wynosi 2x2, mamy dwa punkty danych, każdy o gramaturze 2.
To jest nasza matryca do osadzania słów. Jest to matryca 3 wiersze na 5 kolumn z wpisami od 0 do 14.
Należy zauważyć, że ze względu na to, że używamy jednego gorącego kodowania rzadkiego, jest to również określane jako wyszukiwanie tabel.
Warstwa osadzania
Symboliczne wyrażenie Theano do osadzania.
Funkcja Theano, która oblicza osadzanie.
zwroty:
Aby przekonać cię, że 3 rzeczywiście reprezentuje rozmiar słownictwa, spróbuj wprowadzić macierz
x_test = [[5, 0], [1, 2]]
. Zobaczysz, że powoduje to błąd nieprawidłowego dopasowania matrycy.źródło
W https://stackoverflow.com/questions/45649520/explain-with-example-how-embedding-layers-in-keras-works/ próbowałem przygotować przykład, używając 2 zdań, tekstów keras_to_sekwencji
i osadzanie warstwy. Na podstawie tego, jak działa warstwa „Osadzanie” Keras? warstwa osadzania najpierw inicjuje losowo wektor osadzania, a następnie używa optymalizatora sieci, aby zaktualizować go w podobny sposób, jak w przypadku każdej innej warstwy sieci w keras.
Powyżej byłby jakiś początkowy wektor osadzania dla zdania (maksymalnie) 6 słów i output_dim 3.
źródło