Учебное пособие по созданию модели FastAPI для машинного обучения, удобной в использовании.
Введение
Для специалистов по данным машинное обучение или статистические модели полезны только тогда, когда приложения или пользователи могут взаимодействовать с ними. Следовательно, предоставление моделей через API для приложений как части функций или самих функций, чтобы обеспечить ценность для конечных пользователей.
FastAPI — это микрофреймворк Python, используемый для создания API. По сравнению с другими фреймворками он быстрый и имеет встроенные функции и зависимости, которые упрощают работу с ним.
В этой статье мы рассмотрим различные элементы FastAPI, его зависимости и создадим приложение машинного обучения для практического понимания его реализации.
Предпосылки
- Знание того, что такое API
- Знание модулей и функций
Оглавление
- Элементы FastAPI
- Валидация данных
- Модули/Функции
- Реализация кода
- Тестирование с почтальоном
Элементы 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 для сложных приложений машинного обучения.
Надеюсь, вы многому научились из этой статьи. Не оставляйте свои модели в блокнотах, подготовьте их к производству 😉.Делитесь, комментируйте и реагируйте.