web-dev-qa-db-fra.com

TFIDF pour les grands ensembles de données

J'ai un corpus qui contient environ 8 millions d'articles de presse, j'ai besoin d'en obtenir la représentation TFIDF sous forme de matrice clairsemée. J'ai pu le faire en utilisant scikit-learn pour un nombre d'échantillons relativement inférieur, mais je pense qu'il ne peut pas être utilisé pour un ensemble de données aussi énorme car il charge d'abord la matrice d'entrée en mémoire et c'est un processus coûteux.

Quelqu'un sait-il quelle serait la meilleure façon d'extraire les vecteurs TFIDF pour les grands ensembles de données?

32
apurva.nandan

Gensim a un modèle tf-idf efficace et n'a pas besoin de tout avoir en mémoire à la fois.

Votre corpus doit simplement être un itérable, il n'a donc pas besoin d'avoir la totalité du corpus en mémoire à la fois.

Le script make_wiki parcourt Wikipedia sur environ 50m sur un ordinateur portable selon les commentaires.

Je pense que vous pouvez utiliser un HashingVectorizer pour obtenir un _ csr_matrix à partir de vos données texte, puis utilisez un TfidfTransformer à ce sujet. Stocker une matrice clairsemée de 8 millions de lignes et plusieurs dizaines de milliers de colonnes n'est pas si grave. Une autre option serait de ne pas utiliser TF-IDF du tout - il se pourrait que votre système fonctionne assez bien sans lui.

En pratique, vous devrez peut-être sous-échantillonner votre ensemble de données - parfois, un système fera aussi bien en apprenant simplement de 10% de toutes les données disponibles. Il s'agit d'une question empirique, il n'y a aucun moyen de dire à l'avance quelle stratégie serait la meilleure pour votre tâche. Je ne m'inquiéterais pas de passer au document 8M avant d'être convaincu que j'en ai besoin (c'est-à-dire jusqu'à ce que j'aie vu une courbe d'apprentissage montrant une tendance claire à la hausse).

Voici un exemple sur lequel je travaillais ce matin. Vous pouvez voir que les performances du système ont tendance à s'améliorer à mesure que j'ajoute plus de documents, mais il est déjà à un stade où cela semble faire peu de différence. Étant donné le temps nécessaire pour m'entraîner, je ne pense pas que le former à 500 fichiers en vaille la peine.

11
mbatchkarov