N-Gram

алгоритм

Это 12-й день моего участия в августовском испытании обновлений. Ознакомьтесь с подробностями мероприятия: Испытание августовского обновления

N-Gram (модель N-грамм) — очень важная концепция обработки естественного языка.Обычно в NLP люди могут использовать N-Gram, чтобы оценить, является ли предложение разумным на основе определенного корпуса. Еще одной функцией N-Gram является оценка степени различия между двумя строками, что является широко используемым методом нечеткого сопоставления. Эта статья начнется отсюда, а затем покажет читателям различные мощные приложения N-Gram для обработки естественного языка.

  1. Расстояние между строками, определенное на основе модели N-Gram
  2. Используйте модель N-Gram, чтобы оценить, являются ли предложения разумными
  3. Алгоритм сглаживания данных при использовании модели N-Gram

Расстояние между строками, определенное на основе модели N-Gram

В обработке естественного языка одной из наиболее распространенных и основных операций является «сопоставление с образцом» или «поиск строки». И сопоставление с образцом делится наточное совпадениеинечеткое соответствиедва

Точное соответствие знакомо всем, например, мы хотим посчитать ключевые слова в статье.infomationКоличество вхождений, метод, используемый в настоящее время, является точным соответствием. В этой области также существует множество алгоритмов, таких как алгоритм KMP, алгоритм BM и т. д.

Нечеткое сопоставление, его применение везде. Обычное программное обеспечение для обработки текстов (Word и т. д.) обеспечивает функцию проверки орфографии, когда вы вводите неправильное слово, напримерinformtaion, система подскажет, действительно ли введенное вами словоinformation. Техника, используемая для сопоставления слова с возможной ошибкой с предполагаемым правильным написанием, представляет собой нечеткое сопоставление.

Ключом к нечеткому сопоставлению является то, как измерить «разницу» между двумя похожими словами (или строками). Эту разницу часто называют «расстоянием». Алгоритмов в этой области много, и даже есть вопрос по LeetCodeNo.72 Edit Distance

Во-первых, давайте представим, как использовать N-Gram для определения расстояния между строками. Предположим, есть строкаss, то N-грамма строки представляет собой отрезок, полученный делением исходного слова на длину N, то естьssВсе подстроки длины N в . Представьте, что если есть две строки, а затем найти их N-грамм соответственно, то расстояние N-грамм между двумя строками можно определить с точки зрения количества их общих строк. Однако простого подсчета общих подстрок явно недостаточно, эта схема явно игнорирует проблемы, которые могут быть вызваны разницей в длине двух строк. Например, для строк girl и girlfriend количество общих подстрок, которыми владеют эти двое, очевидно, равно количеству общих подстрок, которыми владеют girl и она сама, но мы не можем думать, что girl и girl являются двумя одинаковыми совпадениями.

Чтобы решить эту проблему, некоторые ученые предложили определить понятие расстояния N-грамм на основе неповторяющейся сегментации слов N-грамм Конкретная формула выглядит следующим образом:

GN(s)+GN(t)2×GN(s)GN(t)|G_N(s)|+|G_N(t)|-2\times |G_N(s)\cap G_N(t)|

в,GN(s)|G_N(s)|Указывает количество элементов в наборе N-грамм строки s, а значение N обычно равно 2 или 3. Возьмем N=2 в качестве примера для сегментации строк Горбачев и Горбечев. Получены следующие результаты (общие подстроки подчеркнуты)

Комбинируя приведенную выше формулу, расстояние между двумя строками можно рассчитать как 8 + 9-2 * 4 = 9. Очевидно, что чем ближе расстояние между строками, тем меньше значение. Когда две строки точно равны, расстояние между ними равно 0

Используйте модель N-Gram, чтобы оценить, являются ли предложения разумными

Отныне обсуждаемая нами модель N-Gram сильно отличается от упомянутой ранее модели N-Gram, но, пожалуйста, обратите внимание на их внутреннюю связь (или по сути единую концепцию)

Чтобы представить применение N-Gram, мы сначала начнем с нескольких примеров.

Во-первых, со статистической точки зрения предложение на естественном языкеssможет состоять из любой цепочки слов, но вероятностьP(s)P(s)Есть большие и маленькие. Например:

  • s1=s_1=я только что поужинал
  • s2=s_2=я только что пообедал

Очевидно, для китайцевs1s_1По сравнению сs2s_2является более беглым и осмысленным, поэтомуP(s1)>P(s2)P(s_1)>P(s_2)

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

  • the large green ___.
  • Kate swallowed the large green ___.

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

если естьmmПоследовательность слов (или предложение), мы хотим вычислить вероятностьP(w1,w2,...wm)P(w_1,w_2,...w_m), по формуле умножения условной вероятности можно получить

P(w1,w2,...,wm)=P(w1)P(w2w1)P(w3w1,w2)P(wmw1,..,wm1)P(w_1,w_2,...,w_m)=P(w_1)P(w_2|w_1)P(w_3|w_1,w_2)···P(w_m|w_1,..,w_{m-1})

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

P(wiw1,...,wi1)=P(wiwin+1,...,wi1)P(w_i|w_1,...,w_{i-1})=P(w_i|w_{i-n+1},...,w_{i-1})

В частности, для случая, когда n принимает малые значения

когдаn=1n=1, модель униграммы

P(w1,w2,...,wm)=i=1mP(wi)P(w_1,w_2,...,w_m)=\prod_{i=1}^m P(w_i)

когдаn=2n=2, модель биграммы

P(w1,w2,...,wm)=i=1mP(wiwi1)P(w_1,w_2,...,w_m)=\prod_{i=1}^m P(w_i|w_{i-1})

когдаn=3n=3, модель триграммы

P(w1,w2,...,wm)=i=1mP(wiwi2wi1)P(w_1,w_2,...,w_m)=\prod_{i=1}^m P(w_i|w_{i-2}w_{i-1})

Следующая идея относительно ясна: вы можете использовать метод оценки максимального правдоподобия, чтобы найти набор параметров, чтобы вероятность обучающей выборки могла достигать максимального значения.

  • Для модели униграммыC(w1,...,wn)C(w_1,...,w_n)Обозначает N-граммw1,...,wnw_1,...,w_nКоличество вхождений в обучающий корпус (Count),MMобщее количество слов в корпусе (например, для да нет нет нет да,M=5M=5)

    P(wi)=C(wi)MP(w_i)=\frac{C(w_i)}{M}
  • Для биграммной модели

    P(wiwi1)=C(wi1wi)C(wi1)P(w_i|w_{i-1})=\frac{C(w_{i-1}w_i)}{C(w_{i-1})}
  • Для модели N-грамм

    P(wiwin1,...,wi1)=C(win1,...,wi)C(win1,...,wi1)P(w_i|w_{i-n-1},...,w_{i-1})=\frac{C(w_{i-n-1},...,w_i)}{C(w_{i-n-1},...,w_{i-1})}

Давайте рассмотрим конкретный пример, предположив, что сейчасКорпус, где — начало предложения, — конец предложения.

<s> I am Sam </s>
<s> Sam I am </s>
<s> I do not like green eggs and ham </s>

Часть результатов расчета модели биграммы выглядит следующим образом:

P(I<s>)=23P(Sam<s>)=13P(Samam)=12\begin{aligned} P(\text{I}|\text{<s>}) &= \frac{2}{3} \\ P(\text{Sam}|\text{<s>}) &= \frac{1}{3} \\ P(\text{Sam}|\text{am}) &= \frac{1}{2} \end{aligned}

В качестве другого примера, есть корпус, в которомC(wi)C(w_i)следующее

При этом в качестве известного условия задается следующая вероятность:

P(I<s>)=0.25P(</s>food)=0.68\begin{aligned} P(\text{I}|\text{<s>})&=0.25 \\ P(\text{</s>}|\text{food})&=0.68 \end{aligned}

C(wi1,wi)C(w_{i-1},w_i)следующее:

