Tecnologia de processamento de linguagem natural

Azure AI services
Azure Databricks
Azure HDInsight
Azure Synapse Analytics

O processamento de linguagem natural (PNL) tem muitos usos: análise de sentimento, deteção de tópicos, deteção de linguagem, extração de frases-chave e categorização de documentos.

Especificamente, você pode usar a PNL para:

  • Classifique documentos. Por exemplo, você pode rotular documentos como confidenciais ou spam.
  • Faça processamentos ou pesquisas subsequentes. Você pode usar a saída de PNL para esses fins.
  • Resuma o texto identificando as entidades que estão presentes no documento.
  • Marque documentos com palavras-chave. Para as palavras-chave, a PNL pode usar entidades identificadas.
  • Faça pesquisa e recuperação baseadas em conteúdo. A marcação torna essa funcionalidade possível.
  • Resuma os tópicos importantes de um documento. A PNL pode combinar entidades identificadas em tópicos.
  • Categorize documentos para navegação. Para isso, a PNL usa tópicos detetados.
  • Enumerar documentos relacionados com base em um tópico selecionado. Para isso, a PNL usa tópicos detetados.
  • Marcar texto para sentimento. Usando essa funcionalidade, você pode avaliar o tom positivo ou negativo de um documento.

Apache®, Apache Spark e o logotipo flame são marcas registradas ou marcas comerciais da Apache Software Foundation nos Estados Unidos e/ou em outros países. Nenhum endosso da Apache Software Foundation está implícito no uso dessas marcas.

Potenciais casos de utilização

Os cenários de negócios que podem se beneficiar da PNL personalizada incluem:

  • Inteligência documental para documentos manuscritos ou criados por máquina em finanças, saúde, varejo, governo e outros setores.
  • Tarefas de PNL agnósticas do setor para processamento de texto, como reconhecimento de entidade de nome (NER), classificação, sumarização e extração de relação. Essas tarefas automatizam o processo de recuperação, identificação e análise de informações de documentos, como texto e dados não estruturados. Exemplos dessas tarefas incluem modelos de estratificação de risco, classificação ontológica e resumos de varejo.
  • Recuperação de informação e criação de gráficos de conhecimento para pesquisa semântica. Esta funcionalidade torna possível criar gráficos de conhecimento médico que apoiam a descoberta de medicamentos e ensaios clínicos.
  • Tradução de texto para sistemas de IA conversacional em aplicativos voltados para o cliente em varejo, finanças, viagens e outros setores.

Apache Spark como uma estrutura de PNL personalizada

O Apache Spark é uma estrutura de processamento paralelo que suporta processamento na memória para aumentar o desempenho de aplicativos analíticos de big data. O Azure Synapse Analytics, o Azure HDInsight e o Azure Databricks oferecem acesso ao Spark e tiram partido do seu poder de processamento.

Para cargas de trabalho de PNL personalizadas, o Spark NLP serve como uma estrutura eficiente para processar uma grande quantidade de texto. Esta biblioteca de NLP de código aberto fornece bibliotecas Python, Java e Scala que oferecem a funcionalidade completa de bibliotecas NLP tradicionais, como spaCy, NLTK, Stanford CoreNLP e Open NLP. O Spark NLP também oferece funcionalidades como verificação ortográfica, análise de sentimento e classificação de documentos. O Spark NLP melhora os esforços anteriores fornecendo precisão, velocidade e escalabilidade de última geração.

Diagram that shows areas of N L P functionality like entity recognition. Various boxes list N L P annotators, models, and supported languages.

Benchmarks públicos recentes mostram o Spark NLP como 38 e 80 vezes mais rápido do que o spaCy, com precisão comparável para treinar modelos personalizados. O Spark NLP é a única biblioteca de código aberto que pode usar um cluster distribuído do Spark. O Spark NLP é uma extensão nativa do Spark ML que opera diretamente em quadros de dados. Como resultado, as acelerações em um cluster resultam em outra ordem de magnitude de ganho de desempenho. Como cada pipeline de NLP do Spark é um pipeline do Spark ML, o Spark NLP é adequado para criar pipelines unificados de NLP e aprendizado de máquina, como classificação de documentos, previsão de risco e pipelines de recomendação.

Além do excelente desempenho, o Spark NLP também oferece precisão de última geração para um número crescente de tarefas de PNL. A equipe do Spark NLP lê regularmente os últimos artigos acadêmicos relevantes e implementa modelos de última geração. Nos últimos dois a três anos, os modelos com melhor desempenho utilizaram deep learning. A biblioteca vem com modelos de aprendizagem profunda pré-construídos para reconhecimento de entidades nomeadas, classificação de documentos, deteção de sentimentos e emoções e deteção de frases. A biblioteca também inclui dezenas de modelos de linguagem pré-treinados que incluem suporte para incorporações de palavras, pedaços, frases e documentos.

