Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Saco de Palavras | Modelos Básicos de Texto
Introdução ao PLN

bookSaco de Palavras

Compreendendo o Modelo BoW

O modelo bag of words (BoW) representa documentos como vetores, onde cada dimensão corresponde a uma palavra única. Cada dimensão pode representar a presença de uma palavra no documento (1 se presente, 0 se ausente) ou sua frequência (contagem de palavras). Portanto, modelos BoW podem ser binários ou baseados em frequência.

Veja como a mesma frase (documento) é representada por cada tipo:

Um modelo binário representa este documento como o vetor [1, 1, 1], enquanto o modelo baseado em frequência o representa como [2, 1, 2], levando em consideração a frequência das palavras.

Implementação do BoW

A implementação do modelo BoW é um processo direto, especialmente com o auxílio da biblioteca sklearn (scikit-learn) e sua classe CountVectorizer.

Aqui está uma implementação do modelo binário bag of words:

12345678910111213
from sklearn.feature_extraction.text import CountVectorizer corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] # Create a binary Bag of Words model vectorizer = CountVectorizer(binary=True) # Generate a BoW matrix bow_matrix = vectorizer.fit_transform(corpus) # Convert a sparse matrix into a dense array print(bow_matrix.toarray())
copy

Cada linha da matriz corresponde a um documento, e cada coluna a um token (palavra). Para representar visualmente, convertemos essa matriz esparsa em um array 2D denso utilizando o método .toarray().

Note
Estude Mais

Uma matriz esparsa é uma matriz na qual a maioria dos elementos é zero. Ela é utilizada para representar e processar dados de forma eficiente quando há um grande volume de valores zero, economizando memória e recursos computacionais ao armazenar apenas os elementos diferentes de zero.

Para criar um modelo de bag of words baseado em frequência, basta remover o parâmetro binary=True, pois o valor padrão dele é False:

1234567891011
from sklearn.feature_extraction.text import CountVectorizer corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] # Create a frequency-based Bag of Words model vectorizer = CountVectorizer() bow_matrix = vectorizer.fit_transform(corpus) print(bow_matrix.toarray())
copy

Convertendo a Matriz para um DataFrame

Pode ser bastante conveniente converter a matriz resultante do bag of words em um DataFrame do pandas. Além disso, a instância do CountVectorizer oferece o método get_feature_names_out(), que recupera um array de palavras únicas (nomes das features) utilizadas no modelo. Esses nomes de features podem ser usados como colunas do DataFrame:

12345678910111213
from sklearn.feature_extraction.text import CountVectorizer import pandas as pd corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] vectorizer = CountVectorizer() bow_matrix = vectorizer.fit_transform(corpus) # Convert a sparse matrix to a DataFrame bow_df = pd.DataFrame(bow_matrix.toarray(), columns=vectorizer.get_feature_names_out()) print(bow_df)
copy

Com essa representação, é possível acessar facilmente não apenas o vetor de um documento específico, mas também o vetor de uma palavra específica:

12345678910111213
from sklearn.feature_extraction.text import CountVectorizer import pandas as pd corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] vectorizer = CountVectorizer() bow_matrix = vectorizer.fit_transform(corpus) bow_df = pd.DataFrame(bow_matrix.toarray(), columns=vectorizer.get_feature_names_out()) # Print the vector for 'global' as a NumPy array print(f"Vector for the word 'global': {bow_df['global'].values}")
copy

Como cada palavra única corresponde a uma coluna, acessar um vetor de palavras é tão simples quanto acessar uma coluna no DataFrame especificando a palavra (por exemplo, 'global'). Também utilizamos o atributo values para obter um array em vez de uma Series como resultado.

question-icon

Dada uma matriz BoW, o que representam os diferentes componentes dessa matriz?

Rows:
Columns:

A particular element of the matrix:

Clique ou arraste solte itens e preencha os espaços

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 3

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Awesome!