Первая строка и второй столбец показывают, что когда предыдущее слово — «i», текущее слово — «want», которое встречается в общей сложности 827 раз. Соответственно, мы можем вычислить соответствующее распределение биграмм как

Потому что из первой таблицы мы знаем, что «я» встречается в общей сложности 2533 раза, а затем «хочу» встречается в общей сложности 827 раз, поэтомуP(wantI)=82725330.33P(\text{want}|\text{I})=\frac{827}{2533}\approx 0.33

Затем, предложение<s> I want chinese food </s>Биграммная вероятность

P(<s> I want chinese food </s>)=P(I<s>)×P(wantI)×P(chinesewant)×P(foodchinese)×P(</s>food)=0.000189618\begin{aligned} P(\text{<s>}\ \text{I}\ \text{want}\ \text{chinese}\ \text{food}\ \text{</s>}) &= P(\text{I}|\text{<s>}) \\ & \times P(\text{want} | \text{I}) \\ & \times P(\text{chinese}|\text{want}) \\ & \times P(\text{food} | \text{chinese}) \\ & \times P(\text{</s>}|\text{food}) \\ &= 0.000189618 \end{aligned}

Чтобы избежать переполнения данных и повысить производительность, обычно используется логирование, а затем преобразование его в операцию сложения вместо операции умножения.

log(p1*p2*p3*p4)=log(p1)+log(p2)+log(p3)+log(p4)\log(p_1*p_2*p_3*p_4)=\log(p_1)+\log(p_2)+\log(p_3)+\log(p_4)

Алгоритм сглаживания данных при использовании модели N-Gram

Некоторые исследователи использовали обучающий корпус из 1,5 млн слов для обучения триграммной модели, а затем использовали тестовый корпус из того же источника для проверки и обнаружили, что 23% триграмм не появлялись в обучающем корпусе. Это означает, что некоторые вероятности равны 0, что приводит к возможности разреженных данных, и действительно есть некоторые случаи 0 в третьей таблице выше. Для языка из-за наличия разреженных данных метод оценки максимального правдоподобия не является хорошим методом оценки параметров.

В настоящее время решением является то, что мы называем «Сглаживание». Основная идея состоит в том, чтобы «уменьшить условное распределение вероятностей N-грамм, которые уже появились, так, чтобы условные распределения вероятностей N-грамм, которые не появляются, были ненулевыми, а сумма вероятностей должна быть гарантированно равна 1 после сглаживание данных.

1. Add-one (Laplace) Smoothing

Метод сглаживания плюс один, также известный как закон Лапласа, гарантирует, что каждая N-грамма появляется по крайней мере одно слово в обучающем корпусе, Взяв биграмму в качестве примера, формула выглядит следующим образом:

  • Оценка Add-1:PAdd-1(wiwi1)=C(wi1,wi)+1C(wi1)+VP_{\text{Add-1}}(w_i|w_{i-1})=\frac{C(w_{i-1},w_i)+1}{C(w_{i-1})+V}, где V — количество всех биграмм

Следуя приведенному выше примеру, после добавления одного сглаживания,C(wi1,wi)C(w_{i-1},w_i)Следующее:

Тогда биграмма:

Другой пример, для предложения<s> the rat ate the cheese </s>, можно попробовать вычислить сглаженный Add-oneP(aterat)P(\text{ate}|\text{rat})а такжеP(atecheese)P(\text{ate}|\text{cheese}),Сейчас

P(aterat)=C(rat ate)+1C(rat)+V=26P(atecheese)=C(cheese ate)+1C(cheese)+V=16\begin{aligned} P(\text{ate}|\text{rat}) &= \frac{C(\text{rat}\ \text{ate})+1}{C(\text{rat})+V} = \frac{2}{6} \\ P(\text{ate}|\text{cheese}) &= \frac{C(\text{cheese}\ \text{ate})+1}{C(\text{cheese}) + V} = \frac{1}{6} \end{aligned}

Подводя итог сглаживанию Add-one:

  • Вероятность того, что N-кортеж не появится в обучающем корпусе, больше не равна 0, а меньшее значение вероятности больше 0
  • Поскольку в обучающем корпусе слишком много N-кортежей, после сглаживания все не встречающиеся N-кортежи занимают большую долю всего распределения вероятностей. Поэтому в НЛП Add-one отводит слишком много вероятностного пространства N-кортежам, которые не ожидались при обучении.
  • Те N-кортежи, которые появляются в обучающем корпусе, увеличиваются с одинаковой частотой, что несправедливо. После сглаживания все невстречающиеся N-кортежи имеют одинаковую вероятность, что также неразумно.

2.Good-Turing Smoothing

Основная идея: использовать количество N-грамм с более высоким количеством наблюдений, чтобы переоценить размер величины вероятности и присвоить ее тем N-граммам с нулевым или меньшим количеством

В общем, мы выбираем вероятность одного события, то есть концепцию вещей, увиденных один раз:

Things seen once: Используйте количество вещей, которые только что видели один раз, чтобы оценить количество вещей, которые никогда не видели. Например, предположим, что вы рыбачите и поймали 18 рыб следующих видов: 10 карпов, 3 окуня, 2 сига, 1 форель, 1 лосось, 1 угорь, тогда

** Какова вероятность ФОРЕЛЬ? ** очень просто, мы думаем, что это 1/18

** Какова вероятность того, что следующей рыбой будет новый вид? ** Если не учитывать ничего другого, то вероятность равна 0, но для оценки новых вещей на основе вещей, увиденных однажды, вероятность составляет 3/18.

** Какова вероятность того, что следующей рыбой будет форель? **Согласно Good Turing, для каждой частотыcc, мы делаем корректировку, чтобы статьc*c^*, формула выглядит следующим образом, гдеncn_cговорят, что это произошлоccN-грамм

c*=(c+1)nc+1nc, where nc=b:C(b)=c1c^*=(c+1)\frac{n_{c+1}}{n_c},\ \text{where}\ n_c=\sum_{b:C(b)=c}1

затем вычислитьPGTP_{GT}

PGT(x:c(x)=c)=c*NP_{GT}(x:c(x)=c)=\frac{c^*}{N}

Для этого примераc*(trout)=2*13=23c^*(\text{trout})=2*\frac{1}{3}=\frac{2}{3},PGT(trout)=2/318=127P_{GT}(\text{trout})=\frac{2/3}{18}=\frac{1}{27}, поэтому вероятность того, что следующей рыбой окажется форель, равна127\frac{1}{27}

Улучшения, сделанные Кацем: Кац утверждает, что на практике не для всех частотccплавная частотаc*c^*надежен, считается надежным для больших частот (для некоторого порогаk,c>kk,c>k), он рекомендует приниматьkkравно 5, то есть:

c*=(c+1)Nc+1Ncc(k+1)Nk+1N11(k+1)Nk+1N1,1ckc^*=\frac{(c+1)\frac{N_{c+1}}{N_c}-c\frac{(k+1)N_{k+1}}{N_1}}{1-\frac{(k+1)N_{k+1}}{N_1}}, 1\leq c \leq k

3.Backoff

Обычно мы думаем, что модели более высокого порядка более надежны.Когда доступно больше исторической информации, на самом деле получается больше ограничений на текущие предположения, что облегчает получение правильных выводов. Поэтому, когда модель высокого порядка надежна, используйте модель высокого порядка как можно чаще. Но иногда результат подсчета модели высокого порядка может быть равен 0, тогда мы обращаемся к модели низкого порядка, чтобы избежать проблемы разреженных данных. Формула выглядит следующим образом:

