Ao trabalhar na área de ciência de dados, você geralmente se depara com um novo desafio depois de concluir um longo ciclo de treinamento, ajuste fino e aprimoramento. Parabéns por construir um modelo de ML que tenha bom desempenho e atenda às suas necessidades. Agora, o desafio que você tem em mãos é como entregar essa bela peça de tecnologia aos usuários pretendidos? Ou talvez como você pode comunicar efetivamente seu resultado às partes interessadas da sua empresa? Ou mesmo como você pode compartilhar os resultados do seu modelo com seus colegas de forma eficaz para uma melhor colaboração?
A implantação do aprendizado de máquina às vezes pode ser difícil, pois usaremos tecnologias e técnicas fora do conjunto usual de habilidades necessárias para construir os modelos.
Neste artigo, descobriremos uma maneira de implantar modelos de aprendizado de máquina usando apenas python. E ao longo do caminho, construiremos um modelo de tradução automática e uma página web.
Então, aqui estão as etapas que veremos:
-
Usando modelos de tradução automática Huggingface.
-
Descobrindo Anvil e construindo uma UI web para nosso modelo.
-
Conectando backend e frontend e servindo ao mundo nosso trabalho!
Construir modelo de tradução automática
Huggingface é uma comunidade de IA que trabalha para “democratizar o bom aprendizado de máquina”. Nesta iniciativa, você pode encontrar muitos modelos treinados em diferentes tarefas de aprendizado de máquina: segmentação de imagens, conversão de texto em fala, geração de texto… e também tradução automática!
A tradução automática é simplesmente uma tarefa de tradução entre dois idiomas realizada por um software, no nosso caso, um modelo de aprendizado de máquina construído com transformadores.
Um transformador é uma arquitetura de aprendizado profundo baseada na atenção. Vamos colocá-lo em execução na sua máquina!
Usaremos transformers, uma biblioteca python para baixar o modelo MT e realizar uma tradução.
pip install torch
pip install transformers
Após instalar os pacotes necessários, importe os seguintes módulos:
from transformers import MarianTokenizer, MarianMTModel
from typing import List
Vamos pegar um modelo que traduza uma frase do alemão para o inglês. Precisamos do nome do modelo:
src= "de"
trg= "en"
mname= f'Helsinki-NLP/opus-mt-{src}-{trg}'
Agora vamos importar o modelo treinado e o tokenizer usando as seguintes linhas:
model = MarianMTModel.from_pretrained(mname)
tok = MarianTokenizer.from_pretrained(mname)
O tamanho do download é de cerca de 300 MB, após terminar você pode armazenar o modelo em um diretório local usando o seguinte:
model.save_pretrained("./models/de_en/")
tok.save_pretrained("./models/de_en/tok")
Vamos ao modelo:
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])
Agora você deve ter a tradução em inglês da frase armazenada em words[0]
.
Descubra o Anvil e crie uma UI web
Anvil é uma estrutura e uma pilha de soluções que permitem construir aplicações web usando apenas código python. Ele tem um editor de arrastar e soltar para construir a UI da web e permite que você conecte o código de sua máquina local à UI que você constrói e hospeda seu aplicativo, fornecendo um link que você pode compartilhar.
Então, vamos começar criando um aplicativo aqui. Escolha o aplicativo em branco e depois o design do material.
Você deverá ver algo assim:
Agora contarei com você para usar o editor e construir algo semelhante ao seguinte:
Nesta UI simples, temos dois DropDowns para escolher os idiomas de origem e destino. Também temos um TextBox para inserir o texto fonte e um componente richText para exibir o texto traduzido. Você também pode ver um botão para iniciar a tarefa de tradução.
Para sincronizar com os trechos de código que você verá abaixo, forneça os mesmos IDs aos componentes. Abaixo você encontra um exemplo de onde pode definir o id de um componente:
Os IDs que estamos usando são:
Componente
ID
Função Onclick
Adicionamos um botão que é usado para iniciar a tradução. No seu editor, clique no botão e role para baixo no painel de propriedades. Na parte inferior, você verá uma seção de eventos. Na zona de texto ao lado de “clique”, digite “traduzir” e a seguir clique na seta à direita desta zona de texto.
Isso o levará para a visualização do código, onde você verá algum código python gerado automaticamente.
Você descobrirá que a bigorna adicionou automaticamente uma função chamada traduzir. Ele será chamado cada vez que o botão em nossa UI for clicado.
Aqui está como a função deve ser:
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
Esta função executa 3 tarefas principais:
-
Obtenha informações da IU
-
Envie as informações para nosso backend usando a função de servidor “tradução” (explicaremos na próxima seção)
-
Envie o texto traduzido para a IU.
Função do servidor
Vamos nos concentrar nesta linha de código:
translated_text=anvil.server.call("translation",text,src_lang,dest_lang)
Usamos anvil.server.call para chamar uma função de servidor chamada translation
que definiremos em nosso código backend na máquina local.
Esta função servirá como uma conexão entre a UI da web e o código backend que será executado em nosso modelo de tradução automática.
Como você notou também enviamos os parâmetros desta função na função anvil.server.call
.
Implante nosso modelo MT
Vamos primeiro instalar a bigorna
pip install anvil-uplink
Agora construímos nossa interface web no editor bigorna e temos blocos de código básicos para executar nosso modelo de tradução automática e fazer uma tradução.
A próxima etapa é definir a função do servidor que discutimos na seção anterior.
Aqui está o código da função:
@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]
A função pegará os 3 parâmetros enviados do frontend, converterá os idiomas de origem e destino nos respectivos códigos de idioma e então carregará os modelos e calculará a tradução e retornará o resultado.
A maneira de declarar esta função na bigorna como uma função de servidor é usando o decorador
@anvil.server.callable
.
Temos uma última etapa a realizar para conectar o código de back-end que podemos executar em um notebook Jupyter ao nosso aplicativo bigorna.
Vá para o editor online da bigorna, clique no ícone de engrenagem e depois clique em “Uplink…”.
Veja a tela abaixo
Você verá um pop-up e clique em “Ativar uplink do servidor para este aplicativo” para obter o código de conexão que você copiou.
Você cola o código na seguinte linha de código:
anvil.server.connect("code here")
Esta linha iniciará um servidor que conecta seu script de código local ou notebook jupyter ao aplicativo bigorna com a função translation
registrada como uma função de servidor.
Passo final
Até este ponto, você tem seu servidor backend rodando com uma função de servidor que carrega o modelo de tradução automática e faz a tradução levando em consideração os parâmetros enviados do frontend. Esta figura resume o que implementamos juntos até agora.
A etapa final é executar o aplicativo clicando no botão Executar na parte superior central do editor de bigorna.
Depois de executar o aplicativo você verá no canto superior direito um botão “publicar este aplicativo” que lhe dará um link que você pode compartilhar para acessar o aplicativo e fazer sua tradução!
Conclusão
Seguindo este artigo, você foi capaz de implantar um modelo MT e construir uma interface web para usá-lo.
Ainda há muito a descobrir sobre como implantar efetivamente um modelo usando bigorna, mas agora você tem o básico para iniciar sua jornada de implantação e ampliar o potencial de seu conhecimento prévio em Python para fazer muito mais!
Venha para um de nossos workshops gratuitos
Comece sua carreira como cientista de dados com nossos workshops gratuitos, baseados em um currículo adaptável e orientados por especialistas do setor.