Школа Данных «Билайн», приоткрываем занавес +7




Привет, хабр!

Вы уже много раз слышали про то, что мы проводим курсы машинного обучения и анализа данных в Школе Данных «Билайн». Сегодня мы приоткроем занавес и расскажем, чему же учатся наши слушатели, и какие задачи им приходится решать.

Итак, мы завершили наш первый курс. Сейчас идет второй и 25 января стартует третий. В предыдущих публикациях, мы уже начали рассказывать, чему мы учим на наших занятиях. Здесь мы более подробно поговорим о таких темах, как автоматическая обработка текстов, рекомендательные системы, анализ Больших Данных и успешное участие в соревнованиях Kaggle.

Итак, одно из занятий в Школе данных “Билайн” посвящено NLP – но не нейро-лингвистическому программированию, а автоматической обработке текстов, Natural Language Processing.

Автоматическая обработка текстов – это область с высоким порогом вхождения: чтобы сделать интересное бизнес-предложение или принять участие в соревновании по анализу текстов, например, в SemEval или Диалоге, необходимо разбираться в методах машинного обучения, уметь пользоваться специальными библиотеками для обработки текстов, чтобы не программировать с нуля рутинные операции, и иметь базовые представления о лингвистике.

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

Мы разобрали основные сложности, которые бывают при работе с текстами. Например, задача токенизации (разбиение текста на предложения и слова) — далеко не такая простая, как кажется на первый взгляд, потому что понятие слова и токена довольно размыто. Например, название города New York, формально, состоит из двух отдельно стоящих слов. Разумеется, для любой разумной обработки нужно считать эти два слова одним токеном и не обрабатывать их по одиночке. Кроме того, точка – не всегда конец предложения, в отличии от вопросительного и восклицательного знаков. Точки могут быть частью аббревиатуры или записи числа.

Другой пример — морфологический анализ (по простому — определение частей речи) — тоже не простая задача из-за морфологической омонимии: разные слова могут иметь совпадающие формы, то есть, являться омонимами. Например, в предложении “Его удивил простой солдат” целых два омонима: простой и солдат.

К счастью, реализовывать с нуля эти алгоритмы слушателям школы не пришлось: все они реализованы в Natural Language Toolkit, библиотеке для обработки текстов на Python. Благодаря чему наши слушатели тут же испробовали все методы на практике.

Далее, мы перешли к такой популярной теме как рекомендательные системы.

Узнать про то как работают классические алгоритмы коллаборативной фильтрации на основе сходства по пользователям или признакам, а также изучить SVD модели наподобие SVDfunk недостаточно для разработки собственного решения. Поэтому после изучения теории мы перешли к практике и use-кейсам.

Так, программируя на Питоне, мы узнали как с небольшими изменениями из user-based получить item-based и протестировали их работу на примере классического бенчмарка — данных MovieLens. Изучили как правильно проводить оценку моделей на основе бимодальной кроссвалидации (выделяется не только тестовое множество пользователей, но и скрывается часть оцененных объектов), как ведут себя эти методы при варьировании параметра топ-n рекомендаций и k ближайших соседей.

Узнали про булеву матричную факторизацию и разложение по сингулярным числам, а также про то как эти техники способны не только сократить размерность данных, но и выявить скрытое вкусовое/тематическое сходство пользователей и объектов рекомендации.

В качестве use-кейса гибридной рекомендательной системы для данных с неявным откликом мы рассмотрели рекомендацию радиостанций для онлайн-хостинга.

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

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

На помощь приходят адаптивные профили на основе тегов музыкальных композиций, которые такие сервисы как last.fm дают даром. Составив профиль из тегов и для радиостанции и для пользователя мы автоматически можем сделать его динамическим, так при каждом проигрывании/прослушивании композиции с треком indie rock в профиль радиостанции и слушателя кладется единичка в соответствующую компоненту.

Чем больше проигрываний/прослушиваний композиций с таким тегом, тем больше вклад этого тега в соответствующие профили. Векторы профилей можно нормировать и метчить по мере сходства или на основе дивергенции Кульбака-Лейблера, которая считается более пригодной для распределений.

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

