Вступление

В первых двух статьях цикла мы разобрались, почему нормативно-справочная информация (НСИ) неизбежно деградирует, почему простые алгоритмы сравнения строк проигрывают AI/ML, и как устроен сервис SOFROS AI/ML в целом - его архитектура, гибридный подход и интеграция с корпоративными системами через REST API.

Но методология и архитектура - это лишь верхушка айсберга. Главная магия происходит внутри моделей, которые отвечают за классификацию, извлечение характеристик, семантический поиск и контекстное обогащение данных. Именно они превращают «сырые» записи в структурированные и нормализованные справочники.

В третьей статье мы заглянем «под капот» этих моделей и подробно разберём:

  • как работает модель классификации на основе наивного байесовского классификатора с учётом опечаток, n-грамм и нечёткого поиска;

  • как модель экстракции выделяет именованные сущности (NER) с помощью spaCy и beam search;

  • как модель семантического поиска использует BERT, FAISS и реранкер для поиска по смыслу;

  • как модель контекстного поиска обращается к веб-источникам для дообогащения данных;

  • зачем нужна классификация PII и как она обеспечивает безопасность.

Поехали!

Модель классификации. Наивный байесовский классификатор

Рисунок 1. Наивный байесовский классификатор
Рисунок 1. Наивный байесовский классификатор

Модель классификации представляет собой гибридный классификатор, предназначенный для определения класса нормативно-справочной информации (НСИ). Основная задача модели - по текстовому наименованию номенклатурной позиции выявить наиболее вероятный класс классификатора на основе статистики встречаемости слов, устойчивых словосочетаний, шаблонов и сходных токенов, характерных для данного класса.

На первом этапе выполняется предварительная обработка текста - нормализация. Текст приводится к нижнему регистру для устранения шумов, связанных с различиями в написании прописных и строчных букв. Осуществляется специализированная обработка цифр, знаков препинания, разделителей и служебных символов. В составе модели применяются регулярные выражения (шаблоны) для поиска и замены символов, в частности для удаления шума, лишних пробелов, нестандартных символов и повторяющихся разделителей. Такая предварительная очистка позволяет привести различные варианты написания одной и той же номенклатуры к сопоставимому виду.

Далее производится разбиение текста на токены (слова и n-граммы) различных уровней. Используются как отдельные слова (униграммы), так и последовательности из нескольких слов: биграммы, триграммы и n-граммы большей длины. Это позволяет учитывать не только отдельные слова, но и контекст их употребления. Например, отдельное слово может встречаться в разных классах, тогда как устойчивое сочетание из двух или трёх слов может служить характерным признаком конкретного класса. Для каждого токена также может быть построена специальная маска (например, слово «дом123» преобразуется в маску, где цифры заменяются на специальный символ). Данный механизм способствует обобщению сходных токенов и распознаванию однотипных значений, различающихся только числовой частью.

Полученные токены проверяются с использованием нечёткого поиска на основе расстояния Дамерау-Левенштейна. Этот механизм позволяет оценить степень сходства двух слов и учитывать опечатки, перестановки символов, пропущенные или лишние буквы. Расстояние Дамерау-Левенштейна отражает минимальное количество операций (вставки, удаления, замены или перестановки соседних символов), необходимых для преобразования одного слова в другое. Слово, содержащее ошибку, как правило, характеризуется небольшим расстоянием Дамерау-Левенштейна и может быть распознано моделью как близкое совпадение.

Для ускорения нечёткого поиска применяется хеширование. Токены преобразуются в хеши и распределяются по специальным сегментам (хеш-бакетам), где группируются потенциально сходные слова и словосочетания. Это позволяет не сравнивать каждый токен со всеми словами из обучающей выборки, а быстро находить наиболее близкие по смыслу варианты. Указанный подход существенно ускоряет работу классификатора при большом количестве классов и значительном объёме накопленной статистики.

Токены и результаты их обработки сохраняются в кэше, который обеспечивает накопление статистики по классам и её оперативное обновление. Для каждого токена хранятся сведения о частоте его встречаемости в каждом классе, общей частоте, близких нечётких вариантах, а также связанных с ним масках и n-граммах. Благодаря этому модель может быстро пересчитывать вероятности при добавлении новых данных и использовать накопленную статистику без полного переобучения.

