Репозиторий содержит исходный код, данные и научные материалы научно-исследовательской работы (НИР) по теме: «Исследование методов оптимизации размерности латентно-семантического пространства в задачах обработки текстовых сообщений в условиях чрезвычайных ситуаций».
В условиях чрезвычайных ситуаций (ЧС) и в туризме часто возникает необходимость передачи текстовых сообщений (SOS, запросы помощи) по узкополосным каналам связи (спутниковые мессенджеры, рации, слабый интернет). Передача полного текста может быть невозможна или слишком медленной.
Цель исследования: Создание сверхлегкой и высокоточной модели машинного обучения для классификации коротких сообщений, пригодной для развертывания на edge-устройствах (мобильных терминалах спасателей) и маршрутизации вызовов в диспетчерских службах.
Эволюция исследования:
- Научный этап (v1.0.2): Изначально модель классифицировала сообщения по 16 академическим классам (травма, лавина, обстрел, запрос информации и т.д.). Была эмпирически опровергнута гипотеза о том, что латентно-семантический анализ (LSA / TruncatedSVD) обеспечит оптимальное сжатие. Доказано, что для коротких текстов (3–25 слов) разреженная TF-IDF матрица без SVD превосходит LSA по всем параметрам.
- Прикладной этап (v1.1.0): Для реального внедрения 16 классов оказались избыточны (модель путала «погоду» и «позицию»). Классы были объединены в 4 прикладные макрокатегории по принципу маршрутизации служб. Это позволило достичь рекордных метрик безопасности.
Оценка проводилась с помощью честной 5-кратной кросс-валидации (StratifiedGroupKFold с группировкой по case_id, исключающей утечку перефразов).
угроза_военная(обстрелы, БПЛА, мины).угроза_техногенная(взрывы, радиация, химия).угроза_общая(травмы, погибшие, лавины, животные, заблудились, нет припасов).не_угроза(погода, позиция, статус группы, запросы, проверка связи).
| Архитектура / Таксономия | Macro F1 (Intent) | CWR (Безопасность) | Accuracy | Размер модели |
|---|---|---|---|---|
| TF-IDF, 4 класса (Final) | 0.696 | 0.843 | 0.784 | 65 КБ |
| TF-IDF, 16 классов (v1.0.2) | 0.579 | 0.628 | 0.596 | 75.8 КБ |
| LSA, 16 классов (v1.0.2) | 0.483 | 0.556 | 0.524 | 299.1 КБ |
- Urgency Acc on Correct Intent: 0.667.
- Феномен «Safe Failure»: Из 229 реальных специфических угроз модель пропустила в класс
не_угрозавсего 13 сообщений (менее 6%). Если модель сомневается, она отправляет сообщение вугроза_общая(высылаем спасателей, а спецслужбы уточнят на месте). Precision для военной угрозы достигает 0.89.
В связи с переходом на прикладную таксономию, скрипты в текущей ветке (main, тег v1.1.0) адаптированы только под 4 макрокласса.
- Версия
v1.1.0(Текущая): Скрипт08_validation.pyсодержит маппингMACRO_MAPPINGдля объединения 16 классов в 4. Параметрmin_dfснижен до4для сохранения специфических маркеров. - Версия
v1.0.2(Архив): Если вам нужна оригинальная 16-классовая модель, скачайте этот релиз. В нем сохранены скрипты сmin_df=7и без маппинга классов.- Примечание: Чтобы посмотреть старый
README.md(с метриками и описанием для 16 классов), зайдите в раздел Releases на GitHub, выберите тегv1.0.2и откройте файл там. В текущей веткеmainэтого описания уже нет.
- Примечание: Чтобы посмотреть старый
Структура папок:
data/— финальный датасет (corpus_preprocessed.csv), словари (keep_words.txt, пустойstop_words.txt) и параметры (best_min_df.txt).src/— пайплайн (от чтения данных до финальной валидации).tools/— вспомогательные скрипты для аудита и стресс-тестов.plots/— графики (матрицы ошибок, доверительные интервалы, сравнение архитектур).journal_science.md— финальный научный отчет (содержит полное описание обеих итераций).journal.md— лабораторный журнал (хронология, промежуточные гипотезы, ошибки).
- Установите Python (версия 3.12 или выше). При установке обязательно поставьте галочку "Add Python to PATH".
- Скачайте этот репозиторий (нажмите
Code->Download ZIP) и распакуйте. - Запустите файл
start.batдвойным кликом.- Скрипт создаст
venv, установит библиотеки изrequirements.txtи запустит интерактивный пайплайн. - Для получения финальных метрик (4 класса) запустите
src/08_validation.py.
- Скрипт создаст
В папке tools/ собраны скрипты, которые использовались в ходе исследования для аудита, тестирования гипотез и ручной работы с данными.
- Что делает: Анализирует
corpus.csvи выводит статистику по классам (интентам) с разбивкой на реальные и синтетические данные. - Зачем нужен: Позволяет понять, не перевесит ли один класс все остальные, и достаточно ли данных для миноритарных классов.
- Что делает: Консольный редактор. Позволяет фильтровать сообщения по категории, интенту, срочности. Умеет массово менять разметку и удалять мусорные строки.
- Зачем нужен: Основной инструмент для ручной переразметки, чистки датасета и исправления ошибок LLM при генерации синтетики.
- Что делает: Выполняет Grid Search по количеству компонент SVD (
k). Строит график зависимостиF1_intentиCWRотk. - Зачем нужен: Использовался для доказательства того, что после
k=73модель начинает улавливать только математический шум.
- Что делает: Обучает SVD и извлекает топ-10 слов для каждой латентной оси. Сохраняет результат в
.txtи генерирует.jsonс промптами для LLM. - Зачем нужен: Использовался для подтверждения того, что LSA выучила реальные семантические связи. Именно с его помощью было доказано, что LSA не формирует якорь для
запроса_маршрута.
- Что делает: Обучает модель на 100% данных и тестирует на этих же данных (Train = Test).
- Зачем нужен: Ключевой инструмент для доказательства оптимальности. Показал, что даже при заучивании данных линейная модель не может выдать F1 выше 0.599 (для 16 классов).
- Что делает: Обучает модель на смеси реальных и синтетических данных, а затем тестирует на отложенной выборке, куда тоже попадает синтетика.
- Зачем нужен: Использовался для обоснования отказа от дальнейшей генерации синтетики в классах с высокой долей шаблонности.
После запуска 08_validation.py в папке plots/validation/ появляются три ключевых графика:
- Матрица ошибок (Intent): Показывает, какие классы модель путает (для 4 классов наглядно виден феномен "Safe Failure").
- Матрица ошибок (Urgency): Показывает, что 95% ошибок — это смежные градации (3↔4).
- F1 по классам с 95% CI: Показывает, каким классам можно доверять, а какие статистически нестабильны.
В папке plots/comparison/ находится главный график НИР — Сравнение LSA и TF-IDF (визуальное доказательство того, что TF-IDF одновременно точнее, легче и быстрее).
Если вы используете этот код или данные, пожалуйста, ссылайтесь: Парфенов Андрей Алексеевич (2026). Исследование методов сжатия текстовых сообщений в условиях ЧС (v1.1.0). GitHub. https://github.com/FlackBoy-1/Research
Проект распространяется под лицензией MIT. Вы можете свободно использовать код в исследовательских и образовательных целях.