Como criar uma API REST de aprendizado profundo com o Word2Vec e o Flask

Você está aqui:
Tempo estimado de leitura: 3 min

Abordagens tradicionais ao desenvolvimento são difíceis de manter quando se utilizam modelos complexos de aprendizado de máquina em produção. O desenvolvimento em um laptop ou máquina local pode ser lento para treinar o modelo de aprendizado de máquina para engenheiros de aprendizado profundo. Como resultado, normalmente usamos máquinas em nuvem com hardware mais potente para treinar e executar nossos modelos de aprendizado de máquina. Essa é uma boa prática, já que abstraemos a computação complexa e, em vez disso, fazemos solicitações AJAX conforme necessário. Neste tutorial, disponibilizaremos um modelo de aprendizagem profunda pré-treinado chamado Word2Vec para outros serviços, criando uma API REST a partir do zero.

Pré-requisitos

  • Uma instância do servidor Ubuntu 16.04 com pelo menos 4 GB de RAM. Para fins de teste e desenvolvimento, você pode escolher uma instância com 4 GB de RAM
  • Entendimento de como usar o sistema operacional Linux para criar / navegar / editar pastas e arquivos
  • Um sudousuário

O que são os Embeddings Word?

O Word Embeddings é um desenvolvimento recente no processamento de linguagem natural e no aprendizado profundo que revolucionou os dois campos devido ao rápido progresso. Os embeddings de palavra são essencialmente vetores, cada um correspondendo a uma única palavra tal que os vetores significam as palavras. Isso pode ser demonstrado por certos fenômenos, como o vetor para king - queen = boy - girl. Os vetores de palavras são usados ​​para criar tudo, desde mecanismos de recomendação até bots de bate-papo que realmente compreendem o idioma inglês.

Os embeddings do Word não são aleatórios; eles são gerados pelo treinamento de uma rede neural. Uma recente e poderosa implementação de incorporação de palavras vem do Google chamado Word2Vec, que é treinado prevendo palavras que aparecem ao lado de outras palavras em um idioma. Por exemplo, para a palavra "cat", a rede neural prevê as palavras "kitten""feline". Essa intuição das palavras que aparecem próximas umas das outras nos permite colocá-las no espaço vetorial.

No entanto, na prática, tendemos a usar os modelos pré-treinados de outras grandes corporações, como o Google, para criar rapidamente protótipos e simplificar os processos de implantação. Neste tutorial, faremos o download e usaremos as integrações de palavras pré-treinadas do Google Word2Vec. Podemos fazer isso executando o seguinte comando em nosso diretório de trabalho.

wget http://magnitude.plasticity.ai/word2vec/GoogleNews-vectors-negative300.magnitude

Instalando os pacotes Flask e Magnitude

A palavra modelo de incorporação que baixamos está em um .magnitudeformato. Esse formato nos permite consultar o modelo de maneira eficiente usando SQL e, portanto, é o melhor formato de incorporação para servidores de produção. Como precisamos ler o .magnitudeformato, vamos instalar o pymagnitudepacote. Também instalaremos flaskpara servir posteriormente as previsões de aprendizado profundo feitas pelo modelo.

pip3 install pymagnitude flask

Também vamos adicioná-lo ao nosso rastreador de dependência com o seguinte comando. Isso cria um arquivo chamado requirements.txte salva nossas bibliotecas Python para que possamos reinstalá-las posteriormente.

pip3 freeze > requirements.txt

Consultando o modelo Word2Vec

Para começar, criaremos um arquivo para manipular a abertura e a consulta da palavra embeddings.

touch model.py

Em seguida, adicionaremos as linhas a seguir model.pypara importar o Magnitude.

from pymagnitude import Magnitude
vectors = Magnitude('GoogleNews-vectors-negative300.magnitude')

Podemos brincar com o pymagnitudepacote e o modelo de aprendizagem profunda usando o querymétodo, fornecendo um argumento para uma palavra.

cat_vector = vectors.query('cat')
print(cat_vector)

Para o núcleo de nossa API, definiremos uma função para retornar a diferença de significado entre duas palavras. Esse é o backbone da maioria das soluções de aprendizado profundo para coisas como mecanismos de recomendação (ou seja, mostrando conteúdo com palavras semelhantes).

Podemos brincar com essa função usando as funções similaritymost_similar .

print(vectors.similarity("cat", "dog"))
print(vectors.most_similar("cat", topn=100))

Implementamos a calculadora de similaridade da seguinte maneira. Este método será chamado pela API Flask na próxima seção. Note que esta função retorna um valor real entre 0 e 1.

def similarity(word1, word2):
    return vectors.similarity(word1, word2)

Criando uma API REST

Vamos criar nosso servidor em um arquivo chamado service.pycom o seguinte conteúdo. Nós importamos flaskrequestlidamos com nossos recursos de servidor e importamos o similaritymecanismo do módulo que escrevemos anteriormente.

from flask import Flask, request
from model import similarity

app = Flask(__name__)

@app.route("/", methods=['GET'])
def welcome():
    return "Welcome to our Machine Learning REST API!"

@app.route("/similarity", methods=['GET'])
def similarity_route():
    word1 = request.args.get("word1")
    word2 = request.args.get("word2")
    return str(similarity(word1, word2))

if __name__ == "__main__":
    app.run(port=8000, debug=True)

Nosso servidor é bastante simples, mas pode ser facilmente estendido criando mais rotas usando o @app.routedecorador.

Fazendo chamadas de API

Podemos executar nosso servidor Flask executando os seguintes comandos para ativar nosso ambiente virtual, instalar nossos pacotes e executar seu arquivo Python associado.

source venv/bin/activate
pip3 install -r requirements.txt
python3 service.py

Nosso servidor estará disponível em localhost:8000. Podemos consultar nosso banco de dados localhost:8000/similarity?word1=cat&word2=doge visualizar a resposta em nosso navegador ou por outro cliente AJAX.

Esse artigo foi útil?
Não Gostei 0
Visualizações: 189

Ainda não Têm uma Conta?

Então Cadastre-se

Nome de Usuário*
E-mail*
Senha*
Confirmar Senha*

Já têm Uma Conta? Click Aqui.

Já tem uma Conta?

Ainda não tem Conta?