A biblioteca tem compilações otimizadas para CPUs, GPUs e os mais recentes chips Intel Xeon. Você pode dimensionar os processos de treinamento e inferência para aproveitar os clusters do Spark. Esses processos podem ser executados em produção em todas as plataformas de análise populares.

Desafios

  • O processamento de uma coleção de documentos de texto de forma livre requer uma quantidade significativa de recursos computacionais. O processamento também é demorado. Esses processos geralmente envolvem a implantação de computação de GPU.
  • Sem um formato de documento padronizado, pode ser difícil obter resultados consistentemente precisos quando você usa o processamento de texto de forma livre para extrair fatos específicos de um documento. Por exemplo, pense em uma representação de texto de uma fatura — pode ser difícil criar um processo que extraia corretamente o número da fatura e a data em que as faturas são de vários fornecedores.

Principais critérios de seleção

No Azure, os serviços do Spark, como o Azure Databricks, o Azure Synapse Analytics e o Azure HDInsight, fornecem funcionalidade de NLP quando você os usa com o Spark NLP. Os Serviços Cognitivos do Azure são outra opção para a funcionalidade de PNL. Para decidir qual serviço usar, considere estas perguntas:

  • Pretende utilizar modelos pré-construídos ou pré-treinados? Se sim, considere usar as APIs que os Serviços Cognitivos do Azure oferecem. Ou transfira o seu modelo preferido através do Spark NLP.

  • Você precisa treinar modelos personalizados em relação a um grande corpus de dados de texto? Se sim, considere usar o Azure Databricks, o Azure Synapse Analytics ou o Azure HDInsight com o Spark NLP.

  • Você precisa de recursos de PNL de baixo nível, como tokenização, derivação, lemmatização e frequência de termo/frequência de documento inversa (TF/IDF)? Se sim, considere usar o Azure Databricks, o Azure Synapse Analytics ou o Azure HDInsight com o Spark NLP. Ou use uma biblioteca de software de código aberto na ferramenta de processamento de sua escolha.

  • Você precisa de recursos simples e de alto nível de PNL, como identificação de entidade e intenção, deteção de tópicos, verificação ortográfica ou análise de sentimento? Se sim, considere usar as APIs que os Serviços Cognitivos oferecem. Ou transfira o seu modelo preferido através do Spark NLP.

Matriz de capacidades

As tabelas a seguir resumem as principais diferenças nos recursos dos serviços de PNL.

Capacidades gerais

Funcionalidade Serviço Spark (Azure Databricks, Azure Synapse Analytics, Azure HDInsight) com Spark NLP Serviços Cognitivos do Azure
Fornece modelos pré-treinados como um serviço Sim Sim
API REST Sim Sim
Programabilidade Python, Scala Para idiomas suportados, consulte Recursos adicionais
Suporta o processamento de grandes conjuntos de dados e documentos grandes Sim No

Recursos de PNL de baixo nível

Capacidade dos anotadores Serviço Spark (Azure Databricks, Azure Synapse Analytics, Azure HDInsight) com Spark NLP Serviços Cognitivos do Azure
Detetor de frases Sim No
Detetor de frases profundas Sim Sim
Tokenizador Sim Sim
Gerador de N-gramas Sim No
Segmentação de palavras Sim Sim
Stemmer Sim No
Lemmatizador Sim No
Identificação de classe gramatical Sim No
Analisador de dependência Sim No
Tradução Sim No
Limpador de palavras paradas Sim No
Correção ortográfica Sim No
Normalizador Sim Sim
Correspondente de texto Sim No
TF/IDF Sim No
Correspondente de expressão regular Sim Incorporado no Serviço de Compreensão de Idiomas (LUIS). Não suportado no Conversational Language Understanding (CLU), que está substituindo o LUIS.
Correspondente de data Sim Possível em LUIS e CLU através de reconhecedores DateTime
Fragmento Sim No

Recursos de PNL de alto nível

