PNL com a API de linguagem natural do Google Cloud
Publicados: 2022-03-11O processamento de linguagem natural (PNL), que é a combinação de aprendizado de máquina e linguística, tornou-se um dos assuntos mais pesquisados no campo da inteligência artificial. Nos últimos anos, muitos novos marcos foram alcançados, sendo o mais recente o modelo GPT-2 da OpenAI, que é capaz de produzir artigos realistas e coerentes sobre qualquer tópico a partir de uma pequena entrada.
Este interesse é impulsionado pelas muitas aplicações comerciais que foram trazidas ao mercado nos últimos anos. Falamos com nossos assistentes domésticos que usam a PNL para transcrever os dados de áudio e entender nossas perguntas e comandos. Mais e mais empresas transferem grande parte do esforço de comunicação do cliente para chatbots automatizados. Os mercados on-line o usam para identificar avaliações falsas, as empresas de mídia confiam na PNL para escrever artigos de notícias, as empresas de recrutamento combinam currículos com as posições, os gigantes das mídias sociais filtram automaticamente conteúdo odioso e os escritórios de advocacia usam a PNL para analisar contratos.
Treinar e implantar modelos de aprendizado de máquina para tarefas como essas era um processo complexo no passado, que exigia uma equipe de especialistas e uma infraestrutura cara. Mas a alta demanda por esses aplicativos levou grandes provedores a desenvolver serviços relacionados à NLP, o que reduz muito a carga de trabalho e os custos de infraestrutura. O custo médio dos serviços em nuvem vem caindo há anos e espera-se que essa tendência continue.
Os produtos que apresentarei neste artigo fazem parte dos Serviços do Google Cloud e são chamados de "Google Natural Language API" e "Google AutoML Natural Language".
API de linguagem natural do Google
A API do Google Natural Language é uma interface fácil de usar para um conjunto de modelos de PNL poderosos que foram pré-treinados pelo Google para realizar várias tarefas. Como esses modelos foram treinados em corpus de documentos enormemente grandes, seu desempenho geralmente é muito bom, desde que sejam usados em conjuntos de dados que não fazem uso de uma linguagem muito idiossincrática.
A maior vantagem de usar esses modelos pré-treinados por meio da API é que nenhum conjunto de dados de treinamento é necessário. A API permite que o usuário comece imediatamente a fazer previsões, o que pode ser muito valioso em situações em que há poucos dados rotulados disponíveis.
A API Natural Language compreende cinco serviços diferentes:
- Análise de sintaxe
- Análise de sentimentos
- Análise de Entidade
- Análise de sentimento da entidade
- Classificação de texto
Análise de sintaxe
Para um determinado texto, a análise de sintaxe do Google retornará um detalhamento de todas as palavras com um rico conjunto de informações linguísticas para cada token. As informações podem ser divididas em duas partes:
Parte do discurso: Esta parte contém informações sobre a morfologia de cada token. Para cada palavra, é retornada uma análise refinada contendo seu tipo (substantivo, verbo, etc.), gênero, caso gramatical, tempo verbal, modo gramatical, voz gramatical e muito mais.
Por exemplo, para a frase de entrada “Um computador uma vez me venceu no xadrez, mas não foi páreo para mim no kickboxing”. (Emo Philips) a análise da parte do discurso é:
UMA | etiqueta: DET |
'computador' | tag: SUBSTANTIVO número: SINGULAR |
'uma vez' | etiqueta: ADV |
'bater' | tag: VERBO modo: INDICATIVO: PASSADO |
'mim' | tag: Caso PRON: Número Acusativo: Pessoa SINGULAR: PRIMEIRO |
no | etiqueta: ADP |
'xadrez' | tag: SUBSTANTIVO número: SINGULAR |
',' | etiqueta: PONTO |
'mas' | etiqueta: CONJ |
'isto' | tag: PRON caso: NOMINATIVO gênero: NEUTRO número: SINGULAR pessoa: TERCEIRO |
'foi' | tag: VERBO modo: número INDICATIVO: pessoa do SINGULAR: TERCEIRO tempo: PASSADO |
'não' | etiqueta: DET |
'partida' | tag: SUBSTANTIVO número: SINGULAR |
'para' | etiqueta: ADP |
'chute' | tag: SUBSTANTIVO número: SINGULAR |
'boxe' | tag: SUBSTANTIVO número: SINGULAR |
'.' | etiqueta: PONTO |
Árvores de dependência: A segunda parte do retorno é chamada de árvore de dependência, que descreve a estrutura sintática de cada sentença. O diagrama a seguir de uma famosa citação de Kennedy mostra essa árvore de dependência. Para cada palavra, as setas indicam quais palavras são modificadas por ela.
As bibliotecas Python comumente usadas nltk e spaCy contêm funcionalidades semelhantes. A qualidade da análise é consistentemente alta em todas as três opções, mas a Google Natural Language API é mais fácil de usar. A análise acima pode ser obtida com muito poucas linhas de código (veja o exemplo mais abaixo). No entanto, enquanto spaCy e nltk são de código aberto e, portanto, gratuitos, o uso da API do Google Natural Language custa dinheiro após um certo número de solicitações gratuitas (consulte a seção de custos).
Além do inglês, a análise sintática suporta dez idiomas adicionais: chinês (simplificado), chinês (tradicional), francês, alemão, italiano, japonês, coreano, português, russo e espanhol .
Análise de sentimentos
O serviço de análise de sintaxe é usado principalmente no início do pipeline para criar recursos que são posteriormente inseridos em modelos de aprendizado de máquina. Pelo contrário, o serviço de análise de sentimentos pode ser usado imediatamente.
A análise de sentimentos do Google fornecerá a opinião emocional predominante em um texto fornecido. A API retorna dois valores: A “pontuação” descreve a inclinação emocional do texto de -1 (negativo) a +1 (positivo), sendo 0 neutro.
A “magnitude” mede a força da emoção.
Vejamos alguns exemplos:
Frase de entrada | Resultados de sentimento | Interpretação |
O trem para Londres sai às quatro horas | Pontuação: 0,0 Magnitude: 0,0 | Uma declaração completamente neutra, que não contém nenhuma emoção. |
Esta postagem do blog é boa. | Pontuação: 0,7 Magnitude: 0,7 | Um sentimento positivo, mas não expresso com muita força. |
Esta postagem do blog é boa. Foi muito útil. O autor é incrível. | Pontuação: 0,7 Magnitude: 2,3 | O mesmo sentimento, mas expresso muito mais forte. |
Este blog está muito bom. Este autor é um escritor horrível geralmente, mas aqui ele teve sorte. | Pontuação: 0,0 Magnitude: 1,6 | A magnitude nos mostra que há emoções expressas neste texto, mas o sentimento mostra que elas são mistas e não claramente positivas ou negativas. |
O modelo de análise de sentimentos do Google é treinado em um conjunto de dados muito grande. Infelizmente, não há informações disponíveis sobre sua estrutura detalhada. Eu estava curioso sobre seu desempenho no mundo real, então testei em uma parte do Large Movie Review Dataset, que foi criado por cientistas da Universidade de Stanford em 2011.
Selecionei aleatoriamente 500 críticas positivas e 500 negativas de filmes do conjunto de testes e comparei o sentimento previsto com o rótulo da crítica real. A matriz de confusão ficou assim:
Sentimento positivo | Sentimento Negativo | |
Boa revisão | 470 | 30 |
Revisão ruim | 29 | 471 |
Como mostra a tabela, o modelo está certo em cerca de 94% das vezes para críticas de filmes bons e ruins. Este não é um desempenho ruim para uma solução pronta para uso sem nenhum ajuste fino para o problema fornecido.
Observação: a análise de sentimento está disponível para os mesmos idiomas que a análise de sintaxe, exceto russo.
Análise de Entidade
Análise de Entidade é o processo de detecção de entidades conhecidas como figuras públicas ou pontos de referência de um determinado texto. A detecção de entidade é muito útil para todos os tipos de classificação e tarefas de modelagem de tópicos.
A API do Google Natural Language fornece algumas informações básicas sobre cada entidade detectada e até fornece um link para o respectivo artigo da Wikipedia, se existir. Além disso, uma pontuação de saliência é calculada. Essa pontuação para uma entidade fornece informações sobre a importância ou centralidade dessa entidade para todo o texto do documento. Pontuações mais próximas de 0 são menos salientes, enquanto pontuações mais próximas de 1,0 são altamente salientes.
Quando enviamos uma solicitação à API com esta frase de exemplo: “Robert DeNiro falou com Martin Scorsese em Hollywood na véspera de Natal em dezembro de 2011.” Recebemos o seguinte resultado:
Entidade detectada | Informações adicionais |
Robert de Niro | tipo: PERSON saliência: 0,5869118 wikipedia_url: https://en.wikipedia.org/wiki/Robert_De_Niro |
Hollywood | type: LOCATION salience: 0.17918482 wikipedia_url: https://en.wikipedia.org/wiki/Hollywood |
Martin Scorsese | type: LOCATION salience: 0.17712952 wikipedia_url: https://en.wikipedia.org/wiki/Martin_Scorsese |
véspera de Natal | type : PERSON salience : 0.056773853 wikipedia_url : https://en.wikipedia.org/wiki/Christmas |
Dezembro de 2011 | type : DATE Ano: 2011 Mês: 12 salience : 0.0 wikipedia_url : - |
2011 | tipo: NUMBER saliência: 0.0 wikipedia_url: - |
Como você pode ver, todas as entidades são identificadas e classificadas corretamente, exceto que 2011 aparece duas vezes. Além do campo na saída de exemplo, a API de análise de entidade também detectará organizações, obras de arte, bens de consumo, números de telefone, endereços e preços.
Análise de sentimento da entidade
Se existem modelos para detecção de entidades e análise de sentimentos, é natural dar um passo adiante e combiná-los para detectar as emoções predominantes em relação às diferentes entidades em um texto.
Enquanto a API Sentiment Analysis encontra todas as exibições de emoção no documento e as agrega, a Entity Sentiment Analysis tenta encontrar as dependências entre as diferentes partes do documento e as entidades identificadas e, em seguida, atribui as emoções nesses segmentos de texto às respectivas entidades.
Por exemplo, o texto opinativo: “O autor é um escritor horrível. O leitor é muito inteligente, por outro lado.” leva aos resultados:
Entidade | Sentimento |
autor | Saliência: 0,8773350715637207 Sentimento: magnitude: 1,899999976158142 pontuação: -0,8999999761581421 |
leitor | Saliência: 0,08653714507818222 Sentimento: magnitude: 0,8999999761581421 pontuação: 0,8999999761581421 |
A análise de sentimento da entidade até agora funciona apenas para inglês, japonês e espanhol.
Classificação de texto
Por fim, a API de linguagem natural do Google vem com um modelo de classificação de texto plug-and-play.
O modelo é treinado para classificar os documentos de entrada em um grande conjunto de categorias. As categorias estão estruturadas hierarquicamente, por exemplo, a Categoria “Hobbies & Lazer” tem várias subcategorias, uma das quais seria “Hobbies & Lazer/Ao Ar Livre” que por sua vez tem subcategorias como “Hobbies & Lazer/Ao Ar Livre/Pesca”.
Este é um exemplo de texto de um anúncio de câmera Nikon:
“O grande sensor de formato DX de 24,2 MP da D3500 captura fotos ricamente detalhadas e filmes em Full HD — mesmo quando você fotografa com pouca luz. Combinado com o poder de renderização de sua lente NIKKOR, você pode começar a criar retratos artísticos com desfoque de fundo suave. Com facilidade."

