344 слов | 2 минуты

Когда применять ML: NER, классификация и RegEx

Практическое руководство по выбору инструмента под задачу — от простых регулярных выражений до моделей машинного обучения.

Если нужно найти номер телефона в формате +7 (999) ... или 8999...нейросеть не нужна. В 95% случаев для этого используют RegEx: работает мгновенно, не требует обучения и видеокарт.

Найти что-то внутри текста (NER)

NER (Named Entity Recognition) — извлечение именованных сущностей из текста.

Примеры задач:

  • Вытащить дату доставки и время из комментария к заказу.
  • Извлечь артикул товара из сообщения в чат поддержки (который может быть написан криво: "арт 123-45", "номер 12345").
  • Получить этаж, метраж и наличие балкона из описания квартиры.

Инструменты разметки

  • Label Studio — лучший вариант, аналог Roboflow для текста. Выделяете кусок текста мышкой и вешаете тег (DATE, SKU, FLOOR). Устанавливается в Docker.
  • Doccano — проще, подойдёт для небольших задач.

Модели для обучения

Модель Применение
SpaCy Быстро, работает на CPU, не требует много памяти. Оптимальный выбор для большинства задач
BERT (Hugging Face) Для сложного контекста. Требовательна к ресурсам сервера

Понять, о чём текст (Классификация)

Text Classification — определение категории текста целиком.

Примеры задач:

  • Сортировка отзывов: Негативный / Позитивный / Нейтральный.
  • Тикеты в техподдержку: Оплата / Ошибка на сайте / Доставка — для маршрутизации в нужный отдел.
  • Антиспам: Спам / Не спам.

Инструменты разметки

  • Excel / Google Sheets — для простых задач достаточно: текст в одном столбце, номер класса (0, 1, 2) — в другом.
  • Label Studio — если много людей размечают или нужна история.

Модели для обучения

Модель Применение
Scikit-learn (Logistic Regression / SVM) Для простых задач (спам, пол по ФИО). Обучается за секунды
BERT (RuBERT) Для сложных задач (сарказм в отзывах, сложная тематика тикетов)

Полный цикл: пример с Битрикс24

Задача: автоматически сортировать заявки по отделам.

Шаг 1. Разметка

  1. Выгрузите из Битрикса 500 старых заявок в Excel.
  2. Проставьте во втором столбце категории: "Бухгалтерия", "Логистика", "IT".
  3. Сохраните как train.csv.

Шаг 2. Обучение (Google Colab)

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
import joblib

# Загрузка данных
data = pd.read_csv("train.csv")  # столбцы: text, category

# Пайплайн: TF-IDF → Логистическая регрессия
model = make_pipeline(TfidfVectorizer(), LogisticRegression())
model.fit(data['text'], data['category'])

# Проверка
print(model.predict(["Где мой заказ?"]))
# Вывод: ['Логистика']

# Сохранение модели
joblib.dump(model, "support_model.pkl")

Шаг 3. Внедрение (Deploy)

  1. На сервере — Python (FastAPI).
  2. При старте загружает support_model.pkl.
  3. Принимает текст, прогоняет через model.predict, возвращает JSON.
  4. PHP отправляет текст → получает категорию → меняет статус сделки в Битриксе.

Итоговые рекомендации

Задача Инструмент
Поиск сущностей в тексте (NER) Label Studio + SpaCy
Классификация по категориям Excel + Scikit-learn
Сложный контекст, сарказм Label Studio + BERT

Архитектура: всегда делайте Python-микросервис рядом с PHP. Это золотой стандарт для интеграции ML в веб-проект.