Данный проект реализует сжатие текста с использованием LSTM модели и адаптивного арифметического кодирования (ААК). В папке ./data/ находится текстовый файл enwik5 для сжатия, являющийся первыми 10^5 байтами enwiki-20060303-pages-articles.xml.
Kодировщик использует LSTM для вычисления вектора вероятностей следующего символа на основе предыдущих. Фактическое значение символа далее кодируется с помощью ААК. Затем веса модели обновляются. Это повторяется для всех символов файла.
Во время декодирования происходит симметричный процесс, декодирование с помощью ААК, предсказание символа при помощи LSTM, обновление модели и т.д. Декодер работает симметрично, поэтому нет необходимости передавать параметры модели.
В качестве ААК используется реализация из https://github.com/nayuki/Reference-arithmetic-coding
Параметры бейзлайна:
| Версия | Исходный размер, байты | Размер после сжатия, байты | Коэффициент сжатия | Затраченное время, с |
|---|---|---|---|---|
| Baseline | 100000 | 38283 | 2.63 | 296 |
| My Baseline | 100000 | 38429 | 2.60 | 431.5 |
| Torch | 100000 | 35356 | 2.82 | 103.3 |
| GPU | 100000 | 35386 | 2.82 | 11.09 |
| Transformer | 100000 | 47139 | 2.12 | 5.69 |
| GPU WO Deterministic | 100000 | 35386 | 2.82 | 7.65 |
| Mixed Precision | 100000 | 35366 | 2.82 | 8.56 |
| Hyperparams (Max Quality) | 100000 | 33296 | 3.00 | 10.98 |
| Hyperparams (Max Speed) | 100000 | 36974 | 2.70 | 3.504 |
Улучшить код так, чтобы он:
- либо на том же сжатии показывал уменьшение времени кодирования и декодирования в 3 раза;
- либо обеспечивал улучшение коэффициента сжатия на 30% при тех же временных затратах.
Можно улучшать следующие модули:
- Предобработка: замена слова из предварительно созданного словаря уникальным кодом, использование идеи из Byte-Pair Encoding токенизации и т.д.;
- Нейронная сеть: использование другой архитектуры (GRU, Transformer и др.), другой функции активации, изменениями связей между слоями и т.д.;
- Арифметический кодер: можно учесть возможную память источника, использовать другую оценку вероятностей и т.д.
Требования к реализации:
- Результаты должны быть продемонстрированы на enwik5 из папки ./data/;
- Восстановленый после сжатия файл должен полностью совпадать с оригинальным;
- В результатах приложить таблицу выше, обновив значения базового решения для вашего устройства и добавив строчку с улучшенным решением.
- Измерения времени кодирования и декодирования базовой и предложенной версии должны быть выполнены на одном и том же устройстве.
На почту eabelyaev@itmo.ru прислать отчёт в виде презентации в pdf формате, который включает в себя:
- ФИО студента, номер группы.
- Описание предложенной модификации и результаты.
- Отчёт должен содержать объяснение за счёт чего получилось улучшить базовую архитектуру.
- Ссылку на репозиторий с исходным кодом проекта и инструкцию по запуску.
Подробнее про принцип работы можно прочитать в https://bellard.org/nncp/nncp.pdf или https://arxiv.org/pdf/2407.07723 (здесь тот же принцип, но в качестве модели используется LLM и кроме текста сжимают другие типы данных)