Mam pod ręką następujący problem: Mam bardzo długą listę słów, ewentualnie imion, nazwisk itp. Muszę utworzyć listę słów w taki sposób, aby podobne słowa, na przykład słowa o podobnej odległości edycji (Levenshtein) pojawiły się w ten sam klaster. Na przykład „algorytm” i „alogrithm” powinny mieć duże szanse na pojawienie się w tym samym klastrze.
Doskonale zdaję sobie sprawę z klasycznych, nieobjętych nadzorem metod grupowania, takich jak grupowanie k-średnich, grupowanie EM w literaturze Rozpoznawanie wzorców. Problem polega na tym, że metody te działają na punktach znajdujących się w przestrzeni wektorowej. Mam tutaj pod ręką słowa strun. Wydaje się, że zgodnie z moimi dotychczasowymi badaniami na pytanie, jak reprezentować ciągi w cyfrowej przestrzeni wektorowej i obliczyć „środki” klastrów ciągów, nie uzyskano wystarczającej odpowiedzi. Naiwnym podejściem do ataku na ten problem byłoby połączenie grupowania k-średnich z odległością Levenshteina, ale nadal pozostaje pytanie „jak reprezentować” oznacza „łańcuchy znaków”? Istnieje waga nazywana wagą TF-IDF, ale wydaje się, że jest ona głównie związana z obszarem klastrowania „dokumentu tekstowego”, a nie zgrupowaniem pojedynczych słów. http://pike.psu.edu/cleandb06/papers/CameraReady_120.pdf
Moje poszukiwania w tej dziedzinie wciąż trwają, ale chciałem też stąd czerpać pomysły. Co byś polecił w tym przypadku, czy ktoś jest świadomy metod tego rodzaju problemów?
źródło
It seems that there are some special string clustering algorithms
. Jeśli pochodzisz z pola eksploracji tekstu, a nie statystyki / analizy danych, to stwierdzenie jest uzasadnione. Jeśli jednak poznasz gałąź klastrowania, ponieważ okaże się, że nie ma „specjalnych” algorytmów dla danych łańcuchowych. „Specjalny” to sposób wstępnego przetwarzania takich danych przed wprowadzeniem ich do analizy skupień.Odpowiedzi:
Rekomendacja Seconding @ mican dotycząca propagacji powinowactwa .
Z pracy: L Frey, Brendan J. i Delbert Dueck. „Grupowanie poprzez przekazywanie wiadomości między punktami danych”. science 315.5814 (2007): 972–976. .
Jest bardzo łatwy w użyciu za pośrednictwem wielu pakietów. Działa na wszystkim, co można zdefiniować podobieństwem par. Co możesz uzyskać, mnożąc odległość Levenshteina przez -1.
Rzuciłem razem szybki przykład, używając pierwszego akapitu twojego pytania jako danych wejściowych. W Pythonie 3:
Dane wyjściowe były (przykłady kursywą po lewej stronie klastra, których są przykładem):
Uruchomienie go na liście 50 losowych imion :
Wygląda mi całkiem nieźle (to była zabawa).
źródło
Symmetric
)Użyj algorytmów klastrowania wykresów, takich jak klastrowanie Louvaina, klastrowanie wyszukiwania z ograniczonym sąsiedztwem (RNSC), klastrowanie propagacji powinowactwa (APC) lub algorytm klastra Markowa (MCL).
źródło
Możesz wypróbować model przestrzeni wektorowej z n-gramami słów jako pozycji przestrzeni wektorowej. Myślę, że w tym przypadku musiałbyś użyć miary podobnej do podobieństwa cosinus zamiast edytować odległość.
źródło