На следующем этапе используется наивный байесовский классификатор (NB - Naive Bayes). Он вычисляет вероятность встречаемости каждого токена в том или ином классе и на основе формулы Байеса определяет вероятность принадлежности номенклатурной позиции конкретному классу.

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

  • Мультиномиальный вариант учитывает частоту встречаемости токенов и хорошо подходит для текстов, в которых важна повторяемость слов.

  • Категориальный вариант сравнивает распределение категорий и признаков.

  • Комплементарный наивный байесовский классификатор эффективен при несбалансированных классах, когда одни классы представлены значительно большим количеством примеров, чем другие.

  • Бернуллиевский вариант учитывает не только наличие токена в классе, но и его отсутствие, что может быть полезно для классов с характерным набором обязательных либо, напротив, нехарактерных признаков.

Для всех вариантов классификатора применяется сглаживание вероятностей. Оно необходимо для того, чтобы редкие или ранее не встречавшиеся токены не обнуляли итоговую вероятность класса. Без сглаживания один неизвестный токен мог бы привести к нулевой вероятности класса, даже если остальные части наименования НСИ однозначно указывают на этот класс. Сглаживание обеспечивает устойчивую работу модели с новыми наименованиями, опечатками, редкими артикулами и нестандартными формулировками.

На последнем этапе выполняется взвешивание результатов. Достоверные токены (точные совпадения) получают больший вес, тогда как токены с ошибками или нечёткими совпадениями штрафуются. Например, точное совпадение может иметь вес 1, а сходное слово с одной ошибкой - пониженный коэффициент (например, 0,5). Для n-грамм также могут задаваться отдельные веса, поскольку длинные устойчивые словосочетания часто являются более надёжным признаком класса, чем отдельные слова. Дополнительно могут учитываться априорные вероятности классов: если некоторый класс встречается в данных значительно чаще других, он может получать небольшое преимущество при прочих равных условиях.

Итоговая вероятность для каждого класса формируется на основе совокупности факторов: частот токенов, n-грамм, результатов нечёткого поиска, штрафов за ошибки, весов совпадений, априорных вероятностей и статистики, накопленной в кэше. После этого модель ранжирует классы по вероятности и возвращает внешней системе наиболее подходящий класс НСИ, а при необходимости - несколько наиболее вероятных вариантов с оценками уверенности. Такой гибридный подход позволяет сочетать скорость статистического классификатора, устойчивость к опечаткам и способность учитывать контекстуальные признаки номенклатурных наименований.

Для оценки качества работы модели рассчитываются стандартные метрики классификации. В первую очередь формируется матрица ошибок, показывающая, сколько объектов каждого фактического класса было отнесено моделью к каждому предсказанному классу. На основе матрицы ошибок вычисляются точность (precision), полнота (recall), F-мера и коэффициент корреляции Мэтьюса (Matthews correlation coefficient).

Точность показывает долю объектов, отнесённых моделью к определённому классу, которые действительно принадлежат этому классу. Полнота отражает долю объектов заданного класса, правильно найденных моделью. F-мера объединяет точность и полноту в единую сбалансированную оценку. Коэффициент корреляции Мэтьюса используется как более устойчивая интегральная метрика качества, особенно полезная при несбалансированных классах, поскольку учитывает как правильные, так и ошибочные предсказания по всем классам.

Модель экстракции. Извлечение именованных сущностей

Рисунок 2. Модель извлечения именованных сущностей
Рисунок 2. Модель извлечения именованных сущностей

Модель экстракции предназначена для выделения сущностей и их свойств из наименования номенклатуры. Например, из строки «Модель iPhone 12, 128 ГБ» модель может извлечь две характеристики: «iPhone 12» как модель и «128 ГБ» как объём памяти.

Для решения этой задачи используется библиотека spaCy с собственной моделью распознавания именованных сущностей (NER - Named Entity Recognition). spaCy выступает в качестве основного инструмента обработки текста: она выполняет токенизацию строки, анализирует текстовую структуру и позволяет обучать модель на пользовательских данных. В сервисе применяется собственная обучаемая модель, настраиваемая под конкретные классы номенклатуры и их характеристики. В процессе обучения в модель добавляются размеченные примеры, указывающие, какие фрагменты строки являются значениями характеристик и к каким сущностям они относятся. После обучения модель используется для прогнозирования на новых наименованиях и возвращает найденные характеристики.

Модель выдаёт не единственный вариант разбора, а несколько возможных вариантов с оценками вероятности. Метод лучевого поиска (beam search) позволяет сравнить эти варианты и выбрать наиболее качественный результат. Такой подход особенно полезен в неоднозначных случаях, когда один и тот же фрагмент строки может интерпретироваться по-разному в зависимости от контекста, класса номенклатуры или набора доступных характеристик.

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

В модели предусмотрены категориальные и дискретные свойства. Категориальные свойства хранят конкретные значения характеристик (например, цвет, тип материала, наименование модели). Дискретные свойства описывают не столько сами значения, сколько их шаблоны и паттерны. Для каждого свойства также ведётся счётчик встречаемости значений, что позволяет учитывать частотность и повышать качество последующих прогнозов.

