Conceitos de NLP
Introdução
Anteriormente nesse post, eu falei um pouco sobre o que é NLP e algumas formas de representarmos numericamente os textos para que possamos executar tarefas como extração de informações do texto, análise de sentimento, tradução, resumo de textos, etc. Neste post falaremos de alguns conceitos e métodos dessa disciplina, NLP.
Elementos Textuais
Todos os métodos de NLP começam com o dataset textual, também chamado de corpus. No corpus, está contido o texto bruto e seus metadados. O texto bruto é uma sequência de caracteres (bytes), que são agrupados em unidades contínuas chamadas tokens
Os tokens são simplesmente as palavras e sequências numéricas separadas por espaços ou pontuações.
No contexto de machine learning, um texto com seu metadado é chamado de instancias (instance) ou data point. Essa coleção de instancias é o dataset.
Para quebrar o texto em palavras, precisamos fazer o processo de tokenização (tokenization). Esse processo pode ser feito utilizando bibliotecas como NLTK e o SpaCy.
Utilizando a frase a seguir como exemplo:
from nltk import word_tokenize
text = "Kaizoku ou ni ore wa naru"
word_tokenize(text)
O output será:
['Kaizoku', 'ou', 'ni', 'ore', 'wa', 'naru']
Também podemos encontrar os types, que são os tokens únicos presentes no texto. O conjunto de todos os types num corpus formam o vocabulário (vocabulary) ou o lexicon.
N-Grams
N-grams são agrupamentos de tokens consecutivos por um número fixo. Quando agrupamos 2, chamamos de bigrams, com 3 trigrams, e assim por diante. N-grams são úteis em aplicações de análise de texto em que as sequências de palavras são possuem relevância, como na análise de sentimento, classificação de texto e geração de texto.
Normalização Textual
As palavras podem variar de várias formas, desde a flexão de gênero e número em adjetivos. Para os verbos temos a flexão verbal de modo (indicativo, subjuntivo, imperativo), tempo (presente, pretérito, futuro), número (plural e singular), pessoa (eu, tu, ele/ela, nós…). A flexão dos substantivos. Essas possibilidades de variação aumentam consideravelmente o número de tokens, aumentando a dimensionalidade do corpus. Para normalizar o texto e diminuir o tamanho do vetor que será usado no modelo podemos utilizar duas ténicas: Lemmatização (lemmatization) e Stemming.
Lemmatização (lemmatization) é o processo de transformar o token na sua foram raíz e removendo a inflexão, colocando os verbos no infinitivo e demais palavras a sua básica.
import spacy
spacy_lemma = spacy.load('pt_core_news_sm')
texto = 'comendo, dormindo, caminhando, laranjas, maçãs'
doc = spacy_lemma(texto)
doc_lematizado = [token.lemma_ for token in doc]
doc_lematizado = ' '.join(doc_lematizado) # removendo as vírgulas, não selecionando como um token
doc_lematizado
O output será:
'comer , dormir , caminhar , laranja , Maçãs'
Stemming é um processo semelhante, mas somente retorna o token para sua raíz ou radical.
import nltk
# stemmer
stemmer = nltk.stem.SnowballStemmer("portuguese")
texto = 'comendo, dormindo, caminhando, laranjas, maçãs'
palavras = texto.split(', ')
palavras_stemming = [stemmer.stem(palavra) for palavra in palavras]
palavras_stemming
Seu output:
['com', 'dorm', 'caminh', 'laranj', 'maçãs']
(Note que para a palavra “maçã”, não foi feito a lemmatização e a tokenização, sendo assim necessário usar outra forma de substituição, como usar REGEX num case real em que fosse necessário substituir esse token)
Remoção de Stopwords
Ainda no sentido de diminuir a dimensionalidade do vetor, podemos remover as stopwords. Stopwords são palavras que não agregam nenhum significado ou informação, não fazendo diferença quando removidas. São palavras como “as”, “os”, “uns”, “de”, “para”, etc. Assim como a tokenização de palavras, lemmatização ou stemming, as stop words podem ser removidas usando bibliotecas como NLTK ou SpaCy.
Categorizações
A categorização ou classificação de sentenças é uma das principais e primeiras aplicações de NLP. Problemas como atribuição de topic labels, predição de sentimentos, filtro de spams, identificação de idiomas, etc, podem ser classificados como problemas supervisionado de classificação de documentos.
Outra forma de categorização é a categorização de palavras. Podemos extender a ideia de categorização de documentos para os tokens, um exemplo desse tipo de categorização é o part-of-speech (POS) tagging. O POS tagging é o processo de categorizar as palavras com base na sua definição, seu contexto e a parte específica do discurso. Assim, identificando os verbos, adjetivos, substantivos, etc. POS tagging descreve as características da estrutura léxica da sentença, que pode ser usado para fazer premissas sobre a semântica. Algumas aplicações baseadas nesse processo de POS tagging é utilizado para Named Entity Recognition (NER), Speech Recognition.
import spacy
nlp = spacy.load("pt_core_news_sm")
frase = "Eu vou me tornar o Rei dos Piratas"
documento = nlp(frase)
for token in documento:
print(token.text, token.pos_)
Output:
Eu PRON
vou AUX
me PRON
tornar VERB
o DET
Rei NOUN
dos ADP
Piratas NOUN
Conclusão
Neste artigo vimos de forma terminologias, ideias e conceitos de NLP, não buscando esgotar o tema. É importante notar que NLP é um campo de pesquisa muito rico, que não utiliza redes neurais e que possuem grandes impactos em negócios e são usados em produção. As abordagens contemporâneas, baseadas em redes neurais, devem ser consideradas como um complemento, não substituição aos métodos tradicionais.
Siga o meu perfil e se inscreva para receber para acompanhar os próximos posts sobre este e outros temas.
Como Citar
Guimarães, Alysson. (Jan 2023). Conceitos de NLP. https://k3ybladewielder.medium.com/. https://k3ybladewielder.medium.com/p-3d20711d7474
ou
@miscellaneous{guimaraes2023nlpconcepts,
title = {Conceitos de NLP},
author = {Guimarães, Alysson},
journal = {https://k3ybladewielder.medium.com},
year = {2023},
month = {Jan},
url = {https://k3ybladewielder.medium.com/p-3d20711d7474}
}
Referências
Natural Language Processing with PyTorch by Delip Rao and Brian McMahan (O’Reilly). Copyright 2019, Delip Rao and Brian McMahan, 978–1–491–97823–8.
ALVES, Igor. Lemmatization vs. stemming: quando usar cada uma?. alura, 2021. Disponível em <https://www.alura.com.br/artigos/lemmatization-vs-stemming-quando-usar-cada-uma>, acesso em 02/02/2023.
DIANA, Daniela. Classificação dos Verbos. toda materia. Disponível em <https://www.todamateria.com.br/classificacao-dos-verbos/>, acesso em 02/02/2023.