Главная страница
Навигация по странице:

  • Оглавление 1. Введение 5 2. Постановка задачи 7 3. Исходные данные 8 4. Обзор существующих работ 9

  • 5. Используемая методология 12

  • 6. Эксперименты 17

  • 7. Заключение 33 Литература 35 4 1. Введение

  • 4. Обзор существующих работ

  • 4.1. Методы оценки точности

  • 5. Используемая методология

  • 5.1. Логистическая регрессия

  • 5.2. Наивный байесовский классификатор

  • 5.3. Машина опорных векторов

  • 5.4. Метод ближайших соседей

  • 5.7. Методы градиентного бустинга

  • 5.8. Expectation-Maximization

  • 6. Эксперименты 6.1. Подготовка данных

  • 6.2. Применение методов машинного обучения

  • 6.3. Двухэтапная классификация с использованием подсистем проекта 6.3.1. Нахождение зависимостей между разработчиками

  • 6.3.2. Классификация по подсистемам

  • 6.4. Использование частичного обучения для клас- сификации по разработчикам

  • 6.5. Использование векторов вероятностей для улуч- шения предсказания

  • 6.5.1. Уточнение результата предсказания

  • 6.5.2. Классификатор с неопределенностью

  • СанктПетербургский Государственный Университет


    Скачать 161.08 Kb.
    НазваниеСанктПетербургский Государственный Университет
    Дата10.05.2022
    Размер161.08 Kb.
    Формат файлаpdf
    Имя файла444-Chernyaev-report.pdf
    ТипДокументы
    #520294

    Санкт-Петербургский Государственный Университет
    Математическое обеспечение и администрирование информационных систем
    Системное программирование
    Черняев Арсений Витальевич
    Применение методов машинного обучения в системах отслеживания ошибок программного обеспечения
    Бакалаврская работа
    Научный руководитель:
    д. ф.-м. н., профессор Терехов А. Н.
    Рецензент:
    Иванов Д. А.
    Санкт-Петербург
    2016

    SAINT-PETERSBURG STATE UNIVERSITY
    Software and Administration of Information Systems
    Software Engineering
    Arsenii Cherniaev
    Application of machine learning algorithms to bug tracking systems
    Bachelor’s Thesis
    Scientific supervisor:
    professor Andrey Terekhov
    Reviewer:
    Dmitry Ivanov
    Saint-Petersburg
    2016

    Оглавление
    1. Введение
    5
    2. Постановка задачи
    7
    3. Исходные данные
    8
    4. Обзор существующих работ
    9
    4.1. Методы оценки точности . . . . . . . . . . . . . . . . . . .
    10
    5. Используемая методология
    12
    5.1. Логистическая регрессия . . . . . . . . . . . . . . . . . . .
    12 5.2. Наивный байесовский классификатор . . . . . . . . . . .
    12 5.3. Машина опорных векторов . . . . . . . . . . . . . . . . . .
    13 5.4. Метод ближайших соседей . . . . . . . . . . . . . . . . . .
    13 5.5. Решающие деревья . . . . . . . . . . . . . . . . . . . . . .
    14 5.6. Случайный лес . . . . . . . . . . . . . . . . . . . . . . . . .
    14 5.7. Методы градиентного бустинга . . . . . . . . . . . . . . .
    15 5.8. Expectation-Maximization . . . . . . . . . . . . . . . . . . .
    15
    6. Эксперименты
    17
    6.1. Подготовка данных . . . . . . . . . . . . . . . . . . . . . .
    17 6.2. Применение методов машинного обучения . . . . . . . . .
    21 6.3. Двухэтапная классификация с использованием подсистем проекта . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    25 6.3.1. Нахождение зависимостей между разработчиками
    25 6.3.2. Классификация по подсистемам . . . . . . . . . .
    26 6.4. Использование частичного обучения для классификации по разработчикам . . . . . . . . . . . . . . . . . . . . . . .
    28 6.5. Использование векторов вероятностей для улучшения пред- сказания . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    29 6.5.1. Уточнение результата предсказания . . . . . . . .
    29 6.5.2. Классификатор с неопределенностью . . . . . . .
    32 3

    7. Заключение
    33
    Литература
    35
    4

    1. Введение
    При создании современного программного обеспечения зачастую воз- никает потребность в использовании специальных средств, позволяю- щих программистам контролировать ход разработки, получать отзывы от пользователей и поддерживать связь с другими членами команды,
    особенно в больших распределенных проектах.
    Одним из таких средств является система отслеживания ошибок.
    Эта система позволяет команде разработчиков учитывать и контроли- ровать ошибки, найденные в ходе эксплуатации программного обеспе- чения. Каждый, кто имеет доступ к системе, может создать специаль- ный запрос, затем внутри команды этот запрос будет обработан, будет выделен человек или команда, ответственные за решение поставленной задачи или исправление допущенных исключительных ситуаций. За- прос получит уникальный номер, состояние, символизирующее статус работы, и может служить местом обсуждения проблемы внутри коман- ды или между командой разработчиков и пользователем.
    В связи с выше сказанным, в системах отслеживания ошибок можно выделить ряд прикладных задач, позволяющих упростить процесс ра- боты создателей программного обеспечения. Один из примеров - задача объединения сообщений в кластеры для нахождения дубликатов.
    Отдельного упоминания заслуживает задача определения ответствен- ного за устранение неисправности, описанной в сообщении. В больших проектах возможны ситуации, когда ежедневно к отслеживанию до- бавляются тысячи новых ошибок и предложений к улучшению, требу- ющих назначения ответственного. В особенности это касается отчетов об исключительных ситуациях - во многих крупных проектах имеется возможность автоматической отправки такого типа сообщений, из-за чего система отслеживания ошибок будет подвергаться огромной на- грузке. Также стоит отметить, что данные отчеты генерируются авто- матически и очень часто не содержат дополнительной информации от пользователя. Ручное определение разработчика в таком случае может занимать еще больший объем времени, даже в случае, если человек,
    5
    обрабатывающий запросы, обладает достаточными знаниями о всех де- талях разрабатываемого программного обеспечения.
    Таким образом, можно сделать заключение, что необходима авто- матизация данного процесса, позволяющая переложить большую часть работы с разработчика на машину. Методы машинного обучения, поз- воляющие решать многие задачи классификации и кластеризации, мо- гут быть эффективными и для проблемы классификации отчетов об исключительнх ситуациях.
    6

    2. Постановка задачи
    Цель данной дипломной работы заключается в разработке модуля,
    предназначенного для автоматизации назначения разработчика, ответ- ственного за исправление допущенной при эксплуатации программного обеспечения исключительной ситуации для проекта ReSharper в систе- ме отслеживания ошибок YouTrack. Для этого необходимо выполнить следующие задачи:
    • Провести подготовку данных. На данном этапе необходимо вы- брать способ преобразования отчета в наиболее подходящий для дальнейшего анализа вид, а также сформировать набор данных для обучения.
    • Выбрать наиболее подходящий метод классификации. Для этого необходимо сравнить различные алгоритмы обучения на подго- товленных данных проекта, а также некоторые многоуровневые модели предсказаний в выбранной для этого метрике.
    • Реализовать модуль, решающий проблему автоматизации назна- чения разработчика, для сервера, занимающегося обработкой от- четов об исключительных ситуациях, присылаемых из системы отслеживания ошибок.
    7

    3. Исходные данные
    В качестве набора данных используются отчеты об исключительных ситуациях проекта ReSharper, расположенного в системе отслеживания ошибок YouTrack за все время его существования. Данный набор содер- жит 5974 размеченных отчета (они помечены как исправленные, и для них известен ответственный за них разработчик), а также примерно
    34000 уникальных неразмеченных отчетов.
    Каждый отчет состоит из:
    • Заголовок сообщения - содержит информацию о типе исключи- тельной ситуации и сопровождающем ее тексте;
    • Стек вызовов;
    • Версия продукта, в которой произошел сбой;
    • Дата появления проблемы;
    • Информация о разработчике, ответственном за исправление;
    Текущий статус проблемы;
    • Дополнительная информация о версии продукта, в которой про- блема будет исправлена;
    • Подсистема - в проекте ReSharper подсистема обозначает собой определенную функциональность, обособленную от всех осталь- ных. Определение подсистемы, в которой возникла исключитель- ная ситуация, может помочь в определении ответственного разра- ботчика.
    8

    4. Обзор существующих работ
    Методы машинного обучения применялись к области классифика- ции сообщений об ошибках и раньше. Большинство подходов основы- вались на принципе рассмотрения задачи как более общей задачи клас- сификации текста, применялись различные классификаторы: наивный байесовский классификатор [3] [6], машины опорных векторов [1] [3]
    [18], решающие деревья [3] [18].
    Проблема применимости данных подходов к конкретной задаче за- ключается в том, что они основываются на идее обработки текста со- общения, который в случае отчетов об исключительных ситуациях яв- ляется менее информативным: многие элементы выборки имеют один и тот же текст, но при этом относятся к абсолютно разным разработ- чикам. Основным источником для определения сути проблемы в таком случае является стек вызовов, неизменно прилагающийся к отчету. По этой причине рассмотрение другого подхода к подготовке данных мо- жет улучшить результаты.
    Также стоит отметить, что данные исследовательские работы в боль- шинстве своем не рассматривают возможности применения ансамблей классификаторов, которые могут увеличить точность предсказания [2],
    а также не рассматривают возможность игнорирования предсказания в случае низкой степени уверенности классификатора, что позволит уменьшить вероятность ошибки за счет небольшого количество дан- ных, которые придется классифицировать вручную.
    Помимо методов, основанных на применении алгоритмов машинно- го обучения, стоит также рассмотреть идею, придуманную ранее внут- ри команды ReSharper. Ее суть заключалась в применении голосующе- го алгоритма по отношению к строкам стека вызовов. Задавался набор правил вида ”префикс строки стека” - ”разработчик”. Рассматривались все строки стека вызовов, если строка начиналась с определенного пре- фикса, то счетчик соответствующего разработчика увеличивался на 1.
    Набравший достаточно много голосов разработчик назначался ответ- ственным.
    9

    Этот подход не дал достаточной точности и поэтому не использо- вался. Помимо этого, стоит отметить, что данный подход недостаточно автоматизирован - при появлении нового разработчика в команде необ- ходимо добавлять новые правила. Также, возможны ситуации, когда несколько разработчиков работают над схожей областью, и поэтому деление по префиксам строки может быть недостаточно точным.
    4.1. Методы оценки точности
    Для оценки точности работы классификаторов на тестовой выборке использовались различные подходы:
    1. Оценивание общего количества верно предсказанных элементов выборки:
    Общая точность =
    Количество верно предсказанных
    Общее количество предсказаний
    Данная оценка является самой простой и чаще других возможных оценок используется в существующих работах в данной области.
    Однако стоит отметить, что она плохо отражает точность предска- зания для каждого конкретного класса, поэтому возможны ситуа- ции, когда, например, хорошая степень предсказания часто встре- чающего класса нивелирует низкую точность для объектов редко- го класса. Поэтому данная оценка вычислялась, в основном, для сравнения с существующими подходами.
    2. Рассмотрение усредненной по всем классам F
    1
    -меры [14].
    Для каждого класса c рассматривались оценки точности Precision и Recall:
    P recision
    c
    =
    Количество верных предсказаний элементов классаc
    Количество предсказаний принадлежности классуc
    Recall
    c
    =
    Количество верных предсказаний элементов классаc
    Количество элементов, принадлежащих классуc
    10

    F
    1,c
    = 2
    P recision
    c
    Recall
    c
    P recision
    c
    + Recall
    c
    F
    1
    =

    c
    ∈C
    F
    1,c
    |C|
    Данная оценка гораздо более явно позволяет определять степень точности классификации для каждого класса и поэтому использо- валась как основная оценка для сравнения классификаторов меж- ду собой.
    11

    5. Используемая методология
    Далее идеет краткий обзор методов машинного обучения, использу- емых в данной работе.
    Многие из перечисленных ниже алгоритмов были выбраны, т.к. по- казали хорошие результаты в задачах классификации текстов, частным случаем которой можно считать рассматриваемую задачу [1] [3] [6] [8]
    [10]. Также, к рассмотрению были добавлены популярные алгоритмы,
    использующие ансамбли классификаторов, поскольку их использова- ние зачастую позволяет улучшить результаты базовых алгоритмов.
    Для решения поставленных задач использовались реализации мето- дов машинного обучения библиотек Sсikit-learn [13] и Xgboost [5] для
    Python. Данные язык и библиотеки были выбраны в силу возможности быстрой разработки прототипа и большого количества вспомогатель- ных сторонних библиотек для исследования.
    Scikit-learn содержит большое количество оптимизированных алго- ритмов обучения и подготовки данных, включая возможность работы с разреженными матрицами, а библиотека Xgboost содержит показыва- ющую высокие результаты реализацию метода градиентного бустинга.
    5.1. Логистическая регрессия
    Логистическая регрессия - пример линейного классификатора [20].
    Данный алгоритм классификации использует сигмоидную функцию
    g(x) =
    1 1+e
    −x
    в качестве функции активации и позволяет дать вероят- ностную оценку принадлежности объекта каждому классу. В [8] дан- ный метод описан подробнее; также, упомянутая статья описывает при- менение алгоритма к задаче классификации текстов.
    5.2. Наивный байесовский классификатор
    Наивный байесовский классификатор - вероятностный классифика- тор. Основан на применении теоремы Байеса с дополнительным пред-
    12
    положением о независимости различных свойств рассматриваемой мо- дели.
    Основным вопросом при использовании классификатора является следующий: какому закону подчиняются плотности распределения слу- чайных величин, характеризующих значение каждого свойства объ- екта? Существует большое количество подходов, основанных на раз- личных предположениях, например: подчиненности случайных вели- чин нормальному закону распределения или предположении, что век- тора объектов характеризуют частоты встречания [6].
    Традиционно считается, что наивные байесовские классификаторы хорошо показывают себя в задачах классификации текстов, поэтому в рамках данной дипломной работы они были рассмотрены в первую очередь.
    5.3. Машина опорных векторов
    Данный линейный классификатор [20] основывается на принципе построения оптимальных гиперплоскостей, разделяющих предположи- тельно линейно разделяемые данные. Такие гиперплоскости будут мак- симально удалены от всех элементов выборки и тем самым наиболее явно разделять пространство на классы. В случае линейно неразде- ляемых данных рассматривается возможность применения некоторой функции-ядра, переводящей элементы в пространство, где данные мо- гут быть разделяемыми. Подробнее о данном методе можно прочесть в [9].
    5.4. Метод ближайших соседей
    Метод ближайших соседей - метрический алгоритм, его суть заклю- чается в рассмотрении нескольких ближайших в некоторой метрике со- седей с последующим выбором доминирующего среди них класса [19].
    Основной вопрос заключается в выборе оптимального количества рас- сматриваемых соседей - небольшое количество соседей создаст слишком большую чувствительность к шумам, в то время как слишком большое
    13
    количество ухудшит предсказание путем вырождения функции в кон- станту. Также важен выбор наиболее подходящей метрики для измере- ния расстояния.
    Помимо этого, стоит упомянуть различные модификации, исполь- зующие, например, веса объектов, обратно пропорциональные рассто- янию до классифицируемого объекта.
    5.5. Решающие деревья
    Решающие деревья - класс алгоритмов классификации, позволяю- щий получать предсказание для объекта за счет последовательности ответов на иерархически организованную систему вопросов (выстроен- ную в виде дерева) [17].
    Каждый внутренний узел в дереве представляет собой некоторую функцию f , которая действует над пространством, содержащем эле- менты выборки, и принимает одно из конечного числа значений, зада- ющих переход к соответствующему потомку. Каждый лист в дереве - это метка определенного класса.
    Функция f может представлять собой, например, простое пороговое условие над некоторым свойством или же некоторую их конъюнкцию.
    Существует несколько реализаций решающих деревьев, отличаю- щихся методами построения дерева. Примерами могут служить ID3,
    C4.5 и CART [17]. В данной работе рассматривался алгоритм CART.
    5.6. Случайный лес
    Случайный лес - это алгоритм классификации, основанный на прин- ципе использования ансамбля нескольких решающих деревьев для до- стижения ими большей точности [4].
    Основные шаги алгоритма следующие:
    Классификаторы (решающие деревья) обучаются независимо друг от друга. Каждый классификатор обучается на некотором подмноже- стве элементов обучающей выборки (выбираемом случайным образом с повторением), причем алгоритм его обучения изменен: на каждом этапе
    14
    разбиения при обучении выбирается наиболее подходящее свойство не из всех n свойств, а из некоторого количества произвольно выбранных,
    с целью построения более разнообразных деревьев.
    Затем классификаторы независимо друг от друга делают предска- зания о входном элементе, и класс, за который проголосовало больше всего классификаторов, становится предсказанием итогового классифи- катора.
    5.7. Методы градиентного бустинга
    Методы градиентного бустинга позволяют использовать ансамбль классификаторов для увеличения точности предсказания, в качестве итоговой вероятности принадлежности объекта классу используется взвешенная сумма вероятностей принадлежности объекта классу каж- дого классификатора.
    Основной принцип градиентного бустинга заключается в постепен- ном наращивании композиции классификаторов:
    g
    i
    (x) = g
    i
    1
    (x) + α
    i
    h(x, β
    i
    )
    Здесь h(x, β
    i
    )
    - базовый классификатор с параметрами β
    i
    , α
    i
    - коэфи- циент взвешенной суммы. Используя методику градиентного спуска,
    можно постепенно подбирать параметры так, чтобы минимизировать некоторую выбираемую функцию потерь.
    Частным случаем метода градиентного бустинга может служить ал- горитм AdaBoost [7], использующий экспоненциальную функцию по- терь или же алгоритм Extra Gradient Boosting библиотеки xgboost [5].
    Именно эти два метода рассматривались в данной работе.
    5.8. Expectation-Maximization
    Технику Expectation-Maximization можно применить к задаче клас- сификации с частичным обучением [10].
    В первую очередь по размеченным данным строится наивный бай-
    15
    есовский классификатор, затем все неразмеченные данные получают предсказания о вероятности принадлежности к каждому классу. За- тем полученные вероятностые показатели используются для создания нового классификатора. Процесс продолжается до тех пор, пока не об- разуется стабильный классификатор.
    16

    6. Эксперименты
    6.1. Подготовка данных
    В качестве данных рассматривались подготовленные данные проек- та ReSharper. Была собрана статистика по всем разработчикам, когда- либо участвовавшим в исправлении неисправностей в проекте, среди них были выбраны те, кто в данный момент являются разработчиками в команде. Из этого набора людей были удалены люди, данных для ко- торых почти нет. Оставшиеся разработчики рассматривались как мно- жество классов для классификации. Их количество составило 28 чело- век.
    В качестве размеченных данных использовались отчеты об исклю- чительных ситуациях, исправленные кем-то из отобранных разработ- чиков. Размер полученной выборки - 5974 примера.
    Для тестирования различных подходов к классификации размечен- ные данные каждый раз разбивались случайным образом, на 80% про- исходило обучение классификатора, оставшиеся 20% использовались для тестирования корректности. Данная процедура повторялась 10 раз,
    затем результаты тестирования усреднялись, полученные величины рас- сматривались как результат работы классификатора.
    Важным шагом для подготовки данных являлся способ их преобра- зования в числовые вектора. Было решено рассматривать задачу как задачу классифкации текста, были рассмотрены возможности сбора ин- формации об отчете при помощи:
    • Обработка стека вызовов - обработка строк стека вызовов одним из следующих способов:
    Использование строки стека вызовов без списка параметров,
    как единого слова, добавляемого в документ.
    Пример: ”Namespace.Class.Method(parameters)” ->
    ”Namespace.Class.Method”.
    17

    Разбиение каждой строки стека вызовов без параметров на отдельные слова, добавляемые в документ.
    Пример: ”Namespace.Class.Method(parameters)” -> ”Namespace”,
    ”Class”, ”Method”.
    • Обработка текста сообщения - из текста отчета удалялись симво- лы, отличные от элементов алфавита, в силу большого количе- ства специфичных для области IT-индустрии слов было решено не использовать стемминг. Полученный набор слов добавлялся в документ, соответствующий отчету.
    Были рассмотрены различные способы подготовки строковых дан- ных:
    • Хэширование строк: к каждому слову в документе применяется некоторая хэш-функция, принимающая значения от 0 до неко- торого N. Тогда документ можно представить как вектор длины
    N+1, значение в i-ой ячейке которого говорит о том, сколько раз- личных слов имеют значение хэш-функции, равное i.
    Данный подход позволяет свободно регулировать длину векторов,
    однако полученные вектора свойств будут неинформативны, в си- лу неоднозначности хэш-функции, таким образом, пропадает воз- можность анализа наиболее подходящих для рассматриваемой за- дачи свойств.
    • Подход Bag-of-the-Words: из всех слов во всех документах состав- ляется словарь, далее документу ставится в соответствие вектор длины размера словаря, показывающий, какие слова (и, возмож- но, сколько раз) встречаются в данном документе.
    Данный подход делает возможным анализ важности тех или иных свойств для обучения, однако при этом возникают дополнитель- ные проблемы, связанные с обработкой векторов большой размер- ности.
    18

    Для учета степени популярности того или иного слова использо- валась статистика TF-IDF [11], прямо пропорциональная количеству вхождений слова в документ и обратно пропорциональная общему ко- личеству документов, содержащих рассматриваемое слово:
    T F
    − IDF (t, d) =
    количество вхождений t в d количество слов в d
    ×
    × log(
    Общее число документов
    Число документов, содержащих t
    )
    Для уменьшения размерности числовых векторов и увеличения точ- ности вследствие отсечения ”шумовых” свойств, в случае рассмотрения подхода Bag-of-the-Words, были рассмотрены 3 различных методики,
    дающие для каждого свойства некоторую числовую оценку его важно- сти, благодаря которой затем выбираются несколько самых значимых:
    • Mutual Information - это один из способов определения степени зависимости некоторого набора классов C от слова t [15].
    Предположим, что A
    c
    - событие ”встретился документ класса c”,
    B
    - событие ”встретился документ, содержащий слово t. Тогда данная статистика вычисляется следующим образом:
    M I(t, C) =

    c
    ∈C
    P (A
    c
    , B)
    log
    2
    (
    P (A
    c
    , B)
    P (A
    c
    )P (B)
    +

    c
    ∈C
    P (A
    c
    , ¯
    B)
    log
    2
    (
    P (A
    c
    , ¯
    B)
    P (A
    c
    )P ( ¯
    B)
    • Тест χ
    2
    - данный тест позволяет оценивать степень уверенности в независимости встречания некоторого слова t и класса c. Данная величина вычисляется следующим образом:
    χ
    2
    (t, c) =
    (Expected(t, c)
    − Observed(t, c))
    2
    Expected(t, c)
    Здесь Observed(t, c) - то, сколько раз слово t встречается в доку- ментах класса c, Expected(t, c) - сколько раз t должно встречаться в документах класса , при условии, что величины, характеризую- щие появление слова t в некотором документе и появление доку-
    19
    мента класса c, являются независимыми.
    Слова, обладающие малым значением данной статистики по всем классам, можно отбросить как вероятно не зависящие от классов.
    Подробнее о данном методе можно посмотреть в [16].
    С точки зрения статистики применение данного теста не всегда корректно, однако в реальных задачах классификации его приме- нение увеличивает точность предсказания.
    • Использование решающих деревьев.
    Данный подход заключается в передаче всей выборки некоторо- му классификатору, основанному на решающих деревьях. После построения модели, можно рассмотреть, какие свойства использо- вались при ветвлении дерева. Предполагается, что свойство, рас- смотренное в узле решающего дерева, является более важным для классификации. Для создания более надежной статистики можно рассматривать ансамбль деревьев и учитывать ветвления во всех деревьях. В итоге для каждого свойства будет известно, сколь- ко раз оно встречалось в узлах деревьев. Библиотека xgboost [5]
    содержит реализацию данного подхода.
    В качестве итогового способа подготовки данных было решено оста- новиться на методе, использующем стек вызовов с разбиением на от- дельные слова и заголовок сообщения без использования стемминга, с последующем применением подхода Bag-of-the-Words и уменьшением размерности при помощи решающих деревьев, так как при этом подхо- де удалось добиться наибольшей точности при тестировании - макси- мальный результат, показанный каким-либо из выбранных классифи- каторов (см. 6.2), при данном подходе был выше прочих (см. Таблица
    2, Таблица 3, Таблица 4, Таблица 5). Также, стоит отметить, что мето- дика Bag-of-the-Words позволяет получить более наглядное представ- ление свойств, а решающие деревья сильнее всего уменьшают размер- ность числовых векторов (с 20674 до 1970 элементов), что увеличило скорость работы.
    20

    На заключительном этапе данные были нормализованы (сведены в интервал [0; 1]), т.к. многие алгоритмы машинного обучения чувстви- тельны к масштабированию данных.
    Также, рассматривались возможности учета даты создания, ком- ментариев к отчету или версии продукта, а также использования N- грамм (композиций последовательных слов), однако добиться увеличе- ния точности предсказания при этом не получилось.
    Интересным подходом, не рассмотренном в данной работе, являет- ся использование истории отчета. В [3] используется понятие графа пересылок - хранимой для каждого отчета истории принадлежности разным разработчикам. Его анализ позволяет редактировать резуль- тат предсказания базового классификатора.
    К сожалению, недостаток большинства данных проекта ReSharper заключается в пустой либо некорректной истории. Это вызвано мигра- цией проекта из одной системы отслеживания ошибок в другую, в ходе которой данные были утеряны. Поэтому применение каких-либо мето- дик, основанных на анализе истории, является невозможным.
    6.2. Применение методов машинного обучения
    К подготовленным данным были применены следующие методы ма- шинного обучения с учителем:
    Логистическая регрессия;
    • Гауссовский наивный байесовский классификатор;
    • Метод ближайших соседей;
    • Машина опорных векторов с линейным ядром;
    • Решающее дерево (CART);
    • Случайный лес;
    • AdaBoost с решающими деревьями в качестве базовых классифи- каторов;
    21

    • Метод Extra Graident Boosting библиотеки xgboost.
    Библиотека scikit-learn взята как источник реализаций всех алго- ритмов, кроме последнего. В Таблице 1 приведены результаты клас- сификации, которых удалось достичь на данных, подготовленных при помощи метода, выбранного в предыдущем параграфе.
    Метод
    Total Accuracy, %
    F
    1
    Логистическая регрессия
    74 0.63
    Наивный байесовский классификатор
    64 0.43
    Метод ближайших соседей
    58 0.39
    Машина опорных векторов с линейным ядром
    74 0.61
    Решающее дерево (CART)
    62 0.52
    Случайный лес
    73 0.62
    AdaBoost
    69 0.53
    Extra Gradient Boosting
    74 0.56
    Таблица 1: Результаты применения методов машинного обучения к за- даче классификации на разработчиков
    При этом среднеквадратичные отклонения общей точности для всех методов не превосходили 0.5%, а среднеквадратичные отклонения усред- ненной F
    1
    -меры не превосходили 0.005.
    Метод логистической регрессии показал наилучшие результаты (и высокую стабильность - очень небольшие среднеквадратичные откло- нения), в дальнейшем его было решено использовать как базовый клас- сификатор, улучшения которого мы будем искать.
    Сравнение данного метода с некоторыми другими работами в дан- ной области, использующими машинное обучение, предоставлено на
    Рис. 1. Сравнение произведено на основе измерения общей точности,
    т.к., как уже отмечалось в 4.1, это наиболее общий и часто встреча- ющийся метод измерения точности для работ в данной области. Од- нако, стоит заметить, что данное сравнение не совсем корректно, т.к.
    рассматриваемые классификаторы зачастую работают с различными
    22
    данными, а в данной работе, ввиду рассмотрения отчетов об исключи- тельных ситуациях, содержащих стек вызовов, еще и с данными более конкретной структуры.
    Рис. 1: Сравнения результатов классификаторов, описанных в других работах данной области, с используемым методом логистической ре- грессии
    В расположенных ниже таблицах находятся максимальные резуль- таты, достигнутые при применении алгоритмов классификации к ос- новным комбинациям методов подготовки данных. На их основе и был выбран итоговый вариант преобразования:
    23

    Метод
    F
    1
    Использование строк стека вызовов целиком 0.53
    Использование строк стека вызовов целиком
    + Обработка текста сообщения
    0.54
    Разбиение строк стека вызовов на слова
    0.53
    Разбиение строк стека вызовов на слова
    + Обработка текста сообщения
    0.54
    Таблица 2: Максимальное значение F
    1
    -меры, которой удалось добиться при каждом из рассмотренных способов преобразования при использо- ваниии техники хэширования слов (Максимальное значение хэша при максимумах - 7000)
    Метод
    F
    1
    Использование строк стека вызовов целиком 0.60
    Использование строк стека вызовов целиком
    + Обработка текста сообщения
    0.61
    Разбиение строк стека вызовов на слова
    0.61
    Разбиение строк стека вызовов на слова
    + Обработка текста сообщения
    0.62
    Таблица 3: Максимальное значение F
    1
    -меры, которой удалось добиться при каждом из рассмотренных способов преобразования при исполь- зованиии техник Bag-of-the-Words и Mutual Information (Выбираемое количество свойств при максимумах - 7500)
    24

    Метод
    F
    1
    Использование строк стека вызовов целиком 0.60
    Использование строк стека вызовов целиком
    + Обработка текста сообщения
    0.61
    Разбиение строк стека вызовов на слова
    0.61
    Разбиение строк стека вызовов на слова
    + Обработка текста сообщения
    0.61
    Таблица 4: Максимальное значение F
    1
    -меры, которой удалось добиться при каждом из рассмотренных способов преобразования при исполь- зованиии техник Bag-of-the-Words и Теста χ
    2
    (Выбираемое количество свойств при максимумах - 7000)
    Использование строк стека вызовов целиком 0.62
    Использование строк стека вызовов целиком
    + Обработка текста сообщения
    0.61
    Разбиение строк стека вызовов на слова
    0.61
    Разбиение строк стека вызовов на слова
    + Обработка текста сообщения
    0.63
    Таблица 5: Максимальное значение F
    1
    -меры, которой удалось добиться при каждом из рассмотренных способов преобразования при использо- ваниии техники Bag-of-the-Words и c использованием решающих дере- вьев для уменьшения размерности
    6.3. Двухэтапная классификация с использованием
    подсистем проекта
    6.3.1. Нахождение зависимостей между разработчиками
    При эксплуатации прототипа было замечено, что в большом количе- стве случаев, даже при ошибке предсказания, классификатор указывал на разработчика, работающего вместе с истинным разработчиком над одной и той же подсистемой.
    25

    Поскольку отчеты об исключительных ситуациях имеют очень мало информации о подсистемах из-за автоматической генерации, зачастую невозможно оценить, действительно ли подсистема, указанная в отчете,
    курируется обоими разработчиками (предсказанным и настоящим).
    Однако для проверки замеченной закономерности была собрана ста- тистика о том, какие разработчики над какими проектами работали.
    Эта статистика показала, что в случае ошибки ( 26% от общего числа)
    в 23% от общего числа тестовых элементов предсказанный и настоя- щий разработчики будут иметь пересечения по подсистемам. Поскольку разработчик работает обычно не более, чем над 4-5 подсистемами, это дает неплохой шанс, что предсказанный разработчик быстро и верно перенаправит отчет нужному.
    6.3.2. Классификация по подсистемам
    Интересной идеей для анализа является построение составного ал- горитма, сперва определяющего подсистему, а затем определяющего человека среди сильно суженного круга разработчиков.
    Для этого был проведен анализ подсистем, некоторые подсистемы,
    очень близкие по сути, были объединены в одну. Их количество соста- вило 52 подсистемы.
    Также подготавливались данные по исправленным отчетам, в кото- рых была указана подсистема. Размер выборки данных составил 4724
    отчета.
    Было рассмотрено два подхода:
    1. Использование голосующего алгоритма.
    Было решено отойти от идеи машинного обучения и рассмотреть идею голосования по заранее заданным правилам. Так как под- системы в проекте обновляются гораздо реже, то и изменение правил надо проводить реже. Было решено ввести правила вида
    ”Подстрока” - ”Подсистема”. При обходе текста отчета об исклю- чительной ситуации каждое вхождение подстроки давало голос за соответствующую подсистему. Однако точность такого подхо-
    26
    да в терминах общей точности составила меньше 40 процентов,
    поэтому от данной методики было решено отказаться.
    2. Использование методов машинного обучения.
    Данные обрабатывались схожим с классификацией по разработ- чикам образом. Результат применения методов машинного обуче- ния предоставлен в Таблице 6.
    Метод
    Total Accuracy, %
    F
    1
    Логистическая регрессия
    74 0.64
    Наивный байесовский классификатор
    61 0.50
    Метод ближайших соседей
    60 0.54
    Машина опорных векторов с линейным ядром
    76 0.63
    Решающее дерево (CART)
    70 0.52
    Случайный лес
    75 0.64
    AdaBoost
    75 0.61
    Extra Gradient Boosting
    77 0.62
    Таблица 6: Результаты применения методов машинного обучения к за- даче классификации на подсистемы
    Среднеквадратичные отклонения при измерении общей точности составили не более 0.5% для всех методов. Среднеквадратичные отклонения при измерении усредненной F
    1
    -меры составили не бо- лее 0.005 для всех методов. Лучших результатов в рассматривае- мой метрике удалось достичь при использовании метода логисти- ческой регрессии.
    Поскольку такой подход позволил добиться относительно непло- хой точности предсказания, было решено собрать данные о раз- работчиках, сгруппированные по подсистемам и построить алго- ритм, состоящий из двух частей: сперва при помощи метода логи- стической регрессии определялась подсистема, затем по собран- ным отчетам для данной подсистемы, имеющим ответственного разработчика, строился классификатор, определяющий разработ- чика в заданной подсистеме.
    В качестве классификаторов для второго этапа было опробовано
    27
    несколько методов, однако лучших результатов удалось добиться при использовании машин опорных векторов, причем общая точ- ность составила 24%, усредненная F
    1
    -мера - 0.15.
    Такой плохой результат связан, впервую очередь, с малым коли- чеством отчетов об исключительных ситуациях, размеченных од- новременно по подсистемам и разработчикам, а также с тем, что для многих отчетов определение подсистемы весьма неоднознач- но, и выбирая подсистему, довольно часто исключался необходи- мый человек.
    6.4. Использование частичного обучения для клас-
    сификации по разработчикам
    Было замечено, что помимо относительно небольшого набора разме- ченных данных проект содержит большое количество данных, не содер- жащих меток об исправляющем их разработчике или же содержащем их, но не имеющем подтверждения тому, что метка назначена правиль- но (примерно 34000).
    Было решено применить методы частичного обучения, а именно ме- тод Expectation-Maximization, неплохо показавший себя в задаче клас- сификации текстов [10]. Для этого использовалась реализация, содер- жащаяся в библиотеке upclass для языка R [12].
    80% процентов размеченных данных и все неразмеченные исполь- зовались для обучения классификатора, тестирование проводилось на оставшихся 20% размеченных данных.
    При помощи метода Expectation-Maximization удалось достичь об- щей точности 50% при значении усредненной F
    1
    -меры в 0.35. В связи с долгим обучением и недостаточной точностью от этого метода было решено отказаться.
    28

    6.5. Использование векторов вероятностей для улуч-
    шения предсказания
    В данной секции рассматриваются результаты предсказаний клас- сификатора не в виде меток разработчиков, а в виде векторов вероят- ностей, показывающих, с какой степенью уверенности классификатор относит отчет к каждому из рассматриваемых классов разработчиков.
    В первую очередь, была собрана статистика, показывающая, в каком проценте случаев настоящий разработчик попадал в список из K разра- ботчиков с максимальными вероятностями. Результаты предоставлены в Таблице 7:
    K Частота попаданий, %
    1 74 2
    79 3
    85 4
    88 5
    91
    Таблица 7: Процентное соотношение количества попаданий правильно- го разработчика в K лучших по мнению классификатора
    6.5.1. Уточнение результата предсказания
    Для K = 3 настоящий разработчик попадал в список из наиболее вероятных разработчиков в 85% случаев. Было опробовано несколько идей улучшения результата предсказания:
    1. Было решено попробовать улучшить результат предсказания ме- тода логистической регресии, основываясь на статистике для каж- дой тройки разработчиков.
    Опробованная идея заключалась в следующем: предположим, что для каждых 3 разработчиков есть статистика, собранная в хо- де эксплуатации алгоритма, каждый элемент которой состоит из степеней уверенности классификатора в принадлежности отчета
    29
    каждому из трех разработчиков, а также информации о том, кто из этих трех разработчиков (если он есть среди них) ответственен за отчет на самом деле.
    При эксплуатации прототипа было замечено, что довольно попу- лярные для предсказателя разработчики часто становятся резуль- татом неверного предсказания с небольшим отрывом. Возможно,
    можно было бы по имеющейся статистике построить небольшой классификатор, который разделил бы трехмерное пространство вероятностей так, чтобы уменьшить вероятность выбора этих лю- дей.
    Выбор K = 3 обуславливался балансом прироста общей точности и размером статистики (для бо́льших значений K статистика для каждых K разработчиков содержит меньше элементов). Разме- ченные данные разбивались на 3 части:
    • 60% данных использовались для обучения базового класси- фикатора, который затем должен был быть улучшен;
    • 20% данных, наравне с первыми 60%, использовались для по- строения обозначенной ранее статистики;
    • на оставшихся 20% проводилось тестирование подхода.
    Для совершения предсказания проводились следующие операции:
    (a) Построенный базовый классификатор на основе логистиче- ской регрессии предсказывал какие разработчики и с какой степенью уверенности могут быть ответственны;
    (b) Если для трех разработчиков с наибольшей степенью уве- ренности нет достаточной статистики, то в качестве оконча- тельного результата возвращался разработчик с максималь- ной степенью уверенности;
    (c) В противном случае, по статистике строился небольшой клас- сификатор (методом логистической регрессии), который пред- сказывал, кого из троих выбрать.
    30

    Результат тестирования подхода:
    • Усредненная F
    1
    -мера: 0.63;
    • Общая точность: 72%.
    Таким образом, применение данного подхода не дало улучшения,
    и от него решено было отказаться.
    2. Игнорирование некоторого набора разработчиков в случаях, когда их вероятности довольно близки к вероятностям претендентов.
    Данная идея основа на предположении, похожем на описанное в пункте 1, однако является менее автоматизированной. Можно вы- брать несколько разработчиков, для которых тестирование алго- ритма показало, что они слишком часто становятся результатами неверного предсказания (в силу, например, большого количества примеров из тренировочной выборки, принадлежащих им). Если для некоторого отчета степень уверенности для первого разработ- чика из этого списка отличается от степени уверенности для вто- рого по популярности разработчика на величину, меньшую неко- торого порога, то первый разработчик отбрасывается, в качестве предсказания возвращается второй.
    Был выбран набор разработчиков, для которых соотношение ко- личества предсказанных на них элементов к числу реальных отче- тов, принадлежащих им, было бы больше коэффициента 1.2. Были рассмотрены различные пороги, однако не удалось найти порог,
    при котором наблюдалось бы улучшение. Причиной данной про- блемы может быть тот факт, что применение методики больше искажает предсказание для часто упоминающихся разработчиков,
    нежели помогает исправить результаты не принадлежащих им со- общений.
    31

    6.5.2. Классификатор с неопределенностью
    Заключительным этапом стало рассмотрение возможности отказы- ваться от предсказания. Не всегда целесообразно давать предсказания всем отчетам об исключительных ситуациях в системе, так как в случае неверного предсказания разработчик потратит дополнительное время,
    пытаясь осознать, верно ли, что это сообщение предназначается ему.
    В связи с этим было решено установить порог предсказания - ес- ли степень уверенности классификатора меньше этого порога, то имеет смысл не предсказывать разработчика для данного сообщения и позво- лить, например, руководителю команды принять окончательное реше- ние о судьбе отчета. На Рис. 2 показана зависимость количества допу- щенных предсказаний от порога.
    В ходе тестирования был выбран порог - 0.55, что позволило сни- зить вероятность ошибки с 26% от общего размера данных, до 16% при общем количестве проигнорированных отчетов в 17%.
    32

    Рис. 2: Зависимости общего количества верных и неверных предсказа- ний от выбора порога классификации
    7. Заключение
    В данной работе была рассмотрена задача автоматического назна- чения ответственного за отчет об исключительных ситуациях проекта
    ReSharper. Были рассмотрены различные способы преобразования дан- ных, была рассмотрена возможность применения различных классифи- каторов, в том числе и составных. Были проведены сравнение и анализ результатов.
    Исходя из полученных данных, был выбран классификатор на осно- ве метода логистической регрессии, реализованного в библиотеке scikit- learn, обладающий лучшими показателями усредненной по всем клас- сам F
    1
    -меры, выбранной в качестве оценки точности - при помощи него удалось достить значения в 0.63. При этом данный классификатор также показал лучшие результаты при измерении процента правильно предсказанных отчетов - он верно определял разработчика в 74% случа-
    33
    ев, что является хорошим результатом в рассматриваемой области (см.
    Рис. 1), а также новым результатом для более конкретной задачи клас- сификации отчетов об исключительных ситуациях, показывающим, как уточнение области может влиять на способ подготовки данных и при- меняемые алгоритмы классификации.
    На основе данного метода был реализован анализатор, позволяю- щий определять разработчика, который вероятнее всего ответственен за данный отчет об ошибке. Данный компонент встраивается в сервер,
    занимющийся обменом сообщений с системой отслеживания ошибок.
    Для уменьшения вероятности выдачи неверного предсказания было добавлено игнорирование результатов предсказания, обладающих недо- статочно высокими вероятностными показателями. Это позволило сни- зить вероятность ошибки до 16% от общего размера тестовой выборки при общем размере количества проигнорированных элементов в 17%.
    Также, была добавлена возможность предсказания нескольких наи- более вероятных, по мнению классификатора, разработчиков с их чис- ловыми оценками вероятностей. Так, процент попаданий настоящего разработчика в список из трех наиболее подходящих для тестовой вы- борки равен 85%, поэтому данная статистика может использоваться как дополнительная информация для команды разработчиков.
    34

    Литература
    [1] Anvik J., Hiew L., Murphy G.C. Who should fix this bug? // ICSE. ––
    2006. –– P. 361–370.
    [2] Automated bug assignment: Ensemble-based machine learning in large scale industrial contexts / L. Jonsson, M. Borg, D. Broman et al. //
    Empirical Software Engineering. –– 2014.
    [3] Bhattacharya P., Neamtiu I., Shelton C.R. Automated, highly- accurate, bug assignment using machine learning and tossing graphs //
    The Journal of Systems and Sofstware. –– 2012. –– Vol. 85, no. 10. ––
    P. 2275–2292.
    [4] Breiman L. Random forests // Machine learning. –– 2001. –– Vol. 45,
    no. 1. –– P. 5–32.
    [5] Chen T., Guestrin C. XGBoost: A Scalable Tree Boosting System. ––
    2016.
    [6] Cubranic D., Murphy G.C. Automatic bug triage using text categorization // SEKE. –– 2004. –– P. 92–97.
    [7] Freund Y., Schapire R.E. A Short Introduction to Boosting // Journal of Japanese Society for Artificial Intelligence. –– 1999. –– P. 771–780.
    [8] Genkin A., Lewis D.D., Madigan D. Sparse Logistic Regression for Text
    Categorization. –– 2004.
    [9] Gunn S.R. Support Vector Machines for classification and regression //
    Technical report, University of Southampton, Faculty of Engineering,
    Science and Mathematics; School of Electronics and Computer
    Science. –– 1998.
    [10] McCallum
    A.,
    Nigam
    K.,
    Mitchell
    T.
    Semi-supervised text classification using EM // MIT Press. –– 2006.
    35

    [11] Ramos J. Using TF-IDF to Determine Word Relevance in Document
    Queries // Technical report, Department of Computer Science, Rutgers
    University. –– 2003.
    [12] Russell N., Cribbin L., Murphy T.B. Updated Classification
    Methods using Unlabeled Data. ––
    2013. ––
    URL: https://
    cran.r-project.org/web/packages/upclass/upclass.pdf (online;
    accessed: 11.03.2016).
    [13] Scikit-learn:
    Machine
    Learning in
    Python
    /
    F.
    Pedregosa,
    G. Varoquaux, A. Gramfort et al. // Journal of Machine Learning
    Research. –– 2011. –– Vol. 12. –– P. 2825–2830.
    [14] Sokolova M., Lapalme G. A systematic analysis of performance measures for classification tasks // Information Processing and
    Management 45. –– 2009. –– P. 427–437.
    [15] A Study on Mutual Information-based Feature Selection for Text
    Categorization / Y. Xu, G. Jones, J. Li et al. // Journal of
    Computational Information Systems. –– 2007. –– P. 1007–1012.
    [16] Yang Y., Pedersen J. O. A comparative study on feature selection in text categorization // ICML-97, 14th International Conference on
    Machine Learning. –– 1997. –– P. 412–420.
    [17] A comparative study of decision tree ID3 and C4.5 / B. Hssina,
    A. Merbouha, H. Ezzikouri, M. Erritali // International Journal of
    Advanced Computer Science and Applications. –– 2014. –– P. 13–19.
    [18] An empirical study on bug assignment automation using Chinese bug data / Z. Lin, F. Shu, Y. Yang et al. // 3rd International Symposium on
    Empirical Software Engineering and Measurement. –– 2009. –– P. 451–
    455.
    [19] Воронцов К.В. Лекции по метрическим алгоритмам классифи- кации. ––
    2008. ––
    URL: http://www.ccas.ru/voron/download/
    MetricAlgs.pdf (online; accessed: 03.02.2016).
    36

    [20] Воронцов К.В. Лекции по линейным алгоритмам классифи- кации. –– 2009. –– URL: http://www.machinelearning.ru/wiki/
    images/6/68/voron-ML-Lin.pdf (online; accessed: 29.12.2015).
    37


    написать администратору сайта