Изменения

Перейти к: навигация, поиск

Контекстное моделирование

17 104 байта добавлено, 19:04, 31 декабря 2018
Новая страница: «{{Определение |definition= '''''Контекстное моделирование''''' — ''оценка вероятности появления с…»
{{Определение
|definition=
'''''Контекстное моделирование''''' — ''оценка вероятности появления символа'' (элемента, пиксела, сэмпла и даже набора качественно разных объектов) в ''зависимости'' от непосредственно ему предыдущих, или контекста.
}}
{{Определение
|definition=
Если длина контекста ''ограничена'', то такой подход будем называть '''''контекстным моделированием ограниченного порядка''''' (''finite-context modeling''), при этом под порядком понимается ''максимальная длина'' используемых контекстов <tex>N</tex>.
}}
===Оценка вероятности===
Оценки вероятностей при контекстном моделировании строятся на основании ''обычных счетчиков частот'', связанных с текущим контекстом. Если мы обработали строку <tex>“кускувукус”</tex>, то для контекста <tex>“ку”</tex> счетчик символа <tex>c</tex> равен двум, символ <tex>в</tex> — ''единице''. На основании этого статистики можно утверждать, что вероятность появления <tex>c</tex> после <tex>“ку”</tex> равна <tex> \dfrac{2}{3}</tex> , а вероятность появления <tex>в</tex> равна <tex> \dfrac{1}{3}</tex>, т.е. Оценки формируются на основе уже просмотренной части потока.
{{Определение
|definition=
'''''Порядок контекстной модели''''' — длина соответствующего этой модели контекста . Если порядок <tex>КМ</tex> равен <tex>o</tex>, то будем обозначать такую <tex>КМ</tex> как <tex>“КМ(o)”</tex>
}}
===Пример===
Рассмотрим процесс оценки отмеченного на рисунке стрелочкой символа <tex>л</tex>, встречающегося в блоке <tex>“молочное</tex>'''''_'''''<tex>молоко”</tex>
[[Файл: milk.png|350px|thumb|right|рис. 1]]
Пусть мы используем ''контекстное моделирование'' порядка <tex>2</tex> и делаем ''полное'' смешивание оценок распределений вероятностей в <tex>КМ</tex> второго первого и нулевого порядка с весами <tex>0.6</tex>, <tex>0.3</tex> и <tex>0.1</tex>. Считаем, что в начале кодирования в <tex>КМ(o)</tex> создаются счетчики для всех символов алфавита <tex>\{“м”, “о”, “л”, “ч”, “н”, “е”,“\_”, “к”\}</tex> и инициализируются ''единицей''; счетчик символа после его обработки увеличивается на единицу. Для текущего символа <tex>л</tex> имеются контексты <tex>“мо”</tex>, <tex>“о”</tex> и <tex>“”</tex> (0-го порядка). К данному моменту для них накоплена статистика, показанная в ''таблице''
{| style="background-color:#CCC;margin:0.5px"
!style="background-color:#EEE"| Порядок
!style="background-color:#EEE"|
!style="background-color:#EEE"| <tex>“м”</tex>
!style="background-color:#EEE"| <tex>“о”</tex>
!style="background-color:#EEE"| <tex>“л”</tex>
!style="background-color:#EEE"| <tex>“ч”</tex>
!style="background-color:#EEE"| <tex>“н”</tex>
!style="background-color:#EEE"| <tex>“е”</tex>
!style="background-color:#EEE"| <tex>“</tex>'''''_'''''<tex>”</tex>
!style="background-color:#EEE"| <tex>“к”</tex>
|-
|style="background-color:#FFF;padding:2px 30px"| <tex>КМ(0)</tex>
|style="background-color:#FFF;padding:2px 30px"| Частоты
|style="background-color:#FFF;padding:2px 35px"| <tex>3</tex>
|style="background-color:#FFF;padding:2px 35px"| <tex>5</tex>
|style="background-color:#FFF;padding:2px 35px"| <tex>2</tex>
|style="background-color:#FFF;padding:2px 35px"| <tex>2</tex>
|style="background-color:#FFF;padding:2px 35px"| <tex>2</tex>
|style="background-color:#FFF;padding:2px 35px"| <tex>2</tex>
|style="background-color:#FFF;padding:2px 35px"| <tex>2</tex>
|style="background-color:#FFF;padding:2px 35px"| <tex>1</tex>
|-
|style="background-color:#FFF;padding:2px 30px"| <tex>КМ(0)</tex>
|style="background-color:#FFF;padding:2px 30px"| Накопленные Частоты
|style="background-color:#FFF;padding:2px 35px"| <tex>3</tex>
|style="background-color:#FFF;padding:2px 35px"| <tex>8</tex>
|style="background-color:#FFF;padding:2px 30px"| <tex>10</tex>
|style="background-color:#FFF;padding:2px 30px"| <tex>12</tex>
|style="background-color:#FFF;padding:2px 30px"| <tex>14</tex>
|style="background-color:#FFF;padding:2px 30px"| <tex>16</tex>
|style="background-color:#FFF;padding:2px 30px"| <tex>18</tex>
|style="background-color:#FFF;padding:2px 30px"| <tex>19</tex>
|-
|style="background-color:#FFF;padding:2px 30px"| <tex>КМ(1)</tex>
|style="background-color:#FFF;padding:2px 30px"| Частоты
|style="background-color:#FFF;padding:2px 30px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 30px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 35px"| <tex>1</tex>
|style="background-color:#FFF;padding:2px 35px"| <tex>1</tex>
|style="background-color:#FFF;padding:2px 30px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 35px"| <tex>1</tex>
|style="background-color:#FFF;padding:2px 30px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 30px"| <tex> — </tex>
|-
|style="background-color:#FFF;padding:2px 30px"| <tex>КМ(1)</tex>
|style="background-color:#FFF;padding:2px 30px"| Накопленные Частоты
|style="background-color:#FFF;padding:2px 30px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 30px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 35px"| <tex>1</tex>
|style="background-color:#FFF;padding:2px 35px"| <tex>2</tex>
|style="background-color:#FFF;padding:2px 30px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 35px"| <tex>3</tex>
|style="background-color:#FFF;padding:2px 30px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 30px"| <tex> — </tex>
|-
|style="background-color:#FFF;padding:2px 30px"| <tex>КМ(2)</tex>
|style="background-color:#FFF;padding:2px 30px"| Частоты
|style="background-color:#FFF;padding:2px 30px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 30px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 35px"| <tex>1</tex>
|style="background-color:#FFF;padding:2px 30px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 30px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 30px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 30px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 30px"| <tex> — </tex>
|-
|style="background-color:#FFF;padding:2px 30px"| <tex>КМ(2)</tex>
|style="background-color:#FFF;padding:2px 30px"| Накопленные Частоты
|style="background-color:#FFF;padding:2px 30px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 30px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 35px"| <tex>1</tex>
|style="background-color:#FFF;padding:2px 30px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 30px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 30px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 30px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 30px"| <tex> — </tex>
|}
Оценка вероятности для символа <tex>л</tex> будет равна <tex> q(л) = 0.1*\dfrac{2}{19}+0.3*\dfrac{1}{3}+0.6*\dfrac{1}{1} = 0.71 </tex>
==Метод PPM==
===Описание===
<tex>РРМ</tex> относится к ''адаптивным'' методам моделирования. Исходно кодеру и декодеру поставлена в соответствие ''начальная'' модель источника данных. Будем считать, что она состоит из <tex>КМ(-1)</tex>, присваивающей одинаковую вероятность всем символам алфавита входной последовательности. После обработки текущего символа кодер и декодер изменяют свои модели одинаковым образом, в частности ''наращивая'' величину оценки вероятности рас­сматриваемого символа. Следующий символ кодируется (декодируется) на основании новой, измененной модели, после чего модель снова модифици­руется и т. д. На каждом шаге обеспечивается ''идентичность'' модели кодера и декодера за счет применения одинакового механизма ее обновления.
===Пример===
Имеется последовательность символов <tex>“абвавабввбббв”</tex> алфавита <tex> \{“а”, “б”, “в”, “г”\}</tex>, которая уже была ''закодирована''.
[[Файл: Qq.png|350px|thumb|right|рис. 2]]
[[Файл: PpmPart.png|350px|thumb|right|рис. 3]]
Пусть счетчик символа ухода равен единице для всех <tex>КМ</tex>, при обновлении модели счетчики символов увеличиваются на единицу во всех активных <tex>КМ</tex>, применяется ''метод исключения'' и максимальная длина ''контекста'' равна трем, т. е. <tex>N = 3</tex>.
Первоначально модель состоит из <tex>КМ(-1)</tex>, в которой счетчики всех четырех символов алфавита имеют значение <tex>1</tex>. Состояние модели обработки последовательности <tex>“абвавабввбббв”</tex> представлено на <tex>рис. 3</tex>, где прямоугольниками обозначены контекстные модели, при этом для каждой КМ указан курсивом контекст, а также встречавшиеся в контексте символы и их частоты.
{| style="background-color:#CCC;margin:0.5px"
!style="background-color:#EEE"| <tex>Символ</tex>
!style="background-color:#EEE"| <tex>КМ(3)</tex>
!style="background-color:#EEE"| <tex>КМ(2)</tex>
!style="background-color:#EEE"| <tex>КМ(1)</tex>
!style="background-color:#EEE"| <tex>КМ(0)</tex>
!style="background-color:#EEE"| <tex>КМ(-1)</tex>
!style="background-color:#EEE"| <tex>Шанс</tex>
!style="background-color:#EEE"| <tex>Бит</tex>
|-
|style="background-color:#FFF;padding:2px 20px"| <tex>a</tex>
|style="background-color:#FFF;padding:2px 20px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 20px"| <tex>\dfrac{1}{2+1}</tex>
|style="background-color:#FFF;padding:2px 35px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 20px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 20px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 20px"| <tex>\dfrac{1}{3}</tex>
|style="background-color:#FFF;padding:2px 20px"| <tex>1.6</tex>
|-
|style="background-color:#FFF;padding:2px 20px"| <tex>б</tex>
|style="background-color:#FFF;padding:2px 20px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 20px"| <tex>\dfrac{1}{2+1}</tex>
|style="background-color:#FFF;padding:2px 20px"| <tex> \dfrac{1}{1+1} </tex>
|style="background-color:#FFF;padding:2px 20px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 20px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 20px"| <tex>\dfrac{1}{6}</tex>
|style="background-color:#FFF;padding:2px 20px"| <tex>2.6</tex>
|-
|style="background-color:#FFF;padding:2px 20px"| <tex>в</tex>
|style="background-color:#FFF;padding:2px 20px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 20px"| <tex>\dfrac{1}{2+1}</tex>
|style="background-color:#FFF;padding:2px 35px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 20px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 20px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 20px"| <tex>\dfrac{1}{3}</tex>
|style="background-color:#FFF;padding:2px 20px"| <tex>1.6</tex>
|-
|style="background-color:#FFF;padding:2px 20px"| <tex>г</tex>
|style="background-color:#FFF;padding:2px 20px"| <tex> — </tex>
|style="background-color:#FFF;padding:2px 20px"| <tex>\dfrac{1}{2+1}</tex>
|style="background-color:#FFF;padding:2px 20px"| <tex> \dfrac{1}{1+1} </tex>
|style="background-color:#FFF;padding:2px 25px"| <tex> 1 </tex>
|style="background-color:#FFF;padding:2px 25px"| <tex> 1 </tex>
|style="background-color:#FFF;padding:2px 20px"| <tex>\dfrac{1}{6}</tex>
|style="background-color:#FFF;padding:2px 20px"| <tex>2.6</tex>
|}
Пусть текущий символ равен <tex>г</tex>, т. е. <tex>?</tex> = <tex>г</tex>, тогда процесс его кодирования будет выглядеть следующим образом.
Сначала рассматривается контекст <tex>3</tex>-го порядка <tex>“ббв”</tex>. Ранее он не встре­чался, поэтому кодер, ничего не послав на выход, переходит к анализу ста­тистики для контекста <tex>2</tex>-го порядка. В этом контексте (<tex>“бв”</tex>) встречались символ <tex>а</tex> и символ <tex>в</tex>, счетчики которых в соответствующей <tex>КМ</tex> равны <tex>1</tex> каждый, поэтому ''символ ухода'' кодируется с вероятностью <tex>\dfrac{1}{2+1}</tex>, где в знаменателе число <tex>2</tex> — наблюдавшаяся частота появления контекста <tex>“бв”</tex>, <tex>1</tex> — значение счетчика ''символа ухода''. В контексте <tex>1</tex>-го порядка <tex>в</tex> дважды встречался символ <tex>а</tex>, который исключается (маскируется), один раз также исключаемый <tex>в</tex> и один раз <tex>б</tex>, поэтому оценка вероятности ухода будет ''равна'' <tex>\dfrac{1}{1+1}</tex>. В <tex>КМ(0)</tex> символ <tex>г</tex> также оценить ''нельзя'', при­чем все имеющиеся в этой <tex>КМ</tex> символы <tex>а</tex>, <tex>б</tex>, <tex>в</tex> исключаются, так как уже встречались нам в <tex>КМ</tex> более высокого порядка. Поэтому вероятность ухода получается равной ''единице''. Цикл оценивания завершается на уровне <tex>КМ(-1)</tex>, где <tex>г</tex> к этому времени остается ''единственным'' до сих пор не попавшимся символом, поэтому он получает вероятность <tex>1</tex> и кодируется посредством <tex>0\ бит</tex>. Таким образом, при использовании хорошего статисти­ческого кодировщика для представления <tex>г</tex> потребуется в целом примерно <tex>2.6\ бит</tex>.
Перед обработкой следующего символа создается <tex>КМ</tex> для строки <tex>“ббв”</tex> и производится модификация счетчиков символа <tex>г</tex> в созданной и во всех просмотренных <tex>КМ</tex>. В данном случае требуется изменение <tex>КМ</tex> всех порядков от <tex>0</tex> до <tex>N</tex>.
23
правки

Навигация