Pbackoff(wiwin+1,...,wi1)={P*(wiwin+1,...,wi1),if C(win+1,...,wi)>0α(win+1,...,wi1)×Pbackoff(wiwin+2,...,wi1),otherwiseP_{\text{backoff}}(w_i|w_{i-n+1,...,w_{i-1}})= \begin{cases} P^*(w_i|w_{i-n+1},...,w_{i-1}), \quad\text{if} \ C(w_{i-n+1,...,w_i})>0\\ \alpha(w_{i-n+1},...,w_{i-1})\times P_{\text{backoff}}(w_i|w_{i-n+2},...,w_{i-1}), \quad\text{otherwise}\\ \end{cases}

вα\alphaиP*P^*– нормировочный коэффициент, обеспечивающийPbackoff=1\sum P_{\text{backoff}}=1

4.Interpolation Smoothing

Будь то технология сглаживания Add-one или Good Turing, N-граммы, которые не появляются, обрабатываются одинаково, что неизбежно необоснованно (существуют различия в вероятности возникновения событий), так что вот еще одна технология сглаживания линейной интерполяцией. Основная идея заключается в том, что модель высокого уровня и модель низкого уровня линейно комбинируются, а модель низкого уровня N-грамм используется для выполнения линейной интерполяции на модели высокого уровня N-грамм, потому что, когда не хватает данные для оценки вероятности высокоуровневой модели N-грамм, низкоуровневая модель N-грамм-модели часто могут предоставить полезную информацию.

Представьте, что для триграммной модели мы хотим посчитать корпус вlike chinese foodКоличество вхождений, а получается, что не появилось, значит кол-во 0

Формула выглядит следующим образом:

P^(wnwn1wn2)=λ1P(wnwn1wn2)+λ2P(wnwn1)+λ3P(wn)\begin{aligned} \hat P(w_n|w_{n-1}w_{n-2}) &=\lambda_1P(w_n|w_{n-1}w_{n-2}) \\ &+\lambda_2P(w_n|w_{n-1}) \\ &+\lambda_3P(w_n) \end{aligned}

в0λi1,iλi=10\leq \lambda_i\leq 1,\sum_i \lambda_i=1.λi\lambda_iЕго можно установить эмпирически на основе экспериментов или определить с помощью некоторых алгоритмов, например алгоритма ЭМ.

5.Absolute Discounting

Думая о предыдущем алгоритме Add-one, на самом деле это часть вероятности некоторых N-грамм, которые появляются часто, и распределяет их между теми N-граммами, которые не появляются. Поскольку сумма вероятностей всех возможностей равна 1, мы можем перемещать эти вероятности друг вокруг друга только между возможными ситуациями.

Поскольку мы планируем разделить вероятность получения часто встречающихся N-грамм крови, это фактически эквивалентно вычитанию (скидки) части количества их появления.На сколько изменить скидку? Church & Gale (1991) разработали очень оригинальный метод. Сначала они проверили количество биграмм из 4 слов в тренировочном наборе в протянутом корпусе. В частности, они сначала извлекли все биграммы (например, китайская еда, хороший мальчик, хочу и т. д.), которые встречались 4 раза в сохраненном корпусе, который также содержит 22 миллиона слов, а затем извлекли их из корпуса, в котором также было 22 миллиона слов. , В обучающем наборе подсчитайте количество вхождений этих биграмм по отдельности (при условии, чтоC(chinese food)=4,C(good boy)=3,C(want to)=3C(\text{chinese}\ \text{food}) = 4, C(\text{good}\ \text{boy}) = 3, C(\text{want}\ \text{to}) = 3). В конечном итоге они обнаружили, что в среднем биграммы, встречавшиеся 4 раза в первом корпусе из 22 миллионов слов, появлялись 3,23 раза во втором корпусе из 22 миллионов слов. В следующей таблице показано количество вхождений статистических биграмм в удерживаемом наборе и обучающем наборе, когда c находится в диапазоне от 0 до 9 (то есть c раз).

Найти закономерность несложно: за исключением биграмм со счетами 0 и 1, среднее значение частоты в удерживаемом наборе примерно равно значению счета в обучающем наборе минус 0,75.

Основываясь на прямоте, вызванной приведенными выше экспериментальными результатами, Абсолютное дискутирование вычитает (абсолютное) значение из каждой частоты.dd. Причина этого в том, что мы уже получили относительно хорошую оценку частоты с большим количеством вхождений, поэтому, когда мы вычитаем меньшее значение из этого значения счетчикаddПосле этого должно быть мало эффекта. Из приведенных выше экспериментальных результатов следует, что на практике мы обычно имеем дело с частотами от 2 до 9

PAbsDiscount(wiwi1)=C(wi1wi)dC(wi1)+λ(wi1)P(wi)P_{\text{AbsDiscount}}(w_i|w_{i-1})=\frac{C(w_{i-1}w_i)-d}{C(w_{i-1})}+\lambda(w_{i-1})P(w_i)

6.Kneser-Ney Smoothing

Этот алгоритм в настоящее время является стандартным, очень продвинутым алгоритмом сглаживания. Из-за сложности этого алгоритма мы начнем с интуитивно понятного примера.

Предположим, мы используем интерполяционную модель биграммы и униграммы, чтобы предсказать, что должно быть заполнено пустым словом в следующем предложении.

  • I used to eat Chinese food with ___ instead of knife and fork

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

если мы предположимP(w)P(w)измеренныйwwвероятность появления слова, то теперь мы хотим создать новую модель униграммы, называемуюPcontinuationP_{\text{continuation}}, что означает, чтоwwСлово как возможность нового продолжения. Обратите внимание, что это на самом деле означает для меня, что мы должны учитывать влияние предыдущего слова (т.е. история). Или для оценкиPcontinuationP_{\text{continuation}}(Обратите внимание, что это модель unigra), нам действительно нужно исследовать использованиеwwКоличество различных биграмм, сгенерированных этим словом. Обратите внимание, что использованиеwwКоличество различных типов биграмм, сгенерированных этим словом, означает, что текущее словоww, а когда предыдущее слово отличается, создаются разные типы. Например:w=foodw=\text{food}, то разные типы биграмм могут включать «китайскую еду», «английскую еду», «японскую еду» и т. д. Каждый тип биграммы, когда мы сталкиваемся с ним впервые, рассматривается как новое продолжение.

то естьPcontinuationP_{\text{continuation}}Он должен быть пропорционален потенциалу множества всех новых продолжений. Итак, можно увидеть

Pcontinuation(wi)wi1:C(wi1wi)>0P_{\text{continuation}}(w_i)\propto |w_{i-1}:C(w_{i-1}w_i)>0|

Если вы все еще не уверены в этом, позвольте мне объяснить, что означает приведенная выше формула. текущее словоwiw_i, таких как пища, различные типы биграмм, образованных из них,wi1wiw_{i-1}w_iwi1w_{i-1}Указывает на предыдущее слово. Очевидно, всеwi1wiw_{i-1}w_iПотенциал сформированного множества фактически зависит отwiw_iотличается от прежнегоwi1w_{i-1}количество

Затем, чтобы превратить приведенное выше число в вероятность, нам нужно разделить его на значение, которое является количеством всех типов биграмм, т.е.{(wj1,wj):C(wj1,wj)>0}|\{(w_{j-1},w_j):C(w_{j-1},w_j)>0\}|, где больше 0 означает "появился". Так что есть

Pcontinuation(wi)={wi1:C(wi1wi)>0}{(wj1,wj):C(wj1,wj)>0}P_{\text{continuation}(w_i)}=\frac{|\{w_{i-1}:C(w_{i-1}w_i)>0\}|}{|\{(w_{j-1},w_j):C(w_{j-1},w_j)>0\}|}

Конечно, мы также можем использовать следующую эквивалентную форму

Pcontinuation(wi)={wi1:C(wi1wi)>0}wi'{wi1':C(wi1'wi')>0}P_{\text{continuation}(w_i)}=\frac{|\{w_{i-1}:C(w_{i-1}w_i)>0\}|}{\sum_{w^{'}_i}|\{w_{i-1}^{'}:C(w_{i-1}^{'}w_i^{'})>0\}|}

