Olá pessoal! Estamos abrindo uma série de artigos dedicados à resolução de problemas práticos relacionados ao Processamento de Linguagem Natural (ou apenas PNL) e à criação de agentes interativos (bots de bate-papo) usando a biblioteca de código aberto
DeepPavlov , desenvolvida por nossa equipe do Laboratório de Sistemas Neurais e Aprendizado Profundo MIPT. O principal objetivo do ciclo é apresentar o DeepPavlov a uma ampla gama de desenvolvedores e mostrar como resolver problemas de aplicativos da PNL sem ter profundo conhecimento em Machine Learning e PhD em Matemática.
As tarefas da PNL incluem determinar a tonalidade do texto, analisar entidades nomeadas, determinar o que a outra parte deseja do seu bot: pedir pizza ou obter informações de ajuda e muito mais. Você pode ler mais sobre tarefas e métodos de PNL
aqui .
Neste artigo, mostraremos como executar o REST North com modelos de PNL pré-treinados e prontos para uso sem nenhuma configuração ou treinamento adicional.
Todos os artigos do ciclo:
1.
DeepPavlov para desenvolvedores: ferramentas número 1 da PNL e crie bots de bate-papo2.
DeepPavlov para desenvolvedores: # 2 configuração e implantação
Instale o DeepPavlov
A seguir, serão fornecidas instruções para o Linux. Para Windows, consulte nossa
documentação.Executando um Servidor REST com o Modelo DeepPavlov
Antes de iniciarmos o servidor com o modelo DeepPavlov pela primeira vez, será útil falar sobre alguns recursos da arquitetura da biblioteca.
Qualquer modelo no DP consiste em:
- Código Python;
- Componentes para download - resultados de aprendizado serializados sobre dados específicos (incorporação, pesos de redes neurais, etc.);
- Um arquivo de configuração (a seguir denominado config), que contém informações sobre as classes usadas pelo modelo, URLs dos componentes baixados, dependências do Python e muito mais.
Falaremos mais sobre o que está por trás do DeepPavlov nos seguintes artigos, por enquanto, precisamos saber apenas isso:
- Qualquer modelo no DeepPavlov é identificado pelo nome de sua configuração;
- Para executar o modelo, você precisa fazer o download de seus componentes nos servidores DeepPavlov;
- Além disso, para executar o modelo, você deve instalar as bibliotecas Python usadas por ele.
O primeiro modelo que lançaremos será o NER (Multilingual Named Entity Recognition). O modelo classifica as palavras de texto de acordo com o tipo de entidades nomeadas às quais elas pertencem (nomes próprios, nomes geográficos, nomes de moedas e outros). O nome da configuração da versão mais recente do NER:
ner_ontonotes_bert_mult
Iniciamos o servidor REST com o modelo:
- Instale as dependências do modelo especificadas em sua configuração no ambiente virtual ativo:
python -m deeppavlov install ner_ontonotes_bert_mult
- Faça o download dos componentes do modelo serializado dos servidores DeepPavlov:
python -m deeppavlov download ner_ontonotes_bert_mult
Os componentes serializados serão baixados no diretório inicial do DeepPavlov, localizado por padrão ~/.deeppavlov
Durante o download, o hash dos componentes já baixados é verificado nos hashes dos componentes localizados no servidor. No caso de uma correspondência, o download é ignorado e os arquivos existentes são usados. Os tamanhos dos componentes baixados podem variar em média de 0,5 a 8 Gb, em alguns casos atingindo 20 Gb após descompactar. - Iniciamos o servidor REST com o modelo:
python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
Como resultado deste comando, um servidor REST com um modelo na porta 5005 da máquina host será iniciado (a porta padrão é 5000).
Após a inicialização do modelo, o Swagger, com a documentação da API e a capacidade de testar, pode ser encontrado no URL http:
http://127.0.0.1:5005
. Testaremos o modelo enviando para o terminal http: //127.0.0.1►005/model POST request com o seguinte conteúdo JSON:
{ "x": [ " .", " - 15 " ] }
Em resposta, devemos obter este JSON:
[ [ ["", "", "", "", "", "", "", "", "", "."], ["O", "B-FAC", "O", "O", "O", "O", "O", "B-FAC", "I-FAC", "O"] ], [ ["", "", "-", "", "", "", "", "", "", "15", ""], ["O", "B-LOC", "I-LOC", "I-LOC", "I-LOC", "O", "O", "O", "O", "B-MONEY", "I-MONEY"] ] ]
Para esses exemplos, analisaremos a API REST DeepPavlov.
API DeepPavlov
Cada modelo DeepPavlov possui pelo menos um argumento de entrada. Na API REST, os argumentos são nomeados, seus nomes são as chaves do dicionário de entrada. Na maioria dos casos, um argumento é o texto que precisa ser processado. Você pode aprender mais sobre argumentos e valores retornados por modelos na seção MODELS da documentação do
DeepPavlov.No exemplo, uma lista de duas linhas foi passada para o argumento x, cada uma das quais recebeu uma marcação separada. No DeepPavlov, todos os modelos aceitam como entrada uma lista (lote) de valores que são processados independentemente.
O termo "lote" refere-se ao campo de aprendizado de máquina e refere-se a um pacote de valores de entrada independentes processados por um algoritmo ou rede neural ao mesmo tempo. Essa abordagem permite reduzir (geralmente - significativamente) o tempo de processamento do modelo de um elemento do lote em comparação com o mesmo valor transferido para a entrada separadamente. Mas o resultado do processamento é emitido somente após o processamento de todos os elementos. Portanto, ao formar o lote recebido, será necessário levar em consideração a velocidade do modelo e o tempo de processamento necessário para cada um de seus elementos individuais.
Caso haja vários argumentos do modelo DeepPavlov, cada um deles possui seu próprio lote de valores e, na saída, o modelo sempre fornece um lote de respostas. Elementos dos lotes de saída são os resultados do processamento de elementos dos lotes de entrada com o mesmo índice.
No exemplo acima, o resultado do modelo foi uma divisão de cada linha em tokens (palavras e sinais de pontuação) e classificação do token em relação a uma entidade nomeada (nome da organização, moeda) que ele representa. No momento, o modelo
ner_ontonotes_bert_mult é capaz de reconhecer 18 tipos de entidades nomeadas, uma descrição detalhada pode ser encontrada
aqui .
Outros modelos prontos para uso do DeepPavlov
Além do NER no DeepPavlov, os seguintes modelos prontos para uso estão disponíveis no momento da redação deste documento:
Resposta de pergunta de texto
A resposta à pergunta do texto é um fragmento deste texto.
Configuração do modelo:
squad_ru_bert_inferExemplo de solicitação:
{ "context_raw": [ "DeepPavlov .", " - 15 ." ], "question_raw": [ " DeepPavlov?", " ?" ] }
Resultado:
[ [" ", 27, 31042.484375], ["15 ", 39, 1049.598876953125] ]
Detecção de insulto
Identificação da presença de insulto à pessoa a quem o texto é endereçado (no momento da redação, apenas em inglês). Configuração do modelo: insults_kaggle_conv_bert
Exemplo de solicitação:
{ "x": [ "Money talks, bullshit walks.", "You are not the brightest one." ] }
Resultado:
[ ["Not Insult"], ["Insult"] ]
Análise de sentimentos
Classificação da tonalidade do texto (positivo, neutro, negativo).
Configuração do modelo:
rusentiment_elmo_twitter_cnnExemplo de solicitação:
{ "x": [ " DeepPavlov.", " DeepPavlov.", " ." ] }
Resultado:
[ ["positive"], ["neutral"], ["negative"] ]
Detecção de paráfrase
Determinando se dois textos diferentes têm o mesmo significado.
Configuração do modelo:
stand_paraphraser_ruPedido:
{ "text_a": [ " , .", " ." ], "text_b": [ " , , .", " ." ] }
Resultado:
[ [1], [0] ]
A lista atual de todos os modelos DeepPavlov prontos para o uso sempre pode ser encontrada
aqui .
Conclusão
Neste artigo, apresentamos a API do DeepPavlov e alguns dos recursos de processamento de texto da biblioteca fornecidos imediatamente. Deve-se ter em mente que, para qualquer tarefa de PNL, o melhor resultado será alcançado ao treinar o modelo em um conjunto de dados correspondente ao domínio do assunto (domínio) da tarefa. Além disso, ainda mais modelos em princípio não podem ser treinados para todas as ocasiões.
Nos artigos a seguir, consideraremos configurações adicionais da biblioteca, iniciaremos o DeepPavlov a partir do Docker e, depois disso, passaremos para os modelos de ensino. E não esqueça que o DeepPavlov tem um
fórum - faça suas perguntas sobre a biblioteca e os modelos. Obrigado pela atenção!