Как показала практика использования, SVD-подобная модель на таких данных с неявным откликом оказалась неспособной дать высокие результаты, а гибридное решение продемонстрировало приемлемые среднюю абсолютную ошибку, NDCG, а так же точность и полноту.

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

Еще, мы поговорили про специфику анализа больших объемов данных, про то, что интуиция, которая хорошо работает в случае малых выборок, подводит при переходе к большим объемам. Познакомились с системой параллельных вычислений в оперативной памяти Apache Spark, чем она отличается от Hadoop, в чем специфика реализации масштабируемых алгоритмов машинного обучения. Практика была на подсчет слов в собрании сочинений Шекспира и анализ серверных логов с помощью Apache Spark.

Мы поговорили подробней о библиотеке масштабируемых алгоритмов машинного обучения Apache Spark MLLib, обсудили, как обучать линейную и логистическую регрессию, дерево и лес решений на нескольких машинах, как делать матричную факторизацию. Практическим заданием было доработать систему рекомендации фильмов, использующую распараллеленную версию алгоритма ALS для коллаборативной фильтрации. 

В завершение, мы рассматривали соревнования по анализу данных – зачем они нужны, какой стек технологий для этого используется, как происходит процесс исследования. Подробно была рассмотрена задача Caterpillar Tube Pricing Competition – задача предсказания цены на конструкцию из труб по размерам и материалом. Решение в основном строилось на генерации новых признаков из существующих категориальных. Были рассмотрены различные методы, основанные на One-Hot-кодировании, Label-кодировании, а также агрегации нескольких признаков. Были рассказаны способы построения валидации для повторяющихся объектов.

Также была разобрана задача AXA Driver Telematics Analysis – задача определения уникального стиля вождения. Подобные задачи все чаще встречаются с ростом популярности страховой телематики. Задача состояла в следующем: были даны треки (координаты x,y, посчитанные через равные промежутки времени) для водителей. Всего было дано по 200 треков для 2300 водителей. Известно также, что порядка 5-10% треков ошибочны и не принадлжеат тому водителю, которому они приписаны. Задача заключалась в том, чтобы для каждого водителя определить, где именно его треки, а где – нет. Такую задачу решают и в реальной жизни – например, чтобы по стилю вождения отслеживать, когда за руль сел другой человек.

Данные были обфусцированы, и все треки начинались из начала координат. Так они выглядели:



Для решения подобной задачи сначала необходимо придумать признаки для алгоритмов машинного обучения – то, что отличит одного водителя от другого. Например, можно взять среднюю скорость, среднее ускорение и т.д. Для данной задачи хорошо подходило выделение описательных статистик для cкорости, 1 производной скорости (ускорения), 2, 3 скорости, скорости вдоль основного движени – например, 0, 10, 20… 100 перцентиль для каждого из перечисленных распределений. Также понадобилиись размеры самого трека – максимальные и минимальные координаты x, y. Эту задачу классификации без учителя можно свести к задаче обучения с учителем, создав обучающую выборку. Будем решать задачу индивидуально для каждого водителя: определяем, какие треки принадлежат ему, а какие – нет; Мы знаем, что большая часть треков его водителя принадлежит ему. Про треки других водителей мы можем с уверенностью утверждать обратное: они принадлежат другим людям. Тогда пометим собственные треки единицами (1), а треки других водителей – нулями (0). Таким образом сгененерируем целевой признак, на основании которого можно классифицировать треки как принадлежащие водителю и не принадлежащие.

Затем построим модель случайного леса (RandomForest) и будем использовать ее в качестве бинарного классификатора на два класса: 0 и 1. Затем построенную модель применим к 200 трекам исходного водителя. И уже полученные вероятности принадлежности трека к классу 1 будем использовать как ответ. Такую классификацию повторим для каждого водителя.

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

Итак, первый курс завершился, вовсю идет второй, и мы набираем третий. Старт третьего 25 января 2016 года. Запись открыта уже сейчас. Детали, как обычно, на bigdata.beeline.digital, нашей официальной странице.




К сожалению, не доступен сервер mySQL