Introdução à NLP

Alysson Guimarães
9 min readJan 2, 2023

--

Mugiwaras em Wano

Natural Language Processing

Natural Language Processing (NLP) é uma disciplina que combina linguística, ciência da computação e inteligência artificial, e estuda as interações entre sistemas de computadores e a linguagem natural humana. É um conjunto de técnicas que envolvem a aplicação de métodos estatísticos com objetivo de entender textos para resolver problemas reais. Esse “entendimento” de textos vem da transformação de textos em representações computacionais, que são estruturas combinatórias discretas ou contínuas, como vetores ou tensores, gráficos e árvores.

Para aprender as representações e executar tarefas a partir de dados, como textos nesse caso, utilizamos Machine Learning. Os avanços recentes de Deep Learning se mostraram muito eficazes para várias tarefas de NLP, permitindo aprender de forma muito eficiente essas representações de dados usando abstrações como grafos computacionais e técnicas de otimização numérica.

Algumas aplicações de NLP são information retrieval, classificação de textos, geração de textos, tradução, análise de sentimento, modelagem de relacionamento de entidades, chatbots e assistentes virtuais, entre outros

Podemos classificar as abordagens de NLP em três: clássicas, modernas e contemporâneas.

A abordagem clássica utiliza é aquela em que utilizamos pipelines para processar os textos e algoritmos como random forest, naive bayes ou boosting para classificar textos usando modelos de bag-of-words (ex. one-hot encoding) e bag-of-part-speech (ex. substantivos, pronomes, verbos, adjetivos, etc).

A abordagem moderna utiliza word embeddings de textos como inputs em modelos de machine learning. Word embedding é uma técnica que captura de significado, dado o seu contexto, através de representações vetoriais utilizando algum algoritmo de machine learning.

A terceira abordagem, contemporânea, utiliza deep learning e reduz o pré-eprocessamento de documentos implementando arquiteturas de redes neurais (ex. LSTM e GRUs) em sua classificação.

O Aprendizado Supervisionado

Aprendizado Supervisionado é aprender com dados de treinamento rotulados. É o caso do aprendizado em que o “ground truth” para os alvos (o que está sendo previsto) está disponível para as observações. Em tarefas como as de tradução de textos, as observações são as frases em um idioma e o alvo (target) são as frases no idioma a ser traduzido. Já nas tarefas de classificação de textos, o target é um rótulo (label) categórico e as observações é o documento.

Framework conceitual de aprendizado a partir de dados de inputs com labels

Note que existem 6 elementos nesse framework conceitual: observações, targets, model, parameters, predictions e loss function.

As observações são denotadas usando x, e os targets usando y.

Um modelo de aprendizado supervisionado é uma representação matemática ou função que utiliza uma observação x e prediz o valor do seu target.

Os parâmetros ou pesos (weights) são denotados utilizando a letra w ou ŵ.

As predições (predictions) ou estimativas, são os valores dos tagets estimados pelo modelo dado as observações e para as predições utilizamos um acento circunflexo (“chapéu”), como no ŵ, ou seja, a predição de y é ŷ.

Loss funcion é uma função que compara o quão longe a estimativa está do target dos valores reais das observações dos dados de treino. Ou seja, dado um target e sua predição, a loss function atribui um valor real escalar chamado de perda (loss). Quanto menor a perda, melhor é o modelo em predizer o target. A loss function é denotada utilizando a letra L.

Considere um dataset D com n exemplos. Dado esse dataset, nós precisamos de uma função (modelo) f parametizado pelos pesos w. Ou seja, fazemos uma suposição sobre a estrutura de f e, dada essa estrutura, os valores aprendidos dos pesos w caracterizarão o nosso modelo. Para uma dada entrada X, o modelo prevê ŷ como alvo ŷ = f(X, w).

No aprendizado supervisionado, sabemos o valor real do target y para dada observação. O loss para uma instância então será L(y, ŷ). Assim, o aprendizado se torna o processo de achar os parâmetros w que minimizem a perda acumulada para todos os n exemplos. Para isso, geralmente é utilizado o Stochastic Gradient Descendent (SGD). Ele é um método utilizado com o objetivo de otimizar os parâmetros do algoritmo para que a taxa de assertividade do modelo aumente, ou seja o diminua o loss. Nele, subsets do dataset são selecionados aleatoriamente, e o gradiente é calculado para esse dataset.

Não é utlizado o Gradient Descendent porque estamos lidando com datasets muito grandes, implementar essa forma tradicional de gradient descendent é impossível por causa de restrições de memória, e se torna muito lento pelo custo computacional. Ele inicia com um valor para os parâmetros e vamos atualizados a cada iteração até que a função objetivo (loss function) atinga um limiar aceitável (convergence critetion).

Representando Textos

Existem diversas formas de representarmos as observações (textos) numericamente para usarmos em conjunto com algoritmos de machine learning. Algumas são através de um vetor numérico e representações simpes baseadas em contagem, como one-hot representation, TF Representation, TF-IDF representation e Target Encoding.

One-Hot Representation

Com o one-hot representation começamos com um vetor zerado, e atribuímos o valor 1 para a entrada correspondente no vetor se a palavra estiver presenta na sentença ou documento. Por exemplo:

One Piece é um ótimo anime
Nunca assisti anime
One Piece é um anime

Para tokenizar essas 3 sentenças (após tratadas, por exemplo, removendo pontuação e tornando minísculas) teremos um vocabulário com o palavras, sendo elas {anime, assisti, é, nunca, one, ótimo, piece, um}, assim, podemos representar cada palavra com um vetor one-hot.

Representação one-hot das três frases

A representação one-hot colapsada para uma observação, frase, sentença ou documento é simplesmente uma das representações one-hot de suas palavras. Usando o encode acima, a representação da frase “assisti um anime” seria uma matriz 3x8, em que as colunas são um vetor de oito dimensões.

Representação colapsada da frase “assisti um anime”

TF representation

Para representar uma frase, sentença ou documento usando TF Representation, simplesmente somamos a representação one-hot da palavra, ou seja, a frequência dela. Voltando ao exemplo das três frases do parágrafo anterior

O vetor que o representa {anime, assisti, é, nunca, one, ótimo, piece, um}, seria {3, 1, 2, 1, 2, 1, 2, 2}. Já para a sentença “one piece é ótimo”, o vetor que o representa seria {0, 0, 1, 0, 1, 1, 1, 0} e assim por diante para cada nova observação. Cada nova entrada é a contagem de vezes que a palavra aparece

from sklearn.feature_extraction.text import CountVectorizer
import seaborn as sns
import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = (20, 8)

corpus = [
'One Piece é um ótimo anime.',
'Nunca assisti anime.',
'One Piece é um anime.',
]

one_hot_vectorizer = CountVectorizer()
one_hot = one_hot_vectorizer.fit_transform(corpus).toarray()

vocab = one_hot_vectorizer.get_feature_names_out()

sns.heatmap(one_hot, annot = True, cbar = False, xticklabels = vocab,
yticklabels = ['Sentence 1', 'Sentence 2', 'Sentence 3'])
Representação colapsada das 3 frases

TF-IDF representation

O TF Representation representa as palavras as ponderando a partir da sua frequência, mas as vezes precisamos identificar a importância de outras palavras que não são tão frequêntes já que palavras que se repetem muito podem não trazer muito significado em dado contexto, para isso utilizamos o Term Frequency — Inverse Document Frequency ou TF-IDF Representation.

O “IDF” do TF-IDF penaliza tokens (palavras) mais comuns e recompensa tokens menos frequêntes na representação do vetor. O IDF(w) de um token w é definido em relação a um corpus como IDF(w) = log N / n_w. em que n_w é o número de documentos que contêm a palavra w e N é o número total de documentos. O TF-IDF é simplesmente o produto TF(w) * IDF(w). Caso exista uma palavra que é muito comum e que está presente em todos os documentos (nw = N), o IDF(w) é zero e o TF-IDF também é zero, penalizando completamente esse termo. Se um termo ocorre muito raramente, mas está presente em apenas um documento, o IDF será o valor máximo possível, logN.

from sklearn.feature_extraction.text import TfidfVectorizer

tfidf_vectorizer = TfidfVectorizer()

tfidf = tfidf_vectorizer.fit_transform(corpus).toarray()

sns.heatmap(tfidf, annot = True, cbar = False, xticklabels = vocab,
yticklabels = ['Sentence 1', 'Sentence 2', 'Sentence 3'])
Representação TF-IDF das 3 frases

Em modelos de deep learning é raro ver os inputs serem encodados usando heurísticas como TF-IDF, já que o objetivo é aprender a representação.

Word Embedding

Word embedding é um método para representar palavras em um espaço de vetores de alta dimensão. Isso permite que as palavras sejam usadas como entrada em modelos de aprendizado de máquina, como redes neurais. Resumidamente, as palavras são convertidas em números e esses números são usados ​​para representar a palavra em um espaço multidimensional, onde as palavras similares ficam próximas umas das outras. Isso permite que os modelos de aprendizado de máquina aprendam a compreender o significado das palavras e como elas estão relacionadas.

Word embedding entende o contexto das palavras através de métodos de aprendizado supervisionado. Isso significa que o modelo é alimentado com grandes conjuntos de dados de texto rotulados, como notícias, livros ou conversas, e aprende a associar cada palavra a um vetor de números baseado nas palavras que aparecem ao seu redor. Os modelos de embedding como o word2vec e GloVe usam diferentes técnicas para aprender essas associações, mas a ideia básica é que as palavras que aparecem frequentemente juntas em um contexto similar terão vetores similares. Por exemplo, as palavras “gato” e “gata” terão vetores similares, pois são palavras relacionadas e tendem a aparecer juntas em contextos semelhantes.

Além disso, alguns modelos de embedding como BERT, GPT-2, e ELMO usam a técnica de aprendizado não supervisionado e baseado em contexto para compreender o contexto das palavras, esses modelos são chamados de contextual embedding. Eles se baseiam em grandes conjuntos de dados não rotulados para prever a próxima palavra em uma sentença ou frase, e usam essa previsão para ajustar os vetores de embedding.

Conclusão

Neste artigo vimos de forma introdutória o que é processamento de lingaugem natural (NLP), como o texto processado é representado computacionalmente para que seja possível extrair informações dele e analisa-las. Assim como algumas das formas utilizadas para criar essas representações, como one-hot encoding, TF e TF-IDF. NLP é um campo em amplo crescimento e com diversas aplicações que podem ir desde análise de sentimento em reviews de compras a análise de gravidade de ocorrencias de seguros.

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). Introdução à NLP. https://k3ybladewielder.medium.com/. https://k3ybladewielder.medium.com/p-4d7d98b9a36a

ou

@miscellaneous{guimaraes2022intronlp,
title = {Introdução à NLP},
author = {Guimarães, Alysson},
journal = {https://k3ybladewielder.medium.com},
year = {2023},
month = {Jan},
url = {https://k3ybladewielder.medium.com/p-4d7d98b9a36a}
}

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.

Ferrario, Andrea and Naegelin, Mara, The Art of Natural Language Processing: Classical, Modern and Contemporary Approaches to Text Document Classification (March 1, 2020). Available at SSRN: https://ssrn.com/abstract=3547887

FONSECA, Camilla. Word Embedding: fazendo o computador entender o significado das palavras. Turing Talks. 2022. Disponível em <https://medium.com/turing-talks/p-92fe22745057>. Acesso em 22/12/2022.

HERMUCHE, Anwar. Gradiente Descendente — Uma breve introdução. Anwar Martins Hermuche. Disponível em <https://medium.com/@anwarhermuche/p-3eb13b152a51>. Acesso em 22/12/2022

--

--

Alysson Guimarães

Data Scientist. MBA Competitive Intelligence, Bachelor of Business Administration.