Как использовать модель НЛП в качестве API - разумный, готовый к работе способ.

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

Готовый изучить эту новую библиотеку, я пошел дальше и взял простую модель НЛП с spacy и попытался построить вокруг нее API. Я буду честен, когда скажу, что это было довольно просто и чрезвычайно удобно с множеством полезных функций, и я был готов с API - вместе с тестами, и это тоже без Postman или CURL - менее чем за час / em>.

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

👇 Поехали!

Настройка вашей среды

Два простых шага для настройки вашей виртуальной среды:

  1. Активируйте новую среду 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. Удачного обучения! ⭐️

Также ознакомьтесь с другой моей статьей, которая может вас заинтересовать: