TFIDF für Große Datasets
Habe ich ein Korpus, das rund 8 Millionen news-Artikel, die ich brauche, um die TFIDF Repräsentation von Ihnen als sparse-matrix. Ich war in der Lage, das zu tun, mit scikit-learn für die relativ geringere Zahl der Proben, aber ich glaube, es kann nicht verwendet werden, für so einen riesigen Datensatz, wie es lädt die input-matrix zuerst in den Arbeitsspeicher und das ist ein teurer Prozess.
Weiß jemand, was wäre der beste Weg, um Extrakt aus den TFIDF-Vektoren für große datasets?
- Haben Sie gesehen tseine und dieser?
- Diese Methode verwendet HashingVectorizer (scikit-learn.org/stable/modules/generated/...) für Funktionen, die in der Tat ist skalierbar und am besten für große datasets aber Sie können in der Contra-Abschnitt heißt es, dass es nicht verwendet werden kann, um zu berechnen, IDF GEWICHTE.
- Sie würde tun müssen, diese iterativ, wenn es nicht alle passen in den Speicher oder speichern in einer DB/pytables eine Abfrage und führen zu calc die tfidf und zu speichern, wie eine andere Tabelle
- Ich brauche, um ein csr-matrix, ich denke Iterationen wird nicht beibehalten die Form der matrix, da wären wir Verfütterung einer neuen charge von Daten immer und immer Matrizen unterschiedlicher Form, korrigieren Sie mich, wenn falsch bin. Auch, wie wird die idf-GEWICHTE berücksichtigt werden, Sie sind die globalen GEWICHTE. Mit einem python-generator wird Ihnen helfen, denken Sie an Faust berechnen TF über CountVectorizer und dann verwandeln Sie es vielleicht für IDF-GEWICHTE?
- Ich glaube, Sie können ein
HashingVectorizer
zu bekommen, ein kleinerescar_matrix
aus Ihrem text-Daten, und verwenden Sie dann eineTfidfTransformer
auf, dass. Speichern einer sparse-matrix mit 8 Zeilen und mehrere Zehntausende von Spalten ist nicht so eine große Sache. - Haben Sie sich überlegt mit Mahout - mahout.apache.org - skalierbar für große datasets und können problemlos verwendet werden, mit lucene.
Du musst angemeldet sein, um einen Kommentar abzugeben.
gensim ist eine effiziente tf-idf-Modell und muss nicht alles haben, was im Speicher auf einmal.
http://radimrehurek.com/gensim/intro.html
Dem Korpus muss einfach ein durchsuchbar, so dass Sie nicht brauchen, um den ganzen Korpus im Speicher.
Den make_wiki Skript (https://github.com/piskvorky/gensim/blob/develop/gensim/scripts/make_wikicorpus.py) läuft über wikipedia in etwa 50m auf einem laptop, laut den Kommentaren.
Ich glaube, Sie können ein
HashingVectorizer
zu bekommen, ein kleinerescsr_matrix
aus Ihrem text-Daten, und verwenden Sie dann eineTfidfTransformer
auf, dass. Speichern einer sparse-matrix mit 8 Zeilen und mehrere Zehntausende von Spalten ist nicht so eine große Sache. Eine andere Möglichkeit wäre, nicht zu verwenden TF-IDF überhaupt - es könnte der Fall sein, dass Ihr system funktioniert Recht gut ohne Sie.In der Praxis müssen Sie möglicherweise teilstichprobe Ihrer Daten setzen - manchmal wird einfach auch nur durch das lernen von 10% auf alle verfügbaren Daten. Dies ist eine empirische Frage, es ist nicht Weise zu sagen, im Voraus, welche Strategie am besten wäre für deine Aufgabe. Ich würde nicht sorgen über die Skalierung zu 8M Dokument, bis ich bin davon überzeugt, dass ich Sie brauche (also bis ich gesehen habe eine Lernkurve zeigt einen klaren trend nach oben).
Unten ist etwas, das ich arbeitete an diesem morgen, als ein Beispiel. Sie können sehen, die Leistung des Systems neigt dazu, zu verbessern, wie füge ich mehrere Dokumente, aber es ist schon in einem Stadium, wo es scheint wenig Unterschied. Angesichts der Tatsache, wie lange es dauert, um zu trainieren, ich glaube nicht, dass die Ausbildung auf 500 Dateien ist das Wert, meine Zeit.
gensim
erreicht so einem kleinen Speicher-footprint, auch wenn die Verarbeitung sehr größeren Korpora. Haben Sie einen Blick auf das tutorial hier: radimrehurek.com/gensim/tut1.html