Разверните свою модель машинного обучения с помощью Python

Python
машинное обучение
модель машинного обучения
Разверните свою модель машинного обучения с помощью Python cover image

Работая в области науки о данных, вы обычно сталкиваетесь с новой проблемой после завершения длительного цикла обучения, тонкой настройки и совершенствования. Поздравляем с созданием модели машинного обучения, которая имеет хорошую производительность и отвечает вашим потребностям. Теперь перед вами стоит задача: как донести эту прекрасную технологию до предполагаемых пользователей? Или, может быть, как вы можете эффективно донести свой результат до заинтересованных сторон в вашей компании? Или даже как вы можете эффективно поделиться результатами своей модели с коллегами для улучшения сотрудничества?

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

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

Итак, вот шаги, которые мы увидим:

  1. Использование моделей машинного перевода Huggingface.

  2. Откройте для себя Anvil и создайте веб-интерфейс для нашей модели.

  3. Соединяем бэкэнд и фронтенд и служим миру своей работой!

Построение модели машинного перевода

Huggingface — сообщество искусственного интеллекта, работающее над «демократизацией хорошего машинного обучения». В рамках этой инициативы вы можете найти множество обученных моделей для различных задач машинного обучения: сегментация изображений, преобразование текста в речь, генерация текста… а также машинный перевод!

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

Трансформатор — это архитектура глубокого обучения, основанная на внимании. Давайте запустим его на вашей машине!

Мы будем использовать transformers, библиотеку Python для загрузки модели MT и выполнения перевода.

pip install torch
pip install transformers

После установки необходимых пакетов импортируйте следующие модули:

from transformers import MarianTokenizer, MarianMTModel
from typing import List

Давайте получим модель, которая переводит предложение с немецкого на английский. Нам нужно название модели:

src= "de"
trg= "en"
mname= f'Helsinki-NLP/opus-mt-{src}-{trg}'

Теперь давайте импортируем обученную модель и токенизатор, используя следующие строки:

model = MarianMTModel.from_pretrained(mname)
tok = MarianTokenizer.from_pretrained(mname)

Размер загрузки составляет около 300 МБ, после завершения вы можете сохранить модель в локальном каталоге, используя следующее:

model.save_pretrained("./models/de_en/")
tok.save_pretrained("./models/de_en/tok")

Давайте модель:

text="ich habe keine ahnung"
gen = model.generate(**tok.prepare_seq2seq_batch(src_texts=[text], return_tensors="pt"))
words: List[str] = tok.batch_decode(gen, skip_special_tokens=True)
print(words[0])

Теперь у вас должен быть английский перевод предложения, хранящийся в words[0].

Откройте для себя Anvil и создайте веб-интерфейс

Anvil — это фреймворк и набор решений, позволяющих создавать веб-приложения, используя только код Python. Он имеет редактор перетаскивания для создания веб-интерфейса и позволяет вам подключать код с вашего локального компьютера к пользовательскому интерфейсу, который вы создаете, и размещать свое приложение, предоставляя вам ссылку, которой вы можете поделиться.

