Какой алгоритм (ы) можно использовать для достижения достаточно хорошего предсказания следующего слова?

10

Каков хороший способ реализации «предсказания следующего слова»? Например, пользователь вводит «Я есть», и система предлагает «а» и «нет» (или, возможно, другие) в качестве следующего слова. Мне известен метод, который использует цепи Маркова и некоторый обучающий текст (очевидно), чтобы более или менее достичь этого. Но я где-то читал, что этот метод очень строг и применим к очень простым случаям.

Я понимаю основы нейронных сетей и генетических алгоритмов (хотя никогда не использовал их в серьезном проекте) и, возможно, они могли бы помочь. Интересно, существуют ли какие-либо алгоритмы, которые, при наличии соответствующего обучающего текста (например, газетных статей и собственного набора текста пользователем), могут предложить разумно подходящие предложения для следующего слова. Если нет (ссылки на) алгоритмы, приветствуются общие высокоуровневые методы для решения этой проблемы.

Яти Сагаде
источник

Ответы:

9

Посмотрите на н-грамм . Один н-грамм - это последовательность nслов. В вашем случае вы хотите nбыть 3, так как вам нужно два query wordsи а resulting word. Один 3 грамма будет, например, «Я устал», другой «Я счастлив».

Затем вам понадобится набор из 3 граммов, собранных на вашем целевом языке, скажем, на английском. Поскольку вы не можете собрать его по всему, что когда-либо было написано на английском языке, вам нужно сделать выбор. Эта подборка репрезентативных текстов называется corpus. Если ваш корпус в порядке, он скажет вам, как часто последовательность из трех конкретных слов встречается вместе на английском языке. Из этого можно рассчитать вероятность 3 грамма.

Сбор такого рода данных - самая сложная часть. Как только у вас есть список всех 3 граммов вместе с их вероятностью, вы можете отфильтровать свой список по всем 3 граммам, начинающимся с «Я есть». Затем вы сортируете весь этот список по вероятности и вуаля: ваш прогноз.

sebastiangeiger
источник
Хорошо, и есть ли оптимальное значение, nкоторое дает хорошие результаты?
Видите
2
Что ж, чем больше, тем nдлиннее список, который даст вам более точный прогноз, но и более дорогой для поиска. Так что это компромисс между точностью и временем вычислений.
Себастьян Гейгер
2
Кроме того, вам нужен больший корпус, чтобы большие n-граммы были практически полезны.
Лиори
4
гм, это буквально цепь Маркова ... не только это, но буквально самый учебный пример ...
Джастин Л.
2

Похоже, проблемный домен является подмножеством поиска строк. Расширяя слова для включения пробелов, здесь можно применить нечеткое сопоставление строк.

Возможно, вы захотите рассмотреть / разрешить ввод всех пользователей как одно слово во время обучения в дополнение к вашему словарю. Это позволяет вам предлагать следующее слово, но также предлагает автоматическое заполнение слова или фразы.

Вот ссылка на подборку алгоритмов поиска нечетких строк

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

Дорвард Вилларуз
источник
1

Вы ищете (статистическую) языковую модель .

Статистическая модель языка присваивает вероятность последовательности m слов P(w_1,...,w_m)посредством распределения вероятностей ...

В распознавании речи и сжатии данных такая модель пытается уловить свойства языка и предсказать следующее слово в речевой последовательности ...

user3287
источник
Ух ты. Но я думаю, что ответ @ sebastiangeiger объясняет это для n = 3.
Yati Sagade
Его ответ описывает конкретную языковую модель, а именно n-граммовые модели. Существуют другие языковые модели, например, синтаксические языковые модели ( goo.gl/ffPOg ).
user3287