Из того, что я видел, формула сглаживания Кнезера-Ней (второго порядка) так или иначе задается как
с нормализующим коэффициентом заданным как
и вероятность продолжения слова
где - количество контекстов, в которых был замечен, или, проще, количество различных слов которые предшествуют данному слову . Из того, что я понял, формула может быть применена рекурсивно.
Теперь это хорошо обрабатывает известные слова в неизвестных контекстах для разных длин n-грамм, но не объясняет, что делать, когда есть слова вне словаря. Я попытался следовать этому примеру, в котором говорится, что на этапе рекурсии для униграмм P_ { cont } (/) = P ^ 0_ {KN} (/) = \ frac {1} {V} . Затем в документе используется это - цитирование Чена и Гудмена - для обоснования приведенной выше формулы как .
Я не вижу, как это работает при наличии неизвестного слова . В этих случаях поскольку, очевидно, неизвестное слово не продолжает ничего относительно обучающего набора. Точно так же количество n-грамм будет .
Кроме того, весь термин может быть нулевым, если встречается последовательность неизвестных слов, скажем, триграмма слов OOD.
Что мне не хватает?
Ответы:
Дэн Юрафски опубликовал главу о моделях N-Gram, в которой немного говорится об этой проблеме:
Я пытался выяснить, что это значит, но не уверен, что означает просто . Если это так, и вы предполагаете, что, поскольку счетчик обнуляется, возможно, переходит к , в соответствии с:ϵ limx→0x λ(ϵ) d
тогда неизвестному слову просто присваивается доля скидки, т.е.
Я не уверен в этом ответе вообще, но хотел получить его там на случай, если он вызовет еще некоторые мысли.
Обновление: копаясь еще немного, кажется, что обычно используется для обозначения пустой строки (""), но все еще неясно, как это влияет на вычисление . по-прежнему моя лучшая догадкаϵ λ d|V|
источник
Есть много способов тренировать модель,
<UNK>
хотя Юрафски предлагает выбрать те слова, которые встречаются в процессе обучения очень редко, и просто изменить их на<UNK>
.Затем просто обучите вероятности, как обычно.
Смотрите это видео, начиная с 3:40 -
https://class.coursera.org/nlp/lecture/19
Другой подход заключается в том, чтобы просто рассматривать слово как
<UNK>
самый первый раз, когда оно встречается на тренировке, хотя из моего опыта этот подход назначает слишком большую часть вероятностной массы<UNK>
.источник
Всего несколько мыслей, я далеко не эксперт в этом вопросе, поэтому я не собираюсь давать ответ на вопрос, а анализировать его.
Самое простое, что можно сделать, - это вычислить , задав сумму, равную единице. Это разумно, так как пустая строка никогда не видна в обучающем наборе (ничто не может быть предсказано из ничего), и сумма должна быть равна единице. Если это так, то можно оценить как: Помните, что здесь получается из биграмной модели.λ(ϵ) λ(ϵ)
Другой вариант - оценить
<unk>
вероятность с помощью методов, упомянутых Рэнди, и рассматривать ее как обычный токен.Я думаю, что этот шаг сделан, чтобы гарантировать, что формулы последовательны. Обратите внимание, что термин не зависит от контекста и присваивает фиксированные значения вероятностям каждого токена. Если вы хотите предсказать следующее слово, вы можете предварительно предсказать этот термин, с другой стороны, если вы хотите сравнить вероятность Кнезера - Нейя, назначенную каждому токену в двух или более различных контекстах, вы можете использовать его.λ(ϵ)|V|
источник