Określanie, jak dany ciąg jest podobny do zbioru ciągów

10

Nie jestem pewien, czy to pytanie należy tutaj i przepraszam, jeśli nie. Chcę opracować programowy sposób, w jaki mogę probabilistycznie określić, czy dany ciąg „należy” do worka ciągów. Na przykład, jeśli mam torbę z 10 000 nazwami miast w USA, a następnie mam ciąg „Philadelphia”, chciałbym uzyskać ilościową miarę tego, jak prawdopodobne jest, że „Philadelphia” to nazwa miasta USA w oparciu o nazwy miast, które już znam. Chociaż wiem, że w tym kontekście nie będę w stanie oddzielić prawdziwych nazw miast od fałszywych nazw miast, przynajmniej spodziewałbym się, że będę mieć takie ciągi znaków jak „123,75” i „Szybki czerwony lis przeskoczył nad leniwymi brązowymi psami” jakiś próg.

Na początek spojrzałem na Levenshtein Distance i zastanowiłem się, w jaki sposób zostało to zastosowane do problemów, przynajmniej nieco podobnych do tego, który próbuję rozwiązać. Jedną z interesujących aplikacji, które znalazłem, było wykrywanie plagiatu, w jednym artykule opisano sposób wykorzystania odległości Levenshteina ze zmodyfikowanym algorytmem Smitha-Watermana do oceny wyników na podstawie prawdopodobieństwa, że ​​były to plagaryzowane wersje danego dokumentu bazowego. Moje pytanie brzmi, czy ktoś mógłby skierować mnie we właściwym kierunku za pomocą innych ustalonych algorytmów lub metod, które mogą mi pomóc. Mam wrażenie, że może to być problem, który ktoś w przeszłości próbował rozwiązać, ale jak dotąd zawiodło mnie moje Google-fu.

Andrzej
źródło
Jeśli masz dostępne pozytywne i negatywne przykłady, możesz spróbować wyszkolić klasyfikatora. Jeśli chodzi o funkcje, na początek spróbuję pobrać proste statystyki, takie jak te sugerowane przez Yuvala Filmusa.
Nick
Zwróć uwagę na to powiązane pytanie .
Raphael
Nazwy miast wydają się złym przykładem; są wszędzie, szczególnie w USA. Tutaj wyszukiwanie tabel wydaje się być najbardziej efektywnym sposobem. Czy twój problem jest bardziej ogólny?
Raphael

Odpowiedzi:

5

Niektóre lepsze statystyki, o których warto pomyśleć, to analiza długości słów i gramów. W przypadku długości słowa możesz gromadzić statystyki rozkładu długości słów w nazwach miast i porównywać je z długością otrzymywanych słów. Analiza gram analizuje rozkład sekwencji liter w przykładowym tekście (powiedzmy ). Oba podejścia można połączyć.nnnn=2)

Biorąc pod uwagę heurystykę, możesz użyć prawdopodobieństwa, aby uzyskać wynik, który (miejmy nadzieję) byłby wyższy dla twoich przykładowych danych niż dla innego tekstu. Aby ustalić rozsądny próg, można przeprowadzić weryfikację krzyżową. Wybierz zestaw przykładowych fraz, które nie są nazwami miast. Podziel nazwy miast na dwie części: dużą (powiedzmy 80%) i małą (powiedzmy 20%) część. Trenuj swój model na dużej części (to znaczy zbieraj statystyki na dużej części), a następnie oceń swój model na małej części i na próbce złych fraz. Ustal, czy istnieje rozsądny próg, który przekracza większość nazw miast, ale tylko niewielką liczbę złych fraz.

Yuval Filmus
źródło
Dzięki. Zacząłem patrzeć na n-gram, ale nie wiedziałem, czy jestem całkowicie poza bazą, więc cieszę się, że o tym wspomniałeś. Długość słowa też brzmi interesująco i coś, o czym nie myślałem.
Andrew
Możesz do tego dodać częstotliwość znaków. W szczególności powinno to pozbyć się wszystkich liczb. Zaletą jest to, że takie częstotliwości są wektorami liczb, które można trenować / rozpoznawać w wielu modelach statystycznych.
Raphael
1
1n+1n