TGViewer
_rnd _rnd @rmr_rnd · 2.39K subscribers
Post #348 1.35K
#️⃣ Почему анонимизатор спотыкается о таблицы #️⃣

Давным-давно, а точнее два года назад, мы сделали AI-сервис Daisy для быстрого доступа ко всем передовым моделям. Под капотом у Daisy не просто токены к LLM, а многоуровневая архитектура со сложной логикой связок и своей системой безопасности.

Собственно, про безопасность мы сегодня и поговорим.

Суть проблемы PII 😕

Чтобы гарантировать пользователям Daisy защиту персональных данных и не «светить» их во внешний API, мы встроили в пайплайн обработки запросов PII-анонимизатор.

Почти сразу мы упёрлись в проблему: анонимизатор плохо обрабатывал таблицы. Он маскировал только первые пару строк, а остальные данные улетали во внешнюю модель без маскировки.

Обычно таблицу перед отправкой переводят в Markdown. Модели так удобнее: структура сохраняется, строки и колонки легко читаются. А вот анонимизатору — наоборот.

Он проверяет значения по правилам, но для многих типов данных этого мало — нужен контекст. Например, слова вроде «паспорт», «ИНН» или «карта».

В таблице весь этот контекст уходит в шапку. Чем больше строк, тем дальше значения от заголовков и тем хуже детекция.

| ФИО | Паспорт | ИНН |

| Иван Петров | 4509 217634| 771234567890 |

Быстрый фикс с подвохом 😊

Первое очевидное решение — переписать Markdown и добавить ключ внутрь каждой ячейки.

| ФИО: Иван Петров | Паспорт: 4509 217634 |

Точность детекции сразу растёт: подпись снова рядом, пропусков меньше.

Но у такого подхода есть обратная сторона. Этот обогащённый Markdown увидит и сама модель. Таблица раздувается, токены тратятся впустую, а модель получает служебные подсказки, которые нужны только детектору.

Сначала ячейки, потом другое 😊

Мы зашли с другой стороны и решили не «сплющивать» таблицу до анонимизации.

Идея в том, чтобы разделить два представления таблицы: одно для детектора, другое для модели.

Держим таблицу как структуру — ячейки, строки, колонки, координаты. И отдельно, только для детектора, собираем detect-context: временную строку для каждого значения, где прописаны положение заголовка, метки, ближайшие соседи.

Паспорт: 4509 217634

Эта строка живёт отдельно и в модель не попадает — поэтому её можно делать сколь угодно избыточной, лишь бы детектору было удобно.

Детектор находит PII в этой строке. А раз мы знаем координаты — возвращаемся к нужной ячейке, достаём точное значение и маскируем именно его. И только потом собираем Markdown для модели.

Чистый промпт и детекция 😍

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

Автор этого поста и бессменный исследователь вопросов безопасности, Андрей Иванов — NLP-инженер в R&D red_mad_robot.


#Безопасность
  • ❤ 7
  • 👍 5
  • 🔥 5
  • 👀 1
More from @rmr_rnd
  1. Sep 21, 2026⚡️ PII Guard: невошедшее Недавно мы поделились в статье, как строили систему маскировки да…
  2. Sep 18, 2026😍 Как получить доступ ко всем LLM через единый API Мы запустили red_mad_router — единую т…
  3. Sep 14, 2026😍 Пакман и разработка: выбираем агентов при помощи DDQN При построении MAS перед разработ…
  4. Sep 9, 2026#️⃣ Как LLM работать с замаскированными данными? Маскировка персональных данных — совершен…
  5. Sep 4, 2026😊 Расследуем инциденты при помощи Telegram-бота Прикрутить бота к инфраструктуре, чтобы о…
  6. Aug 25, 2026#️⃣ Как AI-агенты поменяли разработку Делимся новой статьёй — в ней наш CTO по AI Влад Шев…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →