Я Ваня Павлов, студент 4-го курса Современного Программирования. Работаю над проектом Comment Updater под руководством Егора Богомолова и Зарины Курбатовой из JetBrains Research.
Цель проекта - написание инструмента для детектирования и обновления устаревших комментариев в коде.
Подробнее про задачу. Комментарии важная часть исходного кода. Разработчики рассчитывают на их коррекность при чтении кода, часто из них генерируется документация. Исследования показывают, что нередко разработчики забывают обновить комментарий нужным образом, после обновления кода. Такие оплошности приводят к проблемам с читаемостью и поддерживаемостью кода.
До изменений код удалял существующий файл или создавал новый. После изменений код удаляет существующий файл и создает новый. Комментарий должен изменится на "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