No elo swiry z #python #machinelearning #tensorflow
Mam takie zadanie do wykonania, jestem newbie i zastanawiam sie nad generalnym podejsciem/architektura:
Generowanie textu na podstawie podprzednio widzianych zdan oraz przekazanego kontekstu (slowa kluczowe).
W pierwszym przypadku jak rozumiem, moge zastosowac jakas rekurencyjna warstwe np LSTM, GRU, zmapowac zdania na chary i jako cel ustawic wybor kolejnej litery - zrobiem pare takich.
Ale w jaki sposob moge przekazac konktekst wypowiedzi? Np. uczenie generowania zdan ala Shakespear lub Nietzsche? Zalozmy ze dane wejsciowe bede mial dodatkowo otagowane taka statyczna flaga oznaczajaca autora.
Mam takie zadanie do wykonania, jestem newbie i zastanawiam sie nad generalnym podejsciem/architektura:
Generowanie textu na podstawie podprzednio widzianych zdan oraz przekazanego kontekstu (slowa kluczowe).
W pierwszym przypadku jak rozumiem, moge zastosowac jakas rekurencyjna warstwe np LSTM, GRU, zmapowac zdania na chary i jako cel ustawic wybor kolejnej litery - zrobiem pare takich.
Ale w jaki sposob moge przekazac konktekst wypowiedzi? Np. uczenie generowania zdan ala Shakespear lub Nietzsche? Zalozmy ze dane wejsciowe bede mial dodatkowo otagowane taka statyczna flaga oznaczajaca autora.
- Najlepsze
- Wszystkie komentarze






paperwithcode
OpenML
Github
h0 to jest stan początkowy dla komórki rnn. Potem komórka wczytuje po kolei tokeny (czyli zakodowane znaki / wyrazy) i przy każdym zmienia ten stan na kolejny.
Najpierw skup się na tym jak działają LSTM, potem czym jest atencja (xD), a potem jak działa Transformer.
Mam do Ciebie dwa pytania, skoro tak:
1) Dlaczego lepiej jest kodować całe wyrazy niż litery? Generalnie nie mam zbyt dużo danych, ok 20k zdań z tagami opisującymi każde z nich - może powiem totalną głupotę - czy nie lepiej w takim wypadku stosować pojedyncze litery?
2) Dostałem początkowe info
Kodować całe wyrazy jest lepiej po prostu dlatego, że wtedy sekwencja jest o wiele krótsza. Jak napiszesz zdanie "Ala ma kota" to zakodowanie tego wyrazami da Ci sekwencję o długości 3, a znakami 11. I odwrotnie, stworzenie tego zdania przez model będzie wymagało wygenerowania 3 wartości zamiast 11.
Seq2seq to inaczej architektura encoder-decoder, może pod tym hasłem znajdziesz więcej
1) mój problem nie jest klasycznym Seq2Seq -> oglądałem jakiegoś mądrego azjatę na YT i przedstawiał tam różne struktury RNN. Wspomniany wyżej zakłada, że Input jest sekwencyjny, jak w przypadku np. tłumaczenia zdań z angielkiego na polski (w wielkim uproszczeniu jak rozumiem). Powiedział także o modelu One2Many, który
Embeddings to przypisanie każdemu elementowi (w tym wypadku literze albo słowu) wektora n liczb. Można na to patrzeć, jak na współrzędną tego elementu w n-wymiarowej przestrzeni. Na początku, gdy inicjujemy losowo, te elementy są porozrzucane w tej przestrzeni chaotycznie i bez sensu.
W trakcie treningu te współrzędne
(autor, zdanie) -> (następne zdanie)
Jeśli kodujesz całe słowa, to możesz po prostu scalić autora i zdanie w jeden string, tak że słowo reprezentujące autora będzie zawsze na pierwszym miejscu. Więc twój przykład będzie wyglądał
Mój zbiór danych to komentarze do zdjęć - każde zdjęcie jest otagowane kilkoma słowami kluczowymi (np. animal, ecology). Same komentarze są raczej jednozdaniowe i mało skomplikowane (Instagram :P), aczkolwiek problematyczny moze być fakt, że jest w nich dużo emotek (które być może wyfiltruję, jeśli okaże się to zbyt złożony problem
W zasugerowanym przykladzie bez RNN, jak rozumiem, zakladam kodowanie literowe.
Input = array[200], gdzie 1 sa tylko uzywane tagi, np. input[34] = 1, bo ecology tam zakodowalem.
Przepuszczam calosc przez warstw Dense