то есть количество всех различных биграмм, равное количеству вхождений в словоwi'w_i^{'}все разные слова передwi1'w_{i-1}^{'}количество

В результате высокочастотное слово Zealand, которое появляется только после New, может получить только более низкую вероятность продолжения. Следовательно, в сочетании с формулой расчета вероятности абсолютного дисконтирования, приведенной выше, можно получить интерполяционную формулу сглаживания Кнезера-Нея, то есть

PKN(wiwi1)=max(C(wi1wi)d,0)c(wi1)+λ(wi1)Pcontinuation(wi)P_{KN}(w_i|w_{i-1})=\frac{\max(C(w_{i-1}w_i)-d, 0)}{c(w_{i-1})}+\lambda(w_{i-1})P_{\text{continuation}}(w_i)

в,max(C(wi1wi)d,0)\max(C(w_{i-1}w_i)-d,0)означает, что конечная частота вычитается на единицуddПосле этого он не станет отрицательным. Во-вторых, мы будемP(wi)P(w_i)заменяетсяPcontinuation(wi)P_{\text{continuation}}(w_i). также,λ\lambdaэто константа регуляризации, используемая для присвоения значения вероятности предыдущей скидки (то есть значение вероятности, вычтенное из высокочастотных слов, готовое для присвоения тем низкочастотным словам, которые не появляются)

