Skip to content

Instantly share code, notes, and snippets.

@pavlov200912
Last active November 11, 2021 15:43
Show Gist options
  • Save pavlov200912/630252bccc4b317fea8d56f7caa7f5ca to your computer and use it in GitHub Desktop.
Save pavlov200912/630252bccc4b317fea8d56f7caa7f5ca to your computer and use it in GitHub Desktop.
Отчет по проекту осень 2021

Comment Updater. Report Autumn 2021

Кто я? Что за проект

Я Ваня Павлов, студент 4-го курса Современного Программирования. Работаю над проектом Comment Updater под руководством Егора Богомолова и Зарины Курбатовой из JetBrains Research.

Цель проекта - написание инструмента для детектирования и обновления устаревших комментариев в коде.

Подробнее про задачу. Комментарии важная часть исходного кода. Разработчики рассчитывают на их коррекность при чтении кода, часто из них генерируется документация. Исследования показывают, что нередко разработчики забывают обновить комментарий нужным образом, после обновления кода. Такие оплошности приводят к проблемам с читаемостью и поддерживаемостью кода.

Пример из реального проекта: Пример1

До изменений код удалял существующий файл или создавал новый. После изменений код удаляет существующий файл и создает новый. Комментарий должен изменится на "Removes an existing file and creates a new file", но в коммите этого не случилось.

Над этим проектом я работаю третий семестр. Вы можете найти прошлые отчеты тут осень 2020 и тут весна 2021.

Коротко о том, что было сделано ранее.

Осенью 2020:

  • Изучали статьи и подходы, пытались реализовать свои модели
  • Поняли, что данных мало и использовать их трудно

Весной 2021:

  • Появилось больше доступных данных, повторили результаты последней статьи на эту тему
  • Написали плагин CommentUpdater для IntelliJ IDEA, который использует модель для детектирования и подсветки устаревших комментариев

Летом 2021 (JetBrains Research Intership):

  • Инструмент для сбора датасета Headless CommentUpdater
  • Сбор датасета из ~4000 Java репозиториев

Глобальная задача на семестр.

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

Что было сделано к моменту написания отчета.

  • Фильтровал полученные данные. В этой задаче много шума в примерах, так как они размечаются автоматически, поэтому нужно придумать эвристики для очистки данных. (Например экземпляры, где изменения комментария - устранение опечатки, нам не походят)
  • Выделил "золотой тестовый набор данных", состояющий из 1000 примеров. Разметил руками эти примеры на кластеры. Чтобы было удобнее размечать, написал веб-приложение.
  • Тренировал старые модели на новых данных, сравнивал качество на "золотом наборе". После обучения на наших данных, качество выше.
  • Посмотрел на примеры, в которых модель сильно не согласна с разметкой, посчитал процент шума в них. Кажется, он слишком большой, мы решили, что нужно частично размечать данные руками.
  • Подготовил дерево вопросов и первый вариант интерфейса для разметки с помощью Яндекс.Толока (сервис для разметки данных за деньги)

Что еще предстоит сделать

  • В ближайщем времени мы планируем доделать все для разметки данных на Яндекс.Толока
  • После этого, мы сможем разметить часть наших данных. Если все сделать хорошо и разметка получится приличной, это поможет нам обучить модели. (кроме этого, размеченные данные сами по себе ценный ресурс для области, можно выложить их для наших коллег исследователей!)
  • Уменьшив процент шума в данных с помощью разметки, мы сможем начать эксперементировать с моделями и улучшать плагин.

Какие технологии используются

Для машинного обучения я использую Python и PyTorch

Для анализа данных также использую Python

В этом семестре несколько раз пришлось обращаться к JS и NodeJS, для меня это новый опыт

Недавно начал погружаться в API Яндекс.Толоки, полезный инструмент для краудсорсинга

Как организована работа?

Каждую неделю я работаю 20 часов.

Каждый четверг мы созваниваемся по видеосвязи (я, Зарина, Егор) и обсуждаем: что я сделал, что мне делать дальше.

Можно код посмотреть?

Старый код с прошлого семестра: JetBrains-Research/comment-updating

Код, в котором я модифицирую уже существующую модель: pavlov200912/deep-jit-inconsistency

Код плагина на Kotlin (в разработке): JetBrains-Research/CommentUpdater

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment