Comments (6)
обзор статей, что делали с данными, как определяли качество коммитов:
Немного увлеклась и ушла в сторону, но в начале действительно про это
Имя | Что делали с данными | Ссылки на интересные/релевантные статьи |
---|---|---|
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 |
статьи, которые выявляли паттерны в данных
Имя | Что делали с данными | Ссылки на интересные/релевантные статьи |
---|---|---|
Towards Automatic Generation of Short Summaries of Commits ссылка | Брали git diff, считали tf-idf и пытались по диффу предсказать, к какому глаголу относится это изменение. выяснили, что большинство коммитов состоит всего из одного предложения, и почти половина из них начинается с глагола, за которым следует "прямой объект". Делали почти все то же самое, что и в прошлой статье, но убрали diff files которые содержали non-ascii символы. | Генерировать сообщения по истории каждого пользователя: |
Вторая статья ссылка
Какая-то оооочень странная статья этого года, которая роняет bleu-score sota-ы в 10 раз
Говорят, что предыдущие подходы страдали от out-of-vocabulary проблемы, а также игнорировали структурную информацию о коде. И вот они хотят это как-нибудь обойти.
- Извлекают из diff-a и структуру (синтаксис?) кода, и семантику
- в структурном извлечении заменяют все имена классов на placeholder-ы ("с0")
- в семантической части - разбивают на подтокены
- Дальше и структурную, и семантическую засовывают в RNN
- Выравнивают последовательности по placeholder-aм
- 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-ов подставляются нужные имена.
Вот эта Get To The Point: Summarization with Pointer-Generator Networks статья про copy механизм, которая упоминалось в "ооочень странной статье".
Говорят, что в целом seq2seq модели для задачи text summarization имеют следующие недостатки: они не точны в деталях и имеют тенденцию повторяться. Для первого использовали гибридную сеть указатель-генератор , которая может копировать слова из исходного текста via pointing, что способствует точному воспроизведению информации, сохраняя при этом возможность генерировать новые слова через генератор. Для второго - использовали покрытие, чтобы отслеживать, что уже среди инпута было обобщено.
Pointer-generator network
В обычную encoder-decoder сеть с attention добавляется дополнительный элемент: есть энкодер со скрытыми состояниями, есть attention, который вектор контекста для времени t считает как
Помимо этого еще считается параметр
и вот последний параметр и решает, генерировать следующее слово декодеру или скопировать из инпута.
(при этом мы объединяем два словаря: для аутпута и для инпута)
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. ??)
Интересная картинка из вот этой статьи
Может, попробовать использовать BERT или Transformer для этой задачи?
Для сиамской архитектуры, вопрос о том, как сделать attention, если у нас есть два енкодера, ответ на этот вопрос можно взять из этой статьи, которая пыталась сделать ансабль нескольких NMT моделей
статья, где не делали кросс-проджект валидацию, есть список репозиториев
from gcm.
Что в итоге решила сделать с данными:
Убрать из коммит-сообщений:
issue <num>
- authors (provided by)
Отфильтровать коммиты по
- изменяют java файлы
- длине сообщения (не больше 20)
- величине diff-a (не больше 200, сначала считаем количество токенов, потом только сплитим CamelCase) (для того, чтобы еще была возможность прогнать на других моделях)
- verb + object
- rollback/merge
- коммиты с non-anscii символами
- без сообщений
- смотреть на данные и убирать сообщения с паттернами
- убирать коммиты, авторы которые генерируют плохие сообщения (?)
from gcm.
-
Посмотреть, сколько коммитов в авроре остается после фильтрации
-
Доработать сборщик коммитов и мб податься на msr? 😓 (внерабочее время)
from gcm.
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.
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 измененная функция
Число сообщений, bleu score которых выше нуля - 27
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.
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)
- [dataset] анализ сообщений HOT 3
- [baseline] naive HOT 1
- [articles] metrics table HOT 3
- [baseline] naive message generation based on gumtree diff HOT 3
- [baseline] naive bayes HOT 4
- [baseline] code2seq HOT 1
- [code2seq] train on method diff until reasonable BLEU @natalymr
- [code2seq] add rnn in training pipeline HOT 1
- [merge messages] HOT 4
- [code2seq] new dataset HOT 5
- [code2seq] commits with 1, 2, 3 etc changed functions HOT 2
- [code2seq] repeat "perfect storm" HOT 3
- [NMT] do not forget about this article HOT 6
- [scores] хватит смотреть в один bleu score, надо что-нибудь визуализировать, чтобы лучше понимать, что происходит HOT 2
- [dataset] гипотезы HOT 2
- [seim] выступление HOT 2
- [diploma] Текст диплома HOT 2
- [nmt-2.0] HOT 8
- [code2seq] 2 inputs HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from gcm.