Я пытаюсь сделать алгоритм анализа настроений для музыки с лирикой в качестве входных данных.
Я пробовал некоторые модели, но, кажется, я не могу получить хорошую. Мне нужна помощь, чтобы добраться в правильном направлении. Вот некоторые подробности о проблеме:
1. Набор данных (около 11 тыс. Образцов):
-80% обучение - 20% проверка
-Я использую в качестве входных данных 4 песни для каждой песни. Тексты песен с самой большой частотой в песне (я выбрал их без дубликатов)
-Я их предварительно обрабатываю (используйте строчные буквы, удаляйте не буквы и бесполезные пробелы.
-Я пытаюсь предсказать 2 числа: возбуждение и валентность. Я могу вычислить чувство, зная эти
- Я также пробовал проблему классификации (преобразовал метки непосредственно в настроения) с 12 классами, но я все еще не получил хороших результатов.
- после предварительной обработки я встраиваю слова в каждый текст. Например, если после встраивания у меня 50 слов, я получаю тензор 50 x embedding_size. Встраивание также обучены. Я думал об использовании некоторых предварительно обученных, таких как word2vec или GloVe.
2. Архитектура - у меня были такие подходы:
- используя только ГРУ, а затем выходной линейный слой
слой с выходным линейным слоем
-пренеть с использованием двухслойного NN с узким местом (размер 256 - 128), CNN и затем линейного слоя
-CNN, ГРУ, линейный слой
-модуль с набором сверток разных размеров ядра (2,3,4) с последующим GRU и линейным слоем
- еще несколько с похожими результатами
3.Больше примечаний:
-В основном я использую ReLU в качестве активации и tanh в последнем слое. После применения tanh я умножаю результат на 3, чтобы получить числа между -3,3 (валентность и возбуждение находятся между этими значениями).
используется MSE как функция потерь. Я заметил, что потеря составляет около 1 (возможно, 0,6 в счастливых случаях), а затем остается там. Точность не может быть лучше, чем 20%, и после некоторых итераций она обычно достигает 5-10%. Потеря поезда и потеря проверки обычно уменьшаются.
-обучены мини-партиями (32/64/128)
-Я использовал в качестве оптимизатора SGD или Adam.
-пробовал много курсов обучения, но никакая ценность не помогла или доказала лучшие результаты.
- Я тренировал свои модели в течение 10-30 эпох. Я не пошел дольше, потому что заметил, что это не поможет.
Я просмотрел свой код и не думаю, что есть ошибка. Вот мой код (поскольку здесь довольно сложно показать все, но я это сделаю, если это действительно необходимо): https://github.com/BogdanAngh/Poorify/tree/RegressionModel/AI -> все начинается с train.py
Мне интересно, если моя архитектура плохая или проблема слишком сложна с тем, что я предложил. Я использовал архитектуру, с которой встречался, читал газеты. Я ожидал получить довольно лучшую модель (скажем, где-то около 40-50% точности)
Мне нужны советы, потому что я не знаю, куда отсюда двигаться. Большое спасибо за чтение, я знаю, это довольно долго.