Итак, давайте начнем с создания приложения отсюда (https://anvil.works/build). Выберите пустое приложение, затем Material Design.

Вы должны увидеть что-то вроде этого:

Anvil

Теперь я рассчитываю на то, что вы воспользуетесь редактором и создадите что-то похожее на следующее:

Anvil Editor

В этом простом пользовательском интерфейсе у нас есть два раскрывающихся списка для выбора исходного и целевого языков. У нас также есть TextBox для ввода исходного текста и компонент richText для отображения переведенного текста. Вы также можете увидеть кнопку для запуска задачи перевода.

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

Anvil Editor Rename Component

Используемые нами идентификаторы:

<таблица граница="2">

<голова>

<тр>

<й>

Компонент

<й>

Идентификатор

<тело>

<тр>

Раскрывающийся список исходного языка source_lang

<тр>

Раскрывающийся список языка назначения dest_lang

<тр>

Текстовое поле на исходном языке source_text

<тр>

Переведенный текст RichText translated_text

</таблица>

Функция Onclick

Мы добавили кнопку, которая используется для запуска перевода. В редакторе нажмите кнопку, затем прокрутите вниз панель свойств. Внизу вы увидите раздел событий. В текстовой зоне рядом с надписью «нажмите» введите «перевести», а затем щелкните стрелку справа от этой текстовой зоны.

Это приведет вас к представлению кода, где вы увидите автоматически сгенерированный код Python.

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

Вот как должна выглядеть функция:

def translate(self, **event_args):
 """This method is called when the button is clicked"""
 src_lang=self.source_lang.selected_value #get the selected source language
 dest_lang=self.dest_lang.selected_value #get the selected destination language
 text=self.source_text.text   #get the text written in source language
 #call the server function
 translated_text=anvil.server.call("translation",text,src_lang,dest_lang)
 #write the translated text to the UI
 self.translated_text.content=translated_text

Эта функция выполняет 3 основные задачи:

  1. Получите информацию из пользовательского интерфейса

  2. Отправьте информацию на наш бэкэнд, используя серверную функцию «перевод» (мы объясним это в следующем разделе).

  3. Отправьте переведенный текст в пользовательский интерфейс.

Функция сервера

Давайте сосредоточимся на этой строке кода:

translated_text=anvil.server.call("translation",text,src_lang,dest_lang)

Мы используем anvil.server.call для вызова серверной функции под названием «translation», которую мы определим в нашем внутреннем коде на локальном компьютере.

Эта функция будет служить связью между веб-интерфейсом и серверным кодом, который будет работать в нашей модели машинного перевода.

Как вы заметили, мы также передаем параметры этой функции в функцию anvil.server.call.

Развертывание нашей модели MT

Давайте сначала установим наковальню

pip install anvil-uplink

Теперь мы создали наш веб-интерфейс в редакторе Anvil и у нас есть базовые блоки кода для запуска нашей модели машинного перевода и выполнения перевода.

Следующим шагом является определение функции сервера, которую мы обсуждали в предыдущем разделе.

Вот код функции:

@anvil.server.callable
def translation(text,src,dest):
 lang_code={"English":"en",
       "German":"de",
       "French":"fr",
       "Spanish":"es"}
      model=MarianMTModel.from_pretrained("./models/"+lang_code[src]+"_"+lang_code[dest])
 tok=MarianTokenizer.from_pretrained("./models/"+lang_code[src]+"_"+lang_code[dest]+"/tok")
 gen = model.generate(**tok.prepare_seq2seq_batch(src_texts=[text], return_tensors="pt"))
 words: List[str] = tok.batch_decode(gen, skip_special_tokens=True)
 return words[0]

Функция примет 3 параметра, отправленных из внешнего интерфейса, преобразует исходный и целевой языки в соответствующие коды языков, а затем загрузит модели, вычислит перевод и вернет результат.

Способ объявления этой функции в anvil как функции сервера — использование декоратора

@anvil.server.callable.

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

Перейдите в онлайн-редактор Anvil, щелкните значок шестеренки, а затем нажмите «Uplink…».

См. экран ниже

Anvil Editor Uplink

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

Anvil Uplink

Вы вставляете код в следующую строку кода:

anvil.server.connect("code here")

Эта строка запустит сервер, который подключает ваш локальный скрипт кода или блокнот Jupyter к приложению Anvil с функцией «translation», зарегистрированной как функция сервера.

Заключительный этап

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

Anvil Uplink

Последний шаг — запустить приложение, нажав кнопку запуска в верхней центральной части редактора наковальни.

После запуска приложения вы увидите в правом верхнем углу кнопку «Опубликовать это приложение», которая предоставит вам ссылку, которой вы можете поделиться, чтобы получить доступ к приложению и выполнить перевод!

Заключение

Следуя этой статье, вы смогли развернуть модель MT и создать веб-интерфейс для ее использования.

Нам еще многое предстоит узнать о том, как эффективно развернуть модель с помощью Anvil, но теперь у вас есть основы, чтобы начать путь к развертыванию и расширить потенциал своих предварительных знаний в Python, чтобы сделать гораздо больше!

Приходите на один из наших бесплатных мастер-классов

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


Career Services background pattern

Карьерные услуги

Contact Section background image

Давай останемся на связи

Code Labs Academy © 2024 Все права защищены.