Projekt ten skupia się na generowaniu muzyki na podstawie dostarczonych do niej opisów tekstowych. Celem jest opracowanie modelu, który będzie w stanie zrozumieć dany opis i stworzyć odpowiadający mu utwór muzyczny. Projekt wykorzystuje techniki głębokiego uczenia, w tym przetwarzanie języka naturalnego (NLP) i modelowanie sekwencji, aby osiągnąć ten cel.
Wykorzystany zbiór danych do tego zadania zawierał 5,521 rekordów z czego w każdym znajdowały się następujące inforamcje:
- identyfikator filmu na youtube,
- sekunda początku i końca fragmentu utworu,
- lista cech opisująca muzykę - przykładowo
["pop", "tinny wide hi hats", "mellow piano melody", "high pitched female vocal melody", "sustained pulsating synth lead"], - opis tekstowy utworu - przykładowo
"A low sounding male voice is rapping over a fast paced drums playing a reggaeton beat along with a bass. Something like a guitar is playing the melody along. This recording is of poor audio-quality. In the background a laughter can be noticed. This song may be playing in a bar.".
Poprzez identyfikator oraz flagę startu i końca fragmentu z wykorzystaniem biblioteki yt-dlp pobrane zostały wszystkie pliki z rozszerzeniem .wav
Aby stworzyć model text-to-audio pobrane pliki audio musiały zostać przetwożone na postać nadającą się do tego rodzaju zadania.
W tym celu wszystkie pliki .wav zostały zamienione na spektogramy mel.
Spektrogram mel to reprezentacja krótkoterminowego widma mocy dźwięku, która rejestruje zawartość częstotliwości sygnału audio w czasie.
Reprezentacja ta jest odpowiednia do wprowadzania danych do modeli uczenia maszynowego, szczególnie tych zaprojektowanych do analizy i generowania dźwięku.
Przykładowy spektogram mel wygląda w następujący sposób:
Spektogramy w procesie szkolenia są postaci macierzy w formacie numpy o kształcie (256,420), gdzie 256 oznacza rozdzielczość podczas transformacji dźwięku na spektogramy (im wyższa wartość tym lepsza jakość ale też i większy rozmiar) a 420 oznacza długość próbki.
Podejście do tego zadania opierało się przede wszystkim na dwóch głównych elementach architektury tj. transformerach oraz sieciach LSTM oraz dwóch podejściach do wykorzystania dostępnego tekstu, czyli mniejsze wejście z wykorzystaniem listy cech lub wejście rozszerzone gdzie wprowadzany był cały tekst opisujący dany dźwięk. W oparciu o te założenia sprawdzane oraz uczone było wiele architektur z wykorzystaniem akceleracji na GPU P100.
Żadna z sieci niestety nie przyniosła zakładanych wyników, które pozwoliłyby wygenerować dźwięk nie będący szumem.
Architekturą, która osiągneła najlepsze wyniki jest MusicGenerationModel łącząca przetwarzanie języka naturalnego z modelowaniem sekwencji w celu generowania spektrogramów mel z opisów tekstowych. Poniżej znajduje się szczegółowy opis każdego komponentu:
- Tokenizer i enkoder BERT:
- Tokenizer:
BertTokenizersłuży do tokenizacji wejściowych opisów tekstowych. Konwertuje on tekst do formatu odpowiedniego dla modelu BERT. - Enkoder:
BertModeljest wstępnie wytrenowanym modelem zbudowanym na transformerach, który enkoduje ztokenizowany tekst w osadzenia. Te osadzenia przechwytują semantyczne znaczenie tekstu.
- Tokenizer:
- W pełni połączona warstwa:
- Text to LSTM: Dane wyjściowe modelu BERT są przekazywane przez w pełni połączoną warstwę (
fc_text_to_lstm) w celu odwzorowania osadzenia tekstu na wymiar wejściowy LSTM.
- Text to LSTM: Dane wyjściowe modelu BERT są przekazywane przez w pełni połączoną warstwę (
- LSTM (Long Short-Term Memory):
- Warstwy LSTM: Główny moduł w generowaniu sekwencji jest obsługiwany przez sieć LSTM. LSTM przetwarza osadzenia tekstu i generuje sekwencję danych wyjściowych, które odpowiadają ramkom spektrogramu mel.
- Hidden and Cell States: LSTM utrzymuje stany ukryte i komórkowe, aby śledzić zależności czasowe w całej sekwencji.
- Warstwa wyjściowa:
- LSTM to Output: Wyjścia LSTM są przekazywane przez kolejną w pełni połączoną warstwę (
fc_lstm_to_output) w celu odwzorowania wyjść LSTM na końcowe wartości spektrogramu mel.
- LSTM to Output: Wyjścia LSTM są przekazywane przez kolejną w pełni połączoną warstwę (
- Warstwa dropout:
- Droput: Warstwa dropout służy do zapobiegania nadmiernemu dopasowaniu poprzez losowe ustawienie ułamka jednostek wejściowych na zero podczas treningu.
W procesie uczenia wykorzystane zostały następujące działania:
- Funkcja straty: Funkcja straty używana w tym modelu Mean Squared Error Loss (MSELoss). Jest ona powszechnie stosowana w zadaniach regresji, w których celem jest zminimalizowanie różnicy między wartościami przewidywanymi i rzeczywistymi. W tym przypadku pomaga ona zmierzyć, jak blisko rzeczywistych wartości znajdują się wygenerowane wartości spektrogramu Mel.
- Optimizer: Zastosowany optymalizator to Adam, który jest adaptacyjnym algorytmem optymalizacji szybkości uczenia się. Został on zaprojektowany do obsługi rzadkich gradientów w zaszumionych problemach. Współczynnik uczenia (lr) jest ustawiony na 1e-5, co kontroluje wielkość kroku podczas procesu optymalizacji.
- Cosine Annealing Learning Rate Scheduler: Harmonogram tempa uczenia dostosowuje tempo uczenia podczas szkolenia. Harmonogram
CosineAnnealingLRzmniejsza szybkość uczenia się zgodnie z krzywą kosinusową, co pomaga w stopniowym zmniejszaniu szybkości uczenia się i może prowadzić do lepszej zbieżności. ParametrT_maxjest ustawiony na liczbę epok (50), wskazując okres wyżarzania kosinusowego. - Early Stopping: Jest to technika zapobiegająca nadmiernemu dopasowaniu poprzez zatrzymanie procesu uczenia, jeśli strata walidacyjna nie poprawi się przez określoną liczbę epok (
early_stopping_patience). Zmiennabest_lossjest inicjowana na dużą wartość, aby śledzić najniższą stratę walidacyjną, a licznikearly_stopping_counterśledzi, ile epok minęło od ostatniej poprawy.
Ostatecznie model osiągnął wynik 198.376 na zbiorze walidacyjnym po 27 epokach traningu (~11,5h).
Predykcja otrzymana dla przykładowego tekstu:
'The low quality recording features a ballad song that contains sustained strings, mellow piano melody and soft female vocal singing over it. It sounds sad and soulful, like something you would hear at Sunday services.'
Wygląda następująco:



