В репозитории представлены материалы мини-курса на Stepik "Нейронные сети и обработка текста" и ноутбуки с моими решениями теоретических задач и задач с семинаров.
В папке 'theor_tasks' находятся ноутбуки с решениями теоретических задач курса по различным темам.
В корне репозитория находятся ноутбуки с решениями задач с семинаров (с префиксом "task"). В папке 'reports' представлены полные отчеты о проведенных экспериментах для решения задач с семинаров.
Итоги решений задач с семинаров:
-
task1_20newsgroups.ipynb — "Тематическая классификация длинных текстов - TFIDF и LogReg".
-
Было задано:
Пайплайн состоящий из кастомной реализации LogReg (PyTorch), кастомного MinMaxScaler, взвешивание TF-IDF, оптимизатор Adam. Для решения задачи использовался датасет The 20 newsgroups text dataset. -
Результаты доработок:
В пайплайн был добавлен препроцессинг (удаление стоп-слов и лемматизация) и L2-регуляризация, заменена кастомная реализация MinMaxScaler на реализацию из sklearn, была произведена замена оптимизатора Adam на Adagrad. -
Итоговое качество:
Удалось повысить качество (accuracy) модели на 5%: с 76% до 81%.
-
-
task2_word_embeddings.ipynb — "Word2Vec".
-
Было задано:
Пайплайн состоящий из кастомного токенизатора (на основе regex) и кастомной реализации Word2Vec на PyTorch. Для решения задачи использовался датасет nyt-ingredients-snapshot-2015. -
Результаты доработок:
Кастомный токенизатор был заменен на токенизатор из SpaCy, добавлена лемматизация и POS-тэггинг (токен заменялся на его лемму с добавлением постфикса его части речи), были подобраны оптимальные значения для некоторых параметров (радиус окна, количество эпох, размер пакета). Была исследована реализация FastText из gensim. -
Итоговое качество:
Удалось снизить значение функции потерь (LogLoss): с 0.87 до 0.66.
-
-
task3_cnn_postag.ipynb — "Свёрточные нейросети и POS-теггинг".
-
Было задано:
Реализованная модель StackedConv1d (на основе Skip Connection), реализованная модель SingleTokenPOSTagger (POS-теггинг на основе информации о структуре отдельных токенов), реализованная модель SentenceLevelPOSTagger (POS-теггинг на основе информации о структуре отдельных токенов и их контекста). Для решения задачи использовался датасет UD Russian SynTagRus. -
Результаты доработок:
Подобраны оптимальные настройки для модели SentenceLevelPOSTagger (количество эпох, размерность эмбеддинга, количество слоев, размер ядра свертки, сила dropout). Добавлена возможность использования dilated-сверток (подобраны оптимальные значения dilation). Добавлена возможность задавать отдельный id для кодирования позиций начала и конца токена для обучения отдельных эмбеддингов (изначально id для кодирования начала и конца токена имел значение 0 и соответственно "нулевой" эмбеддинг). -
Итоговое качество:
Удалось повысить качество (macro avg f1) модели на 4%: с 89% до 93%.
-
Чтобы запустить ноутбук с семинара на своем ноутбуке:
- Cклонируйте репозиторий:
git clone https://github.com/arturburiev/stepik-dl-nlp.git
- В терминале выполните команду:
pip install -r requirements.txt
- Запустите ноутбук:
ipython notebook
Чтобы запустить ноутбук на Google Colab:
-
Скачайте ноутбук (вкладка Github, затем прописываете адрес репозитория.
-
Запустите ноутбук.
-
Чтобы выкачать на colab библиотеку dlnlputils, не забудьте выполнить команду в первой ячейке:
!git clone https://github.com/arturburiev/stepik-dl-nlp.git && pip install -r stepik-dl-nlp/requirements.txt
import sys; sys.path.append('./stepik-dl-nlp')
- Не забудьте настроить
device='cpu'
илиdevice='cuda'
, а также выбрать подходящий Runtime в Colab (CPU/TPU/GPU).
А также следуйте комментариям касательно путей внутри ноутбуков.
Ноутбуки также работают и на Kaggle Notebooks.