Jakie funkcje spróbujesz wyodrębnić z listy słów do przewidywania w przyszłości, czy to istniejące słowo, czy tylko bałagan znaków?
Tam jest opis zadania, które tam znalazłem .
Musisz napisać program, który może odpowiedzieć, czy dane słowo jest angielskim. To byłoby łatwe - wystarczy wyszukać słowo w słowniku - jest jednak ważne ograniczenie: twój program nie może być większy niż 64 KiB.
Pomyślałem więc, że do rozwiązania problemu można zastosować regresję logistyczną. Nie mam dużego doświadczenia w eksploracji danych, ale zadanie jest dla mnie interesujące.
Dzięki.
machine-learning
nlp
text-mining
algorithms
Witalij Miszczenko
źródło
źródło
Odpowiedzi:
Podczas analizy NLP i analizy tekstu można wyodrębnić kilka odmian funkcji z dokumentu zawierającego słowa, które mają zostać wykorzystane do modelowania predykcyjnego. Należą do nich następujące.
ngramy
Weź losową próbkę słów z words.txt . Dla każdego słowa w próbce wyodrębnij każdy możliwy bi-gram liter. Na przykład siła słowa składa się z tych bi-gramów: { st , tr , re , en , ng , gt , th }. Grupuj według bi-gramów i oblicz częstotliwość każdego bi-gramu w twoim ciele. Teraz zrób to samo dla tri-gramów, ... aż do n-gramów. W tym momencie masz ogólne pojęcie o rozkładzie częstotliwości łączenia liter rzymskich w celu tworzenia angielskich słów.
ngram + granice słów
Aby przeprowadzić prawidłową analizę, prawdopodobnie powinieneś utworzyć znaczniki wskazujące n-gramów na początku i na końcu słowa ( pies -> { ^ d , do , og , g ^ }) - to pozwoli ci uchwycić fonologię / ortografię ograniczenia, które w innym przypadku mogłyby zostać pominięte (np. sekwencja ng nigdy nie może wystąpić na początku rodzimego angielskiego słowa, dlatego sekwencja ^ ng jest niedozwolona - jeden z powodów, dla których wietnamskie nazwy takie jak Nguyễn są trudne do wymówienia dla osób posługujących się językiem angielskim) .
Nazwij tę kolekcję gramów zestawem słów . Jeśli odwrócisz sortowanie według częstotliwości, twoje najczęstsze gramy będą na górze listy - będą one odzwierciedlać najczęstsze sekwencje w angielskich słowach. Poniżej pokazuję (brzydki) kod za pomocą pakietu {ngram}, aby wyodrębnić literę ngram ze słów, a następnie obliczyć częstotliwości gramów:
Twój program po prostu pobierze przychodzącą sekwencję znaków jako wejście, podzieli ją na gramy, jak omówiono wcześniej, i porówna z listą najwyższych gramów. Oczywiście będziesz musiał zmniejszyć liczbę najlepszych wyborów, aby spełnić wymagania dotyczące rozmiaru programu .
spółgłosek i samogłosek
Inną możliwą cechą lub podejściem byłoby przyjrzenie się sekwencji samogłoskowej spółgłoski. Zasadniczo przekonwertuj wszystkie słowa w ciągach samogłosek samogłoskowych (np. Pancake -> CVCCVCV ) i postępuj zgodnie z tą samą strategią, którą omówiono wcześniej. Ten program prawdopodobnie byłby znacznie mniejszy, ale miałby mniejszą dokładność, ponieważ dzieli telefony na jednostki o wysokim poziomie.
nchar
Kolejną przydatną funkcją będzie długość łańcucha, ponieważ wraz ze wzrostem liczby znaków zmniejsza się liczba dozwolonych angielskich słów.
Analiza błędów
Typami błędów generowanych przez ten typ maszyny powinny być bzdury - słowa, które wyglądają tak, jakby były angielskimi słowami, ale które nie są (np. Ghjrtg zostałby poprawnie odrzucony (prawda przecząca), ale szczekanie nieprawidłowo sklasyfikowane jako słowo angielskie (fałszywie dodatni)).
Co ciekawe, zyzzyvas zostałby niepoprawnie odrzucony (fałszywie ujemny), ponieważ zyzzyvas to prawdziwe angielskie słowo (przynajmniej zgodnie z words.txt ), ale jego sekwencje gramów są niezwykle rzadkie, a zatem prawdopodobnie nie wniosą dużej mocy dyskryminacyjnej.
źródło