Jakiego algorytmu (algorytmów) można użyć, aby uzyskać dość dobre przewidywanie następnego słowa?

10

Jaki jest dobry sposób implementacji „przewidywania następnego słowa”? Na przykład użytkownik wpisuje „Jestem”, a system sugeruje „a” i „nie” (lub inne) jako następne słowo. Znam metodę, która wykorzystuje Łańcuchy Markowa i trochę tekstu szkoleniowego (oczywiście), aby mniej więcej to osiągnąć. Ale czytałem gdzieś, że ta metoda jest bardzo restrykcyjna i dotyczy bardzo prostych przypadków.

Rozumiem podstawy sieci neuronowych i algorytmów genetycznych (chociaż nigdy nie wykorzystałem ich w poważnym projekcie) i być może mogłyby one pomóc. Zastanawiam się, czy istnieją jakieś algorytmy, które przy odpowiednim tekście szkolenia (np. Artykuły w gazetach i własne pisanie użytkownika) mogą zaproponować racjonalnie odpowiednie sugestie dotyczące następnego słowa. Jeśli nie (łącza do) algorytmy, ogólne metody wysokiego poziomu do ataku na ten problem są mile widziane.

yati sagade
źródło

Odpowiedzi:

9

Spójrz na n-gramów . Jeden n-gram to ciąg nsłów. W twoim przypadku chcesz nbyć 3, ponieważ potrzebujesz dwóch query wordsi jednego resulting word. Jeden 3-gramowy brzmi na przykład „Jestem zmęczony”, a drugi „Jestem szczęśliwy”.

To, czego potrzebujesz, to zbiór 3 gramów zebranych w Twoim języku docelowym, powiedzmy po angielsku. Ponieważ nie możesz zebrać go na podstawie wszystkiego, co kiedykolwiek napisano po angielsku, musisz dokonać wyboru. Ten wybór reprezentatywnych tekstów nazywa się a corpus. Jeśli twój korpus jest dobry, powie ci, jak często sekwencja trzech określonych słów występuje razem w języku angielskim. Na tej podstawie możesz obliczyć prawdopodobieństwo 3 gramów.

Zbieranie tego rodzaju danych jest najtrudniejsze. Gdy masz już listę wszystkich 3 gramów wraz z ich prawdopodobieństwem, możesz filtrować listę do wszystkich 3 gramów, zaczynając od „Jestem”. Następnie posortuj całą listę według prawdopodobieństwa i voila: prognozy.

sebastiangeiger
źródło
W porządku, czy jest optymalna wartość, nktóra daje dobre wyniki? Widzisz, nie zawsze musi być to trzecie przewidywane słowo
yati sagade
2
Cóż, większa ndaje dłuższą listę, która daje bardziej precyzyjne przewidywanie, ale jest również droższa w wyszukiwaniu. Więc jest to kompromis między precyzją a czasem obliczeń.
sebastiangeiger
2
Potrzebny jest również większy korpus, aby większe n-gramy były praktycznie przydatne.
liori
4
um to dosłownie łańcuch Markowa ... nie tylko to, ale dosłownie najbardziej podręcznikowy przykład ...
Justin L.
2

Wygląda na to, że domeną problemową jest podzbiór wyszukiwania ciągów. Rozszerzając wyrazy o białe spacje, można zastosować dopasowanie rozmytego łańcucha.

Oprócz słownika możesz rozważyć / zezwolić wszystkim użytkownikom na wprowadzanie jednego słowa podczas treningu. Pozwala to sugerować następne słowo, ale sugeruje także automatyczne uzupełnianie słowa lub wyrażeń.

Oto link do kompilacji algorytmów wyszukiwania łańcuchów rozmytych

http://ntz-develop.blogspot.com/2011/03/fuzzy-string-search.html

Dorward Villaruz
źródło
1

Poszukujesz (statystycznego) modelu językowego .

Statystyczny model językowy przypisuje prawdopodobieństwo sekwencji m słów P(w_1,...,w_m)za pomocą rozkładu prawdopodobieństwa ...

W rozpoznawaniu mowy i kompresji danych model taki próbuje uchwycić właściwości języka i przewidzieć następne słowo w sekwencji mowy ...

użytkownik3287
źródło
Łał. Ale myślę, że odpowiedź @ sebastiangeiger wyjaśnia to dla n = 3.
yati sagade
Jego odpowiedź opisuje konkretny model językowy, a mianowicie modele n-gramowe. Istnieją inne modele językowe, np. Syntaktyczne modele językowe ( goo.gl/ffPOg ).
user3287