Usługa modelowania tematycznego przetwarzająca wyjście z usługi sentencembeddings (wektory osadzeń dokumentów) za pomocą BERTopic.
Uwaga: w związku z użyciem metody grupowania część dokumentów zostanie przypisana do tematu -1
, który nie jest właściwym tematem, można go rozumieć jako szum informacyjny - z tych dokumentów nie wynika dostatecznie odróżniający się i liczny temat.
Uwaga: Metoda uruchamia się dla minimum 3 dokumentów (w związku z wymaganiami redukcji wymiarowości wektorów osadzeń: liczba dokumentów > liczba wymiarów + 1, gdzie 1 to minimalna liczba wymiarów).
- bierze pod uwagę kolejność słów i ich kontekst dzięki modelom głębokim (w odróżnieniu od standardowych metod jak LDA)
- nie wymaga zdefiniowania liczby tematów
- nie wszystkie dokumenty zostają przypisane do tematów (część z nich (czasami nawet większość) pozostaje bez tematu))
- w zamian pozwala to uzyskać “czyste”, stosunkowo łatwo interpretowalne tematy
- w oryginalnej formie, bez przetwarzania wstępnego
- maksymalnie około 500 wyrazów - wynika to z ograniczenia długości wejść modeli głębokich do 512 tokenów (potencjalnie, w przyszłości, dzięki użyciu takich modeli jak Longformer / Big Bird, możliwe jest 4096 tokenów)
- obecnie dłuższe teksty zostaną po prostu przycięte
- przy użyciu modeli transformer, ponieważ najlepiej przenoszą znacznie zdań do wektorów (porównanie metod dla j. polskiego)
- do uzyskania jednego wektora z całego tekstu najczęściej używa się średniej (mean pooling)
- przed kolejnym krokiem (grupowanie) redukuje się wektory osadzeń do 5 wymiarów
- UMAP - zatrzymuje dużą część wielowymiarowych struktur lokalnych w niższych wymiarach
- hierarchiczna klasteryzacja - rozszerzenie DBSCAN (klasteryzacja w oparciu o gęstość)
- uzyskane punkty w przestrzeni grupujemy, otrzymując tym samym klastry odpowiadające tematom
- nie definiujemy liczby tematów (klastrów), możemy jedynie sterować parametrami metody (np. zmieniając minimalną liczbą punktów w klastrze, tym samym określając minimalną liczbę dokumentów, aby utworzyć temat)
- ważną cechą tej metody jest to, że nie wszystkie punkty (dokumenty) zostaną przypisane do klastrów (tematów)
- można powiedzieć, że dokumenty bez tematów są pewnego rodzaju “szumem”; pozwala to uzyskać “czyste” tematy
- “klasowy” TF-IFD: łączymy wszystkie dokumenty z jednego tematu traktując tym samym każdy temat jako jeden duży dokument
- wzór bierze pod uwagę jak często słowo występuje w danym temacie, w porównaniu do częstości we wszystkich tematach
- wynik dla każdego słowa pokazuje jak ważne / wyróżniające dany temat, jest słowo
- wybieramy dowolną liczbę (np. 20) słów, o największej wartości c-TF-IDF do reprezentacji tematu
- jeśli liczba tematów jest zbyt duża, możemy dokonać ich redukcji
- iteracyjnie łączymy najbardziej podobne do siebie tematy, aż uzyskamy pożądaną liczbę, gdzie miarą podobieństwa jest podobieństwo kosinusowe między wektorami c-TF-IDF tematów
- przeliczamy słowa kluczowe dla c-TF-IDF dla nowopowstałego tematu
any2txt|dir|sentencembeddings|shortextopic
Plik w formacie json z wektorami osadzeń dokumentów (wyjście z sentencembeddings).
Zapisuje wyniki jako zestaw plików podobny do usługi topic3:
- prawdopodobieństwa przynależności dokumentu do tematów, słowa kluczowe:
topics.json
, theta.json
oraz topics.xlsx
,
- wizualizacje słów kluczowych, tzw. "wordcloduds": pliki
png
oraz topics.zip
,
- wizualizacje tematów w 2-wymiarowej przestrzeni
topic_vis.html
oraz wykres liczności tematów topics_sizes.png
.
from lpmn_client.src.requester import Requester # pip install -i https://pypi.clarin-pl.eu lpmn_client
requester = Requester("example@mail.com") # change e-mail
lpmn_query = 'any2txt|dir|sentencembeddings|shortextopic'
files = ["./test.zip"] # zip file with any documents, for examples docx files
file_ids = requester.upload_files(files)
file_ids = [str(f.content.decode('utf-8')) for f in file_ids]
response = requester.process_query(lpmn_query, file_ids)
for i in response:
requester.download_response(i, './out.zip')
(C) CLARIN-PL