- BrainTools - https://www.braintools.ru -
В прошлой статье [1] мы разбирали, как передать копию базы 1С подрядчику без реальных персональных данных.
Но есть более локальный сценарий: базу передавать не нужно, а вот отдельную выгрузку хочется отдать нейросети на анализ.
Например, попросить:
разобрать дебиторскую задолженность;
найти аномалии;
сгруппировать контрагентов;
объяснить расхождения;
рассчитать график платежей.
Проблема в том, что в такой выгрузке будут ФИО, ИНН, счета, телефоны и реальные суммы.
ООО "Альфа"
Иванов Сергей Петрович
ИНН 7701234567
р/с 40702810...
Долг: 8 587 500,00
Просто копировать это в ChatGPT, Claude или YandexGPT нельзя. Можно заранее заменить реквизиты вручную. Но тогда возникает другая проблема: как потом читать ответ модели и понимать, кто скрывается за выдуманными именами и цифрами?
Поэтому здесь нужна не просто маскировка, а обратимая псевдонимизация текста [2].
Схема выглядит так:
1С
|
v
выгрузка
|
v
псевдонимизация
|
v
нейросеть
|
v
ответ модели
|
v
обратная замена
|
v
ответ с настоящими данными
Обработка работает только с тем текстом, который пользователь ей передал. Самостоятельно во внешние сервисы она ничего не отправляет.
Возьмем таблицу:
Контрагент Менеджер Долг
ООО "Вектор" Иванов И.И. 1 200 000
ООО "Сфера" Иванов И.И. 800 000
ООО "Альфа" Петров П.П. 300 000
Если каждое вхождение Иванов И.И. заменить независимо, модель решит, что первые две строки относятся к разным менеджерам.
Поэтому действует простое правило:
одно исходное значение получает один и тот же псевдоним во всей выгрузке.
Это сохраняет связи, группировки и смысл данных. В реальной выгрузке 1С чувствительных значений гораздо больше, чем ФИО.
Обработка [2] ищет:
ФИО и организации;
ИНН, ИИН, БИН;
ОГРН, ОГРНИП, КПП;
банковские счета, БИК, IBAN;
номера карт;
паспортные данные и СНИЛС;
телефоны и email;
даты рождения и адреса;
автомобильные номера;
денежные суммы.
При этом задача не сводится к простым регулярным выражениям.
Например, ИНН можно проверять по контрольной сумме, банковскую карту — по алгоритму Луна, а email заменять адресом на example.com [3].
Псевдоним желательно делать не просто случайным, а структурно похожим на оригинал.
Например:
ИНН 7707083893
превращается не в набор случайных цифр, а в другой номер с корректной контрольной суммой. Это полезно, если данные потом обрабатывает не только нейросеть, но и промежуточный парсер или другой инструмент.
С ФИО все просто:
Иванов -> Соколов
ООО "Вектор" -> ООО "Горизонт"
С деньгами сложнее. Если оставить реальные суммы — чувствительные финансовые данные уйдут наружу. Если заменить каждую сумму случайным числом — модель потеряет пропорции:
1 000 000 -> 832 451
2 000 000 -> 174 992
5 000 000 -> 681 357
После такой замены уже нельзя корректно определить, кто должен больше, посчитать доли или найти выбросы. Поэтому все денежные суммы в одной сессии умножаются на один секретный коэффициент.
Условно:
k = 1.73
1 000 000 -> 1 730 000
2 000 000 -> 3 460 000
5 000 000 -> 8 650 000
Абсолютные значения изменились, но сохранились:
отношения;
доли;
порядок;
динамика;
выбросы.
Это позволяет модели анализировать данные почти так же, как исходные.
Допустим, мы передали модели измененную сумму и попросили рассчитать ежемесячный платеж. Ответ содержит число, которого раньше вообще не было:
Ежемесячный платеж: 858 870
Обычный словарь замен здесь не поможет: такого значения в нем нет. Но если все денежные значения были умножены на один коэффициент, результат можно преобразовать обратно тем же правилом. Именно поэтому после обратной обработки восстанавливаются не только исходные суммы, но и часть значений, которые модель рассчитала сама. Это одна из главных причин использовать коэффициент, а не случайную замену чисел.
Потому что:
НДС 20%
после такой обработки может превратиться, например, в:
НДС 34,6%
и модель сделает неверный вывод.
Поэтому специально не меняются:
проценты;
количества;
даты документов;
номера договоров;
артикулы и коды;
версии платформы;
счета учета вида 20.01.1.
Идея в том, чтобы изменить только то, что действительно нужно скрыть, и максимально сохранить смысл исходных данных.
После анализа модель возвращает ответ уже с псевдонимами:
ООО "Орион" имеет максимальную задолженность.
Соколов А.А. отвечает за 42% просроченных платежей.
Обработка прогоняет этот текст через словарь в обратную сторону:
ООО "Орион" -> ООО "Альфа"
Соколов А.А. -> Иванов И.И.
И пользователь читает ответ уже с настоящими именами и реквизитами. Без этого псевдонимизация решает только половину задачи.
Можно было бы сохранять его в отдельный файл:
mapping.json
Но такой файл фактически является ключом к деанонимизации.
Его можно потерять, случайно отправить вместе с выгрузкой или оставить в общей папке. Поэтому словарь сохраняется средствами самой 1С в стандартном хранилище настроек и привязывается к пользователю. Обработку можно закрыть, перезапустить 1С и вернуться к ответу модели позже. Если словарей несколько, нужный определяется по совпадениям псевдонимов в тексте ответа.
Исходная выгрузка:
Контрагент: ООО "Альфа"
Менеджер: Иванов Сергей Петрович
ИНН: 7707083893
Долг: 8 587 500,00
Срок просрочки: 94 дня
После обработки [2]:
Контрагент: ООО "Орион"
Менеджер: Соколов Алексей Андреевич
ИНН: 7721000120
Долг: 13 645 537,50
Срок просрочки: 94 дня
Этот текст можно отправить модели, например с запросом:
Найди основные риски по дебиторской задолженности и предложи график погашения.
После получения ответа он вставляется обратно в обработку, и настоящие имена, реквизиты и суммы возвращаются.
Здесь есть несколько важных ограничений. Во-первых, это не DLP-система. Инструмент работает только с тем текстом, который пользователь ему дал. Во-вторых, гарантированно найти вообще все чувствительные данные невозможно.
Например:
Клиент красный-47
может быть внутренним обозначением конкретного человека, но универсальный алгоритм об этом не узнает. Поэтому результат перед отправкой все равно нужно проверять глазами. Есть и еще одно ограничение: если модель сама изменила формат числа или округлила его:
8 587 500,00 -> около 8,6 млн
точные копейки восстановить уже невозможно. Их просто больше нет в тексте.
Если существует словарь:
Соколов -> Иванов
ООО "Орион" -> ООО "Альфа"
данные остаются обратимыми. Поэтому речь идет именно о псевдонимизации, а не о полной анонимизации. Это сделано сознательно: без обратимости мы не смогли бы вернуть настоящие данные в ответ нейросети.
Технические требования здесь довольно мягкие:
платформа 1С 8.3.14 и выше;
любая конфигурация, включая самописную;
управляемые формы;
файловая и клиент-серверная база;
тонкий и толстый клиент;
достаточно прав на чтение.
Обработка не изменяет данные информационной базы и использует платформенные методы.
В прошлой статье мы решали задачу:
база
-> псевдонимизация
-> копия подрядчику
Здесь задача другая:
выгрузка
-> псевдонимизация
-> нейросеть
-> ответ
-> обратная замена
То есть иногда нужно защищать целую копию базы, а иногда — только небольшой фрагмент данных перед конкретной операцией.
На первый взгляд задача звучит просто:
Как отправить таблицу из 1С в нейросеть, не отправив реальные ФИО и реквизиты?
Но на практике мало просто заменить Иванова на Петрова.
Нужно:
сохранять связи между одинаковыми значениями;
генерировать структурно корректные реквизиты;
не ломать числа, которые важны для анализа;
скрывать суммы с сохранением пропорций;
уметь преобразовывать обратно результаты расчетов модели;
хранить словарь соответствий без ручной работы пользователя;
понимать границы автоматического распознавания.
И главный принцип здесь тот же, что и в случае с копией базы:
Псевдонимизация [2] полезна только тогда, когда после нее данные сохраняют свойства, ради которых мы хотим их анализировать.
Для ФИО это связи. Для реквизитов – структура. Для денежных значений – пропорции. Для ответа нейросети – возможность пройти весь путь обратно и снова увидеть реальные данные.
Автор: Vika_tretya
Источник [4]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/34778
URLs in this post:
[1] прошлой статье: https://habr.com/ru/companies/infostart/articles/1071778/
[2] обратимая псевдонимизация текста: https://infostart.ru/marketplace/2757147/
[3] example.com: http://example.com
[4] Источник: https://habr.com/ru/companies/infostart/articles/1072120/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1072120
Нажмите здесь для печати.