IDF incremental (frequência inversa de documentos)


11

Em um aplicativo de mineração de texto, uma abordagem simples é usar a heurística para criar vetores como representações esparsas compactas dos documentos. Isso é bom para a configuração do lote, onde o corpus inteiro é conhecido a priori, pois o i d f requer o corpus inteirotfidfidf

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

onde é um termo, d é um documento, D é o corpus do documento e T (não mostrado) é o dicionário.tdDT

No entanto, normalmente novos documentos são recebidos ao longo do tempo. Uma opção é continuar usando o existente até que tenham sido recebidos de um certo número de novos documentos, ea recalcular-lo. No entanto, isso parece bastante ineficiente. Alguém sabe de um esquema de atualização incremental que (possivelmente aproximadamente) converge para o valor se todos os dados foram vistos com antecedência? Ou, alternativamente, existe outra medida que captura a mesma noção, mas pode ser calculada de maneira incremental?idf

Há também uma questão relacionada se o permanece uma boa medida ao longo do tempo. Como o idf captura a noção de frequência das palavras de corpus, é concebível que documentos mais antigos do corpus (digamos, por exemplo, que meu corpus inclua mais de 100 anos de artigos de periódicos), à medida que as frequências de palavras diferentes mudem ao longo do tempo. Nesse caso, pode ser sensato descartar documentos mais antigos quando novos forem recebidos, com efeito usando uma janela deslizante i d f . É concebível que também se possa armazenar todos os vetores i d f anteriores à medida que novos são calculados e, se quisermos recuperar documentos, digamos 1920-1930, podemos usar os i d fidfidfidfidfcalculado a partir de documentos nesse período. Essa abordagem faz sentido?

Edit: Não é uma questão separada, mas relacionada sobre o dicionário . À medida que o tempo evolui, haverá novos termos de dicionário que não apareceram antes, então | T | precisará crescer e, portanto, o comprimento do vetor i d f . Parece que isso não seria um problema, pois os zeros poderiam ser anexados aos antigos vetores i d f .T|T|idfidf


pergunta estúpida: É um problema armazenar o denominador para cada t? Como a relação de | t | para | d | parece (em geral)?
Steffen

Desculpe, talvez a equação não esteja clara - é a frequência inversa do documento do termo t, e não no tempo t . Então, no momento t, você teria um vetor de comprimento | T | , ou seja, o tamanho do dicionário (que também pode ser alterado). Vou fazer edições nesse sentido. idf(t)tt|T|
tdc 23/11

1
Eu entendi a equação. Minha pergunta foi: Se armazenar o dicionário não é um problema, então: Em vez de armazenar | T | idfs one armazena | T | denominadores (da equação) + número de documentos. A atualização incremental não é um problema e o idf é calculado em tempo real. Tenho a sensação de ter esquecido alguma coisa.
Steffen

Então você quer dizer algo como, dado um novo documento , se temos o valor d : t d , nós simplesmente adicionar um para o denominador para t : t d *dd:tdt:td
tdc

precisamente. Se isso é possível?
Steffen

Respostas:


6

z

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

d

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

tfidfidf

Da mesma forma, para remover um documento antigo, decrementamos o numerador de maneira semelhante.

tftfidftfidf

idfzzidftf

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.