Для контроля качества работы модели предусмотрены средства визуализации и оценки результатов. Используется матрица ошибок, а также рассчитываются основные метрики качества извлечения сущностей: TP (истинно положительные, корректно найденные значения), FP (ложноположительные, ложные срабатывания), FN (ложноотрицательные, пропущенные значения), BM (сущность найдена, но ей присвоена неверная метка). Эти показатели позволяют анализировать ошибки, выявлять проблемные классы и характеристики, а также принимать решения о необходимости дообучения.

Реализован механизм «горячего» кэширования, позволяющий хранить на диске практически любое количество классов, ограниченное лишь ёмкостью дискового пространства. При этом в оперативную память загружаются только те классы, с которыми ведётся работа в текущий момент. Такой механизм загрузки по требованию обеспечивает рациональное использование ресурсов системы, не перегружает память и позволяет одновременно работать с большим количеством классов номенклатуры. Благодаря этому модель может масштабироваться на крупные справочники и использоваться в промышленных сценариях обработки НСИ.

Модель семантического поиска: генерация с дополнительной выборкой

Рисунок 3. Модель семантического поиска
Рисунок 3. Модель семантического поиска

Модель семантического поиска решает задачу нечёткого и смыслового поиска с использованием алгоритмов больших языковых моделей (LLM). Она позволяет находить элементы, схожие по смыслу с исходным запросом (например, наименования НСИ, характеристики или значения характеристик) и ранжировать найденные результаты по степени релевантности.

На первом этапе выполняется предобработка текста: с помощью регулярных выражений удаляются лишние пробелы, проводится предварительная нормализация, при необходимости текст приводится к нижнему регистру. Для некоторых языковых моделей может дополнительно добавляться точка в конец коротких текстов с целью снижения вероятности ошибок при обработке кратких фраз.

Затем в работу включается BERT-энкодер - локально установленная языковая модель, осуществляющая векторизацию текста. Каждый текст преобразуется в вектор - набор чисел, отражающий его смысловое содержание. Если два текста близки по смыслу, их векторы располагаются рядом в векторном пространстве. Для оценки близости используется косинусная мера или скалярное произведение векторов.

Все данные, полученные на этапе векторизации, сохраняются в специализированной векторной базе FAISS. Эта база предназначена для быстрого поиска сходных векторов среди большого количества объектов. Например, среди десятков или сотен тысяч документов FAISS позволяет за доли секунды найти несколько наиболее близких к запросу элементов. В данной модели используется поиск по скалярному произведению: чем выше значение, тем ближе найденный элемент к исходному запросу.

Для ускорения работы применяются многопоточность и кэширование. Модель может одновременно вычислять оценки для нескольких пар «запрос - документ», распределяя вычисления по отдельным потокам. Поскольку построение вектора для текста является ресурсоёмкой операцией, результаты векторизации сохраняются в кэше. При повторном обращении к тому же тексту его вектор не вычисляется заново, а извлекается из сохранённого результата.

Дополнительно используется «горячий» кэш и загрузка классов по требованию. В память загружаются не все данные сразу, а только те классы или группы элементов, которые необходимы в текущий момент. Это снижает нагрузку на оперативную память и ускоряет работу системы при большом объёме справочной информации.

На последнем этапе подключается специально обученная модель - реранкер. Первичный поиск по векторной базе может возвращать зашумлённые результаты: элементы могут быть близки по общему смыслу, но не всегда точно соответствовать запросу. Реранкер выполняет вторую ступень фильтрации. Он принимает пару «запрос - документ» и оценивает, насколько найденный документ действительно релевантен запросу, выдавая точную оценку вероятности в диапазоне от 0 до 1. Для этого используется специализированная языковая модель - кросс-энкодер, которая анализирует запрос и найденный документ совместно, что позволяет лучше улавливать тонкие смысловые различия.

Таким образом, модель объединяет несколько технологий: Sentence Transformers для построения смысловых векторов, FAISS для быстрого поиска по векторной базе, нейросетевой реранкер для точной сортировки результатов, а также многопоточность и механизмы кэширования (обычного и «горячего») для ускорения обработки. Такая архитектура позволяет использовать модель в качестве готового движка для систем «вопрос-ответ», поиска сходных сущностей, номенклатуры, характеристик, значений характеристик и других категорий элементов, где требуется быстрый и точный семантический поиск.

Модель контекстного поиска: вызов инструментов веб-поиска

Рисунок 4. Модель контекстного поиска
Рисунок 4. Модель контекстного поиска

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

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

Для ускорения обработки используется механизм кэширования. Перед обращением к большой языковой модели система проверяет локальный кэш характеристик. Если пользователь запрашивает информацию о товаре или характеристике, которая уже была обработана ранее, готовые данные возвращаются из кэша. Это позволяет не вызывать LLM повторно и сокращает время ответа.

Менеджер кэша распределяет запросы между кэшем и LLM. Он определяет, какие характеристики уже известны и могут быть получены из кэша, а какие отсутствуют и требуют дополнительной обработки.

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

Если языковой модели недостаточно собственных знаний для заполнения характеристик, она может инициировать вызов инструмента веб-поиска. В этом случае через саму LLM выполняется обращение к поисковой системе в интернете. Веб-поиск возвращает краткие релевантные результаты, после чего модель использует найденную информацию для уточнения или заполнения недостающих характеристик товара.

После получения ответа выполняется постобработка данных: результаты нормализуются, очищаются, приводятся к единому формату и подготавливаются для дальнейшего использования. На этом этапе могут удаляться дубликаты, уточняться наименования характеристик, могут приводиться к стандартному виду значения и формироваться итоговая структура ответа.

Затем полученная информация сохраняется в кэш. Это позволяет при повторных запросах к тем же товарам или характеристикам быстро возвращать уже найденные данные без повторного обращения к LLM и веб-поиску.

В итоге модель представляет собой связку локального кэша, большой языковой модели (через Ollama) и механизма вызова инструментов веб-поиска. Такая архитектура обеспечивает быстрое получение характеристик товаров, их дообогащение данными из интернета, выявление новых свойств и возврат результата в структурированном машиночитаемом виде.

Класс персонально идентифицируемой информации (PII)

Класс PII (Personally Identifiable Information) - это систематический процесс разделения персонально идентифицируемой информации на категории в зависимости от уровня чувствительности, критичности, потенциальных рисков для субъекта данных при компрометации, а также требуемых мер защиты. Такая классификация позволяет унифицировать подходы к обработке, хранению, доступу и уничтожению PII в соответствии с законодательством (например, GDPR, CCPA, Федеральный закон № 152-ФЗ) и политикой информационной безопасности организации.

Цели применения класса PII

  • Управление рисками - выявление и оценка вероятного ущерба для субъекта данных (финансового, репутационного, физического) в случае утечки или неправомерного использования PII.

  • Дифференциация мер защиты - назначение соответствующих технических и организационных мер (шифрование, контроль доступа, маскирование, аудит) для каждой категории PII.

  • Упрощение управления данными - стандартизация процессов обработки, хранения и удаления PII на основе единой классификационной матрицы.

Краткие выводы

  1. Модель классификации на основе наивного байесовского классификатора использует гибридный подход: статистику частот токенов, n-граммы, нечёткий поиск (расстояние Дамерау‑Левенштейна) и хеширование для ускорения. Она устойчива к опечаткам и может работать с несбалансированными классами.

  2. Модель экстракции на базе spaCy с кастомной NER выделяет характеристики из текста, использует beam search для выбора лучшего варианта и поддерживает «горячее» кэширование для масштабирования на большие справочники.

  3. Модель семантического поиска объединяет BERT-энкодер, векторную базу FAISS и нейросетевой реранкер, что позволяет находить смысловые аналоги с высокой точностью и скоростью.

  4. Модель контекстного поиска выступает интеллектуальным справочником: она обращается к LLM (через Ollama) и при необходимости к веб-поиску, чтобы дообогатить данные новыми характеристиками из открытых источников.

  5. Классификация PII обеспечивает соблюдение законодательства (152‑ФЗ, GDPR) и дифференцирует меры защиты в зависимости от чувствительности данных.

Все эти модели работают в едином гибридном пайплайне, дополняя друг друга и обеспечивая комплексную автоматизацию нормализации НСИ.

Что дальше?

В следующей, четвёртой, статье цикла мы расскажем о том, как эти модели обучаются и оцениваются на реальных данных, какие метрики используются, как организован процесс дообучения и как мы боремся с «дрейфом» данных.

Также покажем практические кейсы - как сервис SOFROS AI/ML помогает компаниям из разных отраслей сокращать дубли, ускорять закупки и повышать качество справочников.

Оставайтесь на связи! А пока - вопрос к вам в комментариях: какая из моделей (классификация, экстракция, семантический поиск или контекстный поиск) вызвала наибольший интерес? Что бы вы хотели узнать о её настройке или применении в первую очередь?

Если вас заинтересовал наш сервис, вы можете записаться на бесплатную консультацию и демонстрацию.