Quel (s) algorithme (s) peut-on utiliser pour obtenir une prédiction raisonnablement bonne du prochain mot?

10

Quelle est la bonne façon de mettre en œuvre la "prédiction du mot suivant"? Par exemple, l'utilisateur tape "Je suis" et le système propose "a" et "non" (ou éventuellement d'autres) comme mot suivant. Je connais une méthode qui utilise les chaînes de Markov et un texte de formation (évidemment) pour plus ou moins y parvenir. Mais j'ai lu quelque part que cette méthode est très restrictive et s'applique à des cas très simples.

Je comprends les bases des réseaux de neurones et des algorithmes génétiques (bien que je ne les ai jamais utilisés dans un projet sérieux) et peut-être qu'ils pourraient être utiles. Je me demande s'il existe des algorithmes qui, étant donné un texte de formation approprié (par exemple, des articles de journaux et la frappe de l'utilisateur) peuvent proposer des suggestions raisonnablement appropriées pour le mot suivant. Sinon (liens vers) des algorithmes, les méthodes générales de haut niveau pour attaquer ce problème sont les bienvenues.

yati sagade
la source

Réponses:

9

Jetez un oeil à n-grammes . Un n-gramme est une séquence de nmots. Dans votre cas, vous voulez l' nêtre 3, car il vous en faut deux query wordset un resulting word. Un 3 grammes serait par exemple "je suis fatigué", un autre "je suis heureux".

Ce dont vous avez alors besoin, c'est d'une collection de ces 3 grammes qui sont collectés sur votre langue cible, disons l'anglais. Comme vous ne pouvez pas le collecter sur tout ce qui est écrit en anglais, vous devez faire une sélection. Cette sélection de textes représentatifs est appelée a corpus. Si votre corpus est bon, il vous dira à quelle fréquence une séquence de trois mots spécifiques se produit ensemble en anglais. À partir de cela, vous pouvez calculer la probabilité d'un 3 grammes.

La collecte de ce type de données est la partie la plus difficile. Une fois que vous avez la liste de tous les 3 grammes ainsi que leur probabilité, vous pouvez filtrer votre liste pour tous les 3 grammes en commençant par "Je suis". Ensuite, vous triez toute cette liste par probabilité et voilà: votre prédiction.

sebastiangeiger
la source
D'accord, et y a-t-il une valeur optimale nqui donne de bons résultats? Il n'a pas toujours avoir à être le troisième mot qui est prévu, vous voyez
yati sagade
2
Eh bien, une plus grande ndonne une liste plus longue qui vous donnera une prédiction plus précise mais est également plus coûteuse à rechercher. C'est donc un compromis entre la précision et le temps de calcul.
sebastiangeiger
2
En outre, vous avez besoin d'un corpus plus grand pour des n-grammes plus grands pour être pratiquement utile.
liori
4
euh c'est littéralement une chaîne de Markov ... non seulement cela, mais littéralement l'exemple le plus classique ...
Justin L.
2

Il semble que le domaine problématique soit un sous-ensemble de recherche de chaînes. En étendant les mots pour inclure des espaces blancs, la correspondance de chaîne floue peut être appliquée ici.

Vous voudrez peut-être considérer / autoriser toutes les entrées utilisateur en un seul mot pendant la formation en plus de votre dictionnaire. Cela vous permet de suggérer le mot suivant mais suggère également la saisie automatique des mots ou des phrases.

Voici un lien vers une compilation d'algorithmes de recherche de chaînes floues

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

Dorward Villaruz
la source
1

Vous recherchez un modèle de langage (statistique) .

Un modèle de langage statistique attribue une probabilité à une séquence de m mots P(w_1,...,w_m)au moyen d'une distribution de probabilité ...

En reconnaissance de la parole et en compression de données, un tel modèle essaie de capturer les propriétés d'une langue, et de prédire le mot suivant dans une séquence de parole ...

user3287
la source
Sensationnel. Mais je pense que la réponse de @ sebastiangeiger explique cela pour n = 3.
yati sagade
Sa réponse décrit un modèle de langage particulier, à savoir les modèles à n grammes. Il existe d'autres modèles de langage, par exemple les modèles de langage syntaxique ( goo.gl/ffPOg ).
user3287