Контекстное моделирование — различия между версиями
SchrodZzz (обсуждение | вклад) (Дописан пример декодирования для PPM) (Метки: правка с мобильного устройства, правка из мобильной версии) |
SchrodZzz (обсуждение | вклад) (Добавлена проблема нулевой частоты, источники информации, см. также, пример декодирования PPM, а так же исправлены небольшие ошибки) (Метки: правка с мобильного устройства, правка из мобильной версии) |
||
Строка 8: | Строка 8: | ||
}} | }} | ||
===Оценка вероятности=== | ===Оценка вероятности=== | ||
− | Оценки вероятностей при контекстном моделировании строятся на основании ''обычных счетчиков частот'', связанных с текущим контекстом. Если мы обработали строку <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>, т.е. Оценки формируются на основе уже просмотренной части потока. | + | Оценки вероятностей при контекстном моделировании строятся на основании ''обычных счетчиков частот'', связанных с текущим контекстом. Если мы обработали строку <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= | |definition= | ||
Строка 95: | Строка 95: | ||
|style="background-color:#FFF;padding:2px 30px"| <tex> — </tex> | |style="background-color:#FFF;padding:2px 30px"| <tex> — </tex> | ||
|} | |} | ||
− | Оценка вероятности для символа <tex>л</tex> будет равна <tex> q(л) = 0.1 | + | Оценка вероятности для символа <tex>л</tex> будет равна <tex> q(л) = 0.1\cdot\dfrac{2}{19}+0.3\cdot\dfrac{1}{3}+0.6\cdot\dfrac{1}{1} = 0.71 </tex> |
==Метод PPM== | ==Метод PPM== | ||
===Описание=== | ===Описание=== | ||
Строка 166: | Строка 166: | ||
!style="background-color:#EEE"| <tex>Кодовое\ пространство</tex> | !style="background-color:#EEE"| <tex>Кодовое\ пространство</tex> | ||
|- | |- | ||
− | |style="background-color:#FFF;padding:2px 30px"| <tex> | + | |style="background-color:#FFF;padding:2px 30px"| <tex>а</tex> |
+ | |style="background-color:#FFF;padding:2px 30px"| <tex> 0 </tex> | ||
+ | |style="background-color:#FFF;padding:2px 90px"| <tex> — </tex> | ||
+ | |style="background-color:#FFF;padding:2px 90px"| <tex> — </tex> | ||
+ | |style="background-color:#FFF;padding:2px 60px"| <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"| <tex> 1 </tex> | ||
|style="background-color:#FFF;padding:2px 90px"| <tex>\dfrac{1}{3}</tex> | |style="background-color:#FFF;padding:2px 90px"| <tex>\dfrac{1}{3}</tex> | ||
|style="background-color:#FFF;padding:2px 90px"| <tex>\dfrac{1}{3}</tex> | |style="background-color:#FFF;padding:2px 90px"| <tex>\dfrac{1}{3}</tex> | ||
|style="background-color:#FFF;padding:2px 60px"| <tex> [0 ... 0.33) </tex> | |style="background-color:#FFF;padding:2px 60px"| <tex> [0 ... 0.33) </tex> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
|style="background-color:#FFF;padding:2px 30px"| <tex>в</tex> | |style="background-color:#FFF;padding:2px 30px"| <tex>в</tex> | ||
Строка 197: | Строка 197: | ||
|} | |} | ||
Хороший кодировщик должен отобразить символ <tex>s</tex> с оценкой вероятности <tex>q(s)</tex> в код длины <tex>\log_2 q(s)</tex>, что и обеспечит сжатие всей обрабатываемой последовательности в целом. | Хороший кодировщик должен отобразить символ <tex>s</tex> с оценкой вероятности <tex>q(s)</tex> в код длины <tex>\log_2 q(s)</tex>, что и обеспечит сжатие всей обрабатываемой последовательности в целом. | ||
+ | ==Проблема нулевой частоты== | ||
+ | {{Определение | ||
+ | |definition= | ||
+ | '''''Проблема нулевой частоты''''' (''zero frequency problem'') — проблема обработки новых символов, ещё не встречавшихся во входном потоке | ||
+ | }} | ||
+ | На сегодняшний день можно выделить ''два'' подхода к решению этой проблемы: ''априорные'' методы, основанные на предположениях о природе сжимаемых данных, и ''адаптивные методы'', которые пытаются приспособиться к сжимаемым данным. | ||
+ | ===Априорные методы=== | ||
+ | {{Определение | ||
+ | |definition= | ||
+ | <tex>С</tex> — общее число просмотров контекста | ||
+ | <tex>Q</tex> — количество разных символов в контексте | ||
+ | |||
+ | <tex>Q_i</tex> — количество таких разных символов, что они встречались в контексте ровно <tex>i</tex> раз | ||
+ | <tex>Esc_x</tex> — <tex>ОВУ</tex>(''оценка вероятности кода ухода'') по методу <tex>x</tex> | ||
+ | }} | ||
+ | Изобретатели алгоритма PPM предложили два метода ОВУ: так называемые метод A и метод B. Частные случаи алгоритма PPM с использованием этих методов называются, соответственно, PPMA и PPMB. | ||
+ | |||
+ | <tex>PPMA:\ Esc_A = \dfrac{1}{С + 1}</tex> | ||
+ | |||
+ | <tex>PPMB:\ Esc_B = \dfrac{Q - Q_1}{С}</tex> | ||
+ | |||
+ | Затем был разработан метод С, а в след за ним метод D: | ||
+ | |||
+ | <tex>PPMC:\ Esc_C = \dfrac{Q}{С + Q}</tex> | ||
+ | |||
+ | <tex>PPMD:\ Esc_D = \dfrac{Q}{2*С}</tex> | ||
+ | |||
+ | ===Адаптивные методы=== | ||
+ | {{Определение | ||
+ | |definition= | ||
+ | <tex>SEE</tex> (''Secondary Escape Estimation'') — модель оценки, которая ''адаптируется'' к обрабатываемым данным | ||
+ | }} | ||
+ | Для нахождения <tex>ОВУ</tex> строятся <tex>контексты\ ухода</tex> (''Escape Context''), формируемые из различный полей. Всего используется <tex>4</tex> поля, в которых содержится информация о: | ||
+ | *порядке PPM-контекста | ||
+ | *количестве уходов | ||
+ | *количестве успешных кодирований | ||
+ | *последних двух символах PPM-контекста. | ||
+ | |||
+ | <tex>ОВУ</tex> для текущего контекста находится путем взвешивания оценок, которые дают три контекста ухода (<tex>order-2\ EC</tex>, <tex>order-1\ EC</tex>, <tex>order-0\ EC</tex>), соответствующие текущему <tex>PPM</tex>-контексту. <tex>Order-2\ EC</tex> наиболее точно соответствует ''текущему'' контексту, контексты ''ухода'' порядком ниже формируются путем выбрасывания части информации полей <tex>order-2\ EC</tex>. При взвешивании контекстов ухода используются следующие веса <tex>w</tex>: | ||
+ | |||
+ | <tex>\dfrac{1}{w} = p \cdot log_2 \dfrac{1}{p} + (1 - p) \cdot log_2 \dfrac{1}{1 - p}</tex>, где <tex>p - ОВУ</tex>, которую дает данный взвешиваемый контекст | ||
+ | {{Определение | ||
+ | |definition= | ||
+ | <tex>p_i</tex> формируется из фактического количества успешных кодирований и количества уходов в <tex>PPM</tex>-контекстах, соответствующих этому <tex>EC</tex> | ||
+ | }} | ||
+ | <tex>PPMZ:\ Esc_z = \dfrac{\sum\limits_{i \in [0, 2]} w_{i}\cdot p_{i}}{\sum\limits_{i \in [0, 2]} w_{i}}</tex> | ||
+ | |||
+ | ==См. также== | ||
+ | *[[Алгоритм LZMA]] | ||
+ | *[[Алгоритм Хаффмана]] | ||
+ | *[[Арифметическое кодирование]] | ||
+ | |||
+ | ==Источники информации== | ||
+ | *[ftp://ftp.cs.brown.edu/pub/techreports/93/cs93-28.pdf The design and analysis of efficient lossless data compression systems] | ||
+ | *[http://rahilshaikh.weebly.com/uploads/1/1/6/3/11635894/data_compression.pdf Introduction to Data Compression] | ||
+ | *[https://en.wikipedia.org/wiki/Prediction_by_partial_matching Prediction by partial matching] | ||
+ | *[http://ctxmodel.net/files/PPMd/ShkarinPPMII.pdf PPM one step to practicality] | ||
+ | *[http://www.compression.ru/book/pdf/compression_methods_part1_2-4.pdf Методы сжатия данных] | ||
+ | |||
+ | [[Категория: Дискретная математика и алгоритмы]] | ||
+ | [[Категория: Алгоритмы сжатия]] |
Версия 21:27, 31 декабря 2018
Определение: |
Контекстное моделирование — оценка вероятности появления символа (элемента, пиксела, сэмпла и даже набора качественно разных объектов) в зависимости от непосредственно ему предыдущих, или контекста. |
Определение: |
Если длина контекста ограничена, то такой подход будем называть контекстным моделированием ограниченного порядка (finite-context modeling), при этом под порядком понимается максимальная длина используемых контекстов | .
Содержание
Оценка вероятности
Оценки вероятностей при контекстном моделировании строятся на основании обычных счетчиков частот, связанных с текущим контекстом. Если мы обработали строку
, то для контекста счетчик символа равен двум, символ — единице. На основании этого статистики можно утверждать, что вероятность появления после равна , а вероятность появления равна , т.е. Оценки формируются на основе уже просмотренной части потока.Определение: |
Порядок контекстной модели — длина соответствующего этой модели контекста . Если порядок | равен , то будем обозначать такую как
Пример
Рассмотрим процесс оценки отмеченного на рисунке стрелочкой символа
, встречающегося в блоке _Пусть мы используем контекстное моделирование порядка
и делаем полное смешивание оценок распределений вероятностей в второго первого и нулевого порядка с весами , и . Считаем, что в начале кодирования в создаются счетчики для всех символов алфавита и инициализируются единицей; счетчик символа после его обработки увеличивается на единицу. Для текущего символа имеются контексты , и (0-го порядка). К данному моменту для них накоплена статистика, показанная в таблицеПорядок | _ | ||||||||
---|---|---|---|---|---|---|---|---|---|
Частоты | |||||||||
Накопленные Частоты | |||||||||
Частоты | |||||||||
Накопленные Частоты | |||||||||
Частоты | |||||||||
Накопленные Частоты |
Оценка вероятности для символа
будет равнаМетод PPM
Описание
(Prediction by partial matching) относится к адаптивным методам моделирования. Исходно кодеру и декодеру поставлена в соответствие начальная модель источника данных. Будем считать, что она состоит из , присваивающей одинаковую вероятность всем символам алфавита входной последовательности. После обработки текущего символа кодер и декодер изменяют свои модели одинаковым образом, в частности наращивая величину оценки вероятности рассматриваемого символа. Следующий символ кодируется (декодируется) на основании новой, измененной модели, после чего модель снова модифицируется и т. д. На каждом шаге обеспечивается идентичность модели кодера и декодера за счет применения одинакового механизма ее обновления.
Пример
Кодирование
Имеется последовательность символов
алфавита , которая уже была закодирована.Пусть счетчик символа ухода равен единице для всех
, при обновлении модели счетчики символов увеличиваются на единицу во всех активных , применяется метод исключения и максимальная длина контекста равна трем, т. е. . Первоначально модель состоит из , в которой счетчики всех четырех символов алфавита имеют значение . Состояние модели обработки последовательности представлено на , где прямоугольниками обозначены контекстные модели, при этом для каждой КМ указан курсивом контекст, а также встречавшиеся в контексте символы и их частоты.Пусть текущий символ равен
, т. е. = , тогда процесс его кодирования будет выглядеть следующим образом. Сначала рассматривается контекст -го порядка . Ранее он не встречался, поэтому кодер, ничего не послав на выход, переходит к анализу статистики для контекста -го порядка. В этом контексте ( ) встречались символ и символ , счетчики которых в соответствующей равны каждый, поэтому символ ухода кодируется с вероятностью , где в знаменателе число — наблюдавшаяся частота появления контекста , — значение счетчика символа ухода. В контексте -го порядка дважды встречался символ , который исключается (маскируется), один раз также исключаемый и один раз , поэтому оценка вероятности ухода будет равна . В символ также оценить нельзя, причем все имеющиеся в этой символы , , исключаются, так как уже встречались нам в более высокого порядка. Поэтому вероятность ухода получается равной единице. Цикл оценивания завершается на уровне , где к этому времени остается единственным до сих пор не попавшимся символом, поэтому он получает вероятность и кодируется посредством . Таким образом, при использовании хорошего статистического кодировщика для представления потребуется в целом примерно . Перед обработкой следующего символа создается для строки и производится модификация счетчиков символа в созданной и во всех просмотренных . В данном случае требуется изменение всех порядков от до .Декодирование
Алгоритм декодирования абсолютно симметричен алгоритму кодирования. После декодирования символа в текущей
проверяется, не является ли он символом ухода; если это так, то выполняется переход к порядком ниже. Иначе считается, что исходный символ восстановлен, он записывается в декодированный поток и осуществляется переход к следующему шагу. Содержание процедур обновления счетчиков, создания новых контекстных моделей, прочих вспомогательных действий и последовательность их применения должны быть строго одинаковыми при кодировании и декодировании. Иначе возможна рассинхронизация копий модели кодера и декодера, что рано или поздно приведет к ошибочному декодированию какого-то символа. Начиная с этой позиции вся оставшаяся часть сжатой последовательности будет разжата неправильно. Разница между кодами символов, оценки вероятности которых одинаковы, достигается за счет того, что -предсказатель передает кодировщику так называемые накопленные частоты (или накопленные вероятности) оцениваемого символа и его соседей или кодовые пространства символов. Так, например, для контекста можно составить следующую таблицу:Хороший кодировщик должен отобразить символ
с оценкой вероятности в код длины , что и обеспечит сжатие всей обрабатываемой последовательности в целом.Проблема нулевой частоты
Определение: |
Проблема нулевой частоты (zero frequency problem) — проблема обработки новых символов, ещё не встречавшихся во входном потоке |
На сегодняшний день можно выделить два подхода к решению этой проблемы: априорные методы, основанные на предположениях о природе сжимаемых данных, и адаптивные методы, которые пытаются приспособиться к сжимаемым данным.
Априорные методы
Определение: |
— количество разных символов в контексте — количество таких разных символов, что они встречались в контексте ровно раз — (оценка вероятности кода ухода) по методу | — общее число просмотров контекста
Изобретатели алгоритма PPM предложили два метода ОВУ: так называемые метод A и метод B. Частные случаи алгоритма PPM с использованием этих методов называются, соответственно, PPMA и PPMB.
Затем был разработан метод С, а в след за ним метод D:
Адаптивные методы
Определение: |
(Secondary Escape Estimation) — модель оценки, которая адаптируется к обрабатываемым данным |
Для нахождения
строятся (Escape Context), формируемые из различный полей. Всего используется поля, в которых содержится информация о:- порядке PPM-контекста
- количестве уходов
- количестве успешных кодирований
- последних двух символах PPM-контекста.
для текущего контекста находится путем взвешивания оценок, которые дают три контекста ухода ( , , ), соответствующие текущему -контексту. наиболее точно соответствует текущему контексту, контексты ухода порядком ниже формируются путем выбрасывания части информации полей . При взвешивании контекстов ухода используются следующие веса :
, где , которую дает данный взвешиваемый контекст
Определение: |
формируется из фактического количества успешных кодирований и количества уходов в -контекстах, соответствующих этому |