Существует массив данных новостей из разных источников. Некоторые каналы копируют новости друг друга или попросту рассказывают об одном и тоже. Проблема состоит в накапливании инфошума и невозможности отслеживать тип новостей, которые интересны определенному человеку.
"Набиуллина назвала плавающий курс рубля «благом» — по ее мнению, это позволяет экономике России легче переносить «внешние шоки»"
"Глава ЦБ Эльвира Набиуллина назвала плавающий курс благом. Это действительно благо, благо для экспортеров, которые существенно увеличат свою выручку в рублях"
Наш микросервис решает обе эти проблемы. Модель классифицирует новости по типам:
- Экономика
- Технологии
- Политика
- Шоубиз
- Криптовалюты
- Путешествия
- Образование и познавательное
- Развлечения и юмор
- Новости и СМИ
- Психология
- Искусство
- Спорт
- Цитаты
- Еда и кулинария
- Блоги
- Бизнес и стартапы
- Маркетинг
- PR, реклама
- Дизайн
- Право
- Мода и красота
- Здоровье и медицина
- Софт и приложения
- Видео и фильмы
- Музыка
- Игры
- Рукоделие
- Другое
Учитывая хорошую работу модели, отдельно, внутри каждого кластера слова предобрабатываются. Путём сравнения удаляются дубликаты. Так, мы получаем разобранные по типам уникальные новости
Проект построен на fastapi. Модель для классификации - обученный BERT, модель для удаления дубликатов - MiniLM-L12-v2.
- Классификация сообщений:
- Спарсили самостоятельно 80к сообщений, из различных телеграмм каналов (если в канале новости про крипту, то после парсинга данным присваивается) категория ‘крипта’
- очистили данные (сообщения по 3 слова, рекламные сообщения)
- Взяли предобученную специально на новостях модель BERT - lesyar/news_genre_classifier,
- валидация на данных с парсинга - 0.92 F1.
- разметили вручную случайные 5к из вашего датасете, точность - 0,88 F1
- модель мультиязычна
- Детекция одинаковых:
- Одинаковые будем искать в каждой категории новостей отдельно (вряд ли новость про спорт будет похожа на новость про крипту).
- Это сильно ускоряет инференс, ибо мы не сравниваем заведомо напожте между собой новости, иначе это бы работало за n^2. Также немного прибавляет в точности
- получаем эмбединги новости с помощью специально предобученой модели, которая эмбединги семантчически похожих делает более схожими.
- через косинусное расстояние на эмбедингах отбираем ближайших, удаляем дубликаты
- Валидировались на размеченном вручную датасете из 3к сообщений
- Дабы сейчас на занимать Ваше время, остальные фичи и обоснование подходов презентуем на питче
Мы храним данные(csv, xlx) в папке path/to/news-classification/data . Для корректной работы скриптов тестовые данные лучше положить туда.
Для сборки и запуска docker контейнера:
$path/to/news-classification> docker build backend/. -t backend
$path/to/news-classification> docker run -p 8000:8000 --gpus all backend
Для запуска uvicorn напрямую, предварительно установив python окружение в корне, можно прописать следующее:
$path/to/news-classification> pip install -r "backend/requirements.txt"
$path/to/news-classification> uvicorn backend.main:app --port=8000
Дождитесь загрузки модели (в терминале об этом сообщат логи). Теперь вы можете перейти по адресу http://localhost:8000/docs и увидеть работающий сервис. Во вкладке /docs можно найти документацию и ручки для тестирования. После запуска можно менять device для расположения моделей. Например с 'cpu' -> 'cuda:0'. Перед запуском убдитесь в том, что модели находяться на видеокарте с помощью ручки update_device . После загрузки и обработки *.csv (кодировка UTF-8, разделители запятые, содержит колонку text) должна появиться кнопка Download_file. Логи по работе модели можно увидеть в терминале. Файл будет называтся processed.csv
По любым вопросам вы можете писать нам, мы оперативно ответим: