получить близкие слова из словаря (базы данных), когда вы неправильно пишете слово, используя алгоритм Наивного Байеса - PullRequest
0 голосов
/ 02 апреля 2020

Я хотел бы использовать наивный байесовский анализ для классификации текста, чтобы получить близкие слова из словаря (базы данных), когда пользователь неправильно произнес слово. Например: пользователь вводит «sheese», результатом будет «сыр».

Пожалуйста, как мне это использовать? зная, что мой проект в java.

Спасибо, за любые предложения или мнения.

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Наивный Байес не может этого сделать. Это не задача классификации. Целевые переменные могут быть любым, имеющим правильное написание.

Даже если вы найдете какой-то обходной путь для этой работы, у вас будет действительно бесполезная модель, поскольку она может дать вывод для очень немногих слов, которые вы определили ранее. Для этого есть другие методы исправления орфографии. Одним из хороших методов является https://github.com/wolfgarbe/SymSpell

0 голосов
/ 02 апреля 2020

Моя идея будет такой:

  1. У вас будет большой набор данных, содержащий слова с ошибками и соответствующие им правильные версии. Мы ищем P(correct|wrong).
  2. . Для каждого из них вы затем вычислите P(wrong|correct) (помните, что нам нужно это для байесовского значения), что означает вероятность того, что слово будет неверным при правильном. Например: «сыр» может быть написан с ошибкой как «лист» или «лист», причем первый вариант более вероятен и встречается в 75% случаев, а другой - только в 25% случаев. Итак: P(sheese|cheese) = 0.75, P(shees|chesse) = 0.25.
  3. Вы также вычисляете общее количество вхождений каждого правильного слова в данном дикте. Значение: P(cheese) = 0.7, P(chess) = 0.3. Это будет наша P(correct)
  4. Теперь вы получаете неверное слово в качестве входных данных и можете использовать теорему Байеса для вычисления каждой вероятности.

P(correct|wrong) = P(wrong|correct) * P(correct) / P(wrong)

P(wrong) будет одинаковым для всех возможных правильных слов, поэтому мы можем просто пока проигнорировать это. Нам осталось:

P(correct|wrong) = P(wrong|correct) * P(correct)

(Предполагая P(sheese|chess) =0.25) Теперь, учитывая слово "sheese", мы можем вычислить P(cheese|sheese) = 0.7*0.75 = 0.525 и P(chees|sheese) = 0.3*0.25 = 0.075, классифицируя слово как "cheese"

...