Giter Site home page Giter Site logo

Comments (6)

natalymr avatar natalymr commented on July 23, 2024

обзор статей, что делали с данными, как определяли качество коммитов:
Немного увлеклась и ушла в сторону, но в начале действительно про это

Имя Что делали с данными Ссылки на интересные/релевантные статьи
Neural-Machine-Translation-Based Commit Message Generation: How Far Are We? (NNGen) они начали анализировать, почему NMT так хорошо себя заявил. 1 - много примеров из тестового множества с хорошим результатом имеют почти двойников в трейне. 2 - 16% мусорных данных, то есть либо автоматически сгенерированные данные, либо повторяющиеся тривиальные изменения. Взяли коммиты из первой 1000 самых stared репозиториев на java, взяли только первое предложение каждого коммита, удалили commit ids из diff, удалили issue ids из message. Удалили merge, rollback коммиты, или которые больше 1М. (в NMT засплитили на токены, но не приводили в lowerCase и не сплитили CamelCase), потом оставили только коммиты с не больше 100 токенов в diff, не больше 30 токенов в message (осталось 75К коммитов). Потом оставили коммиты только с "dobj" зависимостью (Verb-Direct Object, V-DO), осталось 32К коммитов. Также они сравнивали словари commit messages трейна и теста, смотрели сколько уникальных коммитов каждом множестве и на сколько они пересекаются. DeltaDoc, ChangeScribe. Статьи, которые выявляли паттерны в коммит сообщениях: Siyuan Jiang and Collin McMillan. 2017. Towards automatic generation of short summaries of commits. In Proceedings of the 25th International Conference on Program Comprehension. IEEE Press, 320–323, Audris Mockus and Lawrence G Votta. 2000. Identifying Reasons for Software Changes using Historic Databases. In icsm. 120–130. Статья, которые пыталась в тул, который будет сам выявлять паттерны из данных: Abram Hindle, Earl T Barr, Zhendong Su, Mark Gabel, and Premkumar Devanbu. 2012. On the naturalness of software. In Software Engineering (ICSE), 2012 34th International Conference on. IEEE, 837–847. However, according to the suggestions of Fu and Menzies [19], it is a good practice to explore simple and fast techniques before applying deep learning methods on SE tasks

image

статьи, которые выявляли паттерны в данных

Имя Что делали с данными Ссылки на интересные/релевантные статьи
Towards Automatic Generation of Short Summaries of Commits ссылка Брали git diff, считали tf-idf и пытались по диффу предсказать, к какому глаголу относится это изменение. выяснили, что большинство коммитов состоит всего из одного предложения, и почти половина из них начинается с глагола, за которым следует "прямой объект". Делали почти все то же самое, что и в прошлой статье, но убрали diff files которые содержали non-ascii символы. Генерировать сообщения по истории каждого пользователя:
  • Другие статьи и эта
    image

Вторая статья ссылка

Какая-то оооочень странная статья этого года, которая роняет bleu-score sota-ы в 10 раз

Ссылка на текст

Говорят, что предыдущие подходы страдали от out-of-vocabulary проблемы, а также игнорировали структурную информацию о коде. И вот они хотят это как-нибудь обойти.

  1. Извлекают из diff-a и структуру (синтаксис?) кода, и семантику
    • в структурном извлечении заменяют все имена классов на placeholder-ы ("с0")
    • в семантической части - разбивают на подтокены
  2. Дальше и структурную, и семантическую засовывают в RNN
  3. Выравнивают последовательности по placeholder-aм
  4. Finally, to allow directly copying the OOV words from the input code changes to the output commit messages, we incorporate the copying mechanism [See et al., 2017] in our model.

Вот тут архитектура сети: то есть в енкодере подается код с placeholder-aми, отдельная bi-GRU получает эмбеддинг для имени этого класса, потом суммируется hidden вектор для "c0"
с именем класса и подается в attention.
Потом опять что-то про copy-механизм, потом вместо placeholder-ов подставляются нужные имена.
image

А вот и результаты:
image


Вот эта Get To The Point: Summarization with Pointer-Generator Networks статья про copy механизм, которая упоминалось в "ооочень странной статье".

