Если бы я писал программный продукт, который пытался предсказать, какое слово пользователь собирается набрать next , используя два предыдущих слова, введенных пользователем, я бы создал две таблицы.
Вот так:
== 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
Следуя этому примеру, пользователь вводит «I», а программное обеспечение, используя вышеуказанную базу данных, предсказывает, что следующее слово, которое пользователь собирается напечатать, - «ненависть». Если пользователь вводит «ненависть», тогда программное обеспечение прогнозирует, что следующее слово, которое пользователь собирается ввести, - «помидоры».
Однако для этой имплиментации потребуется таблица для каждого дополнительного n-грамма, который я хочу принять во внимание. Если бы я решил, что я хотел бы принять во внимание 5 или 6 предыдущих слов при прогнозировании следующего слова, то мне потребовалось бы 5-6 таблиц и экспоненциальное увеличение пространства на н-грамм.
Как лучше всего представить это только в одной или двух таблицах, у которых нет верхнего предела числа n-грамм, которые я могу поддерживать?