Tipicamente, as máquinas não entendem textos. Mas, com técnicas de inteligência artificial (IA), elas adquirem essa capacidade. Entre essas técnicas, os algoritmos de machine learning se destacam. Diferentemente de algoritmos tradicionais baseados em regras, algoritmos de machine learning são treináveis. Ou seja, eles aprendem com dados. Através dessa aprendizagem, eles se tornam capazes de extrair padrões altamente complexos de forma acurada e eficiente.
As técnicas de machine learning têm amplo leque de aplicações. As aplicações de processamento de linguagem natural estão entre as mais importantes.
Processamento de Linguagem Natural
O processamento de linguagem natural é um ramo da IA que se concentra em permitir que os computadores entendam a linguagem humana. Isso engloba a linguagem escrita e falada. Análise de sentimentos e chatbots são exemplos de aplicações de processamento de linguagem natural. O desafio central nessa área é preencher a lacuna entre a natureza complexa da linguagem humana e a linguagem altamente estruturada dos algoritmos.
Em aplicações de processamento de linguagem natural, os dados mais comuns são textos. Com a explosão de dados online — tweets, comentários, postagens nas redes sociais —, existem dados em abundância para treinamento de algoritmos de machine learning. O pré-processamento é o primeiro passo crucial para transformar dados de texto brutos em um formato que as máquinas possam entender.
Algoritmos não entendem a linguagem humana. Eles trabalham com números, não com palavras. O pré-processamento traduz o significado dos textos em recursos numéricos. Com isso, os textos adquirem o formato que os algoritmos podem processar. O pré-processamento também realiza a remoção de ruídos como pontuação, erros de digitação e palavras irrelevantes. Isso ajuda os modelos a se concentrarem nas informações importantes. Ao reduzir a complexidade e o tamanho dos dados, o pré-processamento acelera o treinamento e melhora o desempenho dos modelos de machine learning.
Pré-Processamento de Dados Textuais para Machine Learning
Normalmente, o pré-processamento de dados textuais para o treinamento de algoritmos de machine learning envolve as seguintes etapas:
Limpeza de texto: pode incluir remover pontuações, caracteres especiais, datas e URLs e outros itens que bagunçam os dados e podem interferir no desempenho dos algoritmos.
Tokenização: divisão dos dados de texto em palavras individuais ou tokens.
Normalização: etapa essencial para garantir consistência no formato do texto. Costuma incluir correções ortográficas e manipulação de abreviações.
Remoção de palavras de parada: eliminação de palavras comuns como “o”, “a” e “é”.
Pré-Processamento de Dados Textuais com Python
O pré-processamento de dados textuais com Python pode ser feito com o auxílio de algumas bibliotecas de processamento de linguagem natural e módulos como re (regular expression). Abaixo, veja exemplos práticos de como implementar em Python algumas das transformações comuns do pré-processamento de dados textuais para machine learning.
Limpeza de Texto
A limpeza de texto do pré-processamento de dados pode incluir remoções de vários itens como pontuações, caracteres especiais e números. A limpeza também costuma incluir a conversão de letras maiúsculas para minúsculas. Veja abaixo um exemplo de código que realiza várias dessas operações.
import re
exemplo = "Entrega no prazo estimado. ou seja conforme o combinado com o vendedor. a entrega Chega em sua residência. amei todos meus pedidos....💜💜👏👏👏👏"
exemplo = exemplo.lower() # converte letras em minúsculas
exemplo = re.sub(r'[^\w\s]', '', exemplo) # remove pontuações e caracteres especiais
exemplo = re.sub(r'\d', '', exemplo) # remove números
No exemplo acima, usamos regular expression para remover pontuações, caracteres especiais e números. Veja o resultado.
entrega no prazo estimado ou seja conforme o combinado com o vendedor a entrega chega em sua residência amei todos meus pedidos
Tokenização
import nltk
from nltk.tokenize import word_tokenize
exemplo = "Serviço horrível e incompetente. Não providenciam parcelamento pelo meu cartão. Cada vez na central de ajuda era uma desculpa diferente. Não resolveram o problema. Além do mais a comunicação pelo whatsapp e telefone não funcionava. Mercado Livre, não confiável e péssimo de serviços!"
exemplo = word_tokenize(exemplo)
O exemplo tokenizado é mostrado abaixo.
['Serviço', 'horrível', 'e', 'incompetente', '.', 'Não', 'providenciam', 'parcelamento', 'pelo', 'meu', 'cartão', '.', 'Cada', 'vez', 'na', 'central', 'de', 'ajuda', 'era', 'uma', 'desculpa', 'diferente', '.', 'Não', 'resolveram', 'o', 'problema', '.', 'Além', 'do', 'mais', 'a', 'comunicação', 'pelo', 'whatsapp', 'e', 'telefone', 'não', 'funcionava', '.', 'Mercado', 'Livre', ',', 'não', 'confiável', 'e', 'péssimo', 'de', 'serviços', '!']
Normalização
A normalização pode incluir correções ortográficas e manipulações de abreviações. Várias bibliotecas podem ser empregadas nessa tarefa. Uma das melhores bibliotecas Python para correções ortográficas é a autocorrect. Ela tem suporte para várias línguas, inclusive para o português. Veja como ela pode ser usada.
from autocorrect import Speller
spell = Speller(lang='pt')
exemplo = "Ccomprei um determinado produto um jaleco brancoi para meu trabalho e era para entregar em sete dias não entregaram o número de rastreamento não servia para nada e aumentaram mais 7 dias amanhã é o último dia e ainda não chegou eu adorava o MercadoLivre agora estou odiando!"
exemplo = spell(exemplo)
Resultado corrigido.
Comprei um determinado produto um jaleco branco para meu trabalho e era para entregar em sete dias não entregaram o número de rastreamento não servia para nada e aumentaram mais 7 dias amanhã é o último dia e ainda não chegou eu adorava o MercadoLivre agora estou odiando!
Outra biblioteca bem legal para normalização se chama Enelvo. Ela é específica para português e lida eficientemente com abreviações e emojis comumente encontrados em redes sociais. Ela também pode ser usada para remover pontuações, remover ou adicionar capitalizações, entre outras operações. Para conhecer mais, visite o site oficial.
from enelvo.normaliser import Normaliser
norm = Normaliser(sanitize=True, tokenizer='readable')
msg = 'Até hj vc n me respondeul. Oq aconteceu? 💜💜💜💜'
resposta = norm.normalise(msg)
Exemplo com Enelvo.
até hoje você não me respondeu o que aconteceu
Remoção de Paravras de Parada
O próximo passo do pré-processamento de dados que faremos é a remoção de palavras de parada. Elas consistem em palavras comuns como “o”, “a” e “é”. A remoção de palavras de parada pode ser feita com a biblioteca NLTK. Para isso, basta selecionar a lista de palavras de parada (stopwords) para português. Também é possível criar listas customizadas para aplicações específicas.
import nltk
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
stopwords = nltk.corpus.stopwords.words('portuguese')
exemplo = "Compra e entrega rapida, comprei uma bateria para celular na sexta e consegui retirar ja em 3 dias em uma parceira do mercado livre muito rapido e sem dor de cabeça"
exemplo = [x for x in word_tokenize(exemplo) if x not in stopwords]
Veja como ficou o exemplo.
['Compra', 'entrega', 'rapida', ',', 'comprei', 'bateria', 'celular', 'sexta', 'consegui', 'retirar', 'ja', '3', 'dias', 'parceira', 'mercado', 'livre', 'rapido', 'dor', 'cabeça']
Normalização: Stemmering
Em processamento de linguagem natural, stemmering é uma técnica que visa reduzir as palavras à sua forma base ou raiz. Isso envolve cortar prefixos e sufixos, reduzindo essencialmente a palavra à sua parte central. Uma técnica parecida é a lematização. A vantagem principal dessas técnicas é diminuir a ocorrência de redundâncias. No exemplo mostrado abaixo, usamos novamente a biblioteca NLTK.
from nltk.stem import SnowballStemmer
stemmer = SnowballStemmer('portuguese')
exemplo = "Comprei uma vez, porém não fui feliz. Meu pedido não chegou ..demorou um pouco pra ter do extorno do dinheiro. Mais foi solucionado!"
exemplo = [stemmer.stem(word) for word in word_tokenize(exemplo)]
O resultado é mostrado abaixo.
['compr', 'uma', 'vez', ',', 'porém', 'nã', 'fui', 'feliz', '.', 'meu', 'ped', 'nã', 'cheg', '..', 'demor', 'um', 'pouc', 'pra', 'ter', 'do', 'extorn', 'do', 'dinheir', '.', 'mais', 'foi', 'solucion', '!']
Conclusões
E com isso chegamos ao fim desse post! Neste post, nos aventuramos no mundo do pré-processamento de textos. Ele consiste num conjunto de técnicas essenciais para modelos de machine learning. Ao transformar textos confusos em dados mais estruturados, garantimos que nossos algoritmos sejam treinados com a clareza necessária. O pré-processamento de textos não é apenas um obstáculo técnico. Preparar cuidadosamente os dados é essencial para garantir o bom desempenho de um modelo de IA. Para quem quer conhecer mais sobre o assunto, uma boa dica é consultar as páginas oficiais de bibliotecas de processamento de linguagem natural, como SpaCy e NLTK.