Как стать автором
Обновить

Комментарии 2

Про RandomForrest можно подробнее? Что там на вход подается и подготавливаются ли как-то данные?

Конечно!

На основе данных из LLM, была построена витрина с фичами (features) с оценками:

default_features = {
    "is_pet_related": 0.0,
    "raising_money": 0.0,
    "is_ad": 0.0,
    "is_sale": 0.0,
    "is_reward": 0.0,
    "lost_pet": 0.0,
    "found_pet": 0.0,
    "animal_type": None,
    "animal_breed": None,
    "pet_name": None,
    "location": None,
    "phone_number": None,
    "contacts": [],
    "processing_error": True,
}

Для каждого типа сорса (вк или телеграм) — отдельная витрина, с незначительной разницей в структуре.

Далее мы забираем витрину features и совмещаем с таблицами со спаршенными данными — добираем из таблиц-источников фичи: есть ли фотки, прикрепленно ли сообщение, есть ли ссылки на контакты (тг/вк).

Это всё строится на основе немного костыльного sql файла:

https://gist.github.com/gulivan/88c65c71b45ba1dde1228b384d46ba49 (for_train.sql)

Далее на выходе получаем таблицу, где нужно добавить колонку to_filter.

Значение to_filter:

1 —  мы отсеиваем сообщение

0 — пропускаем.

Эту колонку можно заполнить как и вручную, так и с помощью LLM. Я решил, что мне проще будет разметить данные вручную (в обучающей выборке было всего 1000 записей из вк и тг), поэтому экспортировал результат .sql в Google Sheets и за час разметил значения в колонке.

Дальше экспортировал .csv из Google Sheets и прогнал RandomForrest. Код для трейна довольно просто и находится в файле classify.ml. Сам код написал, опираясь на курс, который прошел лет 5 назад: https://stepik.org/course/4852/ + прогнал через ChatGPT.

https://gist.github.com/gulivan/88c65c71b45ba1dde1228b384d46ba49

Веса модели RandomForrest в формате .joblib занимают 830 Kb, поэтому не проблема, загрузить бинарник напрямую в репу в гите.

Дальнейший инференс на входящих постах с ресурсами VPS с 4 vcpu, 8 gb ram — занимает менее 1 секунды, что более чем ок.

Текущее решение работает около 3-х недель, за это время было только одно сообщение, которое прошло сквозь фильтр (пост про набор волонтёров).

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


Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории