Многие из вас наверняка слышали о Берте или трансформерах.
И вы также можете знать huggingface. В этом уроке давайте поиграем с его моделью-трансформером pytorch и подадим ей Pinferencia.
Pinferencia упрощает обслуживание любой модели всего с тремя дополнительными строками.
HuggingFace упрощает использование предварительно обученной модели всего с несколькими строками. .
Как работает модель?
При вводе неполного предложения модель сделает вывод о недостающем слове:
Круто~попробуем сейчас~
Предпосылка
Для пользователей Mac
Если вы, как и я, работаете на Mac M1, вам необходимо установить cmake
и rust
.
brew install cmake curl — proto ‘=https’ — tlsv1.2 -sSf https://sh.rustup.rs | sh
Установить зависимости
Вы можете установить зависимости, используя pip.
pip install tqdm boto3 requests regex sentencepiece sacremoses
или вместо этого вы можете использовать образ докера:
docker run -it -p 8000:8000 -v $(pwd):/opt/workspace huggingface/transformers-pytorch-cpu:4.18.0 bash
Загрузите модель
Это загрузит токенизатор и модель. Загрузка может занять некоторое время.
import torch # load tokenizer tokenizer = torch.hub.load( “huggingface/pytorch-transformers”, “tokenizer”, “bert-base-cased”, ) # load masked model masked_lm_model = torch.hub.load( “huggingface/pytorch-transformers”, “modelForMaskedLM”, “bert-base-cased”, )
Определите функцию прогнозирования
Вводимый текст: Париж — это [МАСКА] Франции.
input_text = “Paris is the [MASK] of France.”
Сначала нам нужно токенизировать
tokens = tokenizer(input_text)
Давайте посмотрим на замаскированный индекс:
mask_index = [ i for i, token_id in enumerate(tokens[“input_ids”]) if token_id == tokenizer.mask_token_id ]
Подготовьте тензор:
segments_tensors = torch.tensor([tokens[“token_type_ids”]]) tokens_tensor = torch.tensor([tokens[“input_ids”]])
Предсказывать:
with torch.no_grad(): predictions = masked_lm_model( tokens_tensor, token_type_ids=segments_tensors )
Теперь давайте посмотрим на результат:
pred_tokens = torch.argmax(predictions[0][0], dim=1) # replace the initail input text’s mask with predicted text for i in mask_index: tokens[“input_ids”][i] = pred_tokens[i] tokenizer.decode(tokens[“input_ids”], skip_special_tokens=True)
Выход:
Paris is the capital of France.
Давайте организуем коды в функцию прогнозирования:
Бегать:
predict(“Paris is the [MASK] of France.”)
Выход:
Подавать через REST API
Сначала установим Pinferencia.
pip install “pinferencia[uvicorn]”
С Pinferencia просто добавьте еще три строчки, и ваша модель появится в сети!
Никогда не слышали о Pinferencia? Еще не поздно. Зайдите на его GitHub, чтобы посмотреть. Не забудьте поставить ему звезду.
Давайте сохраним нашу функцию прогнозирования в файл app.py и добавим несколько строк для ее регистрации.
Запустите службу и подождите, пока она загрузит модель и запустит сервер:
uvicorn app:service — reload
Протестируйте сервис
Использование завитка:
Ответ:
Круто~~ Еще нет, еще круче:
Вы можете использовать пользовательский интерфейс swagger по адресу http://127.0.0.1:8000 (адрес сервера), чтобы попробовать предсказание: