Как использовать модель НЛП в качестве API - разумный, готовый к работе способ.
FastAPI - это новый и лучший способ развернуть вашу модель машинного обучения в качестве REST API для использования в веб-приложениях. В своей официальной документации они заявляют, что это самый быстрый способ начать производство, и, естественно, это вызвало у меня интерес.
Готовый изучить эту новую библиотеку, я пошел дальше и взял простую модель НЛП с spacy и попытался построить вокруг нее API. Я буду честен, когда скажу, что это было довольно просто и чрезвычайно удобно с множеством полезных функций, и я был готов с API - вместе с тестами, и это тоже без Postman или CURL - менее чем за час / em>.
Достаточно раздутый? Ниже я описываю шаги, которые вы можете предпринять, чтобы сделать то же самое с вашими собственными моделями машинного обучения.
👇 Поехали!
Настройка вашей среды
Два простых шага для настройки вашей виртуальной среды:
- Активируйте новую среду pipenv:
pipenv shell
2. Установите в него библиотеки:
pipenv install spacy spacytextblob pydantic fastapi uvicorn
Построение модели
Пробуя любую новую библиотеку, я всегда больше сосредоточен на изучении точных функций, которые предлагает библиотека, и меньше на деталях фона.
По этой причине я построил простую простую модель анализа настроений с минимальными настройками, чтобы просто быстро получить модель для получения прогнозов.
Это полный код модели, определенный в модуле model.py.
import spacy from spacytextblob import SpacyTextBlob from pydantic import BaseModel class SentimentQueryModel(BaseModel): text : str class SentimentModel: def get_sentiment(self, text): nlp = spacy.load('en_core_web_sm') spacy_text_blob = SpacyTextBlob() nlp.add_pipe(spacy_text_blob) doc = nlp(text) polarity = doc._.sentiment.polarity subjectivity = doc._.sentiment.subjectivity return polarity, subjectivity
Да, это действительно так. Если вы, как и я, начинаете работать с FastAPI, я бы порекомендовал изучить API и его функции с помощью этой простой модели, а затем перейти к более сложным и большим.
Кратко объясню код:
- Сначала мы импортируем библиотеки, необходимые для проекта
- SentimentQueryModel - это просто модель, содержащая наш единственный запрос для этой модели - текст, для которого мы будем прогнозировать тональность. Библиотека Pydantic помогает убедиться, что мы можем быстро получить поле с данными, которые нам нужны для нашей модели - это будет переменная text. В документации FastAPI также описываются многочисленные способы объявления полей данных с помощью этой библиотеки.
- SentimentModel - это класс, который загружает пространственный токенизатор и библиотеку spacytextblob и выполняет прогноз тональности текста.
Двумя основными составляющими оценки анализа тональности являются:
Полярность - это число с плавающей запятой, которое находится в диапазоне [-1,1], где 1 означает полностью положительное утверждение, а -1 означает полностью отрицательное утверждение.
Субъективность - предложения «субъективные» обычно относятся к личному мнению, эмоциям или суждениям, тогда как «объективные» относятся к фактической информации. Компонент Субъективность - это значение с плавающей запятой, которое находится в диапазоне [0,1].
Теперь, когда мы вернули две оценки нашей модели, давайте перейдем к той части, где мы фактически создаем наш API.
Создание API
Сначала мы импортируем наши библиотеки и модули:
import uvicornfrom fastapi import FastAPIfrom model import SentimentModel, SentimentQueryModel
Затем мы создаем экземпляр нашего объекта FastAPI и нашего класса прогнозирования:
app = FastAPI() model = SentimentModel()
Наконец, мы создаем новую функцию для получения прогнозов с помощью запроса POST:
@app.post('/predict') def predict(data: SentimentQueryModel): data = data.dict() polarity, subjectivity = model.get_sentiment(data['text']) return { 'polarity': polarity, 'subjectivity': subjectivity }
data.dict()
гарантирует, что мы можем получить доступ к нашему объекту текстовой строки из функции POST как объект JSON.
Получив оценки, мы просто возвращаем их как другой объект словаря.
И теперь, когда мы закончили, мы запускаем приложение со следующей строкой:
if __name__ == '__main__': uvicorn.run(app, host='127.0.0.1', port=8000)
Готово! Это полный код, и ваш API готов к тестированию.
Заключение → Тестирование вашего API
Это была одна из самых захватывающих частей обучения использованию FastAPI. Очевидно, благодаря интеграции со SwaggerUI, вы можете напрямую тестировать API без каких-либо внешних инструментов, таких как Postman или команда терминала CURL.
Перейдите по адресу http://127.0.0.1:8000/docs
, чтобы увидеть свой API в действии. Нажимает кнопку Попробовать.
Это должно выглядеть примерно так:
Идите вперед и введите свой текст в поле.
Наконец, нажмите Выполнить.
Вот и все! Прогнозы прямо здесь с кодом ответа, возвращаемым в самом вашем браузере. Разве это не потрясающе?
Будьте уверены, я буду активно изучать эту библиотеку и в будущем!
Весь код также доступен по этой сути.
Однако, если вы следовали этому пункту, у вас уже должен быть работоспособный код, чтобы начать создавать свой собственный API!
Спасибо за прочтение! :)
Изучение только науки о данных может быть трудным. Следуй за мной, и давайте вместе повеселимся. 😁
Свяжитесь со мной в Твиттере.
Вот кодовая база всех моих историй о Data Science. Удачного обучения! ⭐️
Также ознакомьтесь с другой моей статьей, которая может вас заинтересовать: