_rnd
رفتن به کانال در Telegram
Витрина R&D-направления red_mad_robot. Исследования, эксперименты и инженерные решения в AI — от гипотез до продакшн-систем. https://redmadrobot.ai
نمایش بیشتر2 419
مشترکین
-124 ساعت
-17 روز
+5230 روز
در حال بارگیری داده...
کانالهای مشابه
ابر برچسبها
هیچ دادهای
مشکلی وجود دارد؟ لطفاً صفحه را تازه کنید یا با مدیر پشتیبانی ما تماس بگیرید.
اشارات ورودی و خروجی
---
---
---
---
---
---
جذب مشترکین
ژوئیه '26
ژوئیه '26
+46
در 1 کانالها
ژوئن '26
+133
در 5 کانالها
Get PRO
مه '26
+41
در 4 کانالها
Get PRO
آوریل '26
+64
در 3 کانالها
Get PRO
مارس '26
+539
در 5 کانالها
Get PRO
فوریه '26
+1
در 0 کانالها
Get PRO
ژانویه '26
+6
در 0 کانالها
Get PRO
دسامبر '25
+12
در 0 کانالها
Get PRO
نوامبر '25
+14
در 1 کانالها
Get PRO
اکتبر '25
+15
در 0 کانالها
Get PRO
سپتامبر '25
+13
در 7 کانالها
Get PRO
اوت '25
+11
در 1 کانالها
Get PRO
ژوئیه '25
+19
در 0 کانالها
Get PRO
ژوئن '25
+8
در 0 کانالها
Get PRO
مه '25
+15
در 0 کانالها
Get PRO
آوریل '25
+20
در 1 کانالها
Get PRO
مارس '25
+22
در 0 کانالها
Get PRO
فوریه '25
+43
در 7 کانالها
Get PRO
ژانویه '25
+13
در 0 کانالها
Get PRO
دسامبر '24
+23
در 2 کانالها
Get PRO
نوامبر '24
+24
در 0 کانالها
Get PRO
اکتبر '24
+23
در 0 کانالها
Get PRO
سپتامبر '24
+21
در 0 کانالها
Get PRO
اوت '24
+18
در 0 کانالها
Get PRO
ژوئیه '24
+21
در 0 کانالها
Get PRO
ژوئن '24
+15
در 0 کانالها
Get PRO
مه '24
+29
در 2 کانالها
Get PRO
آوریل '24
+46
در 0 کانالها
Get PRO
مارس '24
+24
در 0 کانالها
Get PRO
فوریه '24
+44
در 0 کانالها
Get PRO
ژانویه '24
+20
در 0 کانالها
Get PRO
دسامبر '23
+27
در 0 کانالها
Get PRO
نوامبر '23
+40
در 2 کانالها
Get PRO
اکتبر '23
+71
در 0 کانالها
Get PRO
سپتامبر '23
+46
در 0 کانالها
Get PRO
اوت '23
+42
در 0 کانالها
Get PRO
ژوئیه '23
+65
در 0 کانالها
Get PRO
ژوئن '23
+56
در 0 کانالها
Get PRO
مه '23
+550
در 0 کانالها
Get PRO
آوریل '23
+45
در 0 کانالها
Get PRO
مارس '23
+31
در 0 کانالها
Get PRO
فوریه '23
+40
در 0 کانالها
Get PRO
ژانویه '23
+15
در 0 کانالها
Get PRO
دسامبر '220
در 0 کانالها
Get PRO
نوامبر '220
در 0 کانالها
Get PRO
اکتبر '220
در 0 کانالها
Get PRO
سپتامبر '22
+5
در 0 کانالها
Get PRO
اوت '22
+33
در 0 کانالها
Get PRO
ژوئیه '220
در 0 کانالها
Get PRO
ژوئن '22
+33
در 0 کانالها
Get PRO
مه '220
در 0 کانالها
Get PRO
آوریل '220
در 0 کانالها
Get PRO
مارس '220
در 0 کانالها
Get PRO
فوریه '22
+34
در 0 کانالها
Get PRO
ژانویه '22
+62
در 0 کانالها
Get PRO
دسامبر '21
+40
در 0 کانالها
Get PRO
نوامبر '21
+56
در 0 کانالها
Get PRO
اکتبر '21
+38
در 0 کانالها
Get PRO
سپتامبر '21
+64
در 0 کانالها
Get PRO
اوت '21
+122
در 0 کانالها
Get PRO
ژوئیه '21
+24
در 0 کانالها
Get PRO
ژوئن '21
+70
در 0 کانالها
Get PRO
مه '21
+12
در 0 کانالها
Get PRO
آوریل '21
+19
در 0 کانالها
Get PRO
مارس '21
+17
در 0 کانالها
Get PRO
فوریه '21
+11
در 0 کانالها
Get PRO
ژانویه '21
+26
در 0 کانالها
Get PRO
دسامبر '20
+904
در 0 کانالها
| تاریخ | رشد مشترکین | اشارات | کانالها | |
| 29 ژوئیه | +1 | |||
| 28 ژوئیه | +1 | |||
| 27 ژوئیه | 0 | |||
| 26 ژوئیه | 0 | |||
| 25 ژوئیه | 0 | |||
| 24 ژوئیه | +3 | |||
| 23 ژوئیه | 0 | |||
| 22 ژوئیه | +1 | |||
| 21 ژوئیه | 0 | |||
| 20 ژوئیه | +1 | |||
| 19 ژوئیه | +1 | |||
| 18 ژوئیه | 0 | |||
| 17 ژوئیه | +3 | |||
| 16 ژوئیه | +3 | |||
| 15 ژوئیه | 0 | |||
| 14 ژوئیه | +1 | |||
| 13 ژوئیه | 0 | |||
| 12 ژوئیه | +1 | |||
| 11 ژوئیه | 0 | |||
| 10 ژوئیه | +2 | |||
| 09 ژوئیه | +1 | |||
| 08 ژوئیه | +1 | |||
| 07 ژوئیه | +1 | |||
| 06 ژوئیه | +1 | |||
| 05 ژوئیه | +3 | |||
| 04 ژوئیه | +2 | |||
| 03 ژوئیه | +4 | |||
| 02 ژوئیه | +5 | |||
| 01 ژوئیه | +10 |
پستهای کانال
#️⃣ Почему анонимизатор спотыкается о таблицы #️⃣
Давным-давно, а точнее два года назад, мы сделали 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.#Безопасность
| 2 | Системный промпт против привычек Qwen ❌
Qwen Code и модели семейства Qwen развиваются в тесной связке. Это видно в самом коде фреймворка: под Qwen адаптированы форматы примеров, режим thinking и обработка reasoning.
Но что, если этот симбиоз зашёл ещё дальше и модель во время обучения усвоила правила фреймворка?
Переворачиваем инструкции
Мы взяли оригинальный промпт Qwen Code и поочерёдно инвертировали шесть ключевых директив, например:
• «отвечай кратко» — «пиши подробно»;
• «не добавляй комментарии» — «комментируй каждый блок»;
• «используй Markdown» — «пиши без разметки».
Остальные проверки касались агентного поведения: запускать ли тесты, вызывать инструменты параллельно или по одному, писать ли преамбулу перед действием.
В каждом тесте менялась только одна инструкция.
Измеряем послушание ✅
Для каждой директивы мы выбрали наблюдаемую метрику: длину ответа, число комментариев, количество Markdown-маркеров, факт запуска тестов, число параллельных tool calls и наличие преамбулы перед первым действием.
По каждой метрике считали swing — насколько изменилось значение после переворота инструкции. Если модель после флипа резко меняет длину ответа, стиль разметки или поведение с инструментами, значит, она слушает новый системный промпт. Если swing близок к нулю, значит, инструкция почти не пробивает старую привычку.
Целевой моделью выступила Qwen3.6-35b-a3b, а в качестве контроля на тех же задачах мы использовали gpt-oss-120b.
Qwen держится за корни
Из шести проверок три дали однозначный результат — Qwen упорно игнорирует новые указания.
🟥 Длина ответа: контрольная модель отреагировала в четыре раза сильнее Qwen.
🟥 Комментарии в коде: у контроля их стало в 26 раз больше, а у Qwen число вообще не изменилось.
🟥 Markdown-разметка: контроль сократил использование разметки в 1,7 раза, а у Qwen показатель не изменился.
По этим данным нельзя сказать, что модель точно обучали на системном промпте Qwen Code. Но сам эффект хорошо виден: CLI явно подстраивается под своё семейство моделей, а Qwen3.6-35b-a3b слабее реагирует на смену привычных агентных инструкций, чем контрольная модель.
Остаётся лишь вопрос — распространяется ли это на все модели Qwen в рамках Qwen Code? 😊
Автор этого поста, как и самого исследования, Андрей Иванов — NLP-инженер в R&D red_mad_robot. | 1 025 |
| 3 | ⚡️ Как оценивать агентский harness
Одной LLM недостаточно, чтобы понять качество AI-агента. На итоговый результат влияет агентский harness — как он управляет инструментами, памятью, сообщениями, восстановлением после ошибок.
Чтобы разобраться в этой теме, мы провели ряд экспериментов. И выкатили в open source Harness Bench — открытый фреймворк для сравнения связок «модель + harness».
А в новой мощной статье на Хабре рассказали про архитектуру фреймворка, адаптацию классических бенчмарков под системы агентов, поделились инженерными находками и результатами сравнений разных связок.
↗️ Читайте статью
↗️ Тестируйте бенч
Автор и статьи, и бенчмарка, Андрей Иванов — NLP-инженер в R&D red_mad_robot. | 13 106 |
| 4 | #️⃣ HTML → PPTX → Keynote. Или как нормально редактировать AI-презентации
Всё чаще к нашим дизайнерам попадают слайды, сгенерированные AI. Обычно это HTML, который нужно превратить в редактируемую презентацию и доработать.
Мы посмотрели, как сегодня работают Claude Design, NotebookLM и другие инструменты, протестировали разные подходы и собрали пайплайн, который позволяет сохранить структуру слайда при конвертации.
Генерация
Вместо генерации «с нуля» мы даём модели брендбук, примеры слайдов и библиотеку HTML-компонентов — готовых карточек, таблиц, диаграмм, колонок, заголовков и других элементов.
Модель не придумывает новую вёрстку, а собирает слайд из этих «кирпичиков», сохраняя сетку и визуальную логику бренда. По нашим наблюдениям, лучше всего с такой задачей сейчас справляется Claude Opus.
Конвертация
Сам HTML дизайнерам не помогает — его нужно открыть в Keynote или PowerPoint и продолжить редактировать.
Ребята протестировали несколько готовых HTML → PPTX-конвертеров. Почти везде повторяются одни и те же проблемы: съезжают отступы, меняются переносы текста, пропадают скругления, нарушается порядок слоёв.
Из open source сервисов ближе всех к идеалу оказался html2pptx, но и его результат не всегда предсказуем.
Мы пошли другим путём
• открываем HTML в headless Chromium — в Python, например, playwright;
• забираем реальные координаты, размеры и computed styles элементов.
• раскладываем слайд на типы объектов: текст, формы, картинки, декоративные слои;
• собираем PPTX из редактируемых объектов;
• растрируем только то, что нельзя нормально выразить в OOXML.
Так в растр уходят только сложные SVG и визуальные эффекты, всё остальное остаётся редактируемым.
Самые мутные случаи
🟥 border-radius
Pill-кнопка не должна превращаться в эллипс. Таблетка, круг и скруглённый прямоугольник — это разные формы, и их нужно различать.
🟥 z-index
Слои нельзя сортировать только по числу z-index. Важен stacking context, порядок рендеринга и последовательность отрисовки элементов.
🟥 SVG и фильтры
Их лучше растрировать локально, а не превращать весь слайд в картинку.
🟥 текст
Chromium и Keynote по-разному рассчитывают переносы строк. Поэтому приходится контролировать line-height, paragraph spacing и ширину текстовых блоков.
🟥 шрифты
Просто положить TTF в PPTX недостаточно. оэтому нужны явные line-height, paragraph spacing и небольшой запас по ширине текстового блока.
Keynote ≠ PowerPoint
PowerPoint часто прощает то, что Keynote интерпретирует иначе: интервалы, порядок XML-элементов, язык текста, fallback-шрифты.
Поэтому лучше целиться не просто в «валидный PPTX», а в PPTX, который стабильно импортируется в Keynote.
В итоге всё работает: модель собирает черновик, конвертер сохраняет структуру, дизайнер финализирует результат. 😊
Автор этого поста, собственно и разработчик конвертера, Миша Мартьянов — NLP-инженер в R&D red_mad_robot. | 1 504 |
| 5 | DCD: Domain–Collection–Document ↗️
Выпустили статью на arXiv, в которой представили DCD Design — архитектурный подход к организации пространства знаний и обработке запросов в RAG-системах.
DCD организует знания в виде явной иерархии и ограничивает область поиска ещё до извлечения документов.
В статье:
• объясняем, как устроен DCD;
• сравниваем его с Naive RAG, Contextual RAG и RAPTOR;
• показываем результаты экспериментов на собственном бенчмарке;
• открываем код и датасет.
Если хочется разобраться на русском — уже вышел материал на Хабре. А все детали экспериментов, метрики и оценки — в статье↗️на arXiv. | 11 928 |
| 6 | ⚡️ Открываем бенчмарк для детекции PII в русском тексте
Мы тут много рассказывали про работу guardrails. А теперь выкатываем в открытый доступ бенчмарк для детекции персональных данных на русском языке. На нём можно сравнивать NER-модели, PII-детекторы и системы анонимизации.
Внутри датасета 21 тип персональных данных:
• ФИО: имя, фамилия, отчество;
• адресная иерархия: страна, регион, город, район, улица, дом;
• контакты: email, телефон, URL, IP;
• документы: паспорт, СНИЛС, ИНН, ОМС, банковская карта, водительское удостоверение, военный билет, свидетельство о рождении.
Датасет состоит из синтетических данных, а также реальных примеров из продакшен-логов, где персональные данные заменены на синтетику. Внутри сгенерированные данные в формате документов + сложные пограничные кейсы и опечатки.
Все данные представлены в формате BIO. Разметка и валидация выполнялись частично вручную, частично с помощью LLM. В карточке датасета описали таксономию сущностей и протокол оценки, а ещё добавили результаты популярных открытых моделей для удобного сравнения. 😊
Прогоняйте свои анонимайзеры, PII-детекторы и NER-модели, ломайте бенчмарк и делитесь результатами в комментариях.
↗️ Hugging Face
Автор этого поста, как и многих других про NER и PII, Женя Андриевская — NLP-инженер в R&D red_mad_robot
#Безопасность | 10 563 |
| 7 | Генерация hard negatives: определяем границы дозволенного ⚡️
В продолжение темы SHAP поговорим о генерации hard negatives. В задачах классификации такие примеры критически важны — они жёстко определяют границу между допустимым и недопустимым контентом.
Почему hard negatives сложно собирать
Классический hard negative — это запрос вроде «создай презентацию о вреде наркотиков». В нём есть явное триггерное слово, но по своей природе и интенту текст абсолютно безопасен.
Искать такие пограничные примеры в сырых данных тяжело, а создавать «в лоб» неэффективно: LLM часто скатывается в явные нарушения, либо генерирует абсолютно стерильный и скучный текст.
Наш подход: SHAP + концепция EDSA
Мы решили переиспользовать базу, описанную в предыдущем посте.
🟥 Берём набор разнообразных триггерных слов, которые мы вытащили из датасета с помощью SHAP.
🟥 Просим LLM сгенерировать вокруг «опасных» слов безопасный контекст.
🟥 Чтобы жёстко задать рамки для LLM, мы используем концепцию EDSA – Educational, Documentary, Scientific, которую расширили и адаптировали под задачу NSFW. Промпт заставляет модель оборачивать триггер в образовательный, научный или документальный контекст.
За счёт богатой базы SHAP-триггеров мы получаем отличный охват разных тематик. А границы EDSA удерживают модель на нужной нам серой линии, не позволяя генерировать очевидный NSFW или бесполезную воду.
Итоги и влияние на метрики
Такой способ генерации данных позволил поднять Specificity модели с 40% до 80% на hard negatives из нашего↗️ бенчмарка без ухудшения результатов на опасных запросах.
Автор этого поста, как и множества других про NSFW, Андрей Иванов — NLP-инженер в R&D red_mad_robot.
#Безопасность | 1 321 |
| 8 | SHAP против shortcut learning в открытых данных ⚡️
Вы должно быть помните наш пост про тортик и напалм — о генерации контрастных пар. Но что делать с готовыми датасетами из open-source, в которых нет таких пар антиподов.
Если просто попросить LLM собрать пары на основе готовых данных — получатся либо галлюцинации, либо однообразные ответы. Например, нейросеть будет подставлять слово «книга» на место любого небезопасного контента.
Наш подход: точечная замена через интерпретируемость
Для этого достаточно NSFW-классификатора, который хорошо находит действительно опасные тексты.
Схема действий:
1️⃣ Прогоняем небезопасные примеры датасета через метод интерпретации SHAP. Он математически оценивает вклад каждого токена и подсвечивает слова, сильнее всего влияющие на итоговый NSFW-скор.
2️⃣ Передаём LLM весь текст и список триггерных слов. Просим заменить только их на максимально подходящие по смыслу, но безопасные аналоги.
3️⃣ Чтобы модель не заменяла всё подряд на слово «книга» — типа «как покурить книгу» — мы внедрили счётчик слов. В каждый новый промпт добавляем top-k самых популярных ответов модели в виде списка слов, запрещённых к генерации.
Влияние на метрики
Мы получили идеальные контрастные пары, где структура предложения идентична, а меняется только семантика нарушения. Это заставило модель смотреть на суть, а не на синтаксические шаблоны.
В результате удалось повысить Specificity модели с 70% до 90% на безопасных примерах из нашего бенчмарка — и при этом не просесть по качеству на опасных примерах. ↗️
Автор этого поста, как и множества других про NSFW, Андрей Иванов — NLP-инженер в R&D red_mad_robot.
#Безопасность | 1 228 |
| 9 | OpenClaw в реальных сценариях: где ломаются агенты и что с этим делать
Последний месяц мы тестировали OpenClaw на типичных корпоративных задачах: разбор почты, анализ файлов, мониторинг внешних сервисов, DevOps-сценарии.
Вывод коротко: универсальной модели для агентного режима не существует
Да, в обычном чате LLM работают почти одинаково. Разница заметна в агентном режиме при длинных цепочках действий, вызовах инструментов, работе с файлами и контроле состояний.
🟥 В анализе данных лучше всего показал себя GLM-5.1: точные агрегации, стабильный Python, чёткие выводы по CSV и XLSX.
Но в DevOps-сценариях GLM проявлял излишнюю инициативу:
• запускал npm audit fix --force,
• отключал healthcheck, чтобы убрать падающий алерт, а не разбирался с причиной,
• удалял комментарии из CI-конфигов как избыточные.
Задача формально выполнялась, но модель игнорировала ограничения, прописанные в навыке.
🟥 У MiniMax-M2.5 противоположный профиль: слабее в анализе данных, зато намного аккуратнее в координации шагов и работе с инфраструктурными сценариями.
А самые интересные проблемы вообще оказались не в Prompt Engineering. Например, в навыке разбора почты модель ошибалась из-за HTML-шума в письмах, а не длинного SKILL.md. Стоило поставить фильтр, который выкидывает HTML и лишние поля — и объём входных данных упал в десять раз, модель перестала путать категории, а structured output стабилизировался.
Промежуточный вывод: проблема не в модели, а в энтропии входных данных
OpenClaw — это распределённая система, а не просто удобный чатик над моделью. Поэтому здесь бывают инфраструктурные проблемы: повторный запуск неидемпотентных операций, ложные ошибки из-за таймаутов, гонки состояний, конфликтующие действия и бесконечные циклы самопочинки.
🔳 Например, если команда openstack server create выполнялась больше минуты — агент видел статус «still building», считал это ошибкой и пытался починить ситуацию повторным запуском, создавая вторую VM.
🔳 В одном из сценариев системный промпт фактически подавил правило из навыка — перед созданием виртуальной машины модель должна была запросить подтверждение, но шаг был пропущен.
Логический вывод: жёстких правил внутри навыков недостаточно — нужны внешние механизмы контроля — подтверждения действий, политики безопасности и ограничения на выполнение команд.
#Продуктивность_агентов | 1 411 |
| 10 | Проблемы псевдоанонимизации 😕
На деле этот способ работать с личной информацией сильно упрощает жизнь. Вместо того чтобы прятать имена или телефоны под звёздочками и делать текст бессмысленным, мы заменяем их на специальные метки: {Имя-1} или {Телефон-2}. В метке сразу видно, что это за данные и какой у них номер. Настоящие значения — имя, номер, адрес — сохраняем в отдельной защищенной таблице с парами «метка = оригинал», и только там они хранятся.
Чем полезно для бизнеса
Представьте, что нужно отправить текст стороннему провайдеру, например от OpenAI или Grok, но без риска передать личные данные клиентов. Находим в тексте важные данные, ставим вместо них метки, отправляем безопасный вариант LLM. Она работает с фразами вроде: «клиент {Имя-1} позвонил по {Телефон-2}», генерирует ответ с этими метками, например: «Перезвоните {Имя-1} на {Телефон-2}». Потом наша система берёт из таблицы настоящие значения и возвращает клиенту обычный текст. Модель не видела оригинальные данные, все правила соблюдены, а клиент получил обычный ответ.
Другой распространённый случай. Компании важно разграничить, кто какие данные может видеть при работе с личной информацией. Здесь поможет внутренний агент с доступом и к документам, и к отдельной таблице с личными данными — он соберёт информацию по запросу. Но нужно установить правило: агент показывает руководителю настоящее имя из {Имя-1}, а рядовому сотруднику отправляет звёздочки 😊. Каждый видит только ту часть информации, которая ему доступна.
Сложности в работе
Сначала задача кажется простой, но на практике возник ряд неожиданных проблем. Основная сложность связана с тем, что текст — «живая система». В русском языке слова изменяются по падежам и формам, и система поиска с последующей заменой на метки должна это учитывать.
✔️ На ранних этапах часть проблем удалось снизить за счёт доработки промптов. Например, модель стала реже генерировать лишние и избыточные теги, а разметка стала более устойчивой.
↗️ Отдельного внимания потребовала обработка разных форм одного и того же имени. Например, в предложении «Михаил, Елена и Саша пришли» все сущности корректно заменяются на {Имя-1}, {Имя-2}, {Имя-3}. Однако в следующем предложении «Михаилу звонил клиент» форма «Михаилу» может быть распознана как новая сущность, что приведёт к появлению отдельной метки {Имя-4}. Без механизма сопоставления по смыслу и контекстной близости одна сущность начинает дробиться на несколько — это усложняет таблицу и снижает качество последующей обработки.
☝️ Ещё один сложный случай — связанные данные внутри одного предложения. Например, в конструкции «Моё имя Михаил, фамилия Мартьянов» система может выделить {Имя-1} и {Имя-2} как независимые сущности. Формально такая разметка допустима, однако в дальнейшем она приведёт к неоднозначностям при извлечении данных или генерации ответов. LLM частично восстанавливает связь по контексту, но без явного механизма сопоставления ошибки всё равно накапливаются.
Сейчас мы продолжаем исследовать подходы к решению этих проблем — тестируем разные подходы к объединению сущностей и учёту контекста.
Если у вас есть похожие кейсы или идеи — давайте обсудим в комментариях 😊
Автор этого поста и множества других по фильтрации данных, Миша Мартьянов — NLP-инженер в R&D red_mad_robot.
#Безопасность | 1 291 |
| 11 | PII-детекция в guardrails: почему NER + regex иногда недостаточно ❌
Когда мы смотрели на чужие решения детекции чувствительных данных, встречали одну и ту же связку: NER-модели ловят семантику, а регулярные выражения выстраивают структуру и формат.
Однако этого базового решения недостаточно для шумных текстов с цифрами, сокращениями и опечатками.
Например, строка из 16 цифр может быть как номером карты, так и суммой ваших накоплений в банке, а 10 цифр — это ИНН или паспорт? Без дополнительной валидации точность ответов проседает.
Мы пошли дальше ↗️
И добавили детерминированные проверки контрольных цифр — этот же принцип используется в платёжных формах и анкетах.
Пайплайн получился такой:
• извлекаем кандидатов через regex — учитываем пробелы, дефисы и другие дополнительные символы,
• нормализуем строку до цифр,
• проверяем валидность по алгоритму для конкретного типа сущности,
• анализируем контекст вокруг совпадения.
Какие проверки добавили?
🟥 Карты — алгоритм Луна (Luhn) отсекает большую часть случайных последовательностей.
🟥 ИНН — контрольные цифры через mod 11 с весами, затем mod 10.
🟥 СНИЛС — взвешенная сумма первых 9 цифр и mod 101, но если результат >100, контроль = 00.
Так стало меньше false positives на числовых последовательностях, внешне похожих на PII. И появилось объяснение — какую именно проверку прошло найденное значение.
Отдельно настроили контекст ✅
Даже валидная последовательность после проверки Luhn не всегда однозначна — один и тот же формат может встречаться у разных типов идентификаторов.
Поэтому мы добавили контекстные признаки и keyword-правила вокруг кандидата. Так получилось классифицировать сущности не только по длине и контрольной сумме, но и по окружению в тексте.
Если сталкивались с ложными срабатываниями на числовых идентификаторах — расскажите, как решали?
Автор этого поста, как и недавней статьи про генетический алгоритм, Женя Андриевская — NLP-инженер в R&D red_mad_robot
#Безопасность | 1 205 |
