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

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

Итак, мы завершили наш первый курс. Сейчас идет второй и 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, нашей официальной странице.

Комментарии (9)


  1. brainick
    10.12.2015 16:52
    +15

    Хотелось бы задать несколько вопросов
    1. Вы и остальные (http://bigdata.beeline.digital/#speakers) гордо именуете себя Школой Данных Билайн. (Хотя один из преподавателей, судя по его профилю ВКонтакте, уже работает в МТС. Ну да ладно, не будем занудничать). Собственно говоря, хотелось бы увидеть ответ на вопрос, насколько вы аффилированы с Билайном? Т.е. руководство Билайна в курсах, что группа предприимчивых молодых (и судя по биографиям, очень неглупых) людей проводят занятия по анализу данных, используя торговую марку Билайна? Если да, и ваш образовательный проект поддерживается Билайном, то, было бы интересно узнать, почему компания-гигант не может оплатить ваш труд и сделать занятия бесплатными для слушателей, (а сто тысяч за 24 астрономических часа, пожалуй, многовато) как это делает Яндекс(ШАД), Майл.Ру (Технопарк, Техносфера), Computer Science Center? Или Билайн уже банкрот? ?

    2. Школа анализа данных Яндекса проводит для своих слушателей, судя по опубликованным задачам достаточно жёсткий отбор. Вы требуете лишь, цитирую «А еще вы должны быть знакомы с математической статистикой и иметь опыт программирования на языке Python». Вы действительно считаете, что знакомства со статистикой и Python будет достаточно для усвоения курса?

    3. Школа анализа данных Яндекса обучает слушателей два года. (Причём, большинство этих слушателей – студенты хороших вузов) Вы действительно считаете, что можете обучить чему-то за 24 часа людей с улицы?

    4. Вы пишете: «Лучшие получают рекомендацию на работу мечты.». Лично мне это кажется рекламной морковкой, развешанной перед носом доверчивых граждан, ибо кому как не вам знать истинные требования к специалистам в области Data Science и знать, что умение решать несколько типов задач в области Data Science делает из человека лишь Data Scince monkey, но никак не специалиста?

    Резюмируя всё вышесказанное, я почему-то думаю, что ваши курсы – сравнительно честный отъём денег у доверчивых граждан, мечтающих о работе мечты. Тем более, что сейчас на Stepic.org начался бесплатный курс по Hadoop и скоро начнётся русскоязычный курс по машинному обучению на Coursera.

    Убедите меня в обратном


    1. cotique
      15.12.2015 22:32

      За 24 часа можно научить знающего матстат и питон человека выполнять команды по алгоритму. Или пройтись по верхам: рандомный лес, Jupyter, NumPy, SciPy, Pandas, Matplotlib, R, графы и др.

      Из другой публикации:

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

      Человек с минимальным опытом программирования на Python из 24-х часов часа четыре будет устанавливать пакеты, R/R Studio, Джупитер и входить в курс дела. Наверное, у Билайна опыт программирования на Python подразумевает неплохой такой опыт. И, скорее всего, знание NumPy, Matplotlib и прочего. Иначе я не знаю, как можно успеть весь материал усвоить так, чтобы стать датасаентистом и получить «работу мечты».
      И почему, кстати, Python и R, если можно оставить только божественный R и собственно анализ данных изучать на нём? Имхо, сложнее научиться датаанализу, нежели перенести потом навыки с R на Python.

      В Школу Данных я действительно думаю пойти, но есть сомнения в эффективности курса.

      С другой стороны, если дают домашние задания уровня курсовых по Data Science Specialization, то можно очень сильно прокачаться. Билайн, что скажете? Домашку даёте? Мозги закипают от неё? Что думаете про Julia? Есть план занятий?


  1. neko_nya
    11.12.2015 20:01

    Ещё б курсы русского языка ввели, и было бы совсем хорошо.


  1. grossws
    12.12.2015 03:56

    Например, название города New York, формально, состоит из двух отдельно стоящих слов. Разумеется, для любой разумной обработки нужно считать эти два слова одним токеном и не обрабатывать их по одиночке.
    Звучит как откровенная лажа.

    Тупой пример из CoNLL 2003 (каждая строка — отдельный токен, NE-тэг — последняя колонка):
    ounce NN I-NP O
    in IN B-PP O
    Hong NNP B-NP B-LOC
    Kong NNP I-NP I-LOC
    on IN B-PP O
    Friday NNP B-NP O
    ,, O O
    versus CC O O
    New NNP B-NP B-LOC
    York NNP I-NP I-LOC
    's POS I-NP O


    1. alexeygrigorev
      13.12.2015 19:30

      Я бы не был так категоричен — я думаю автор в целом прав.


      1. grossws
        13.12.2015 19:45

        Как минимум, категоричным было утверждение автора, а не моё, как можно заметить по цитате выше. Специально выделил полужирным.

        В разных случаях используют разную токенизацию. Вариант с токенами более-менее эквивалентными слову является общепринятым в компьютерной лингвистике, рассматривается в большом количестве (в том числе практических) работ в области NER и SRL.

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

        Вариант с посимвольной обработкой последнее время стал более популярен и тоже приносит свои результаты.

        Но автор привёл странный, неоднозначный и нетривиальный вариант токенизации (который токенизацией-то можно назвать с натяжкой) и безапелляционно заявил, что для любой разумной обработки необходимо порождать один токен. Подумайте над тем, сколько токенов породят Queen Mary University of London, New York Stock Exchange, Prime Minister of United Kingdom David Cameron и подобные словосочетания.


        1. SergeyMarin
          15.12.2015 11:08

          Мы не вводили понятия именованной сущности и вели рассказ на вводном уровне. Вопрос “что такое именованная сущность?” заслуживает отдельного обсуждения. Заметим, что бывают примеры вложенных друг в друга именованных сущностей, которые приводит grossws, а бывают довольно понятные однозначные именованные сущности, например “Российская федерация”, которые, все-таки, хочется обрабатывать так же, как индивидуальные токены. Однако, это уже предмет обсуждения на занятиях.


          1. grossws
            15.12.2015 11:14

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


  1. BiXiC
    14.12.2015 00:43

    Стоимость участия 100000 рублей, какой ещё отбор…