11 votos

Incremento de la FID (frecuencia inversa de los documentos)

En una aplicación de minería de textos, un enfoque simple es utilizar la $tf-idf$ heurística para crear vectores como representaciones compactas y dispersas de los documentos. Esto está bien para el ajuste de lotes, donde todo el corpus se conoce a-priori, como el $idf$ requiere todo el corpus

$$ \mathrm {idf}(t) = \log \frac {|D|}{|\{d: t \in d\}|} $$

donde $t$ es un término, $d$ es un documento, $D$ es el corpus de documentos, y $T$ (no se muestra) es el diccionario.

Sin embargo, normalmente los nuevos documentos se reciben con el tiempo. Una opción es seguir utilizando los $idf$ hasta que se haya recibido un cierto número de nuevos documentos, y lo vuelvan a calcular. Sin embargo, esto parece bastante ineficiente. ¿Alguien sabe de un esquema de actualización incremental que (posiblemente aproximadamente) converja con el valor si todos los datos fueran vistos de antemano? ¿O existe otra medida que capte la misma noción pero que pueda ser calculada de forma incremental?

También hay una cuestión conexa de si la $idf$ sigue siendo una buena medida a lo largo del tiempo. Dado que el idf capta la noción de la frecuencia de las palabras del corpus, es concebible que los documentos más antiguos del corpus (digamos, por ejemplo, que mi corpus incluye más de 100 años de artículos de revistas), como las frecuencias de las diferentes palabras cambien con el tiempo. En este caso podría ser realmente sensato tirar los documentos más antiguos cuando lleguen los nuevos, en efecto utilizando una ventana corrediza $idf$ . Es posible que también se puedan almacenar todos los anteriores $idf$ vectores a medida que se calculan los nuevos, y luego si quisiéramos recuperar documentos de, digamos, 1920-1930, podríamos usar el $idf$ calculado a partir de documentos en ese rango de fechas. ¿Tiene sentido este enfoque?

Editar: Hay un tema separado pero relacionado con el diccionario $T$ . A medida que el tiempo evolucione, habrá nuevos términos de diccionario que no aparecían antes, así que $|T|$ tendrá que crecer, y por lo tanto la longitud de la $idf$ vector. Parece que esto no sería un problema, ya que se podrían añadir ceros a los antiguos $idf$ vectores.

4voto

A.Schulz Puntos 264

Bien, gracias a Steffen por los útiles comentarios. Supongo que la respuesta es bastante simple al final. Como él dice, todo lo que necesitamos hacer es almacenar el denominador actual (llamarlo $z$ ):

$z(t) = |\{d:t \in d\}|$

Ahora, dado un nuevo documento $d^*$ actualizamos el denominador simplemente por:

$z^*(t) = z(t) + \left\ { \begin {array}{ll} 1 & \mbox {if}\; {t \in d^*} \\ 0 & \mbox {otherwise} \end {array} \right. $

Entonces tendríamos que recalcular la $tf-idf$ basado en el nuevo $idf$ vector.

De manera similar, para eliminar un documento antiguo, disminuimos el numerador de manera similar.

Este hace significa que o bien tenemos que almacenar todo el $tf$ así como la matriz $tf-idf$ (duplicando los requisitos de memoria), o tenemos que calcular la $tf-idf$ puntuaciones cuando sea necesario (aumentando los costos de computación). No puedo ver ninguna manera de evitarlo.

Para la segunda parte de la pregunta, sobre la evolución de $idf$ vectores a lo largo del tiempo, parece que podemos usar el método anterior, y almacenar un conjunto de "hitos" $z$ vectores (denominadores) para diferentes rangos de fechas (o quizás subconjuntos de contenido). Por supuesto $z$ es un vector denso de la longitud del diccionario, por lo que el almacenamiento de muchos de estos será intensivo en memoria; sin embargo, esto es probablemente preferible a la recomputación $idf$ vectores cuando sea necesario (lo que también requeriría almacenar los $tf$ matriz también o en su lugar).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X