λ(wi1)=dC(wi1){w:C(wi1,w)>0}\lambda(w_{i-1})=\frac{d}{C(w_{i-1})}·|\{w:C(w_{i-1},w)>0\}|

Если более общую формулу обобщения можно переписать рекурсивно, то:

PKN(wiwin+1,...,wi1)=max(0,CKN(win+1,...,wi)d)CKN(win+1,...,wi1)+λ(win+1,...,wi1)PKN(wiwin+2,...,wi1)P_{KN}(w_i|w_{i-n+1},...,w_{i-1})=\frac{\max(0, C_{KN}(w_{i-n+1},...,w_i)-d)}{C_{KN}(w_{i-n+1},...,w_{i-1})}+\lambda(w_{i-n+1},...,w_{i-1})·P_{KN}(w_i|w_{i-n+2},...,w_{i-1})

в

λ(win+1,...,wi1)=dCKN(win+1,...,wi1){w:CKN(win+1,...,wi1)>0}\lambda(w_{i-n+1},...,w_{i-1})=\frac{d}{C_{KN}(w_{i-n+1},...,w_{i-1})}·|\{w:C_{KN}(w_{i-n+1},...,w_{i-1})>0\}|

Из-за описанного выше метода рекурсивной записи нам нужно определить функцию подсчетаCKNC_{KN}, который зависит от того, на каком уровне находится N-GRAm каждого порядка в комбинации интерполяции. Например, если предположить, что модель интерполяции, которую мы используем сейчас, представляет собой комбинацию триграммы, биграммы и униграммы, то для триграммы высшего порядка нам не нужно использовать непрерывный счет (можно использовать обычный счет) при счете, в то время как другие триграммы низкого порядка, а именно биграммы и униграммы, требуют использования счетчиков продолжения. Это потому, что в униграмме мы сталкиваемся с Зеландией и можем сослаться на ее биграмму Аналогично, в биграмме мы также можем сослаться на ее триграмму, но если наивысший порядок в нашей интерполяционной комбинации — триграмма, то нет 4- грамм, чтобы сделать счетчик продолжения для меня. Формула выражается как:

CKN()={count(),for the highest ordercontinuation count(),for all other lower ordersC_{KN}(\cdot)=\begin{cases}\text{count}(\cdot) ,\quad \text{for}\ \text{the}\ \text{highest}\ \text{order}\\ \text{continuation count}(\cdot),\quad \text{for}\ \text{all}\ \text{other}\ \text{lower}\ \text{orders} \end{cases}

О сглаживании рассказывается здесь, заинтересованные читатели могут обратиться к соответствующим материалам, чтобы узнать больше.

Рекомендуемое чтение:An Empirical Study of Smoothing Techniques for Language Modeling