Роль QA в проектах ML

Руслан Дзутцев
Effective Developers
7 min readMay 7, 2020

На данный момент Машинное Обучение одна из самых перспективных областей в разработке программного обеспечения, и ей уделяется не только большое количество внимания, но и огромное количество ресурсов самых различных компаний всех уровней. Если раньше в этой области доминировали только гиганты разработки, такие как Google, Microsoft, и государственные компании, то сейчас в этой области успешно пробуют свои силы как многие небольшие частные фирмы, так и просто отдельные разработчики. Естественно, там где есть разработка различных алгоритмов, есть и запрос на их качество. Зачастую, приоритетной целью таких алгоритмов является решение задач, важных для заказчика. А значит, конечное качество их работы должно быть на высоте. А там где есть запрос на качество конечного продукта, там есть и QA инженеры. Но какова роль QA в уже сложившемся процессе создания алгоритма машинного обучения? Это мы и попытаемся разобрать в этой статье.

Что такое ML?

Для того чтобы разобраться с ответом на данный вопрос, для начала нужно понять что же такое ML и зачем оно нужно в современном мире. Обратимся к Википедии за ответом, и по ее словам “Машинное обучение (англ. machine learning, ML) — класс методов искусственного интеллекта, характерной чертой которых является не прямое решение задачи, а обучение в процессе применения решений множества сходных задач. Для построения таких методов используются средства математической статистики, численных методов, методов оптимизации, теории вероятностей, теории графов, различные техники работы с данными в цифровой форме.” На деле такая формулировка может скорее запутать нежели помочь. Поэтому отложим формальное определение и обратимся к примерам чтобы лучше понять суть.

Предположим, у нас есть среднестатистический человек (назовем его Александр) с потребностью купить кофеварку себе домой, чтобы делать свою работу продуктивнее и не тратить так много времени на приготовление любимого напитка. Логично предположить, что Александр хочет выбрать лучшее предложение за свои деньги, и при этом он уже знает какую модель кофеварки он хочет. Пользователь идет с этим вопросом в интернет и смотрит сколько стоит та модель которую он выбрал. Абсолютно новая, только что с полки кофеварка стоит в среднем 15000. Так-же Александр изучил рынок б/у кофемашин, и увидел что такая же, но годовалая модель стоит уже 13000, а двухгодовалая 11000. Обдумав полученную информацию, Александр приходит к выводу о том, что стоимость данной модели кофемашины падает с каждым годом ее использования на 2000, пока не остановится на цене в 5000 за экземпляр.

В машинном обучении то, что сделал Александр называется регрессией, то есть он имел какие то входные данные и предсказал по ним итоговую цену. Мы с вами делаем это постоянно, начиная от расчета количества помидоров, которые нужно купить семье на неделю, и заканчивая ценой за квадратный метр жилья в вашем городе.

На деле же, если брать наш пример, у Александра есть огромные входные данные, начиная от модели кофемашин (а их скорее всего не одна сотня от каждого из десятков производителей), и заканчивая различными параметрами, такие как время приготовления кофе, возможность взбивать молоко в пену и так далее. Для того чтобы все это не просчитывать на каждый случай жизни, намного лучше задать все параметры в компьютер, который найдет закономерности и научится выдавать лучший результат по нашим требованиям, в то время как мы с вами займемся другими делами. Именно это делегирование рутинных процессов человеческого мышления машине и породило машинное обучение.

Из чего же состоит машинное обучение и как в этот процесс вписывается QA?

Всё машинное обучение можно разбить на 3 больших составляющих: данные, признаки и алгоритм.

Почти в каждой из этих составляющих можно найти входные точки для работы QA, что обеспечит наилучшее качество продукта на выходе. Рассмотрим их поподробнее.

Данные.

Данных много не бывает. Поэтому для конечного обучения модели данных обычно требуется очень много, как минимум, десятки тысяч примеров для более точного определения. Так, например, если мы хотим обучить машину определять на картинке котиков, то нам в качестве примеров понадобится множество картинок с котиками. Если мы хотим чтобы машина научилась правильному поиску по запросу в поисковой строке, то нам нужны эти поисковые запросы и большое количество результатов. Тут и появляется первая задача QA — сбор и обработка данных. Человек может привести, найти, создать десятки примеров по заданному вопросу, что и требуется. Данные должны подходить под параметры нашей проблемы, поэтому, например, если мы собираемся научить машину предсказывать исходы футбольных матчей, то и данные должны быть соответствующими: матчи команд и их результат. Сбор данных можно осуществлять по заданным параметрам автоматически. Но для того чтобы убедиться, что в итоге мы получим желаемое, нам следует проверить, ту ли информацию мы подаем на вход. К примеру, если среди десятков тысяч автоматически выгруженных данных футбольных матчей у нас будет 15 % исходов матчей по американскому футболу, то качество обучения модели будет явно страдать. Так что нужно следить и проверять что мы подаем на вход машине, а значит сбор и обработка данных должна проходить через QA. Также это облегчит конечную проверку работоспособности нашего алгоритма, ведь мы знаем какие данные были верными, на которых уже обучался алгоритм, а какие нет. Есть еще один важный момент — подбор данных, которые не участвовали в обучении. И это очень важно. Конечная проверка качества работы алгоритма должна строиться не только на тех данных которые мы подавали, но и на тех, которые он еще не видел. Вернемся к примеру с предсказанием итогов футбольных матчей. Допустим, мы внесли все доступные данные (в нашем примере это все имеющиеся результаты матчей различных команд в истории), при этом, нам нужно проверить как работает алгоритм заранее не обучаясь на этих данных. Следовательно, мы должны оставить нетронутыми n-е количество матчей, исход которых знаем мы, но не знает наша машина. Пусть это будет условно результат матча Манчестер Юнайтед — Арсенал. Мы знаем что он закочился со счетом 2–2, но алгоритм не знает, так как этот матч он видит впервые. И посмотрев, таким образом, итоговое предсказание алгоритма, мы можем с большей точностью сказать, работает он так как надо (если он предскажет ничью со счетом 2–2) или же он еще недостаточно точен (если с большей вероятностью будет предсказан любой другой исход).

Признаки

В машинном обучении обычно признаки, свойства, характеристики называются фичами (от англ. features). Ими могут быть любые параметры, как для нашего примера с футболом будут составы команд, характеристики игроков, погодные условия матча, место проведения матча, судья, выбранная тактика и многое другое, начиная от тренера команды и заканчивая качеством покрытия на футбольном поле.

Алгоритм должен знать на что ему обращать внимание. Но чем больше признаков мы задаем, тем медленнее и менее эффективно работает сама модель. На что обращать внимание в конечном итоге должна решать сама модель, пусть, зачастую, это и занимает больше времени чем обучение, но начальные данные и возможные параметры ей задает человек, и этим также может заниматься QA, пусть это так же формально будет относиться к сбору данных. По итогу, на часть входных параметров алгоритм не будет обращать внимания, но мы должны предоставить максимальную картину того, что мы видим посредством входных данных. Можно также задать правильные на наш взгляд параметры и фичи, но, как показывает практика, это приводит только к отрицательным результатам, а точнее к ухудшению работы алгоритма.

Алгоритм

Алгоритм — это то, на что QA может влиять меньше всего. Он составляется и пишется разработчиками, наша задача состоит в том, чтобы оценить качество того что этот алгоритм выдаст в итоге. По результатам оценки качества разработчиками могут быть внесены изменения в алгоритм.

Процесс обучения

Для примера роли QA в процессе обучения алгоритма приведем так называемое “Классическое обучение с учителем” (Supervised Learning). На самом деле есть также и обучение без учителя (Unsupervised Learning), но нам оно не так интересно, потому что состоит в основном из вбрасывания кучи данных в алгоритм и надежды на то что он когда нибудь разберется сам. Классическое обучение — это метод, который перекочевал к нам из статистики 1950-х гг. за счет задач, которые были актуальны в тот период времени: поиск закономерностей в цифрах, оценивание близости точек в пространстве и вычисление направления. Сейчас на таких же классических алгоритмах базируется очень много технологий, достаточно привести в пример блокировку банковской карты на основе покупок за границей.

По большому счету, “Классическое обучение с учителем” сводится к тому, что для начала алгоритму показывают как определять правильно. Тут то и вступает в роль QA. Мы прекрасно можем на какое-то время заменить алгоритм, тем самым показав ему как нужно действовать в данной ситуации, то есть выступая его “Учителем”. Например, мы хотим сделать алгоритм который будет отличать черепах от ящериц. Для этого ему надо показать пример того как это делается, и мы, имея два датасета, начинаем сами проходить этот незамысловатый тест, отмечая нужную картинку либо как черепаху либо как ящерицу. На основе того что мы выбрали, алгоритм сам выделит признаки одного и другого животного и, впоследствии, научившись у нас, будет это делать сам, при этом также совершенствуясь. Выступая в качестве “наставника” алгоритма, мы можем обеспечить его конечное качество работы, что нам и требуется.

Итоги

Мы с вами пробежались только по верхушке айсберга, который называется машинное обучение, но и на данном этапе понятно, что роль QA не сводится только к обеспечению качества продукта, путем проверки его работоспособности, но и через множество областей где можно проявить себя (поиск, составление, проверка данных и признаков, обучение и отладка алгоритма совместно с разработчиками и т.д.) и предоставить наиболее качественный продукт для конечных пользователей и заказчика. Машинное обучение, как еще достаточно новое в широком использовании средство, дает простор для его использования в повседневной жизни, но в тоже время может представлять большую опасность, если не обеспечить должный уровень работы алгоритмов. Примеров может быть множество, я думаю каждый сможет представить случай, когда неправильно обученная или запрограммированная машина может привести к катастрофе, начиная от сферы финансов и банковского дела, и заканчивая автомобилями с автопилотами. В том числе и поэтому мы должны обеспечить незаурядное качество работы таких алгоритмов. QA может обеспечить это контролируя качество на каждом этапе машинного обучения, начиная от сбора данных (как используемых в обучении, так и не используемых) и изучения их на валидность, проверками этапов обучения и верности отбора признаков, и заканчивая тестированием окончательных результатов.

Огромное спасибо за прочтение!

Если вам или кому-то из ваших знакомых нужно разработать качественное мобильное приложение, веб-сервис, или помочь в решении бизнес-задач, смело обращайтесь к нам в Effective, мы готовы сотрудничать с вами в любом виде: как на проекте целиком, так и на аутстаф. Связаться с нами можно через почту contact@effective.band

--

--