4 Vetorização de Texto
Neste capítulo, exploraremos as diferentes técnicas de vetorização de texto, que são essenciais para transformar dados textuais em uma forma numérica que pode ser utilizada por algoritmos de aprendizado de máquina. Abordaremos o Bag of Words (BoW), TF-IDF e Word Embeddings, com exemplos práticos em Python.
4.1 Bag of Words (BoW)
O Bag of Words (BoW) é uma das técnicas mais simples de vetorização de texto. Ele representa um texto como um conjunto de palavras, desconsiderando a ordem das palavras, mas mantendo a multiplicidade. Ele simplifica a representação textual para que possa ser utilizada em tarefas de aprendizado de máquina. Imagine um texto como um saco onde jogamos todas as palavras, desconsiderando a ordem em que elas aparecem e contando apenas a frequência com que cada uma delas ocorre.
Como funciona:
Tokenização: O texto é dividido em unidades individuais, geralmente palavras.
Criação do Vocabulário: É criado um conjunto de todas as palavras únicas presentes em um corpus de textos.
Representação Vetorial: Cada documento é representado como um vetor numérico, onde cada posição corresponde a uma palavra do vocabulário e o valor numérico indica a frequência dessa palavra no documento.
Por exemplo, considere dois documentos:
Documento 1: "O gato subiu na árvore."
Documento 2: "O cachorro latindo para o gato."
O vocabulário seria: o, gato, subiu, na, árvore, cachorro, latindo, para. A representação vetorial dos documentos poderia ser:
Documento 1: [1, 2, 1, 1, 1, 0, 0, 0]
Documento 2: [1, 1, 0, 0, 0, 1, 1, 1]
O Bag-of-Words é fácil de implementar e entender; permite a aplicação de algoritmos de aprendizado de máquina em grandes volumes de texto; além disso, pode ser utilizado em diversas tarefas de PLN, como classificação de textos, clustering e recuperação de informação.
Algumas Limitações é que ele ignora a ordem das palavras e a estrutura gramatical, o que pode levar à perda de significado; além disso existe uma dificuldade em lidar com sinônimos e palavras ambíguas, pois, palavras com significados semelhantes podem ser tratadas como diferentes e palavras com múltiplos significados podem causar ambiguidade.
Algumas aplicações são: a classificação de textos para identificar a categoria de um texto (por exemplo, spam ou não spam); a clusterização, ou seja, agrupar documentos semelhantes; outra é a recuperação de informação para encontrar documentos relevantes em resposta a uma consulta; além disso, a análise de sentimentos para determinar a polaridade de um texto (positivo, negativo ou neutro).
4.1.1 Exemplo em Python: Bag of Words
Código Python
from sklearn.feature_extraction.text import CountVectorizer
# Exemplo de documentos
documentos = [
"existe gato laranja",
"existe gato preto",
"também existe gato branco"
]
# Criação do modelo BoW
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(documentos)
# Exibição da matriz BoW
print("Vetor de características:\n", vectorizer.
get_feature_names_out())
print("Matriz BoW:\n", X.toarray())Saída do console
Vetor de características:
['branco' 'existe' 'gato' 'laranja' 'preto' 'também']
Matriz BoW:
[[0 1 1 1 0 0]
[0 1 1 0 1 0]
[1 1 1 0 0 1]]Este código gera uma matriz BoW, onde cada linha representa um documento e cada coluna representa uma palavra única do vocabulário.
4.2 TF-IDF
O TF-IDF é uma técnica de vetorização que leva em consideração a frequência das palavras em um documento em relação a um corpus de documentos. Ele pondera as palavras de acordo com sua importância relativa, diminuindo o peso das palavras comuns e aumentando o peso das palavras menos frequentes. Em termos simples, o TF-IDF nos ajuda a entender quais palavras são mais relevantes e distintivas em um texto específico, comparando-o com outros textos. Utilizando essa técnica, é possível extrair uma métrica estatística para avaliar a importância de uma palavra em um documento em relação a um conjunto de documentos. permitindo assim analisar e entender o conteúdo de grandes volumes de texto.
TF (Term Frequency): Mede a frequência com que uma palavra aparece em um documento. Quanto mais vezes uma palavra aparece, maior é seu TF. IDF (Inverse Document Frequency): Mede a raridade de uma palavra em um conjunto de documentos. Palavras que aparecem em muitos documentos têm um IDF baixo, enquanto palavras que aparecem em poucos documentos têm um IDF alto.
O valor TF-IDF é o produto do TF e do IDF:
TF-IDF(t, d) = TF(t, d) * IDF(t)
Onde:
‘t’ é um termo (palavra)
‘d’ é um documento
Por exemplo, imagine um conjunto de documentos sobre carros. A palavra "carro" provavelmente terá um TF alto em todos os documentos, mas um IDF baixo, pois é muito comum. Já a palavra "supercarro" pode ter um TF baixo em muitos documentos, mas um IDF alto, pois é menos comum. O TF-IDF da palavra "supercarro" será maior do que o da palavra "carro", indicando que "supercarro" é mais distintiva e relevante para identificar documentos sobre carros esportivos.
Alguns exemplos do uso de TF-IDF: recuperação de informação, para ranquear documentos em resposta a uma consulta de pesquisa; mineração de texto, para identificar tópicos e padrões em grandes conjuntos de documentos. E sistemas de recomendação, para sugerir itens relevantes aos usuários. Ao combinar informações sobre a frequência de palavras em um documento e sua raridade em um conjunto de documentos, o TF-IDF nos permite identificar as palavras mais importantes e relevantes para um determinado contexto.
4.2.1 Exemplo em Python: TF-IDF
Código Python
from sklearn.feature_extraction.text import TfidfVectorizer
# Exemplo de documentos
documentos = [
"existe gato laranja",
"existe gato preto",
"também existe gato branco"
]
# Criação do modelo TF-IDF
tfidf_vectorizer = TfidfVectorizer()
X_tfidf = tfidf_vectorizer.fit_transform(documentos)
# Exibição da matriz TF-IDF
print("Vetor de características:\n", tfidf_vectorizer.get_feature_names_out())
print("Matriz TF-IDF:\n", X_tfidf.toarray())Código Python
Vetor de características:
['branco' 'existe' 'gato' 'laranja' 'preto' 'também']
Matriz TF-IDF:
[[0. 0.45329466 0.45329466 0.76749457 0. 0. ]
[0. 0.45329466 0.45329466 0. 0.76749457 0. ]
[0.6088451 0.35959372 0.35959372 0. 0. 0.6088451 ]]Este código gera uma matriz TF-IDF, onde cada valor representa a importância de uma palavra em um documento em relação ao corpus.
4.3 Word Embeddings
Os Word Embeddings são representações densas de palavras em um espaço vetorial, que capturam as relações semânticas entre as palavras. Técnicas como Word2Vec, GloVe e FastText são amplamente utilizadas para gerar embeddings que refletem o contexto em que as palavras aparecem.
4.3.1 Exemplo em Python: Word2Vec
Código Python
from gensim.models import Word2Vec
# Exemplo de corpus
corpus = [
["existe", "gato", "laranja"],
["existe", "gato", "preto"],
["também", "existe", "gato", "branco"]
]
# Treinamento do modelo Word2Vec
model = Word2Vec(sentences=corpus, vector_size=100, window=5, min_count=1, workers=4)
# Obtenção do embedding para uma palavra
print("Embedding para 'gato':\n", model.wv["gato"])
# Similaridade entre palavras
print("Similaridade entre 'gato' e 'laranja':", model.wv.
similarity("gato", "laranja"))Código Python
Embedding para 'gato':
[-5.3622725e-04 2.3643136e-04 5.1033497e-03 9.0092728e-03
...
-8.9173904e-03 -7.0415605e-03 9.0145587e-04 6.3925339e-03]
Similaridade entre 'gato' e 'laranja': -0.05987629Este exemplo treina um modelo Word2Vec e calcula a similaridade entre os vetores de duas palavras.
Em resumo, a vetorização de texto é um passo crucial na preparação de dados para modelos de aprendizado de máquina. Técnicas como BoW, TF-IDF e Word Embeddings fornecem maneiras eficazes de transformar texto em uma forma que possa ser utilizada para diversas tarefas de processamento de linguagem natural.
Exercícios
Versão on-line destes exercícios
https://forms.gle/euESDhq7hYWoCSGSA
Qual é a principal característica do modelo Bag of Words (BoW)?
Considera a ordem das palavras no texto.
Ignora a ordem das palavras, mas mantém a contagem de frequência das palavras.
Gera representações vetoriais densas das palavras.
Utiliza embeddings contextuais para representar palavras.
O que o termo TF-IDF representa?
Transform Frequency-Inverse Document Frequency.
Term Frequency-Inverse Document Frequency.
Term Frequency-Indexed Document Frequency.
Transform Frequency-Indexed Document Frequency.
Qual é uma vantagem dos Word Embeddings em relação ao modelo Bag of Words?
Word Embeddings capturam a ordem das palavras no texto.
Word Embeddings geram vetores esparsos de alta dimensionalidade.
Word Embeddings capturam relações semânticas entre palavras.
Word Embeddings ignoram a frequência das palavras no texto.
Qual biblioteca Python tem uma implementação do TF-IDF?
NumPy.
Pandas.
Scikit-learn.
RE.
Qual técnica é utilizada para criar representações vetoriais densas que capturam o significado semântico das palavras?
Bag of Words.
TF-IDF.
Word Embeddings.
N-grams.