Говорят, что в целом seq2seq модели для задачи text summarization имеют следующие недостатки: они не точны в деталях и имеют тенденцию повторяться. Для первого использовали гибридную сеть указатель-генератор , которая может копировать слова из исходного текста via pointing, что способствует точному воспроизведению информации, сохраняя при этом возможность генерировать новые слова через генератор. Для второго - использовали покрытие, чтобы отслеживать, что уже среди инпута было обобщено.
image

Pointer-generator network

В обычную encoder-decoder сеть с attention добавляется дополнительный элемент: есть энкодер со скрытыми состояниями, есть attention, который вектор контекста для времени t считает как
image
Помимо этого еще считается параметр
image
и вот последний параметр и решает, генерировать следующее слово декодеру или скопировать из инпута.
image
(при этом мы объединяем два словаря: для аутпута и для инпута)

Coverage mechanism

Особенно нужен, когда нужно сгенерировать сразу несколько предложений.
Не наша ситуация, забиваем.


Еще одна статья, которая генерировала сообщения к коммитам с использование encoder-decoder архитектуры.

  • ограничивали словарь (убирали слишком редкие токены, встретившиеся меньше 2-3 раз, заменяли на UNK)
  • длина diff-a -- 100
  • длина сообщения -- 20
  • использовали в декодере beam-search (beam-size 10)
  • рассмотрели отдельно случай, когда коммит меняет только один файл, назвали это atomic commits
  • если приходило из разных файлов, вставляли NEW_FILE
  • рассмотрели отдельно случай, когда коммит только добавляет строчки или только удаляет, назвали это uni-action commits
  • прогоняли через MOSES (не очень поняла эту фразу: Concretely, we treated the tokenized code snippet as the source language and the NL description as the target. We trained a 3-gram language model using KenLM (Heafield et al., 2013) and used mGiza to obtain alignments. ??)

Данные:
image

Результаты:
image


Интересная картинка из вот этой статьи
image


Может, попробовать использовать BERT или Transformer для этой задачи?


Для сиамской архитектуры, вопрос о том, как сделать attention, если у нас есть два енкодера, ответ на этот вопрос можно взять из этой статьи, которая пыталась сделать ансабль нескольких NMT моделей
image


статья, где не делали кросс-проджект валидацию, есть список репозиториев

from gcm.

natalymr avatar natalymr commented on July 23, 2024

Что в итоге решила сделать с данными:

Убрать из коммит-сообщений:

  • issue <num>
  • authors (provided by)

Отфильтровать коммиты по

  • изменяют java файлы
  • длине сообщения (не больше 20)
  • величине diff-a (не больше 200, сначала считаем количество токенов, потом только сплитим CamelCase) (для того, чтобы еще была возможность прогнать на других моделях)
  • verb + object
  • rollback/merge
  • коммиты с non-anscii символами
  • без сообщений
  • смотреть на данные и убирать сообщения с паттернами
  • убирать коммиты, авторы которые генерируют плохие сообщения (?)

from gcm.

natalymr avatar natalymr commented on July 23, 2024
  • Посмотреть, сколько коммитов в авроре остается после фильтрации

  • Доработать сборщик коммитов и мб податься на msr? 😓 (внерабочее время)

from gcm.

natalymr avatar natalymr commented on July 23, 2024

Camel:

Название Все число Train Test Val
Все коммиты 39382
Изменяли java файлы 27374
Отфильтрованные (msg < 20, context_size_in_line = 2, diff < 200) 5035 3556 740 739
1 измененная функция, отфильтрованные 388
2 измененных функций, отфильтрованные 158
3 измененных функций, отфильтрованные 183
4 измененных функций, отфильтрованные 190
1-4 измененных функций, отфильтрованные 919

from gcm.

natalymr avatar natalymr commented on July 23, 2024

InteliiJ

Название Все число Train Test Val Bleu Score
Все коммиты from <2016-01-01> to <2019-11-10> 213402
Изменяли java файлы 165542
Отфильтрованные (msg < 20, context_size_in_line = 2, diff < 200) 41925
1 измененная функция, отфильтрованные 25910 17398 4256 4256 0.86
2 измененных функций, отфильтрованные 5140 3418 861 861
3 измененных функций, отфильтрованные 832
4 измененных функций, отфильтрованные 249
1-4 измененных функций, отфильтрованные 32131

1 измененная функция

image

Число сообщений, bleu score которых выше нуля - 27

image

BLEU: 10.4
Reference: show cloudgit commit dialog in a write safe context ea <num> assert file document manager impl save all documents.
Prediction: ea <num> assert file manager impl get component

