PAQ

Поделись знанием:
Перейти к: навигация, поиск

PAQ — серия свободных архиваторов с текстовым интерфейсом, которые общими усилиями разработчиков поднялись в первые места рейтингов многих тестов сжатия данных (хотя и ценой процессорного времени и объёма памяти). Лучший результат в этой серии на большинстве тестов был получен архиватором PAQ8JD, созданным совместными усилиями Мэтта Махони (Matt Mahoney), Александра Ратушняка, Сергея Оснача, Пшемыслава Скибиньского (Przemysław Skibiński) и Билла Петтиса (Bill Pettis), и выпущенным 30 декабря 2006 года. Однако в некоторых тестах он отстаёт от WinRK (созданного Малькомом Тейлором в январе 2005 года) в режиме PWCM. PWCM (англ. PAQ weighted context mixing, «PAQ взвешенное смешивание контекстов») — сторонняя проприетарная реализация алгоритма PAQ. Специально настроенные версии алгоритма PAQ выиграли призы в [prize.hutter1.net Приз Хаттера] и [mailcom.com/challenge Калгари Корпус Челлендж].





Алгоритм

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

  • n-граммы — контекст; предыдущие n байт (как в PPM).
  • словарные n-граммы, игнорирующие регистр и неалфавитные символы (полезны в текстовых данных).
  • «разрежённые» контексты, например, второй и четвёртый символы перед кодируемым (полезны в некоторых бинарных форматах).
  • «аналоговые» контексты, состоящие из верхней половины двоичного представления 8- или 16-битных слов (полезны в мультимедийных форматах данных).
  • двумерные контексты (полезны для изображений, табличных данных). Длина ряда определяется нахождением повторяющихся паттернов байт.
  • специализированные модели, такие, как x86-исполняемые файлы или Windows Bitmap, TIFF, JPEG-изображения. Эти модели активируются, когда данный тип файла определяется.

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

  • от PAQ1 до PAQ3 каждое предсказание представлено парой битовых счётчиков <math>(n_0,n_1)</math>. Эти счётчики комбинировались взвешенным суммированием, таким, что больший вес определяется более длинным контекстом.
  • в PAQ4 до PAQ6 предсказания комбинировались, как и в первом случае, но веса, принадлежащие каждой модели, назначались так, чтобы более точные модели получали преимущество.
  • в PAQ7 и более поздних версиях выход каждой модели есть вероятность <math>[0;4095]</math>, в отличие от пары счётчиков, вероятности суммируются при помощи искусственных нейронных сетей.

PAQ1SSE и позднейшие версии использовали пост-обработку предсказания методом вторичной оценки символа (SSE — Secondary Symbol Estimation), то есть комбинированное предсказание и небольшой контекст использовались для выбора следующего предсказания по таблице. После того, как символ был закодирован, данные в таблице корректировались для уменьшения ошибки предсказания. Вторичная оценка символа может быть объединена в один процесс с разными контекстами либо может выполняться параллельно, усредняясь с выходами моделей.

Арифметическое кодирование

Строка s сжимается в байтовую строку, представляющую число x в 256-значной системе исчисления big endian в интервале [0;1), такое, что P(r < s) ≤ x < P(r ≤ s), где P(r < s) - вероятность, что случайная строка r такой же длины, как s, лексикографически меньше, чем s. Всегда возможно найти такую строку x, что длина её хотя бы на один байт превосходит лимит Шеннона: -log2 P(r = s) бит. Длина s сохраняется в заголовке архива.

Арифметический кодер в PAQ реализован путём хранения верхней и нижней границ x для каждого шага предсказания, начально [0;1]. После каждого предсказания текущий интервал делится пропорционально вероятностям того, что следующий бит будет 0 и следующий бит будет 1, на основании предыдущих битов s. Следующий бит кодируется, выбирая соответствующий подынтервал как новый интервал.

Число x декомпрессируется в строку s идентичной серией битовых предсказаний (так как предыдущие биты s известны). Интервал делится как при сжатии. Часть, содержащая x, становится новым интервалом, и соответствующий бит добавляется к s.

В PAQ верхняя и нижняя границы интервала представляются тремя частями. Наиболее значимые разряды по основанию 256 идентичны, так они могут быть записаны как старшие байты x. Следующие 4 байта хранятся в памяти так, что старший байт различается. Младшие биты подразумеваются все нулями для нижней границы и все единицами для верхней границы. Кодирование завершается записью ещё одного байта из нижней границы.

Адаптивное взвешивание моделей

В PAQ версиях до PAQ6 каждая модель отображала множество различных контекстов на пару счётчиков: <math>n_0</math> — количество нулевых битов и <math>n_1</math> — количество единичных битов. Для увеличения значимости более поздней истории битов счётчик уменьшался почти вдвое, когда противоположный бит встречался. Например, текущее состояние модели, ассоциированное с контекстом <math>(n_0,n_1) = (12,3)</math> и бит 1 наблюдается на входе — счётчик обновляется до состояния (7,4).

Бит сжимается арифметическим кодером соответственно его вероятности либо P(1), либо P(0)=1-P(1). Вероятности вычисляются взвешенным суммированием счётчиков нулей и единиц:

  • <math>S_0 = \Sigma_1 w_i n_{0i}</math>
  • <math>S_1 = \Sigma_1 w_i n_{1i}</math>
  • <math>S = S_0 + S_1</math>
  • <math>P(0) = \frac{S_0}{S}</math>
  • <math>P(1) = \frac{S_1}{S}</math>,

где <math>w_i</math> вес i-той модели. До PAQ3 веса были фиксированными и устанавливались в случайном порядке (контексты порядка n имели вес n²). Начиная с PAQ4 веса выбирались адаптивно в направлении уменьшения ошибки предсказания в одинаковых наборах контекстов. Если требуется закодировать бит y, то веса назначаются следующим образом:

  • ni = n0i + n1i
  • ошибка = y − P(1)
  • <math>w_i \gets w_i + \frac{S\,n_{1i} - S_1 n_i}{S_0 S_1}</math> ошибка

Нейронные сети для смешивания

Начиная с PAQ7 выходом каждой модели является предсказание (вместо пары счётчиков). Предсказания усредняются в логистическом домене по формуле:

  • xi = сжать(Pi(1))
  • P(1) = размыть(Σi wi xi),

где P(1) — вероятность того, что следующий бит будет единицей, а Pi(1) — вероятность, оцененная i-той моделью и

  • сжать(x) = ln(x / (1 - x))
  • размыть(x) = 1 / (1 + e-x) (операция, обратная операции «сжать»).

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

  • wi ← η xi (y - P(1)),

где η — коэффициент обучения (обычно от 0.002 до 0.01), y — предсказанный бит и (y - P(1)) — ошибка предсказания. Алгоритм обновления весов отличается от привычного в нейронных сетях обучающего метода обратного распространения ошибки в том, что произведение P(0)P(1) не учитывается, потому что цель нейронной сети — минимизация стоимости кодирования, а не среднеквадратичной ошибки.

Большинство версий PAQ используют небольшой контекст при выборе набора весов для нейронной сети. Некоторые версии используют двух- и трёхшаговые предсказатели, состоящие из соответственно двух или трёх множеств нейронных сетей, выход каждой предыдущей является входом для следующего множества сетей, мощность которого меньше, и затем следует вторичная оценка символа. Более того, для каждого входящего предсказания может быть несколько входов, являющихся нелинейными функциями Pi(1) в дополнение к сжать(P(1)).

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

Каждая модель разделяет входящий поток бит s на множество контекстов и отображает каждый контекст на состояние истории битов, представленное 8 битами. В версиях до PAQ6 состояние было представлено парой счётчиков (n0, n1). В PAQ7 и более поздних состояние содержало при определённых условиях также последний бит или целую последовательность. Значения состояний отображаются в вероятности, используя 256-значную таблицу. После табличного предсказания значение в таблице немного выравнивалось (обычно до 0,4 %) для уменьшения погрешности предсказания.

Во всех PAQ8-версиях состояния истории битов содержат следующую информацию:

  • Точная последовательность до 4 битов.
  • Пара счётчиков и индикатор для последнего бита для последовательностей от 5 до 15 бит.
  • Пара счётчиков для последовательностей от 16 до 41 бита.

Чтобы сохранить количество состояний равным 256, следующие ограничения были наложены на счётчики: (41, 0), (40, 1), (12, 2), (5, 3), (4, 4), (3, 5), (2, 12), (1, 40), (0, 41). Если счётчик превышает лимит, следующее состояние выбирается с подобным соотношением n0 / n1. Таким образом, если текущее состояние (n0 = 4, n1 = 4, последний бит = 0) и 1 получена на входе, тогда новое состояние не (n0 = 4, n1 = 5, последний бит = 1), а (n0 = 3, n1 = 4, последний бит = 1).

Большинство контекстных моделей реализованы как хэш-таблицы. Некоторые небольшие контексты реализованы как индексные массивы.

Предварительная обработка текста

Некоторые версии PAQ, в особенности PAsQDAa, PAQAR (обе произошли от PAQ6), и от PAQ8HP1 до PAQ8HP8 (потомки PAQ8 и одержавшие верх в Призе Хаттера[prize.hutter1.net]) обрабатывают текст, просматривая его и заменяя слова из текста, содержащиеся во внешнем словаре одно- и трёх-байтными кодами. Дополнительно слова в верхнем регистре кодируются специальным символом и переводом слова в нижний регистр. В PAQ8HP-серии словарь организован группировкой синтаксически и семантически похожих слов вместе. Это позволяет использовать модели, которые используют только верхние биты словарных кодов в качестве контекстов.

История

Далее представлен список наиболее значимых изменений к алгоритму PAQ. В дополнение более мелкие множественные улучшения опущены.

  • PAQ1 был выпущен 6 января, 2002 года Мэттом Махони. Он использовал фиксированные веса и не включал разрежённые и аналоговые модели. Всего использовалось 5 моделей[1].
  • PAQ1SSE/PAQ2 был выпущен 11 мая, 2003 года Сергеем Осначем. Он значительно улучшил сжатие добавлением Вторичной Оценки Символа между предсказателем и кодировщиком. Вторичная Оценка Символа подавала на вход небольшой контекст и текущее предсказание и на выходе получалось новое предсказание из таблицы. Табличное значение затем обновлялось для отражения текущего бита.
  • PAQ3N был выпущен 9 октября, 2003. Была добавлена разрежённая модель.
  • PAQ4, выпущенный 15 ноября, 2003 Мэттом Махони, использовал адаптивное взвешивание. PAQ5 (18 декабря, 2003) и PAQ6 (30 декабря, 2003) были незначительными улучшениями, включающими аналоговую модель. К этому времени PAQ конкурировал с лучшими PPM-компрессорами и привлёк внимание сообщества людей, занимающихся сжатием данных, что привело к многочисленным улучшениям до апреля 2004. Берто Дестасио доводил модели и поправил последовательность обхода счётчиков. Йохан де Бок (Johan de Bock) внёс улучшения в интерфейс пользователя. Дэвид А. Скотт улучшил арифметический кодер. Фабио Буффони ускорил программу.
  • В период с 20 мая, 2004 по 27 июля, 2004 Александр Ратушняк выпустил семь версий архиватора PAQAR, в котором степень сжатия была значительно повышена путём добавления многих новых моделей, многочисленных миксеров с выбором весов по контексту, добавлением Вторичной Оценки Символа на выход каждого миксера и, наконец, добавлением предварительной обработки исполняемых файлов архитектуры процессоров Intel. PAQAR оставался на вершине программ сжатия данных без потерь до конца 2004 года, но был гораздо медленнее своих предшественников.
  • С 18 января по 7 февраля 2005 года Пшемыслав Скибиньский выпустил четыре версии PAsQDa, базировавшиеся на PAQ6 и PAQAR и дополненные английским словарным препроцессором. Он достиг наилучшего результата на Калгари Корпусе, но не на большинстве других тестов.
  • Модифицированная Мэттом Махони версия PAQ6 взяла приз на [mailcom.com/challenge Калгари Корпус Челлендж] 10 января 2004. Это событие перекрылось десятью последовательными версиями PAQAR Александра Ратушняка. Наиболее поздняя увидела свет 5 июня 2006 года, она состояла из сжатых вместе данных и текста программы и занимала 589 862 байта.
  • PAQ7 был выпущен в декабре 2005 года Мэттом Махони. PAQ7 — это полностью переписанный PAQ6 и его варианты (PAQAR,PAsQDa). Степень сжатия была схожа с PAQAR, но время выполнения — в 3 раза меньше. Но ему не хватало x86 и словаря, поэтому он был не так хорош для сжатия исполняемых модулей Microsoft Windows и английских текстов, как PAsQDa. Хотя он включал модели для цветных BMP, TIFF и JPEG-файлов, поэтому сжимал их лучше. Главное отличие PAQ7 было в том, что он использовал нейронную сеть для комбинирования моделей, в отличие от уменьшающего градиент миксера. Другой чертой PAQ7 была возможность сжимать встроенные в файлы Excel, Word и PDF изображения Bitmap и JPEG.
  • PAQ8A был выпущен 27 января 2006 и PAQ8C 13 февраля. Это был экспериментальный пре-релиз ожидаемого PAQ8. Он исправлял некоторые компромиссные решения в PAQ7, в частности, слабое сжатие в некоторых случаях. PAQ8A также включал в себя модели для x86-исполняемых файлов.
  • PAQ8F был выпущен 28 февраля 2006 года. PAQ8F содержал три улучшения по сравнению с PAQ8A: более эффективное использование памяти в контекстной модели, новую непрямую контекстную модель и новый интерфейс пользователя для поддержки технологии drag-n-drop под Windows. Он не содержал английского словаря, как PAQ8B/C/D/E варианты.
  • PAQ8G был выпущен 3 марта 2006 года Пшемыславом Скибиньским. PAQ8G — это PAQ8F, но со словарями и переработанной моделью препроцессора текстовых данных, которая не улучшала сжатие на нетекстовых файлах.
  • PAQ8H появился 22 марта, 2006 года благодаря Александру Ратушняку и был обновлён 24 марта, 2006 года. PAQ8H был улучшением PAQ8G в некоторых моделях.
  • Билл Петтис выпустил PAQ8J 13 ноября, 2006 года. Программа базировалась на PAQ8F с некоторыми улучшениями текстовой модели, заимствованными из PAQ8HP5. Хотя она не включала в себя словари из PAQ8G или PGM-модели из PAQ8I.
  • PAQ8JD увидел свет 30 декабря 2006 года стараниями Билла Петтиса. Программа была портирована на Win32 и 32- и 64-битную платформу Linux.
  • Билл Петтис произвёл PAQ8K 13 февраля 2007 года. В него были добавлены дополнительные модели для бинарных файлов.
  • PAQ8O был выпущен 24 августа 2007 года Андреасом Морфисом (Andreas Morphis). Он содержит улучшенные bmp и jpg модели по отношению к PAQ8L. Опционально может быть откомпилирован с поддержкой SSE2 и для 64-битных Linux. На 64-битном ядре алгоритм даёт заметный рост производительности.
  • PAQ8P был выпущен 25 августа 2008 года Андреасом Морфисом (Andreas Morphis). Содержит улучшенную bmp-модель и добавляет WAV-модель.
  • PAQ8PX появился 25 апреля 2009 года благодаря Яну Ондрусу (Jan Ondrus). Он содержит различные усовершенствования, такие, как лучшее сжатие WAV- и EXE-файлов.
  • PAQ9A был выпущен 31 декабря 2007 года Мэттом Махони. Новая экспериментальная версия. Не включает моделей для специфичных типов файлов и имеет LZP-препроцессор.

Приз Хаттера

Серия архиваторов PAQ8HP1-PAQ8HP8 была написана Александром Ратушняком с 21 августа 2006 года по 18 января 2007 года в качестве претендентов на Приз Хаттера. Приз Хаттера — это сжатие текстовых данных размером 100 MB английского текста в формате xml и кодировке UTF-8 (фрагмент дампа Википедии). PAQ8HP-серия произошла от PAQ8H. Программы включали в себя словари для предварительной обработки текста и специализированный тюнинг моделей для теста. Нетекстовые модели были удалены из программ. Словарь был сгруппирован из синтаксически и семантически близких слов с общими суффиксами. Синтаксическая группировка позволяла сжимать текстовые данные потому, что близкие по написанию слова часто появлялись вместе, и их словарные коды легко моделировались на старших битах. Семантическая группировка позволяла легче сжимать словарь. В тесте учитывался размер программы вместе со сжатым словарём.

27 октября 2006 года Приз Хаттера был анносирован Джейсом Боуери[2]. Приз получен 30 октября 2006 года после выхода PAQ8HP5 в размере 3416 евро.

23 мая 2009 года Александр Ратушняк стал третьим победителем Приза Хаттера с модификацией PAQ8HP12.

Результаты тестов

Максимальное сжатие

Тест [www.maximumcompression.com/ Максимальное сжатие] поддерживается Вернером Бергмэнсом. Он использует два набора тестовых данных — один публичный и один приватный. Публичный набор состоит из около 55-ти Мегабайт в 10 файлах различных типов: тексты разного формата, исполняемые файлы и изображения. Программы тестируются в режиме максимального сжатия за счёт использования оперативной памяти и процессорного времени в ущерб скорости. Тест использует два учитываемых критерия: система учёта сжатия каждого файла и общий размер сжатых данных. На состояние 10 февраля 2007 года в тесте участвовало 169 компрессоров. По первому критерию PAQ8JD шёл вторым после WinRK 3.0.3. По общему размеру сжатых данных PAQ8JD был первым.

Второй набор данных приватный. Он состоит из 316355757 байт в 510 файлах различных типов. Программы ранжируются по трём критериям: общему размеру, времени сжатия и формуле, учитывающей размер и время сжатия. Было проведено 200 тестовых запусков, которые включали некоторые старшие версии; некоторые программы были запущены с различными опциями для одного компрессора. По общему размеру WinRK 3.0.3 был признал первым, за ним шли PAQ8JC и PAQ8JD. PAQ отмечен в конце списка по времени сжатия. PAQ8JD выполнялся 47558 секунд (196 место) — сравнительно медленно по сравнению с наиболее быстрой программой (4 секунды), но неплохо по отношению с самой медленной (70444 секунды).

Чарт (Диаграмма) Сжатия

[www.squeezechart.com Диаграмма Сжатия ] Стефена Буша ранжирует программы по общему размеру сжатых данных 16-ти неопубликованных наборов данных общим размером 3271105873 байт. По состоянию на 20 февраля 2007 года PAQ8JC был первым в тесте 201 программы сжатия. PAQ8JD протестирован не был.

Тест Чёрная Лиса

[blackfox.wz.cz/pcman/benchmark.htm Тест Чёрная Лиса] ранжировал 111 версий 69 компрессоров на 12-ти неопубликованных файлах общим размером 30309194 байт на 4 февраля 2007 года. PAQ8JD вышел первым.

Большой Текстовый Тест

[www.cs.fit.edu/~mmahoney/compression/text.html Большой Текстовый Тест] Мэтта Махони ранжирует программы по сжатому размеру доступного публично файла размером 109 байт английского текста Википедии. В отличие от других тестов, он включает в размер сжатого файла размер декомпрессора и любых необходимых для сжатия файлов в качестве zip-архива. По состоянию на 9 февраля 2007 года PAQ8HP8 был первым из 62 программ.

PAQ очень требователен к ресурсам памяти и процессорного времени. Следующая таблица сравнивает время сжатия и распаковки на машине Athlon-64 2,2 Гигагерца, а также расход памяти в Мегабайтах для некоторых популярных программ из этого теста.

Ранг Программа Размер сжатого файла Время сжатия Память
1 PAQ8HP8 133423109 64639 секунд 1849 МБ
18 PPMd 183976014 880 секунд 256 МБ
44 bzip2 254007875 379 секунд 8 МБ
49 InfoZIP 322649703 104 секунды 0.1 МБ

Наследники PAQ

PAQ — это Свободное программное обеспечение и распространяется на условиях GNU General Public License. Это позволяет другим авторам сделать форк PAQ, и вносить такие изменения, как Графический интерфейс пользователя, либо улучшить скорость сжатия за счёт коэффициента компрессии. Наиболее известные PAQ-клоны:

  • WinUDA 0.291, базируется на PAQ6, но быстрее [www.wex.cn/dwing/mycomp.htm]
  • UDA 0.301 основывается на алгоритме PAQ8I [wex.cn/dwing/mycomp.htm]
  • KGB Archiver в основном PAQ6v2 с графическим интерфейсом (бета-версия поддерживает PAQ7-алгоритм сжатия)
  • Emilcont на основе PAQ6 [www.freewebs.com/emilcont/]
  • PeaZip — графическая оболочка (для Microsoft Windows и GNU/Linux) для PAQ8F, PAQ8JD и PAQ8L [sourceforge.net/projects/peazip/]

См. также

Напишите отзыв о статье "PAQ"

Примечания

  1. [compression.ru/download/articles/cm/shelwien_2002_paq1b.txt PAQ1: Описание модели], 2002, Matt Mahoney, v1.02
  2. [groups.google.com/group/Hutter-Prize/browse_frm/thread/3f3f80c76dd14513/ Александр Ратушняк получил первую выплату Приза Хаттера] (англ.)

Литература

  • Д. Ватолин, А. Ратушняк, М. Смирнов, В. Юкин Методы сжатия данных. Устройство архиваторов, сжатие изображений и видео Диалог-МИФИ, 2002 г., 384 стр. ISBN 5-86404-170-X. 3000 экз. Книга, без понимания которой невозможен был бы перевод данной статьи.

Ссылки

  • [mattmahoney.net/dc/index.html Сайт Проекта] (англ.) (Проверено 16 октября 2010)
  • [sourceforge.net/project/platformdownload.php?group_id=204510&sel_platform=4162 PAQ Linux Binaries] (англ.) (Проверено 7 июня 2009) — скомпилированные исполняемые файлы PAQ для Linux
  • [www.maximumcompression.com/ MaximumCompression.com] (англ.) (Проверено 7 июня 2009) — сайт, проводящий тестирование и предоставляющий данные о компрессорах на основе различных программных средств.
  • [www.compression.ru/ Крупнейший в России ресурс по сжатию данных] (рус.) (Проверено 7 июня 2009)
  • [www.compression-links.info/ Крупнейший каталог ресурсов по сжатию] (англ.) (Проверено 7 июня 2009)

Отрывок, характеризующий PAQ

– Только графиня Елена Васильевна, сочтя для себя унизительным общество каких то Бергов, могла иметь жестокость отказаться от такого приглашения. – Берг так ясно объяснил, почему он желает собрать у себя небольшое и хорошее общество, и почему это ему будет приятно, и почему он для карт и для чего нибудь дурного жалеет деньги, но для хорошего общества готов и понести расходы, что Пьер не мог отказаться и обещался быть.
– Только не поздно, граф, ежели смею просить, так без 10 ти минут в восемь, смею просить. Партию составим, генерал наш будет. Он очень добр ко мне. Поужинаем, граф. Так сделайте одолжение.
Противно своей привычке опаздывать, Пьер в этот день вместо восьми без 10 ти минут, приехал к Бергам в восемь часов без четверти.
Берги, припася, что нужно было для вечера, уже готовы были к приему гостей.
В новом, чистом, светлом, убранном бюстиками и картинками и новой мебелью, кабинете сидел Берг с женою. Берг, в новеньком, застегнутом мундире сидел возле жены, объясняя ей, что всегда можно и должно иметь знакомства людей, которые выше себя, потому что тогда только есть приятность от знакомств. – «Переймешь что нибудь, можешь попросить о чем нибудь. Вот посмотри, как я жил с первых чинов (Берг жизнь свою считал не годами, а высочайшими наградами). Мои товарищи теперь еще ничто, а я на ваканции полкового командира, я имею счастье быть вашим мужем (он встал и поцеловал руку Веры, но по пути к ней отогнул угол заворотившегося ковра). И чем я приобрел всё это? Главное умением выбирать свои знакомства. Само собой разумеется, что надо быть добродетельным и аккуратным».
Берг улыбнулся с сознанием своего превосходства над слабой женщиной и замолчал, подумав, что всё таки эта милая жена его есть слабая женщина, которая не может постигнуть всего того, что составляет достоинство мужчины, – ein Mann zu sein [быть мужчиной]. Вера в то же время также улыбнулась с сознанием своего превосходства над добродетельным, хорошим мужем, но который всё таки ошибочно, как и все мужчины, по понятию Веры, понимал жизнь. Берг, судя по своей жене, считал всех женщин слабыми и глупыми. Вера, судя по одному своему мужу и распространяя это замечание, полагала, что все мужчины приписывают только себе разум, а вместе с тем ничего не понимают, горды и эгоисты.
Берг встал и, обняв свою жену осторожно, чтобы не измять кружевную пелеринку, за которую он дорого заплатил, поцеловал ее в середину губ.
– Одно только, чтобы у нас не было так скоро детей, – сказал он по бессознательной для себя филиации идей.
– Да, – отвечала Вера, – я совсем этого не желаю. Надо жить для общества.
– Точно такая была на княгине Юсуповой, – сказал Берг, с счастливой и доброй улыбкой, указывая на пелеринку.
В это время доложили о приезде графа Безухого. Оба супруга переглянулись самодовольной улыбкой, каждый себе приписывая честь этого посещения.
«Вот что значит уметь делать знакомства, подумал Берг, вот что значит уметь держать себя!»
– Только пожалуйста, когда я занимаю гостей, – сказала Вера, – ты не перебивай меня, потому что я знаю чем занять каждого, и в каком обществе что надо говорить.
Берг тоже улыбнулся.
– Нельзя же: иногда с мужчинами мужской разговор должен быть, – сказал он.
Пьер был принят в новенькой гостиной, в которой нигде сесть нельзя было, не нарушив симметрии, чистоты и порядка, и потому весьма понятно было и не странно, что Берг великодушно предлагал разрушить симметрию кресла, или дивана для дорогого гостя, и видимо находясь сам в этом отношении в болезненной нерешительности, предложил решение этого вопроса выбору гостя. Пьер расстроил симметрию, подвинув себе стул, и тотчас же Берг и Вера начали вечер, перебивая один другого и занимая гостя.
Вера, решив в своем уме, что Пьера надо занимать разговором о французском посольстве, тотчас же начала этот разговор. Берг, решив, что надобен и мужской разговор, перебил речь жены, затрогивая вопрос о войне с Австриею и невольно с общего разговора соскочил на личные соображения о тех предложениях, которые ему были деланы для участия в австрийском походе, и о тех причинах, почему он не принял их. Несмотря на то, что разговор был очень нескладный, и что Вера сердилась за вмешательство мужского элемента, оба супруга с удовольствием чувствовали, что, несмотря на то, что был только один гость, вечер был начат очень хорошо, и что вечер был, как две капли воды похож на всякий другой вечер с разговорами, чаем и зажженными свечами.
Вскоре приехал Борис, старый товарищ Берга. Он с некоторым оттенком превосходства и покровительства обращался с Бергом и Верой. За Борисом приехала дама с полковником, потом сам генерал, потом Ростовы, и вечер уже совершенно, несомненно стал похож на все вечера. Берг с Верой не могли удерживать радостной улыбки при виде этого движения по гостиной, при звуке этого бессвязного говора, шуршанья платьев и поклонов. Всё было, как и у всех, особенно похож был генерал, похваливший квартиру, потрепавший по плечу Берга, и с отеческим самоуправством распорядившийся постановкой бостонного стола. Генерал подсел к графу Илье Андреичу, как к самому знатному из гостей после себя. Старички с старичками, молодые с молодыми, хозяйка у чайного стола, на котором были точно такие же печенья в серебряной корзинке, какие были у Паниных на вечере, всё было совершенно так же, как у других.


Пьер, как один из почетнейших гостей, должен был сесть в бостон с Ильей Андреичем, генералом и полковником. Пьеру за бостонным столом пришлось сидеть против Наташи и странная перемена, происшедшая в ней со дня бала, поразила его. Наташа была молчалива, и не только не была так хороша, как она была на бале, но она была бы дурна, ежели бы она не имела такого кроткого и равнодушного ко всему вида.
«Что с ней?» подумал Пьер, взглянув на нее. Она сидела подле сестры у чайного стола и неохотно, не глядя на него, отвечала что то подсевшему к ней Борису. Отходив целую масть и забрав к удовольствию своего партнера пять взяток, Пьер, слышавший говор приветствий и звук чьих то шагов, вошедших в комнату во время сбора взяток, опять взглянул на нее.
«Что с ней сделалось?» еще удивленнее сказал он сам себе.
Князь Андрей с бережливо нежным выражением стоял перед нею и говорил ей что то. Она, подняв голову, разрумянившись и видимо стараясь удержать порывистое дыхание, смотрела на него. И яркий свет какого то внутреннего, прежде потушенного огня, опять горел в ней. Она вся преобразилась. Из дурной опять сделалась такою же, какою она была на бале.
Князь Андрей подошел к Пьеру и Пьер заметил новое, молодое выражение и в лице своего друга.
Пьер несколько раз пересаживался во время игры, то спиной, то лицом к Наташе, и во всё продолжение 6 ти роберов делал наблюдения над ней и своим другом.
«Что то очень важное происходит между ними», думал Пьер, и радостное и вместе горькое чувство заставляло его волноваться и забывать об игре.
После 6 ти роберов генерал встал, сказав, что эдак невозможно играть, и Пьер получил свободу. Наташа в одной стороне говорила с Соней и Борисом, Вера о чем то с тонкой улыбкой говорила с князем Андреем. Пьер подошел к своему другу и спросив не тайна ли то, что говорится, сел подле них. Вера, заметив внимание князя Андрея к Наташе, нашла, что на вечере, на настоящем вечере, необходимо нужно, чтобы были тонкие намеки на чувства, и улучив время, когда князь Андрей был один, начала с ним разговор о чувствах вообще и о своей сестре. Ей нужно было с таким умным (каким она считала князя Андрея) гостем приложить к делу свое дипломатическое искусство.
Когда Пьер подошел к ним, он заметил, что Вера находилась в самодовольном увлечении разговора, князь Андрей (что с ним редко бывало) казался смущен.
– Как вы полагаете? – с тонкой улыбкой говорила Вера. – Вы, князь, так проницательны и так понимаете сразу характер людей. Что вы думаете о Натали, может ли она быть постоянна в своих привязанностях, может ли она так, как другие женщины (Вера разумела себя), один раз полюбить человека и навсегда остаться ему верною? Это я считаю настоящею любовью. Как вы думаете, князь?
– Я слишком мало знаю вашу сестру, – отвечал князь Андрей с насмешливой улыбкой, под которой он хотел скрыть свое смущение, – чтобы решить такой тонкий вопрос; и потом я замечал, что чем менее нравится женщина, тем она бывает постояннее, – прибавил он и посмотрел на Пьера, подошедшего в это время к ним.
– Да это правда, князь; в наше время, – продолжала Вера (упоминая о нашем времени, как вообще любят упоминать ограниченные люди, полагающие, что они нашли и оценили особенности нашего времени и что свойства людей изменяются со временем), в наше время девушка имеет столько свободы, что le plaisir d'etre courtisee [удовольствие иметь поклонников] часто заглушает в ней истинное чувство. Et Nathalie, il faut l'avouer, y est tres sensible. [И Наталья, надо признаться, на это очень чувствительна.] Возвращение к Натали опять заставило неприятно поморщиться князя Андрея; он хотел встать, но Вера продолжала с еще более утонченной улыбкой.
– Я думаю, никто так не был courtisee [предметом ухаживанья], как она, – говорила Вера; – но никогда, до самого последнего времени никто серьезно ей не нравился. Вот вы знаете, граф, – обратилась она к Пьеру, – даже наш милый cousin Борис, который был, entre nous [между нами], очень и очень dans le pays du tendre… [в стране нежностей…]
Князь Андрей нахмурившись молчал.
– Вы ведь дружны с Борисом? – сказала ему Вера.
– Да, я его знаю…
– Он верно вам говорил про свою детскую любовь к Наташе?
– А была детская любовь? – вдруг неожиданно покраснев, спросил князь Андрей.
– Да. Vous savez entre cousin et cousine cette intimite mene quelquefois a l'amour: le cousinage est un dangereux voisinage, N'est ce pas? [Знаете, между двоюродным братом и сестрой эта близость приводит иногда к любви. Такое родство – опасное соседство. Не правда ли?]
– О, без сомнения, – сказал князь Андрей, и вдруг, неестественно оживившись, он стал шутить с Пьером о том, как он должен быть осторожным в своем обращении с своими 50 ти летними московскими кузинами, и в середине шутливого разговора встал и, взяв под руку Пьера, отвел его в сторону.
– Ну что? – сказал Пьер, с удивлением смотревший на странное оживление своего друга и заметивший взгляд, который он вставая бросил на Наташу.
– Мне надо, мне надо поговорить с тобой, – сказал князь Андрей. – Ты знаешь наши женские перчатки (он говорил о тех масонских перчатках, которые давались вновь избранному брату для вручения любимой женщине). – Я… Но нет, я после поговорю с тобой… – И с странным блеском в глазах и беспокойством в движениях князь Андрей подошел к Наташе и сел подле нее. Пьер видел, как князь Андрей что то спросил у нее, и она вспыхнув отвечала ему.
Но в это время Берг подошел к Пьеру, настоятельно упрашивая его принять участие в споре между генералом и полковником об испанских делах.
Берг был доволен и счастлив. Улыбка радости не сходила с его лица. Вечер был очень хорош и совершенно такой, как и другие вечера, которые он видел. Всё было похоже. И дамские, тонкие разговоры, и карты, и за картами генерал, возвышающий голос, и самовар, и печенье; но одного еще недоставало, того, что он всегда видел на вечерах, которым он желал подражать.
Недоставало громкого разговора между мужчинами и спора о чем нибудь важном и умном. Генерал начал этот разговор и к нему то Берг привлек Пьера.


На другой день князь Андрей поехал к Ростовым обедать, так как его звал граф Илья Андреич, и провел у них целый день.
Все в доме чувствовали для кого ездил князь Андрей, и он, не скрывая, целый день старался быть с Наташей. Не только в душе Наташи испуганной, но счастливой и восторженной, но во всем доме чувствовался страх перед чем то важным, имеющим совершиться. Графиня печальными и серьезно строгими глазами смотрела на князя Андрея, когда он говорил с Наташей, и робко и притворно начинала какой нибудь ничтожный разговор, как скоро он оглядывался на нее. Соня боялась уйти от Наташи и боялась быть помехой, когда она была с ними. Наташа бледнела от страха ожидания, когда она на минуты оставалась с ним с глазу на глаз. Князь Андрей поражал ее своей робостью. Она чувствовала, что ему нужно было сказать ей что то, но что он не мог на это решиться.
Когда вечером князь Андрей уехал, графиня подошла к Наташе и шопотом сказала:
– Ну что?
– Мама, ради Бога ничего не спрашивайте у меня теперь. Это нельзя говорить, – сказала Наташа.
Но несмотря на то, в этот вечер Наташа, то взволнованная, то испуганная, с останавливающимися глазами лежала долго в постели матери. То она рассказывала ей, как он хвалил ее, то как он говорил, что поедет за границу, то, что он спрашивал, где они будут жить это лето, то как он спрашивал ее про Бориса.
– Но такого, такого… со мной никогда не бывало! – говорила она. – Только мне страшно при нем, мне всегда страшно при нем, что это значит? Значит, что это настоящее, да? Мама, вы спите?
– Нет, душа моя, мне самой страшно, – отвечала мать. – Иди.
– Все равно я не буду спать. Что за глупости спать? Maмаша, мамаша, такого со мной никогда не бывало! – говорила она с удивлением и испугом перед тем чувством, которое она сознавала в себе. – И могли ли мы думать!…
Наташе казалось, что еще когда она в первый раз увидала князя Андрея в Отрадном, она влюбилась в него. Ее как будто пугало это странное, неожиданное счастье, что тот, кого она выбрала еще тогда (она твердо была уверена в этом), что тот самый теперь опять встретился ей, и, как кажется, неравнодушен к ней. «И надо было ему нарочно теперь, когда мы здесь, приехать в Петербург. И надо было нам встретиться на этом бале. Всё это судьба. Ясно, что это судьба, что всё это велось к этому. Еще тогда, как только я увидала его, я почувствовала что то особенное».
– Что ж он тебе еще говорил? Какие стихи то эти? Прочти… – задумчиво сказала мать, спрашивая про стихи, которые князь Андрей написал в альбом Наташе.
– Мама, это не стыдно, что он вдовец?
– Полно, Наташа. Молись Богу. Les Marieiages se font dans les cieux. [Браки заключаются в небесах.]
– Голубушка, мамаша, как я вас люблю, как мне хорошо! – крикнула Наташа, плача слезами счастья и волнения и обнимая мать.
В это же самое время князь Андрей сидел у Пьера и говорил ему о своей любви к Наташе и о твердо взятом намерении жениться на ней.

В этот день у графини Елены Васильевны был раут, был французский посланник, был принц, сделавшийся с недавнего времени частым посетителем дома графини, и много блестящих дам и мужчин. Пьер был внизу, прошелся по залам, и поразил всех гостей своим сосредоточенно рассеянным и мрачным видом.
Пьер со времени бала чувствовал в себе приближение припадков ипохондрии и с отчаянным усилием старался бороться против них. Со времени сближения принца с его женою, Пьер неожиданно был пожалован в камергеры, и с этого времени он стал чувствовать тяжесть и стыд в большом обществе, и чаще ему стали приходить прежние мрачные мысли о тщете всего человеческого. В это же время замеченное им чувство между покровительствуемой им Наташей и князем Андреем, своей противуположностью между его положением и положением его друга, еще усиливало это мрачное настроение. Он одинаково старался избегать мыслей о своей жене и о Наташе и князе Андрее. Опять всё ему казалось ничтожно в сравнении с вечностью, опять представлялся вопрос: «к чему?». И он дни и ночи заставлял себя трудиться над масонскими работами, надеясь отогнать приближение злого духа. Пьер в 12 м часу, выйдя из покоев графини, сидел у себя наверху в накуренной, низкой комнате, в затасканном халате перед столом и переписывал подлинные шотландские акты, когда кто то вошел к нему в комнату. Это был князь Андрей.
– А, это вы, – сказал Пьер с рассеянным и недовольным видом. – А я вот работаю, – сказал он, указывая на тетрадь с тем видом спасения от невзгод жизни, с которым смотрят несчастливые люди на свою работу.
Князь Андрей с сияющим, восторженным и обновленным к жизни лицом остановился перед Пьером и, не замечая его печального лица, с эгоизмом счастия улыбнулся ему.
– Ну, душа моя, – сказал он, – я вчера хотел сказать тебе и нынче за этим приехал к тебе. Никогда не испытывал ничего подобного. Я влюблен, мой друг.
Пьер вдруг тяжело вздохнул и повалился своим тяжелым телом на диван, подле князя Андрея.
– В Наташу Ростову, да? – сказал он.
– Да, да, в кого же? Никогда не поверил бы, но это чувство сильнее меня. Вчера я мучился, страдал, но и мученья этого я не отдам ни за что в мире. Я не жил прежде. Теперь только я живу, но я не могу жить без нее. Но может ли она любить меня?… Я стар для нее… Что ты не говоришь?…
– Я? Я? Что я говорил вам, – вдруг сказал Пьер, вставая и начиная ходить по комнате. – Я всегда это думал… Эта девушка такое сокровище, такое… Это редкая девушка… Милый друг, я вас прошу, вы не умствуйте, не сомневайтесь, женитесь, женитесь и женитесь… И я уверен, что счастливее вас не будет человека.
– Но она!
– Она любит вас.
– Не говори вздору… – сказал князь Андрей, улыбаясь и глядя в глаза Пьеру.
– Любит, я знаю, – сердито закричал Пьер.
– Нет, слушай, – сказал князь Андрей, останавливая его за руку. – Ты знаешь ли, в каком я положении? Мне нужно сказать все кому нибудь.
– Ну, ну, говорите, я очень рад, – говорил Пьер, и действительно лицо его изменилось, морщина разгладилась, и он радостно слушал князя Андрея. Князь Андрей казался и был совсем другим, новым человеком. Где была его тоска, его презрение к жизни, его разочарованность? Пьер был единственный человек, перед которым он решался высказаться; но зато он ему высказывал всё, что у него было на душе. То он легко и смело делал планы на продолжительное будущее, говорил о том, как он не может пожертвовать своим счастьем для каприза своего отца, как он заставит отца согласиться на этот брак и полюбить ее или обойдется без его согласия, то он удивлялся, как на что то странное, чуждое, от него независящее, на то чувство, которое владело им.
– Я бы не поверил тому, кто бы мне сказал, что я могу так любить, – говорил князь Андрей. – Это совсем не то чувство, которое было у меня прежде. Весь мир разделен для меня на две половины: одна – она и там всё счастье надежды, свет; другая половина – всё, где ее нет, там всё уныние и темнота…
– Темнота и мрак, – повторил Пьер, – да, да, я понимаю это.
– Я не могу не любить света, я не виноват в этом. И я очень счастлив. Ты понимаешь меня? Я знаю, что ты рад за меня.
– Да, да, – подтверждал Пьер, умиленными и грустными глазами глядя на своего друга. Чем светлее представлялась ему судьба князя Андрея, тем мрачнее представлялась своя собственная.


Для женитьбы нужно было согласие отца, и для этого на другой день князь Андрей уехал к отцу.
Отец с наружным спокойствием, но внутренней злобой принял сообщение сына. Он не мог понять того, чтобы кто нибудь хотел изменять жизнь, вносить в нее что нибудь новое, когда жизнь для него уже кончалась. – «Дали бы только дожить так, как я хочу, а потом бы делали, что хотели», говорил себе старик. С сыном однако он употребил ту дипломацию, которую он употреблял в важных случаях. Приняв спокойный тон, он обсудил всё дело.
Во первых, женитьба была не блестящая в отношении родства, богатства и знатности. Во вторых, князь Андрей был не первой молодости и слаб здоровьем (старик особенно налегал на это), а она была очень молода. В третьих, был сын, которого жалко было отдать девчонке. В четвертых, наконец, – сказал отец, насмешливо глядя на сына, – я тебя прошу, отложи дело на год, съезди за границу, полечись, сыщи, как ты и хочешь, немца, для князя Николая, и потом, ежели уж любовь, страсть, упрямство, что хочешь, так велики, тогда женись.
– И это последнее мое слово, знай, последнее… – кончил князь таким тоном, которым показывал, что ничто не заставит его изменить свое решение.
Князь Андрей ясно видел, что старик надеялся, что чувство его или его будущей невесты не выдержит испытания года, или что он сам, старый князь, умрет к этому времени, и решил исполнить волю отца: сделать предложение и отложить свадьбу на год.
Через три недели после своего последнего вечера у Ростовых, князь Андрей вернулся в Петербург.

На другой день после своего объяснения с матерью, Наташа ждала целый день Болконского, но он не приехал. На другой, на третий день было то же самое. Пьер также не приезжал, и Наташа, не зная того, что князь Андрей уехал к отцу, не могла себе объяснить его отсутствия.
Так прошли три недели. Наташа никуда не хотела выезжать и как тень, праздная и унылая, ходила по комнатам, вечером тайно от всех плакала и не являлась по вечерам к матери. Она беспрестанно краснела и раздражалась. Ей казалось, что все знают о ее разочаровании, смеются и жалеют о ней. При всей силе внутреннего горя, это тщеславное горе усиливало ее несчастие.