/stepik-dl-nlp

Материалы мини-курса на Stepik "Нейронные сети и обработка текста"

Primary LanguageJupyter NotebookMIT LicenseMIT

stepik-dl-nlp

В репозитории представлены материалы мини-курса на Stepik "Нейронные сети и обработка текста" и ноутбуки с моими решениями теоретических задач и задач с семинаров.

Описание

В папке 'theor_tasks' находятся ноутбуки с решениями теоретических задач курса по различным темам.

В корне репозитория находятся ноутбуки с решениями задач с семинаров (с префиксом "task"). В папке 'reports' представлены полные отчеты о проведенных экспериментах для решения задач с семинаров.

Итоги решений задач с семинаров:

  1. 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%.

  2. task2_word_embeddings.ipynb — "Word2Vec".

    • Было задано:
      Пайплайн состоящий из кастомного токенизатора (на основе regex) и кастомной реализации Word2Vec на PyTorch. Для решения задачи использовался датасет nyt-ingredients-snapshot-2015.

    • Результаты доработок:
      Кастомный токенизатор был заменен на токенизатор из SpaCy, добавлена лемматизация и POS-тэггинг (токен заменялся на его лемму с добавлением постфикса его части речи), были подобраны оптимальные значения для некоторых параметров (радиус окна, количество эпох, размер пакета). Была исследована реализация FastText из gensim.

    • Итоговое качество:
      Удалось снизить значение функции потерь (LogLoss): с 0.87 до 0.66.

  3. 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%.

Инструкция по запуску

Чтобы запустить ноутбук с семинара на своем ноутбуке:

  1. Cклонируйте репозиторий:

git clone https://github.com/arturburiev/stepik-dl-nlp.git

  1. В терминале выполните команду:

pip install -r requirements.txt

  1. Запустите ноутбук:

ipython notebook

Чтобы запустить ноутбук на Google Colab:

  1. Скачайте ноутбук (вкладка Github, затем прописываете адрес репозитория.

  2. Запустите ноутбук.

  3. Чтобы выкачать на 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')
  1. Не забудьте настроить device='cpu' или device='cuda', а также выбрать подходящий Runtime в Colab (CPU/TPU/GPU).

А также следуйте комментариям касательно путей внутри ноутбуков.

Ноутбуки также работают и на Kaggle Notebooks.