Si j'écrivais un logiciel qui tentait de prédire quel mot un utilisateur allait taper suivant en utilisant les deux mots précédents que l'utilisateur avait tapés, je voudrais créer deux tables.Stocker n-grammes dans la base de données dans <n nombre de tables
Comme si:
== 1-gram table ==
Token | NextWord | Frequency
------+----------+-----------
"I" | "like" | 15
"I" | "hate" | 20
== 2-gram table ==
Token | NextWord | Frequency
---------+------------+-----------
"I like" | "apples" | 8
"I like" | "tomatoes" | 12
"I hate" | "tomatoes" | 20
"I hate" | "apples" | 2
Suivant cet exemple implimentation les types d'utilisateurs « I » et le logiciel, en utilisant la base de données ci-dessus, prédit que le prochain mot l'utilisateur va taper est « haine ». Si l'utilisateur tape "haïr" alors le logiciel prédira alors que le prochain mot que l'utilisateur va taper est "tomates". Cependant, cette implan- tation nécessiterait un tableau pour chaque n-gramme supplémentaire que je choisis de prendre en compte. Si je décidais de prendre en compte les 5 ou 6 mots précédents pour prédire le mot suivant, alors j'aurais besoin de 5-6 tables et d'une augmentation exponentielle de l'espace par n-gramme.
Quelle serait la meilleure façon de représenter cela dans seulement un ou deux tableaux, qui n'a pas de limite supérieure sur le nombre de n-grammes que je peux supporter?
+1 pour le hachage. Si vous utilisez un grand corpus, ou des cordes longues, l'utilisation d'un hachage sera * essentielle * pour une performance adéquate. Vous aurez toujours besoin de garder la chaîne d'origine à cause des inévitables collisions, hélas. – egrunin