Completion rate improved to 3.45

bookSaco de Palavras

Deslize para mostrar o menu

Compreendendo o Modelo BoW

O modelo bag of words (BoW) representa documentos como vetores, onde cada dimensão corresponde a uma palavra única. Cada dimensão pode representar a presença de uma palavra no documento (1 se presente, 0 se ausente) ou sua frequência (contagem de palavras). Portanto, modelos BoW podem ser binários ou baseados em frequência.

Veja como a mesma frase (documento) é representada por cada tipo:

Um modelo binário representa este documento como o vetor [1, 1, 1], enquanto o modelo baseado em frequência o representa como [2, 1, 2], levando em consideração a frequência das palavras.

Implementação do BoW

A implementação do modelo BoW é um processo direto, especialmente com o auxílio da biblioteca sklearn (scikit-learn) e sua classe CountVectorizer.

Aqui está uma implementação do modelo binário bag of words:

12345678910111213
from sklearn.feature_extraction.text import CountVectorizer corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] # Create a binary Bag of Words model vectorizer = CountVectorizer(binary=True) # Generate a BoW matrix bow_matrix = vectorizer.fit_transform(corpus) # Convert a sparse matrix into a dense array print(bow_matrix.toarray())
copy

Cada linha da matriz corresponde a um documento, e cada coluna a um token (palavra). Para representar visualmente, convertemos essa matriz esparsa em um array 2D denso utilizando o método .toarray().

Note
Estude Mais

Uma matriz esparsa é uma matriz na qual a maioria dos elementos é zero. Ela é utilizada para representar e processar dados de forma eficiente quando há um grande volume de valores zero, economizando memória e recursos computacionais ao armazenar apenas os elementos diferentes de zero.

Para criar um modelo de bag of words baseado em frequência, basta remover o parâmetro binary=True, pois o valor padrão dele é False:

1234567891011
from sklearn.feature_extraction.text import CountVectorizer corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] # Create a frequency-based Bag of Words model vectorizer = CountVectorizer() bow_matrix = vectorizer.fit_transform(corpus) print(bow_matrix.toarray())
copy

Convertendo a Matriz para um DataFrame

Pode ser bastante conveniente converter a matriz resultante do bag of words em um DataFrame do pandas. Além disso, a instância do CountVectorizer oferece o método get_feature_names_out(), que recupera um array de palavras únicas (nomes das features) utilizadas no modelo. Esses nomes de features podem ser usados como colunas do DataFrame:

12345678910111213
from sklearn.feature_extraction.text import CountVectorizer import pandas as pd corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] vectorizer = CountVectorizer() bow_matrix = vectorizer.fit_transform(corpus) # Convert a sparse matrix to a DataFrame bow_df = pd.DataFrame(bow_matrix.toarray(), columns=vectorizer.get_feature_names_out()) print(bow_df)
copy

Com essa representação, é possível acessar facilmente não apenas o vetor de um documento específico, mas também o vetor de uma palavra específica:

12345678910111213
from sklearn.feature_extraction.text import CountVectorizer import pandas as pd corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] vectorizer = CountVectorizer() bow_matrix = vectorizer.fit_transform(corpus) bow_df = pd.DataFrame(bow_matrix.toarray(), columns=vectorizer.get_feature_names_out()) # Print the vector for 'global' as a NumPy array print(f"Vector for the word 'global': {bow_df['global'].values}")
copy

Como cada palavra única corresponde a uma coluna, acessar um vetor de palavras é tão simples quanto acessar uma coluna no DataFrame especificando a palavra (por exemplo, 'global'). Também utilizamos o atributo values para obter um array em vez de uma Series como resultado.

question-icon

Dada uma matriz BoW, o que representam os diferentes componentes dessa matriz?

Rows:
Columns:

A particular element of the matrix:

Clique ou arraste solte itens e preencha os espaços

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 3
some-alt