Приветствую, что я реализую Stupid Backoff (стр. 2, уравнение 5) метод сглаживания для проекта, над которым я работаю, и У меня есть вопрос о его реализации. Это алгоритм сглаживания, используемый в NLP, Good-Turing - это, наверное, самый известный подобный алгоритм.
Краткое описание алгоритма: При попытке найти вероятность слова, появляющегося в предложении, он сначала будет искать контекст для слова на уровне n-грамм, и если нет n-грамма такого размера, он будет возвращаться к (n-1) -грамме и умножить его счет на 0.4. Рекурсия останавливается у униграмм.
Итак, если я хочу найти вероятность "дня" в контексте "солнечного дня", сначала посмотрим, существует ли в корпусе триграмма "солнечный день", если бы не попытка то же самое с биграмм "солнечный день", и, наконец, он просто получит частоту "день", деленный на размер корпуса (общее количество слов в данных обучения).
Мой вопрос: умножаю ли счет с 0.4 каждый раз, когда я уменьшаю размер n-грамма?
Итак, в приведенном выше примере, если мы не можем найти триграмму или биграмму, итоговый результат:
0,4 * 0,4 * частота (день)/corpus_size?
или я просто умножу один раз на конечном уровне, поэтому, независимо от того, сколько отступлений я должен сделать, я просто умножаю итоговый результат с 0.4?