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. Разметка
- Выгрузите из Битрикса 500 старых заявок в Excel.
- Проставьте во втором столбце категории: "Бухгалтерия", "Логистика", "IT".
- Сохраните как
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)
- На сервере — Python (FastAPI).
- При старте загружает
support_model.pkl. - Принимает текст, прогоняет через
model.predict, возвращает JSON. - PHP отправляет текст → получает категорию → меняет статус сделки в Битриксе.
Итоговые рекомендации
| Задача | Инструмент |
|---|---|
| Поиск сущностей в тексте (NER) | Label Studio + SpaCy |
| Классификация по категориям | Excel + Scikit-learn |
| Сложный контекст, сарказм | Label Studio + BERT |
Архитектура: всегда делайте Python-микросервис рядом с PHP. Это золотой стандарт для интеграции ML в веб-проект.