Работая в области науки о данных, вы обычно сталкиваетесь с новой проблемой после завершения длительного цикла обучения, тонкой настройки и совершенствования. Поздравляем с созданием модели машинного обучения, которая имеет хорошую производительность и отвечает вашим потребностям. Теперь перед вами стоит задача: как донести эту прекрасную технологию до предполагаемых пользователей? Или, может быть, как вы можете эффективно донести свой результат до заинтересованных сторон в вашей компании? Или даже как вы можете эффективно поделиться результатами своей модели с коллегами для улучшения сотрудничества?
Внедрение машинного обучения иногда может быть затруднено, поскольку мы будем использовать технологии и методы, не относящиеся к обычному набору навыков, необходимых для построения моделей.
В этой статье мы собираемся найти способ развертывания моделей машинного обучения, используя только Python. И попутно мы построим модель машинного перевода и веб-страницу.
Итак, вот шаги, которые мы увидим:
-
Использование моделей машинного перевода Huggingface.
-
Откройте для себя Anvil и создайте веб-интерфейс для нашей модели.
-
Соединяем бэкэнд и фронтенд и служим миру своей работой!
Построение модели машинного перевода
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.
Вы должны увидеть что-то вроде этого:
Теперь я рассчитываю на то, что вы воспользуетесь редактором и создадите что-то похожее на следующее:
В этом простом пользовательском интерфейсе у нас есть два раскрывающихся списка для выбора исходного и целевого языков. У нас также есть TextBox для ввода исходного текста и компонент richText для отображения переведенного текста. Вы также можете увидеть кнопку для запуска задачи перевода.
Для синхронизации с фрагментами кода, которые вы увидите ниже, присвойте компонентам одинаковые идентификаторы. Ниже вы можете найти пример того, где вы можете установить идентификатор компонента:
Используемые нами идентификаторы:
<таблица граница="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 основные задачи:
-
Получите информацию из пользовательского интерфейса
-
Отправьте информацию на наш бэкэнд, используя серверную функцию «перевод» (мы объясним это в следующем разделе).
-
Отправьте переведенный текст в пользовательский интерфейс.
Функция сервера
Давайте сосредоточимся на этой строке кода:
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.server.connect("code here")
Эта строка запустит сервер, который подключает ваш локальный скрипт кода или блокнот Jupyter к приложению Anvil с функцией «translation», зарегистрированной как функция сервера.
Заключительный этап
На данный момент у вас есть внутренний сервер с функцией сервера, которая загружает модель машинного перевода и выполняет перевод с учетом параметров, отправленных из внешнего интерфейса. На этом рисунке суммировано то, что мы реализовали вместе на данный момент.
Последний шаг — запустить приложение, нажав кнопку запуска в верхней центральной части редактора наковальни.
После запуска приложения вы увидите в правом верхнем углу кнопку «Опубликовать это приложение», которая предоставит вам ссылку, которой вы можете поделиться, чтобы получить доступ к приложению и выполнить перевод!
Заключение
Следуя этой статье, вы смогли развернуть модель MT и создать веб-интерфейс для ее использования.
Нам еще многое предстоит узнать о том, как эффективно развернуть модель с помощью Anvil, но теперь у вас есть основы, чтобы начать путь к развертыванию и расширить потенциал своих предварительных знаний в Python, чтобы сделать гораздо больше!
Приходите на один из наших бесплатных мастер-классов
Начните свою карьеру в качестве специалиста по данным с наших бесплатных семинаров, которые основаны на адаптируемой учебной программе и проводятся под руководством отраслевых экспертов.