In einer Text Mining-Anwendung besteht ein einfacher Ansatz darin, die Heuristik zu verwenden, um Vektoren als kompakte, spärliche Darstellungen der Dokumente zu erstellen. Dies ist in Ordnung für die Batch-Einstellung, bei der der gesamte Korpus a priori bekannt ist, da der i d f den gesamten Korpus benötigt
wobei ein Term ist, d ein Dokument, der Dokumentenkorpus und T (nicht gezeigt) das Wörterbuch.
In der Regel werden jedoch im Laufe der Zeit neue Dokumente empfangen. Eine Möglichkeit besteht darin, das vorhandene bis eine bestimmte Anzahl neuer Dokumente eingegangen ist, und es neu zu berechnen. Dies scheint jedoch eher ineffizient zu sein. Kennt jemand ein inkrementelles Aktualisierungsschema, das (möglicherweise ungefähr) gegen den Wert konvergiert, wenn alle Daten im Voraus gesehen wurden? Oder gibt es alternativ ein anderes Maß, das denselben Begriff erfasst, aber inkrementell berechnet werden kann?
Es gibt auch eine verwandte Frage, ob das über die Zeit ein gutes Maß bleibt. Da der IDF den Begriff der Korpusworthäufigkeit erfasst, ist es denkbar, dass ältere Dokumente im Korpus (z. B. mein Korpus enthält über 100 Jahre Zeitschriftenartikel), da sich die Häufigkeit verschiedener Wörter im Laufe der Zeit ändert. In diesem Fall kann es tatsächlich sinnvoll sein, ältere Dokumente wegzuwerfen, wenn neue eingehen, und zwar mithilfe eines Schiebefensters i d f . Es ist denkbar, dass man auch alle vorherigen i d f -Vektoren speichern kann, wenn neue berechnet werden, und wenn wir dann Dokumente von beispielsweise 1920-1930 abrufen möchten, können wir den i d f verwendenberechnet aus Dokumenten in diesem Datumsbereich. Ist dieser Ansatz sinnvoll?
Edit: Es gibt einen separaten , aber miteinander verbundene Problem über das Wörterbuch . Im Laufe der Zeit wird es neue Wörterbuchbegriffe geben, die vorher nicht erschienen sind, also | T | wird wachsen müssen, und daher die Länge des i d f -Vektors. Es scheint, dass dies kein Problem wäre, da Nullen an alte i d f -Vektoren angehängt werden könnten .
Antworten:
Now given a new documentd∗ , we update the denominator simply by:
We would then have to recalculate thetf−idf based on the new idf vector.
Similarly to remove an old document, we decrement the numerator in a similar fashion.
This does mean that we either have to store the entiretf matrix as well as the tf−idf matrix (doubling the memory requirements), or we have to compute the tf−idf scores when needed (increasing computational costs). I can't see any way round that.
For the second part of the question, about the evolution ofidf vectors over time, it seems that we can use the above method, and store a set of "landmark" z vectors (denominators) for different date ranges (or perhaps content subsets). Of course z is a dense vector of the length of the dictionary so storing a lot of these will be memory intensive; however this is probably preferable to recomputing idf vectors when needed (which would again require storing the tf matrix as well or instead).
quelle