Inkrementelle IDF (Inverse Document Frequency)

11

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ötigttfidfidf

idf(t)=log|D||{d:td}|

wobei ein Term ist, dtd ein Dokument, der Dokumentenkorpus und T (nicht gezeigt) das Wörterbuch.DT

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?idf

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 verwendenidfidfidfidfberechnet 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 .T|T|idfidf

tdc
quelle
dumme Frage: Es ist ein Problem, den Nenner für jedes t zu speichern? Wie ist das Verhältnis von | t | zu | d | sieht aus wie (im Allgemeinen)?
steffen
Entschuldigung, vielleicht ist die Gleichung nicht klar - ist die inverse Dokumenthäufigkeit des Terms t und nicht zum Zeitpunkt t . Zum Zeitpunkt t hätten Sie also einen Vektor der Länge | T | dh die Größe des Wörterbuchs (die sich ebenfalls ändern kann). Ich werde diesbezüglich Änderungen vornehmen. idf(t)tt|T|
tdc
1
Ich habe die Gleichung verstanden. Meine Frage war: Wenn das Speichern des Wörterbuchs kein Problem ist, dann: Anstatt | T | zu speichern idfs speichert man | T | Nenner (der Gleichung) + Anzahl der Dokumente. Eine inkrementelle Aktualisierung ist dann kein Problem und die IDF wird im laufenden Betrieb berechnet. Ich habe das Gefühl, etwas übersehen zu haben.
steffen
Sie meinen also so etwas wie, wenn wir bei einem neuen Dokument den Wert d : t d haben , fügen wir einfach einen zum Nenner für t : t d dd:tdt:td
tdc
genau. Ist das machbar?
steffen

Antworten:

6

z):

z(t)=|{d:td}|

Now given a new document d, we update the denominator simply by:

z(t)=z(t)+{1iftd0otherwise

We would then have to recalculate the tfidf 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 entire tf matrix as well as the tfidf matrix (doubling the memory requirements), or we have to compute the tfidf scores when needed (increasing computational costs). I can't see any way round that.

For the second part of the question, about the evolution of idf 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).

tdc
quelle