Szukam informacji i teorii na temat podejścia do tematu leksykalnego.
Powiedzmy, że mam kolekcję ciągów, które mogą być tylko jednym zdaniem lub potencjalnie wieloma zdaniami. Chciałbym przeanalizować te ciągi znaków i wydrzeć najważniejsze słowa, być może z wynikiem, który wskazuje, jak prawdopodobne jest to słowo.
Spójrzmy na kilka przykładów tego, co mam na myśli.
Przykład 1:
„Naprawdę chcę Keuriga, ale nie stać mnie na to!”
To bardzo prosty przykład, tylko jedno zdanie. Jako człowiek z łatwością widzę, że „Keurig” jest tutaj najważniejszym słowem. Również „stać” jest względnie ważne, choć wyraźnie nie jest to główny punkt zdania. Słowo „ja” pojawia się dwa razy, ale w ogóle nie jest ważne, ponieważ tak naprawdę nie przekazuje nam żadnych informacji. Mogę się spodziewać, że zobaczę skrót słów / wyników podobny do tego:
"Keurig" => 0.9
"afford" => 0.4
"want" => 0.2
"really" => 0.1
etc...
Przykład 2:
„Właśnie miałem jedną z najlepszych praktyk pływackich w moim życiu. Mam nadzieję, że uda mi się dotrzymać kroku konkurencji. Gdybym tylko pamiętał o zabraniu mojego nieprzemakalnego zegarka”.
Ten przykład ma wiele zdań, więc w tekście będą ważniejsze słowa. Nie powtarzając ćwiczenia punktowego z przykładu 1, prawdopodobnie spodziewałbym się, że z tego wynikną dwa lub trzy naprawdę ważne słowa: „pływanie” (lub „trening pływania”), „zawody” i „zegarek” (lub „wodoodporny” zegarek ”lub„ zegarek nieprzemakalny ”w zależności od tego, jak obsługiwany jest łącznik).
Biorąc pod uwagę kilka takich przykładów, jak byś zrobił coś podobnego? Czy istnieją jakieś biblioteki lub algorytmy (open source) w programowaniu, które już to robią?
Odpowiedzi:
Zdecydowanie ludzie myślą o opisanym przez ciebie problemie. Ranking João Ventura i Joaquima Ferreiry da Silvy oraz ekstrakcja odpowiednich pojedynczych słów w tekście (pdf) to miłe wprowadzenie do istniejących technik rankingowych, a także sugestie dotyczące ulepszeń. Wszystkie techniki, które opisują, opierają się na korpusie (dużo tekstu) w porównaniu do jednego lub dwóch wierszy tekstu. Twój korpus musiałby być zbiorem wszystkich próbek lub ewentualnie wielu ciał pobranych próbek z określonych źródeł. Należy pamiętać, że trafność pojedynczego słowa (unigram) jest bardzo nierozwiązanym problemem. Jak opisano w artykule:
Istnieje wiele zestawów narzędzi do przetwarzania języka naturalnego typu open source . (Ostrożnie. Niektóre narzędzia są bezpłatne do badań, ale wymagają komercyjnej licencji do użytku komercyjnego.) Ułatwiają Ci życie bez względu na wybrane podejście.
Najbardziej znam zestaw narzędzi Natural Language Toolkit (NLTK) . Jest łatwy w użyciu, dobrze udokumentowany i został opisany w książce Natural Language Processing with Python (bezpłatnie dostępny online). Jako prosty przykład tego, co NLTK może dla Ciebie zrobić, wyobraź sobie, że używasz tagera części mowy . Po zidentyfikowaniu części mowy każdego słowa możesz uznać, że rzeczowniki są bardzo ważne, a przymiotniki mniej ważne. Czasowniki mogą być ważne, a przysłówki mniej. To wcale nie jest najnowocześniejszy ranking, ale uzyskujesz przydatne informacje przy niewielkim wysiłku. Gdy będziesz gotowy przejść do bardziej wyrafinowanej analizy, wbudowana zdolność NLTK do tokenizacji, oznaczania, dzielenia i klasyfikowania pozwoli Ci skupić się na innych szczegółach rozwiązania.
źródło
Przetwarzanie języka naturalnego jest własną dyscypliną, w której przeprowadzono sporo formalnych badań. Zacznę od szukania tam.
Chciałbym również ponownie rozważyć moje potrzeby. Nawet po ponad 50 latach badań najlepszymi informatykami, którzy potrafili wymyślić, jest Siri. Nie spodziewałbym się, że komputer z powodzeniem wykona to, o czym mówisz z regularnością.
Jeśli istnieją pewne ograniczenia w mowie (jak Siri zakładając, że masz proste polecenie lub pytanie), może być lepiej. Ponowne rozpatrzenie moich potrzeb (przy założeniu, że potrzebuję NLP) obejmowałoby zdefiniowanie moich ograniczeń. Potem prawdopodobnie polowałbym na mnóstwo przykładów. Częściowo w celu przetestowania wszystkiego, co wymyślę, ale wiele nowoczesnych rozwiązań wymaga uczenia maszynowego. Potrzebuję tych przykładów jako danych wejściowych do krzywej uczenia się.
Podsumowując, poważnie wątpię, aby cokolwiek mogło dać dobre wyniki w tego rodzaju scenariuszu bez kontekstu.
źródło