Учебное пособие по созданию модели FastAPI для машинного обучения, удобной в использовании.

Введение

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

FastAPI — это микрофреймворк Python, используемый для создания API. По сравнению с другими фреймворками он быстрый и имеет встроенные функции и зависимости, которые упрощают работу с ним.

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

Предпосылки

  • Знание того, что такое API
  • Знание модулей и функций

Оглавление

  1. Элементы FastAPI
  2. Валидация данных
  3. Модули/Функции
  4. Реализация кода
  5. Тестирование с почтальоном

Элементы FastAPI

  • Методы запроса HTTP

  • Операция пути
    Функция операции пути, записанная как '@app.get('/')', относится к функции, которая обрабатывает определенный HTTP-запрос к определенному маршруту или конечной точке, определенной в вашем API.
    '@app.get' — это декоратор fastAPI с 'app' в качестве экземпляра FastAPI и 'get' в качестве метода HTTP, используемого для конечной точки. Аргументы в квадратных скобках, следующие за методом HTTP, представляют собой имена путей и другие необязательные аргументы, такие как модели ответов, классы, в зависимости от особенностей вашего приложения.
  • Функция операции/конечной точки пути
    Означает функцию, следующую за каждой функцией операции пути. Он отвечает за обработку входящих запросов, выполнение любых необходимых операций и формирование соответствующих ответов.
  • Параметры запроса
    Это относится к значениям, передаваемым в функцию конечной точки внутри функции. Они передаются функциям конечной точки в качестве дополнительной информации HTTP-запроса и обычно используются для изменения данных в конечной точке.
  • Тело запроса
    Тело — это часть HTTP-запроса, которая содержит необработанные данные, представляющие документы, файлы или отправленные формы. В fastAPI он обычно закодирован в json, а также может быть определен с помощью моделей данных с использованием pydantic и типизации.
  • HTTP-ответы
    По умолчанию fastAPI преобразует все, что вы возвращаете из функции конечной точки, в json. Однако его также можно структурировать и проверить с помощью классов Pydantic, как и данные в теле запроса.
  • Автоматизированная документация
    Благодаря пользовательскому интерфейсу Swagger fastAPI автоматически отображает документацию по вашим конечным точкам API. Его можно просмотреть, добавив «/docs» к URL-адресу вашего API, это может быть URL-адрес локального хоста во время разработки или URL-адрес в реальном времени.
  • Зависимости
    FastAPI включает в себя функцию аннотации типов Python и построен на основе Starlette, набора инструментов ASGI для Python. Он также использует Pydantic в качестве важного строительного блока для проверки моделей данных и обычно запускается на асинхронном сервере; увикорн.

Чтобы настроить ваше приложение fastAPI, вам необходимо установить следующие библиотеки.

pip install uvicorn
pip install httpie
pip install httpx
pip install pydantic

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

Проверка данных с помощью Pydantic

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

В FastAPI для проверки данных используется pydantic. Он имеет простой синтаксис для определения структуры моделей данных запросов и ответов в виде классов. Они передаются как типы данных входных переменных функций или конечных точек.

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

Функции Pydantic

  • Автоматизация проверки данных
  • Сообщение об ошибках
  • Преобразование данных
  • Определение моделей данных

Изучите документацию Pydantic, чтобы получить дополнительную информацию о его функциях и примерах реализации.

Реализация кода

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

  • Создайте папку для вашего приложения.
  • В папке приложения создайте main.py
  • Создайте папку для своих модулей. Вы можете назвать его modules’.
  • Создайте __init__.py, чтобы инициализировать модуль как пакет в папке modules.
  • В той же папке modules создайте файлы с именем data_model.py для ваших моделей данных и funtions.py для всех функций, которые вам понадобятся для вашего приложения.

Давайте посмотрим на код для наших различных файлов:

data_model.py

# import pydantic, typing 
# from pydantic import BaseModels for data model classes and other data validators
# ! pip install email-validator to enable pydantic's EmailStr work
from pydantic import BaseModel, EmailStr, PastDate
from datetime import datetime
from typing import List, Optional


# for our input data , we will take the email, date and comment from customer
# as seen for the date field, you can make an input value optional, giving ... 
# ... the user the choice to submit that field or not
class InputData(BaseModel):
    date: Optional[datetime] = None
    email: EmailStr
    review: str


# in our output data , we simply want to add a new field to the submitted data
# hence we simply inherit the InputData data model and add a new field
class OutputData(InputData):
    sentiment: str

functions.py

# import textblob library for sentimental analysis
from textblob import TextBlob

# import data models from data_model.py to validate function inputs
from modules.data_models import InputData, OutputData


# define function for generating polarity of sentiment of a string
def sentimental_analysis(sent):
    blob = TextBlob(sent)
    analysis = blob.polarity
    if analysis < 0:
        ans = 'Negative'
    elif analysis == 0:
        ans = 'Neutral'
    else:
        ans = 'Positive'
    return ans

# define function for retriving comment, running sentimental analysis ..
# ... adding output as new field to the output data
def analyze_data(data: InputData):

    review = data.review
    sentiment = sentimental_analysis(review)
    output = data.dict()
    output["sentiment"] = sentiment
    return output

main.py

# import data models and functions 
from modules.data_models import InputData, OutputData
from modules.functions import analyze_data, sentimental_analysis
from fastapi import FastAPI
import uvicorn

# create instance of fastAPI
app = FastAPI()


# define endpoint that accepts user name as path parameter,... 
# and returns data using provided parameter
@app.get('/greet/{name}')
def greet_user(name: str):
    greeting = f"Hi {name} , share your experience with us."
    return {"greet": greeting}

# define endpoint that accepts user review in the form of the defined input data
# specify data model of reponse data
@app.post('/analysis', response_model=OutputData)
def generate_sentiment(response: InputData):
    result = analyze_data(response)
    return result


# specify host and port number on which fastAPI application runs
# localhost is used here
if __name__ == "__main__":
    uvicorn.run("main:app", host="127.0.0.1", port=8000,
                reload=True)

Тестирование с помощью Postman

Postman — это программное приложение, используемое для создания, тестирования, изменения и документирования API. В этом руководстве мы настроим его в VSCode, чтобы протестировать конечные точки нашего API.

Настройка почтальона

  • Установите расширение Postman в VSCode
  • Добавьте Почтальона на вид сбоку. Откройте интерфейс и зарегистрируйтесь.
  • Вы будете перенаправлены на сайт для регистрации. После регистрации вы будете перенаправлены обратно в VSCode.

Тестирование конечных точек

  • В интерфейсе расширения postman выберите метод HTTP конечной точки и укажите путь.
  • В конечной точке приветствия имя задается как параметр запроса и добавляется к URL-адресу конечной точки, как показано ниже. Результат будет отображаться во второй половине интерфейса, как показано на выходном изображении.

  • Для конечной точки анализа данные запроса являются параметром тела. Это будет отправлено на вкладке body под разделом ввода URL. Модели данных читаются как json, следовательно, указывайте ввод в формате json с ключами, как указано в модели данных.

Заключение

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

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