Implementando TF-IDF
Deslize para mostrar o menu
Implementação Padrão
A implementação do modelo TF-IDF no sklearn é semelhante à do modelo bag of words. Para treinar este modelo em um corpus, utiliza-se a classe TfidfVectorizer, empregando o método já conhecido .fit_transform().
123456789101112131415from sklearn.feature_extraction.text import TfidfVectorizer 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.', ] # Create a default TF-IDF model vectorizer = TfidfVectorizer() # Generate a TF-IDF matrix tfidf_matrix = vectorizer.fit_transform(corpus) # Convert a sparse matrix into a DataFrame tfidf_matrix_df = pd.DataFrame(tfidf_matrix.toarray(), columns=vectorizer.get_feature_names_out()) print(tfidf_matrix_df)
Exceto pelo uso de uma classe diferente, o restante da implementação é idêntico ao modelo bag of words. Por padrão, a matriz TF-IDF é calculada com normalização L2.
Personalizando o TF-IDF
Mais uma vez, de forma semelhante ao CountVectorizer, podemos especificar os parâmetros min_df e max_df para incluir apenas os termos que ocorrem em pelo menos min_df documentos e no máximo max_df documentos. Estes podem ser definidos como números absolutos de documentos ou como uma proporção do número total de documentos.
Aqui está um exemplo em que incluímos apenas os termos que aparecem exatamente em 2 documentos, definindo tanto min_df quanto max_df como 2:
12345678910111213from sklearn.feature_extraction.text import TfidfVectorizer 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.', ] # Include terms which appear in exactly 2 documents vectorizer = TfidfVectorizer(min_df=2, max_df=2) tfidf_matrix = vectorizer.fit_transform(corpus) tfidf_matrix_df = pd.DataFrame(tfidf_matrix.toarray(), columns=vectorizer.get_feature_names_out()) print(tfidf_matrix_df)
Para especificar os n-gramas a serem incluídos em nossa matriz, podemos usar o parâmetro ngram_range. Vamos incluir apenas bigramas na matriz resultante:
12345678910111213from sklearn.feature_extraction.text import TfidfVectorizer 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.', ] # Include only bigrams vectorizer = TfidfVectorizer(ngram_range=(2, 2)) tfidf_matrix = vectorizer.fit_transform(corpus) tfidf_matrix_df = pd.DataFrame(tfidf_matrix.toarray(), columns=vectorizer.get_feature_names_out()) print(tfidf_matrix_df)
Estes são os parâmetros mais utilizados; no entanto, caso deseje explorar outros, consulte a documentação.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo