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

Ноутбуки Юпитера

Jupyter Notebook — один из наиболее распространенных инструментов, используемых специалистами по данным. Это веб-файлы для интерактивной среды разработки. Он позволяет запускать код Python в удобном веб-интерфейсе, напоминающем блокнот.

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

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

Однако работа с Jupyter Notebooks может быть утомительной. Первая проблема, которую можно упомянуть об этой среде, — сложность поддержания линейного рабочего процесса. Поскольку мы можем запускать каждую ячейку в любом возможном порядке, невозможно обеспечить последовательный рабочий процесс. Из-за этой нелинейной среды легко создавать повторяющийся код, что затрудняет поддержку и отладку кода.

Альтернатива

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

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

Поэзия

Теперь, когда я немного рассказал о том, почему мы должны рассматривать модули Python для разработки наших проектов машинного обучения, возникает естественный вопрос: как мы можем реализовать этот новый подход? На этот вопрос может быть много ответов. Однако в этом посте я собираюсь показать, как мы можем использовать Poetry для разработки машинного обучения.

Poetry — это библиотека Python. Он предназначен как инструмент для управления зависимостями и упаковки в Python. Таким образом, это позволит нам управлять всеми библиотеками, от которых зависит наш проект. Кроме того, Poetry может создавать необходимые файлы для создания наших собственных библиотек Python, точно так же, как те, которые мы можем установить с помощью pip install. На самом деле, мы можем публиковать наши пользовательские библиотеки с помощью Poetry.

Запуск поэтического проекта.

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

poetry new text_classifier
cd text_classifier

Когда мы создаем новый проект, Poetry автоматически создает структуру папок с некоторыми файлами внутри нее.

│   pyproject.toml
│   README.rst
│
├───tests
│       test_text_classifier.py
│       __init__.py
│
└───text_classifier
        __init__.py

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

Рабочий процесс машинного обучения

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

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

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

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

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

│   pyproject.toml
│   README.rst
│
├───tests
│       test_text_classifier.py
│       __init__.py
│
└───text_classifier
    │   __init__.py
    │
    ├───evaluation
    │       __init__.py
    │
    ├───feature_engineering
    │       __init__.py
    │
    ├───model_training
    │       __init__.py
    │
    ├───preprocessing
    │       __init__.py
    │
    └───utils
            __init__.py

Теперь нам просто нужно разработать наши модули, но сначала давайте посмотрим на данные, которые мы собираемся использовать. В этом примере я собираюсь использовать классическую задачу из области НЛП. Цель будет состоять в том, чтобы различать отрицательные и положительные отзывы о фильмах. Набор данных можно найти по этой ссылке. Тот, который я собираюсь использовать, называется набором данных полярности v1.0.

Использование вложений Word с TensorFlow для классификации текстов обзоров фильмов. | Мануэль Хиль | Жизнь чат-ботов

Классификация текстов обзоров фильмов с использованием scikit-learn | Мануэль Хиль | Python на простом английском языке

Рабочий процесс НЛП

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

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

Это означает, что в зависимости от стратегии разработки функций, которую мы собираемся использовать, предыдущие шаги будут отличаться. Например, стратегии разработки признаков включают TF-IDF, Word2Vec, Doc2Vec, встраивания и т. д. В зависимости от того, какой из них мы собираемся использовать, часть предварительной обработки будет отличаться.

TF-IDF для разработки функций

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

Показанная выше функция отвечает за очистку и предварительную обработку текстовых данных. Строка номер 2 показывает, как удаляются знаки препинания из текста, затем модуль re используется для создания списка слов из строки, которая соответствует документу. Рассмотрим этот процесс на примере. Во-первых, у нас есть длинная строка, подобная следующей.

Токенизация

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

['tokenization', 'is', 'the', 'process', 'of', 'demarcating', 'and', 'possibly', 'classifying', 'sections', 'of', 'a', 'string', 'of', 'input', 'characters', 'the', 'resulting', 'tokens', 'are', 'then', 'passed', 'on', 'to', 'some', 'other', 'form', 'of', 'processing']

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

Итак, зачем нам нужно выполнять эти операции?

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

TF-IDF расшифровывается как Term Frequency — обратная частота документа. В этом посте я более подробно рассказал об этой стратегии. Но, грубо говоря, он пытается представить важность каждого слова в документе (обзоре), принимая во внимание частоту этого слова в документе и в корпусе, так что менее часто встречающиеся слова будут иметь более высокий вес, придавая им большее значение.

В этом проекте мы будем использовать класс TfidfVectorizer из Scikit Learn. Он реализует ранее упомянутый алгоритм. Кроме того, он может быть включен в объект конвейера, поэтому мы можем добавить этот метод разработки признаков, как и любой другой процесс преобразования данных. Наконец, функции, полученные с помощью TF-IDF, можно использовать для обучения модели машинного обучения.

Обучение модели

Последним этапом этого проекта является обучающая часть. Код, отвечающий за это, можно увидеть ниже.

Как можно заметить, шаги, которым мы следуем, намного четче и лаконичнее. Результаты, которые мы получаем после процесса обучения, сохраняются в отдельной папке, которая называется output. Давайте посмотрим на эти результаты, взглянув на кривую точности-отзыва и кривую RoC, которые отображают разные показатели для разных пороговых значений.

График, показанный выше, иллюстрирует кривую точность-отзыв. Тем не менее, общее поведение нормальное, есть еще возможности для улучшения.

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

Выводы и дальнейшие шаги

Этот пост доказал, что Poetry можно использовать для разработки проектов машинного обучения в соответствии с четкой структурой пакета и использованием модулей Python вместо традиционных инструментов, таких как Jupyter Notebooks.

На данный момент может быть трудно осознать важность этого подхода из-за простоты этой задачи, однако этот проект может служить нашей отправной точкой, отсюда мы можем разрабатывать больше функций, используя другие стратегии, такие как word2vector, doc2vector или встраивания. и обучать наши модели машинного обучения. Есть также аспекты нашего тренировочного процесса, которые можно улучшить, например, мы можем использовать GridSearch для поиска лучших параметров.

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

Код, разработанный на данный момент, можно найти здесь.

Я увлекаюсь наукой о данных и люблю объяснять, как эти концепции можно использовать для решения проблем простым способом. Если у вас есть какие-либо вопросы или вы просто хотите связаться, вы можете найти меня в LinkedIn или написать мне по адресу [email protected].

Рекомендации

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord.