O que é Mineração de Texto?
“O processo de derivar informações de alta qualidade do texto.”
Objetivo Central:
Transformar dados não estruturados (texto livre) em dados estruturados (acionáveis) através de:
- Processamento de Linguagem Natural (NLP).
- Métodos Analíticos/Estatísticos.
Pré-processamento do texto
Etapas de Limpeza
Transformações para reduzir o ruído e normalizar o vocabulário.
1. Padronização
- Lowercasing: converter para minúsculas.
- Normalização: remover acentos (ASCII) e corrigir alongamentos (ex: “muitoooo”).
- Expansão: tratar contrações (“tô” \(\rightarrow\) “estou”).
2. Remoção de Ruído
- Elementos Web: HTML tags, URLs, e-mails.
- Símbolos: Emojis, hashtags (#), pontuação.
- Numerais: remover ou substituir por token (ex: “3” \(\rightarrow\) “três”).
- Espaços: remover espaços duplos/finais.
Exemplo de Limpeza
Visualizando a transformação do dado bruto para o dado limpo:
“Olá, meu nome é Letícia e eu aaaamo um chocolatinho. :)”
\(\huge \downarrow\) Aplicação de filtros (Regex, Lowercase, ASCII)
“ola meu nome e leticia e eu amo um chocolatinho”
Nota: Observe a remoção do emoji, acentos e a correção de “aaaamo”.
Tokenização
- Definição: Processo de segmentar o texto em unidades menores e significativas, chamadas tokens.
- O que são Tokens?: Geralmente palavras, mas podem ser números, sinais de pontuação ou n-gramas.
- Como funciona: Algoritmos identificam fronteiras usando delimitadores (espaços em branco, pontuação, quebras de linha).
Essencialmente: transforma uma String única em uma Lista de strings.
Tokenização na Prática
Visualizando a mudança de estrutura de dados:
Entrada (Texto Processado)
“ola meu nome e leticia e eu amo um chocolatinho”
\(\huge \downarrow\) Split por espaço
Saída (Lista de Tokens)
["ola", "meu", "nome", "e", "leticia", "e", "eu", "amo", "um", "chocolatinho"]
Remoção de Stopwords
- Baixa Densidade Semântica: Palavras que servem para a estrutura gramatical (conectivos), mas carregam pouco significado do tópico central.
- Redução de Dimensionalidade: Ao remover essas palavras, reduzimos o tamanho do vocabulário e o custo computacional.
- Categorias Comuns:
- Artigos (o, a, um);
- Preposições (de, para, com);
- Conjunções (e, mas, ou);
- Pronomes (eu, ele, meu).
Stopwords na Prática
O filtro mantém apenas os substantivos, verbos e adjetivos relevantes.
Lista de Tokens (Entrada)
Lista Final (Saída)
["ola", "nome", "leticia", "amo", "chocolatinho"]
Normalização: Stemming vs. Lematização
Reduzir variações para uma forma base comum.
Stemming
- Método: Heurístico (corta sufixos).
- Resultado: Radical (Stem).
- Pros/Contras: Rápido, mas pode gerar palavras inexistentes.
- Ex:
Amigo, Amiga \(\rightarrow\) Amig
Lematização
- Método: Morfológico (dicionário).
- Resultado: Lema (forma canônica).
- Pros/Contras: Preciso, mas computacionalmente custoso.
- Ex:
Sou, É, Somos \(\rightarrow\) Ser
Erros de Stemming
O algoritmo é agressivo demais ou passivo demais?
- Overstemming (Cortou demais):
- Ocorre quando palavras com significados distintos são reduzidas ao mesmo radical.
- Ex: “Universidade” e “Universo” \(\rightarrow\)
Univers (Perde-se a distinção semântica).
- Understemming (Cortou de menos):
- Ocorre quando palavras que deveriam ser agrupadas permanecem distintas.
- Ex: “Datado” e “Dados” \(\rightarrow\)
Datad, Dad (Não agrupa o conceito).
Stemming na Prática
Observe que os radicais não precisam ser palavras válidas no dicionário.
Entrada: > ["ola", "nome", "leticia", "amo", "chocolatinho"]
\(\huge \downarrow\)
Saída: "ola" "nom" "letici" "amo" "chocolatinh"
One-hot Encoding
Representação binária onde o tamanho do vetor é igual ao tamanho do vocabulário (\(|V|\)).
Exemplo: Vocabulário de 5 palavras.
| ola |
1 |
0 |
0 |
0 |
0 |
| nome |
0 |
1 |
0 |
0 |
0 |
| leticia |
0 |
0 |
1 |
0 |
0 |
| amo |
0 |
0 |
0 |
1 |
0 |
| choco… |
0 |
0 |
0 |
0 |
1 |
Avaliação do One-hot Encoding
- Simplicidade: Intuitivo e fácil de implementar.
- Sem viés: Não assume relações prévias entre palavras.
- Alta Dimensionalidade: Se o vocabulário tiver 10.000 palavras, cada vetor terá tamanho 10.000.
- Esparsidade: A vasta maioria dos valores é zero (desperdício de memória).
- Semântica (Ortogonalidade):
- vetor(“bom”) \(\cdot\) vetor(“ótimo”) = 0.
- O modelo não aprende que são sinônimos.
Bag of Words (BoW)
“Imagine jogar todas as palavras de um texto em um saco e misturá-las. Sabemos quais palavras estão lá e quantas vezes aparecem, mas perdemos a ordem original.”
- Conceito: Representação simplificada baseada na frequência dos termos.
- Estrutura: O texto se torna um vetor de contagens.
- Perda de Contexto: A gramática e a ordem das palavras são descartadas (daí o nome “saco de palavras”).
BoW: Construção da Matriz
Corpus de Exemplo: 1. “the cat sat” 2. “the cat sat in the hat” 3. “the cat with the hat”
Vocabulário (\(V\)): {cat, hat, in, sat, the, with}
| 1 |
1 |
0 |
0 |
1 |
1 |
0 |
| 2 |
1 |
1 |
1 |
1 |
2 |
0 |
| 3 |
1 |
1 |
0 |
0 |
2 |
1 |
Limitação Crítica: Perda de Contexto
Como o BoW ignora a ordem, frases com significados opostos podem ter vetores idênticos.
Frase A: > “O filme não é bom, é ruim.”
Frase B: > “O filme não é ruim, é bom.”
Para o modelo, Frase A e Frase B são exatamente a mesma coisa.
TF-IDF: Definição
Equilibra a frequência local com a raridade global.
\[TF\text{-}IDF = TF(t,d) \times IDF(t)\]
1. Term Frequency (TF)
Importância Local
\[TF = \frac{\text{Qtd do termo } t \text{ no doc}}{\text{Total de termos no doc}}\]
“O quanto a palavra aparece neste texto?”
2. Inverse Doc Frequency (IDF)
Penalidade Global
\[IDF = \log(\frac{N}{n_t})\]
“O termo é raro no corpus inteiro?” \(N\): Total de documentos | \(n_t\): Docs com o termo
Exemplo de Cálculo
Calculamos o valor TF-IDF de um termo como = TF * IDF
TF(‘beautiful’, Documento 1) = 2/10, IDF(‘beautiful’) = log(2/2) = 0
TF(‘day’, Documento 1) = 5/10, IDF(‘day’) = log(2/1) = 0.30
TF-IDF(‘beautiful’, Documento 1) = (2/10)*0 = 0
TF-IDF(‘day’, Documento 1) = (5/10)*0.30 = 0.15
Resultado e Interpretação
Aplicando a fórmula \(TF \times IDF\) para o Documento 1:
- Termo “beautiful”:
- \(TF = 2/10 = 0.2\)
- \(IDF = 0\)
- Score Final: 0 \(\rightarrow\) Irrelevante (muito comum).
- Termo “day”:
- \(TF = 5/10 = 0.5\)
- \(IDF = 0.30\)
- Score Final: 0.15 \(\rightarrow\) Relevante (frequente e distintivo).
O TF-IDF anulou a palavra que aparece em todos os documentos (“beautiful”) e destacou a palavra específica deste documento (“day”).
Word Embeddings: O Conceito
“You shall know a word by the company it keeps.” — J.R. Firth (1957)
- Hipótese Distribucional: Palavras que aparecem nos mesmos contextos tendem a ter significados semelhantes.
- Representação: Mapeamento de palavras para vetores de números reais (\(\mathbb{R}^d\)).
- Espaço Latente: As dimensões capturam características semânticas e sintáticas automaticamente.
A Intuição: Dimensões Semânticas
Imagine que cada dimensão do vetor capture um conceito abstrato.
| Rei |
0.99 |
0.99 |
0.70 |
| Rainha |
0.99 |
0.05 |
0.70 |
| Mulher |
0.02 |
0.01 |
0.60 |
| Princesa |
0.99 |
0.02 |
0.20 |
Álgebra Vetorial e Analogias
Como os vetores preservam relações semânticas, podemos realizar operações aritméticas.
\[\vec{v}_{Rei} - \vec{v}_{Homem} + \vec{v}_{Mulher} \approx \vec{v}_{Rainha}\]
Se subtrairmos o vetor de “Masculinidade” da palavra “Rei” e adicionarmos “Feminilidade”, chegamos ao ponto no espaço próximo a “Rainha”.
Embeddings vs. Bag of Words
Por que usar vetores densos?
Bag of Words / TF-IDF
- Esparsos: Muitos zeros.
- Alta Dimensionalidade: Tamanho do vocabulário (ex: 20.000).
- Hardcoded: Baseado em contagem exata.
- Semântica: Ignora similaridade.
Word Embeddings
- Densos: Valores contínuos.
- Baixa Dimensionalidade: Fixo (ex: 50, 300, 768).
- Aprendidos: Treinamento (Redes Neurais).
- Semântica: Captura contexto e sinônimos.
Como os Embeddings são Treinados?
“Não rotulamos os dados manualmente. O próprio texto é o rótulo.”
- Abordagem: Aprendizado por Redes Neurais (Geralmente “Shallow” - rasas).
- O Hiperparâmetro \(d\):
- Nós definimos o tamanho do vetor (ex: \(d=300\)).
- Trade-off: Mais dimensões capturam mais nuances, mas exigem mais dados e poder computacional.
- O Resultado: Os pesos da camada oculta da rede neural se tornam os nossos vetores (embeddings).
Word2Vec (Mikolov et al., 2013)
Uma família de arquiteturas eficientes para estimar vetores de palavras.
- Inovação: Transforma texto não estruturado em um espaço vetorial denso.
- Propriedade: Palavras que compartilham contextos similares ficam próximas no espaço geométrico.
- Vantagem: Treinamento muito mais rápido que abordagens anteriores (Redes Neurais Profundas), permitindo uso de corpora massivos.
Arquiteturas do Word2Vec
Como a rede formula o problema de predição?
1. CBOW
(Continuous Bag of Words)
- Lógica: Usa o contexto para prever a palavra central.
- Input:
[O, gato, ___, no, tapete]
- Target:
sentou
- Uso: Mais rápido, melhor para palavras frequentes.
2. Skip-Gram
(O Inverso)
- Lógica: Usa a palavra central para prever o contexto.
- Input:
sentou
- Target:
[O, gato, no, tapete]
- Uso: Mais lento, mas funciona melhor para palavras raras e corpora pequenos.
O “Segredo” da Camada Oculta
Onde estão os embeddings na rede neural?
- Ao contrário de uma classificação tradicional, não nos importamos com a saída da rede.
- O objetivo é treinar a rede e depois descartar a saída.
- O Embedding é a Matriz de Pesos (\(W\)) da camada oculta.
Se temos um vocabulário de 10.000 palavras e queremos 300 dimensões, a matriz de pesos terá tamanho \(10.000 \times 300\). Cada linha é o vetor de uma palavra.
CBOW
Este modelo é utilizado para descobrir a palavra central de uma sentença, baseado nas palavras que a cercam. Vamos imaginar que temos a frase: A dog is chasing a person e queremos descobrir a palavra chasing.
A dog is ____________ a person.
CBOW
Para este exemplo, utilizaremos uma janela de contexto de tamanho 2 para criar o conjunto de treinamento, o que significa que “olharemos” apenas para duas palavras anteriores e duas após a palavra alvo.
Com estes dados, pretendemos “ensinar” ao modelo a predizer uma palavra central, baseada em palavras de contexto.
CBOW
- O modelo CBOW é formado por uma camada de entrada, que receberá os dados pré-processados, e em sua saída terá uma palavra que representa a maior probabilidade para a palavra alvo.
- Criado o conjunto de treinamento, a próxima etapa é treinar uma rede neural com uma camada escondida para aprender a matriz embedding (\(E_{v \times d}\)), em que v é o tamanho do vocabulário (número de palavras distintas) e d é o número de dimensões.
CBOW
CBOW
Supondo d = 3:
Cada w representa um peso que será obtido a partir do treinamento da rede neural.
CBOW
- Camada de entrada: cada palavra é representada pelo vetor one-hot, sendo as entradas as palavras de contexto preparadas na etapa anterior. Cada palavra (vetor) será multiplicado pela matriz embedding, cujos pesos foram atribuídos inicialmente de forma aleatória.
CBOW
CBOW
- Camada escondida: todos os vetores embedded são somados gerando um único vetor na camada escondida. Este vetor será multiplicado por outra matriz e o resultado será alimentado a uma função softmax para obter a probabilidade.
CBOW
- Camada escondida: o resultado será um vetor \(y_{1 \times v}\) em que cada valor apresenta a probabilidade da palavra naquela posição ser a palavra central. Este vetor de saída é comparado ao vetor real (palavra que está sendo buscada) e o algoritmo de backpropagation é usado para ajustar os pesos da matriz embedding.
SKIP-GRAM
Este é o segundo modelo utilizado no word2vec, porém aqui ao invés de tentarmos descobrir a palavra central, faremos o processo inverso; da palavra central, tentaremos descobrir as palavras de contexto.
Dada a palavra chasing, qual a probabilidade das palavras a, dog, e person ocorrerem ao redor?
SKIP-GRAM
SKIP-GRAM
- Camada de entrada: contém apenas o vetor one-hot da palavra central. Este vetor tem dimensão igual ao número de palavras do vocabulário. Este vetor será multiplicado pela matriz embedding e encaminhado à camada escondida.
- Camada escondida: o vetor é multiplicado por outra matriz embedding e a função softmax é aplicada.
- Camada de saída: temos diferentes probabilidades, cada uma contendo palavras de contexto possíveis.
SKIP-GRAM
A Limitação do Word2Vec: Estático
O Word2Vec gera um dicionário fixo. A palavra “banco” tem sempre o mesmo vetor, não importa a frase.
Frase A: > “Sentei no banco da praça.” (Objeto físico)
Frase B: > “Fui ao banco sacar dinheiro.” (Instituição financeira)
No Word2Vec: \[Vetor(\text{banco}_A) == Vetor(\text{banco}_B)\]
O modelo “confunde” os significados, pois mistura todos os contextos em um único vetor médio.
Embeddings: Estáticos vs. Contextuais
Comparando como os modelos “enxergam” a palavra Manga.
| “Chupei uma manga doce.” |
[0.2, 0.8, ...] |
[0.9, 0.1, ...] |
| “A manga da camisa rasgou.” |
[0.2, 0.8, ...] |
[-0.5, 0.3, ...] |
| “A produção de manga caiu.” |
[0.2, 0.8, ...] |
[0.8, 0.2, ...] |
No BERT, a mesma palavra gera vetores diferentes. Ele entende que “manga” (fruta) está matematicamente distante de “manga” (roupa).
Treinamento: Masked Language Model (MLM)
O BERT não tenta prever a próxima palavra (como no autocompletar do celular). Ele tenta preencher lacunas no meio da frase.
A Tarefa: 1. Ocultamos aleatoriamente 15% das palavras ([MASK]). 2. O modelo deve adivinhar a palavra escondida com base em todo o resto.
“O [MASK] latiu para o carteiro.”
- O modelo aprende que “cachorro” cabe ali não apenas porque vem depois de “O”, mas porque “latiu” e “carteiro” aparecem na frase.
- Isso força o aprendizado de sintaxe e semântica profunda.
Treinamento: Next Sentence Prediction (NSP)
O BERT também aprende a entender se uma frase faz sentido logo após a outra.
Entrada: Par de frases (A, B). Pergunta: B é a continuação lógica de A?
Par Negativo (NotNext):
- B: “Pinguins voam baixo.”
Isso é fundamental para tarefas como Question Answering (Perguntas e Respostas).
Referências Bibliográficas
- JURAFSKY, D.; MARTIN, J. H. Speech and Language Processing. 3. ed. draft. Stanford University, 2023.
- SILGE, J.; ROBINSON, D. Text Mining with R: A Tidy Approach. O’Reilly Media, 2017.
- MIKOLOV, T. et al. Efficient Estimation of Word Representations in Vector Space (Word2Vec). arXiv:1301.3781, 2013.
- DEVLIN, J. et al. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. arXiv:1810.04805, 2018.
- VASWANI, A. et al. Attention Is All You Need. NeurIPS, 2017.