W aplikacji do eksploracji tekstu jednym prostym podejściem jest użycie heurystyki do tworzenia wektorów jako zwartych rzadkich reprezentacji dokumentów. Jest to dobre w przypadku ustawień wsadowych, w których cały korpus jest znany z góry, ponieważ wymaga całego korpusui d f
gdzie jest terminem, to dokument, to korpus dokumentu, a (nie pokazano) to słownik.d D T
Jednak z czasem nowe dokumenty są odbierane. Jedną z opcji jest używanie istniejącego pliku do momentu otrzymania pewnej liczby nowych dokumentów i ponowne jego obliczenie. Wydaje się to jednak dość nieefektywne. Czy ktoś wie o schemacie przyrostowej aktualizacji, który (być może w przybliżeniu) zbiega się do wartości, jeśli wszystkie dane byłyby widoczne z wyprzedzeniem? Albo alternatywnie, czy istnieje inna miara, która obejmuje to samo pojęcie, ale może być obliczana w sposób przyrostowy?
Istnieje również powiązane pytanie, czy pozostaje dobrą miarą w czasie. Ponieważ idf przechwytuje pojęcie częstotliwości słowa korpusu, możliwe jest, że starsze dokumenty w korpusie (powiedzmy na przykład, że mój korpus zawiera ponad 100 lat artykułów w czasopismach), ponieważ częstotliwości różnych słów zmieniają się w czasie. W takim przypadku rozsądne może być wyrzucanie starszych dokumentów, gdy pojawiają się nowe, w efekcie za pomocą okna przesuwnego . Można też zapisać wszystkie poprzednie wektory ponieważ nowe są obliczane, a następnie, jeśli chcemy pobrać dokumenty z powiedzmy 1920-1930, moglibyśmy użyć obliczonego z dokumentów w tym zakresie dat. Czy to podejście ma sens?i d f i d f i d f
Edit: Jest to odrębne, ale powiązane Emisja o słowniku . W miarę upływu czasu pojawią się nowe terminy słownikowe, które nie pojawiały się wcześniej, więcbędą musiały rosnąć, a zatem długość wektora . Wygląda na to, że nie stanowiłoby to problemu, ponieważ zera można dodawać do starych wektorów .| T | i d f i d f
Odpowiedzi:
Ok, dziękuję Steffenowi za przydatne komentarze. Myślę, że odpowiedź jest w końcu dość prosta. Jak mówi, wszystko, co musimy zrobić, to zapisać bieżący mianownik (nazwij go ):z
Biorąc pod uwagę nowy dokument , aktualizujemy mianownik poprzez:d∗
Musielibyśmy wówczas ponownie obliczyć na podstawie nowego wektora .tf−idf idf
Podobnie, aby usunąć stary dokument, zmniejszamy licznik w podobny sposób.
Oznacza to , że albo musimy przechowywać całą macierz , a także macierz (podwajając wymagania dotyczące pamięci), lub musimy obliczać wyniki razie potrzeby (zwiększając koszty obliczeniowe). Nie widzę tego w żaden sposób.t f - i d f t f - i d ftf tf−idf tf−idf
W przypadku drugiej części pytania, dotyczącej ewolucji wektorów w czasie, wydaje się, że możemy użyć powyższej metody i przechowywać zestaw „przełomowych” wektorów (mianowników) dla różnych zakresów dat (lub być może podzbiorów treści) . Oczywiście jest gęstym wektorem długości słownika, więc przechowywanie wielu z nich będzie wymagało dużej ilości pamięci; jednak jest to prawdopodobnie lepsze niż ponowne obliczanie wektorów razie potrzeby (co ponownie wymagałoby przechowywania macierzy lub zamiast niej).z z i d f t fidf z z idf tf
źródło