BLEU: 11.78
Reference: foodcritic to save documents in a safe context ea <num> assert file document manager impl save all documents.
Prediction: ea <num> assert file manager impl check file

BLEU: 14.42
Reference: py <num> don t inject into comments of other languages taking them for python type hints.
Prediction: py <num> don t report error if it s it

BLEU: 16.31
Reference: spring boot spring boot hint references provider fix handling item hints fast exit for key.
Prediction: spring spring spring spring boot spring boot spring boot spring spring

BLEU: 21.28
Reference: spring boot spring boot application meta config key manager get local meta config keys cache more aggressively.
Prediction: spring boot spring boot application config test test test test fixed

BLEU: 21.42
Reference: spring boot spring boot alpha unsorted properties file inspection suppressor fast exit.
Prediction: spring boot spring boot config config test test test test spring

BLEU: 21.51
Reference: spring boot spring boot file set editor customization keep files in order.
Prediction: spring boot spring boot config config test test test spring

BLEU: 22.65
Reference: spring boot spring boot mock beans providers test get project descriptor simplify.
Prediction: spring boot spring boot config test test test test test suite

BLEU: 22.74
Reference: spring boot spring boot icon provider quick check for spring facet first.
Prediction: spring boot spring boot config config test provider test test

BLEU: 23.76
Reference: cpp <num> gdb disasm set step mode on all platforms unconditionally.
Prediction: cpp <num> gdb disasm fixed case of wsl

BLEU: 23.77
Reference: spring boot spring boot application properties implicit property usage provider optimize.
Prediction: spring boot spring boot config config test test test spring

BLEU: 24.81
Reference: spring boot spring boot icon provider performance.
Prediction: spring boot spring boot spring boot config config provider provider test

BLEU: 25.03
Reference: dbe ea <num> assert file manager impl find file ea <num> ise open file descriptor navigate.
Prediction: ea <num> assert file manager impl get component

BLEU: 25.13
Reference: spring boot spring boot configuration property reference searcher require spring facet.
Prediction: spring spring boot spring boot config config test provider test

BLEU: 26.27
Reference: spring boot spring boot application properties spellchecking strategy optimize.
Prediction: spring boot spring boot config config test provider test test

BLEU: 26.27
Reference: spring boot spring boot application properties spellchecking strategy fast exit.
Prediction: spring boot spring boot config config test test test test

BLEU: 29.85
Reference: cpp <num> don t fail on several specializations.
Prediction: cpp <num> don t report error if it s

BLEU: 29.85
Reference: cpp <num> don t sort twice.
Prediction: cpp <num> don t report any of generic method

BLEU: 30.51
Reference: ea <num> assert psi primitive type get unboxed type.
Prediction: ea <num> assert psi util core ensure valid

BLEU: 31.76
Reference: ea <num> assert file document manager impl save all documents.
Prediction: ea <num> assert file manager impl lambda check is

BLEU: 32.67
Reference: ea <num> iae package json util find containing property.
Prediction: ea <num> iae package util get file

BLEU: 34.36
Reference: idea cr <num> ea <num> assert component manager impl get component.
Prediction: ea <num> assert editor manager impl get component

BLEU: 39.28
Reference: spring boot spring boot application properties value regex injector performance.
Prediction: spring boot spring boot application config test test test test

BLEU: 39.94
Reference: php wi <num> don t show parameter hint for constant.
Prediction: php wi <num> don t report expression in method

BLEU: 41.69
Reference: don t show notification for disposed project ea <num> assert component manager impl get component.
Prediction: ea <num> assert component manager impl get component

BLEU: 57.79
Reference: typescript fix ea <num> assert component manager impl get pico container.
Prediction: ea <num> assert component manager impl get component

BLEU: 89.48
Reference: dbe ea <num> assert component manager impl get pico container.
Prediction: ea <num> assert component manager impl get pico container

from gcm.

natalymr avatar natalymr commented on July 23, 2024

aurora

Название Все число Train Test Val
Все коммиты 33996
Изменяли java файлы 19909
Отфильтрованные (msg < 20, context_size_in_line = 2, diff < 200) 5564
1 измененная функция, отфильтрованные
2 измененных функций, отфильтрованные
3 измененных функций, отфильтрованные
4 измененных функций, отфильтрованные
1-4 измененных функций, отфильтрованные

from gcm.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.