Время прочтения: 3 мин.

Конференция была организована международным сообществом Open Data Science в формате meetup. В программе мероприятия нас очень заинтересовали алгоритмы autoML, выделение именованных сущностей, нейро-машинный перевод в вопросно-ответных системах и обзор подходов оптимизации анализа больших данных.

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

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

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

Один из спикеров сформулировал несколько основных правил работы с большими данными в условиях использования на локальном оборудовании (без задействования вычислительных кластеров):

  1.  Предобработка не в python. Если у вас есть большое количество маленьких файлов, которые вы собираетесь открывать в pandas с помощью стандартнойread_csv и  конкатенировать DataFrame объекты, то вы рискуете никогда не дождаться завершения работы данной процедуры из-за постоянной переаллокации памяти под разрастающийся результирующий DataFrame. Лучшим решением в данной ситуации будет конкатенация файлов с помощью средств командной строки и дальнейшее чтение уже «общего» файла уже средствами pandas.
  2. Используем Chunking.  Параметр chunksize при записи в DataFrame позволяет писать в объект частями заданного размера и отлично подходит для решения задач в условиях невозможности прочитать файл целиком в память.
  3. Используем DataFrame.from_records.  Этот способ отличное решение для фильтрации данных на входе и уменьшения объема данных в памяти, в отличие от метода read_csv.
  4. Преобразуем к минимальным типам данных. Зачастую pandas создает максимально «вместительные» типы данных для столбцов. Для избежание этой неприятной ситуации задавайте типы данных при инициализации объекта DataFrame. Зачастую удается сократить размер DataFrame на 50%! Также хотелось бы отметить возможность при инициализации передать в параметр parsing функцию преобразования столбца к типу datetime: данный параметр позволяет применить к строковым датам конкретную функцию преобразования в datetime. По умолчанию модуль dateutil пытается сам угадать формат, что ведет к уменьшению скорости работы программы.
  5. Используем векторизованные операции. В 1979 году был разработан стандарт интерфейса программирования приложений создания библиотек BLAS, выполняющий операции линейной алгебры, такие как умножение на скаляр и умножение матриц. Данный стандарт призван значительно повысить производительность операций линейной алгебры и уже реализован производителями аппаратного обеспечения.

Numpy и Pandas используют реализации BLAS и поэтому векторные операции в этих пакетах работают на порядок быстрее, чем итеративные аналоги. Поэтому при использовании этих модулей старайтесь по максимуму использовать векторные операции над DataFrame объектами и откажитесь от итеративных операций везде, где это возможно.

Больше информации можете получить на сайте мероприятия