Funcionalidade Serviço Spark (Azure Databricks, Azure Synapse Analytics, Azure HDInsight) com Spark NLP Serviços Cognitivos do Azure
Verificação ortográfica Sim No
Resumo Sim Sim
Perguntas e respostas Sim Sim
Deteção de sentimentos Sim Sim
Deteção de emoções Sim Apoia a mineração de opinião
Classificação de token Sim Sim, através de modelos personalizados
Classificação de textos Sim Sim, através de modelos personalizados
Representação de texto Sim No
NER Sim Sim — a análise de texto fornece um conjunto de NER, e os modelos personalizados estão em reconhecimento de entidade
Reconhecimento de entidades Sim Sim, através de modelos personalizados
Deteção de idioma Sim Sim
Suporta idiomas além do inglês Sim, suporta mais de 200 idiomas Sim, suporta mais de 97 idiomas

Configurar o Spark NLP no Azure

Para instalar o Spark NLP, use o código a seguir, mas substitua <version> pelo número da versão mais recente. Para obter mais informações, consulte a documentação do Spark NLP.

# Install Spark NLP from PyPI.
pip install spark-nlp==<version>

# Install Spark NLP from Anacodna or Conda.
conda install -c johnsnowlabs spark-nlp

# Load Spark NLP with Spark Shell.
spark-shell --packages com.johnsnowlabs.nlp:spark-nlp_<version>

# Load Spark NLP with PySpark.
pyspark --packages com.johnsnowlabs.nlp:spark-nlp_<version>

# Load Spark NLP with Spark Submit.
spark-submit --packages com.johnsnowlabs.nlp:spark-nlp_<version>

# Load Spark NLP as an external JAR after compiling and building Spark NLP by using sbt assembly.
spark-shell --jars spark-nlp-assembly-3 <version>.jar

Desenvolver pipelines de PNL

Para a ordem de execução de um pipeline de PNL, o Spark NLP segue o mesmo conceito de desenvolvimento dos modelos tradicionais de aprendizado de máquina do Spark ML. Mas o Spark NLP aplica técnicas de PNL.

Diagram that shows N L P pipeline stages, such as document assembly, sentence detection, tokenization, normalization, and word embedding.

Os principais componentes de um pipeline de PNL do Spark são:

  • DocumentAssembler: um transformador que prepara dados alterando-os para um formato que o Spark NLP pode processar. Este estágio é o ponto de entrada para cada pipeline de PNL do Spark. O DocumentAssembler pode ler uma String coluna ou um Array[String]arquivo . Você pode usar setCleanupMode para pré-processar o texto. Por padrão, esse modo está desativado.

  • SentenceDetector: Um anotador que deteta limites de frases usando a abordagem que é dada. Este anotador pode retornar cada frase extraída em um Arrayarquivo . Ele também pode retornar cada frase em uma linha diferente, se você definir explodeSentences como true.

  • Tokenizador: um anotador que separa o texto bruto em tokens, ou unidades como palavras, números e símbolos, e retorna os tokens em uma TokenizedSentence estrutura. Esta classe não é ajustada. Se você ajustar um tokenizador, o interno RuleFactory usará a configuração de entrada para configurar regras de tokenização. O tokenizador usa padrões abertos para identificar tokens. Se as configurações padrão não atenderem às suas necessidades, você poderá adicionar regras para personalizar o Tokenizer.

  • Normalizador: um anotador que limpa tokens. O normalizador requer hastes. O Normalizer usa expressões regulares e um dicionário para transformar texto e remover caracteres sujos.

  • WordEmbeddings: Anotadores de pesquisa que mapeiam tokens para vetores. Você pode usar setStoragePath para especificar um dicionário de pesquisa de token personalizado para incorporações. Cada linha do seu dicionário precisa conter um token e sua representação vetorial, separados por espaços. Se um token não for encontrado no dicionário, o resultado será um vetor zero da mesma dimensão.

O Spark NLP usa pipelines Spark MLlib, que o MLflow suporta nativamente. O MLflow é uma plataforma de código aberto para o ciclo de vida do aprendizado de máquina. Os seus componentes incluem:

  • Mlflow Tracking: Registra experimentos e fornece uma maneira de consultar resultados.
  • Projetos MLflow: Possibilita a execução de código de ciência de dados em qualquer plataforma.
  • MLflow Models: Implanta modelos em diversos ambientes.
  • Registro de modelo: gerencia modelos que você armazena em um repositório central.

O MLflow está integrado no Azure Databricks. Você pode instalar o MLflow em qualquer outro ambiente baseado no Spark para rastrear e gerenciar seus experimentos. Você também pode usar o MLflow Model Registry para disponibilizar modelos para fins de produção.

Contribuidores

Este artigo é mantido pela Microsoft. Foi originalmente escrito pelos seguintes contribuidores.

Principais autores:

Próximos passos