A API do Google retorna o resultado:
Categoria | Confiança |
Artes e entretenimento/Arte visual e design/Artes fotográficas e digitais | 0,95 |
Passatempos e Lazer | 0,94 |
Computadores e eletrônicos/Eletrônicos de consumo/Câmera e equipamento fotográfico | 0,85 |
Todas essas três categorias fazem sentido, mesmo que intuitivamente classifiquemos a terceira entrada mais alta do que a segunda. No entanto, deve-se considerar que esse segmento de entrada é apenas uma pequena parte do documento completo do anúncio da câmera e o desempenho do modelo de classificação melhora com o comprimento do texto.
Depois de testá-lo com muitos documentos, achei os resultados do modelo de classificação significativos na maioria dos casos. Ainda assim, como todos os outros modelos da Google Natural Language API, o classificador vem como uma solução de caixa preta que não pode ser modificada ou mesmo ajustada pelo usuário da API. Especialmente no caso de classificação de texto, a grande maioria das empresas terá suas próprias categorias de texto que diferem das categorias do modelo do Google e, portanto, o serviço de classificação de texto da Natural Language API pode não ser aplicável para a maioria dos usuários.
Outra limitação do modelo de classificação é que ele só funciona para textos em inglês.
Como usar a API Natural Language
A principal vantagem da API do Google Natural Language é sua facilidade de uso. Nenhuma habilidade de aprendizado de máquina é necessária e quase nenhuma habilidade de codificação. No site do Google Cloud, você encontra snippets de código para chamar a API para vários idiomas.
Por exemplo, o código Python para chamar a API de análise de sentimentos é tão curto quanto:
from google.cloud import language_v1 from google.cloud.language_v1 import enums import six def sample_analyze_sentiment(content): client = language_v1.LanguageServiceClient() if isinstance(content, six.binary_type): content = content.decode('utf-8') type_ = enums.Document.Type.PLAIN_TEXT document = {'type': type_, 'content': content} response = client.analyze_sentiment(document) sentiment = response.document_sentiment print('Score: {}'.format(sentiment.score)) print('Magnitude: {}'.format(sentiment.magnitude))
As outras funcionalidades da API são chamadas de maneira semelhante, simplesmente alterando client.analyze_sentiment
para a função apropriada.
Custo geral da API do Google Natural Language
O Google cobra de seus usuários por solicitação por todos os serviços da API Natural Language. Isso tem a vantagem de não haver custos fixos para nenhum servidor de implantação. A desvantagem é que pode se tornar caro para conjuntos de dados muito grandes.
Esta tabela mostra os preços (por 1.000 solicitações) dependendo do número de solicitações mensais:
Se um documento tiver mais de 1.000 caracteres, contará como várias solicitações. Por exemplo, se você quiser analisar o sentimento de 10.000 documentos, com 1.500 caracteres cada, serão cobrados 20.000 solicitações. Como os primeiros 5.000 são gratuitos, o custo total seria de US$ 15. Analisar um milhão de documentos do mesmo tamanho custaria US$ 1.995.
Conveniente, mas inflexível
A Google Natural Language API é uma opção muito conveniente para soluções rápidas e prontas para uso. É necessário muito pouco conhecimento técnico e nenhuma compreensão dos modelos de aprendizado de máquina subjacentes.
A principal desvantagem é a sua inflexibilidade e a falta de acesso aos modelos. Os modelos não podem ser ajustados para uma tarefa ou conjunto de dados específico.
Em um ambiente do mundo real, a maioria das tarefas provavelmente exigirá uma solução mais personalizada do que as funções padronizadas da API Natural Language podem fornecer.
Para esse cenário, o Google AutoML Natural Language é mais adequado.
Linguagem natural do Google AutoML
Se a API Natural Language não for flexível o suficiente para seus fins comerciais, o AutoML Natural Language pode ser o serviço certo. O AutoML é um novo serviço do Google Cloud (ainda em versão beta) que permite ao usuário criar modelos de machine learning personalizados. Em contraste com a API Natural Language, os modelos AutoML serão treinados nos dados do usuário e, portanto, se encaixam em uma tarefa específica.
Modelos de aprendizado de máquina personalizados para classificação de conteúdo são úteis quando as categorias predefinidas disponíveis na API Natural Language são muito genéricas ou não se aplicam ao seu caso de uso específico ou domínio de conhecimento.
O serviço AutoML exige um pouco mais de esforço do usuário, principalmente porque você precisa fornecer um conjunto de dados para treinar o modelo. No entanto, o treinamento e avaliação dos modelos de forma totalmente automatizada e sem conhecimento de machine learning é necessário. Todo o processo pode ser feito sem escrever nenhum código usando o console do Google Cloud. Claro, se você quiser automatizar essas etapas, há suporte para todas as linguagens de programação comuns.
O que pode ser feito com o Google AutoML Natural Language?
O serviço AutoML abrange três casos de uso. Todos esses casos de uso suportam apenas o idioma inglês por enquanto.
1. Classificação de texto do AutoML
Embora o classificador de texto da API Natural Language seja pré-treinado e, portanto, tenha um conjunto fixo de categorias de texto, a classificação de texto do AutoML cria modelos de aprendizado de máquina personalizados, com as categorias que você fornece em seu conjunto de dados de treinamento.
2. Análise de sentimento do AutoML
Como vimos, a análise de sentimentos da API Natural Language funciona muito bem em casos de uso gerais, como resenhas de filmes. Como o modelo de sentimento é treinado em um corpus muito geral, o desempenho pode se deteriorar para documentos que usam muita linguagem específica de domínio. Nessas situações, o AutoML Sentiment Analysis permite treinar um modelo de sentimento personalizado para seu domínio.
3. Extração de entidade do AutoML
Em muitos contextos de negócios, existem entidades específicas de domínio (contratos legais, documentos médicos) que a API Natural Language não poderá identificar. Se você tiver um conjunto de dados em que as entidades estejam marcadas, poderá treinar um extrator de entidade de modelo personalizado com o AutoML. Se o conjunto de dados for suficientemente grande, o modelo de extração de entidade treinada também poderá detectar entidades não vistas anteriormente.
Como usar a linguagem natural do AutoML
Usar os três AutoML é um processo de quatro etapas e é muito semelhante para todas as três metodologias:
Preparação do conjunto de dados
O conjunto de dados precisa estar em um formato específico (CSV ou JSON) e precisa ser armazenado em um bucket de armazenamento. Para modelos de classificação e sentimento, os conjuntos de dados contêm apenas duas colunas, o texto e o rótulo. Para o modelo de extração de entidade, o conjunto de dados precisa do texto e das localizações de todas as entidades no texto.Treinamento Modelo
O treinamento do modelo é totalmente automático. Se nenhuma instrução for fornecida de outra forma, o AutoML dividirá o conjunto de treinamento automaticamente em conjuntos de treinamento, teste e validação. Essa divisão também pode ser decidida pelo usuário, mas essa é a única maneira de influenciar o treinamento do modelo. O resto do treinamento é completamente automatizado em uma forma de caixa preta.Avaliação
Quando o treinamento for concluído, o AutoML exibirá pontuações de precisão e recuperação, bem como uma matriz de confusão. Infelizmente, não há absolutamente nenhuma informação sobre o modelo em si, tornando difícil identificar as razões para modelos com desempenho ruim.Predição
Quando estiver satisfeito com o desempenho do modelo, o modelo pode ser implantado convenientemente com alguns cliques. O processo de implantação leva apenas alguns minutos.
Desempenho do modelo AutoML
O processo de treinamento é bastante lento, provavelmente porque os modelos subjacentes são muito grandes. Treinei uma pequena tarefa de classificação de teste com 15.000 amostras e 10 categorias e o treinamento levou várias horas. Um exemplo do mundo real com um conjunto de dados muito maior levou vários dias.
Embora o Google não tenha publicado nenhum detalhe sobre os modelos usados, meu palpite é que o modelo BERT do Google é usado com pequenas adaptações para cada tarefa. O ajuste fino de grandes modelos como o BERT é um processo computacionalmente caro, especialmente quando muitas validações cruzadas são realizadas.
Testei o modelo de classificação do AutoML em um exemplo do mundo real em relação a um modelo que desenvolvi por mim mesmo, baseado no BERT. Surpreendentemente, o modelo AutoML teve um desempenho significativamente pior do que o meu próprio modelo, quando treinado com os mesmos dados. O AutoML alcançou uma precisão de 84%, enquanto o meu modelo alcançou 89%.
Isso significa que, embora o uso do AutoML possa ser muito conveniente, para tarefas críticas de desempenho, faz sentido investir tempo e desenvolver o modelo você mesmo.
Preços do AutoML
O preço do AutoML para previsões com US$ 5 por 1.000 registros de texto é significativamente mais caro do que a API Natural Language. Além disso, para o treinamento do modelo, o AutoML cobra US$ 3 por hora. Embora isso seja insignificante no início, para casos de uso que exigem retreinamento frequente, isso pode resultar em uma quantidade substancial, especialmente porque o treinamento parece ser bastante lento.
Vamos usar o mesmo exemplo da API Natural Language:
Você deseja analisar o sentimento de 10.000 documentos, cada um com 1.500 caracteres, para que sejam cobrados 20.000 solicitações. Digamos que o treinamento do modelo leve 20 horas, o que custa US$ 48. A previsão não custa nada, pois as primeiras 30.000 solicitações são gratuitas. Para conjuntos de dados pequenos como esse, o AutoML é muito econômico.
No entanto, se seu conjunto de dados for maior e você precisar prever o sentimento de um milhão do mesmo tamanho, custaria US$ 9.850, o que é bastante caro. Para grandes conjuntos de dados como esse, faz sentido desenvolver seu próprio modelo e implantá-lo sem usar o AutoML.
API do Google Natural Language x AutoML Natural Language
O Google AutoML Natural Language é muito mais poderoso do que a API Natural Language porque permite que o usuário treine modelos personalizados para seu conjunto de dados e domínio específicos.
É tão fácil de usar e não requer conhecimento de aprendizado de máquina. As duas desvantagens são os custos mais altos e a necessidade de fornecer um conjunto de dados de alta qualidade que precisa treinar modelos com bom desempenho.
O AutoML beta suporta apenas três tarefas de NLP por enquanto (classificação, análise de sentimento, extração de entidade) e suporta apenas documentos em inglês. Quando este serviço for lançado totalmente, espero que outras linguagens e tarefas de PNL sejam adicionadas ao longo do tempo.