CodeBLEU - метрика, предложенная в Ren et al., 2020
и призванная приспособить метрику BLEU, которая используется для оценки качества перевода на естественном языке, к оценке перевода исходного кода; это достигается благодаря тому, что сравнение n-граммов дополняется сравнением соответствующих деревьев абстрактного синтаксиса эталонного кода и переведенного (таким образом, учитывается информация на уровне синтаксиса кода), а также сопоставляются "потоки данных" (data-flow, информация на уровне семантики кода).
CodeBLEU представляет собой взвешенную комбинацию четырех компонент:
где BLEU - стандартная метрика BLEU Papineni et al., 2002
, BLEUweight - взвешенное сопоставление n-грамм (токены различаются по важности - и совпадение определённых токенов переведенных и "золотых" функций имеет больший вес), Matchast – метрика соответствия деревьев абстрактного синтаксиса переведенного кода и эталонного, Matchdf отражает сходство "потоков данных" функций-гипотез и верных функций.
Остановимся подробнее на каждой из компонент метрики:
- BLEU основана на подсчете n-грамм, которые встретились и в переводе, и в референсной последовательности; рассчитывается она следующим образом:
где BP - штраф за слишком короткие варианты перевода, который считается как отношение количества токенов в переводе, предложенном моделью, к количеству токенов в эталонной последовательности; вторая часть выражения – среднее геометрическое значений модифицированной точности n-грамм:
для n-грамм длиной от 1 до N, умноженных на соответствующие положительные веса wn, в сумме дающие 1.
- В отличие от стандартной BLEU, в формулу расчета точности совпадения n-грамм для метрики BLEUweight включается весовой коэффициент (), значение которого больше для ключевых слов языка программирования, чем для других токенов:
где C(i, i+n) - n-грамм, начинающийся в позиции i и заканчивающийся в позиции i+n; Countclip, как и в случае со стандартной BLEU, - максимальное количество n-грамм, встречающихся как в переведенном коде, так и в наборе эталонных решений. Список ключевых слов заранее определяется для конкретного языка программирования.
- Синтаксическая структура исходного кода может быть представлена в виде дерева абстрактного синтаксиса (ДАС) - переведенные и эталонные функции, таким образом, можно сравнивать на уровне поддеревьев, полученных с помощью ДАС-парсера. Поскольку нас интересует синтаксическая информация, листья ДАС, в которых находятся переменные функции, не учитываются. Matchast рассчитывается по следующей формуле:
где Count(Tref) - общее количество поддеревьев референсного кода, Countclip(Tcand) - количество поддеревьев переведенного кода, совпавших с поддеревьями эталонных функций. Данная метрика позволяет оценить качество получившегося кода с точки зрения синтаксиса.
- Сравнение переведенного кода и референсного на уровне семантики происходит с использованием "потоков данных" (data flow
Guo et al., 2020
) - представлений исходного кода в виде графа, вершины которого — переменные, а грани обозначают своего рода "генетические" отношения между вершинами (выражают информацию о том, откуда берется значение каждой переменной). Формула расчета метрики Matchdf имеет следующий вид:
где Count(DFref) - общее количество "потоков данных" референсного кода, Countclip(DFcand) - количество "потоков данных" переведенного кода, совпавших с эталонными.
В качестве основной метрики для оценки решений участников используется метрика String Accuracy - отношение количества полностью совпавших транскрибаций строк к количеству всех строк в выборке. Считается она следующим образом:
Здесь n - размер тестовой выборки, predi – это строка из символов, которую распознала модель на i-ом изображении в выборке, а truei - это правильный перевод i-ого изображения, произведенный аннотатором, [•] - скобка Айверсона:
Метрика String Accuracy изменяется от 0 до 1, где 0 – наихудшее значение, 1 - наилучшее.
Для оценки качества будет использоваться метрика F1-score:
F1-score вычисляется на основе значений Precision (точности) и Recall (полноты), которые, в свою очередь, зависят от набора статистик по прогнозам – true positive (TP, истинно-положительный результат), false positive (FP, ложно-положительный результат) и false negative (FN, ложно-отрицательный результат):
Правила, по которым прогноз модели относится к одному из типов, следующие:
- Если данный класс из запроса отсутствует в правильной разметке (то есть является негативным примером), но модель участника сделала для него предсказание — предсказание оценивается как FP
- Если данный класс из запроса присутствует в правильной разметке (то есть является положительным примером):
- модель участника не сделала для него предсказание, то есть передала пустой список, или же количество предсказанных ограничивающих рамок меньше количества верных для данного класса, — непредсказанные ограничиващие рамки оцениваются как FN
- для каждого bbox данного класса из предсказания (класс может иметь несколько соответствующих bbox на изображении):
- пересечение предсказанного bbox хотя бы с одним из правильных bbox для данного класса по IoU > 0.5 – предсказание оценивается как TP
- пересечение предсказанного bbox с каждым из правильных bbox для данного класса по IoU < 0.5 – предсказание оценивается как FP
IoU – это метрика, которая оценивает степень пересечения между двумя ограничивающими рамками. Она вычисляется как отношение площади пересечения к площади объединения этих двух bbox:
IoU для каждой пары (prediction/true) принимает значение от 0 до 1. В качестве порога отсечения по IoU используется значение 0.5, то есть все предсказанные bbox, значение IoU для которых меньше 0.5, считаются ложными прогнозами.
Метрика F1-score изменяется от 0 до 1, где 0 – наихудшее значение, 1 – наилучшее.
Для оценки качества предсказания будет использоваться метрика Accuracy. Эта метрика показывает долю точных совпадений среди пар предсказанных и истинных ответов, то есть отражает отношение числа совпавших ответов (когда модель участника предсказала такой же ответ, как истинный) к общему числу ответов. Эта метрика изменяется от 0 до 1, где 0 – наихудшее значение, 1 – наилучшее: