История о том, как я хотел провести анализ комментариев, а в итоге получил неожиданный, но полезный опыт с локальным AI.
![LynxReport: учёт публикаций ? [Node.js] ✅ LynxReport: учёт публикаций ? [Node.js] ✅](https://habrastorage.org/r/w780/getpro/habr/upload_files/c7d/db5/ee6/c7ddb5ee671b68d485a37ddd8f3692d0.png)
Недавно передо мной встала задача собрать все положительные комментарии к моим статьям. Веду их учёт в таблице, и там уже вполне серьёзные цифры — больше 300 строк и свыше 10 тысяч комментариев. Основные площадки, где я публикуюсь, выглядят так:
Хабр — 4 497 комментариев
Т‑Ж — 4 186
Смартлаб — 1 998
Пикабу — 726
Вручную искать в этом массиве текста слова поддержки — долго и нудно, а главное — совершенно не масштабируется. Так родилась идея: поручить всё локальной нейросети для анализа тональности. Заодно я хотел на практике разобраться с моделями на основе BERT.
Для этой цели у меня был, как мне казалось, идеальный инструмент: компьютер с Ubuntu 24 LTS, Docker и мощной NVIDIA GeForce RTX 5060 Ti на 16 ГБ. Казалось, что с RTX 5060 Ti на 16 ГБ анализ пройдёт молниеносно. Но на деле именно GPU стал главной точкой отказа — пришлось всё считать на CPU.
Код на GitHub.
Что делает мой скрипт на GitHub

Прежде чем бросаться в бой с CUDA, нужно было подготовить данные. Комментарии разбросаны по разным сайтам без возможности экспорта, поэтому я написал несколько парсеров, которые собирают тексты в единый JSON‑формат — один файл на статью.

Парсеры я оставил приватными, так как они заточены под мои задачи, но ядро системы выложил на GitHub.
Скрипт sentiment_analyzer.py берёт JSON‑файлы, подготовленные на первом этапе, и пропускает текст каждого комментария через предварительно обученную нейросетевую модель cointegrated/rubert‑tiny‑sentiment‑balanced. Модель определяет эмоциональную окраску текста — позитивную, негативную или нейтральную.
Скрипт задуман как универсальный инструмент, поэтому основные параметры вынесены в config.env.
MODEL_NAME: можно указать любую другую модель с Hugging Face.
DEVICE: позволяет выбрать, на чём производить вычисления — на
cpu
илиcuda
(GPU).POSITIVE_THRESHOLD: порог уверенности модели, чтобы отнести комментарий к позитивным.
EXCLUDE_AUTHORS: список авторов, чьи комментарии нужно игнорировать (например, мои собственные ответы).
MIN_COMMENT_LENGTH: отсеивает слишком короткие и неинформативные комментарии.
Оркестрация с помощью Docker и Shell
Для удобства запуска и настройки я написал два shell-скрипта:
sentiment_analysis_setup.sh: этот скрипт — для первоначальной настройки. Он проверяет систему, устанавливает Docker и NVIDIA Container Toolkit, создаёт необходимые папки и конфигурационный файл. Запустив его один раз, вы подготавливаете окружение для дальнейшей работы.
run_analysis.sh: простой скрипт для запуска анализа. Он читает конфигурацию из
config.env
и запускает Docker-контейнер с нужными параметрами.
На практике это сводится к трём шагам: подготовка системы через setup-скрипт, сбор комментариев парсерами и запуск анализа через run_analysis.sh.

Все найденные позитивные комментарии скрипт аккуратно складывает в текстовые файлы.
Успех на CPU и урок о масштабировании
После череды падений с CUDA и финальной ошибки «No kernel image» пришлось смириться: GPU в проекте не будет. Я открыл config.env, поменял DEVICE=cuda
на DEVICE=cpu
и нажал save.

RuBERT‑tiny справился за полторы минуты — все 10 000 комментариев были разобраны. Вся похвала и поддержка оказались в аккуратных текстовых файлах.
На финишной прямой я переписал логику сохранения. Вместо сотен мелких JSON теперь формируется один аккуратный текстовый файл для каждой площадки. Структура вывода проста:
Автор: Андрей Мищенко
Дата: 2025-06-06T11:24:20.551316+03:00
Текст: Полезные формулы, спасибо!
Ссылка: https://t‑j.ru/guide/excel‑kotirovki/#c2857460Автор: Whalerman
Дата: 2025-09-09T07:40:00.000Z
Текст: Михаил, спасибо! Хорошие и полезные посты!
Ссылка: https://smart‑lab.ru/blog/1202442.php#comment18571129Автор: DashBerlin
Дата: 2025-08-23T00:18:43.000Z
Текст: Впервые решил заглянуть в подобный обзор, порадовала позиция количество закладок, интересено, после эти публикации читаются. Я подписан на автора, он пачками сохраняет статьи в закладки, какой процент он потом перечитывает из этого. Спасибо за обзор ))
Ссылка: https://habr.com/ru/articles/933806/comments/#comment_28742672
Каждый комментарий — отдельный блок, удобно читать и анализировать.
Я ожидал, что GPU будет обрабатывать тысячи комментариев в секунду, но реальность оказалась прагматичнее — CPU выдал скорость около 110 комментариев в секунду.
Этот опыт наглядно показал: локальный AI на процессоре — отличное решение для задач исследователя‑одиночки. Но если бы у меня был миллиард строк, этот подход бы провалился. Это инструмент для прототипирования и персональных проектов, а не для Big Data.
Заключение: главный урок для AI-энтузиастов
Эта история с видеокартой преподала мне два важных урока.
Во‑первых, самое новое оборудование — не всегда самое лучшее. Моя RTX 5060 Ti с передовой архитектурой Blackwell оказалась настолько свежей, что стабильный PyTorch просто не умел с ней работать. В погоне за технологиями легко обогнать экосистему и остаться с мощным, но бесполезным инструментом (я знаю про обходной путь). Иногда проверенная карта предыдущего поколения — более разумный выбор.
Во‑вторых, Docker — это не просто среда для запуска, а настоящая страховка. Он позволил мне безболезненно переключаться между конфигурациями и быстро откатиться на CPU, когда GPU подвёл. Именно изоляция в контейнере спасла проект, позволив проиграть «битву за CUDA», но всё равно выиграть войну.
В итоге, мой проект заработал не благодаря дорогой видеокарте, а вопреки ей. Процессор решил задачу быстрее, чем я успел допить чай. Это доказывает, что локальный AI — не удел облачных гигантов. Он вполне доступен на обычных ПК, если подходить к делу прагматично и помнить, что иногда самое простое решение — самое верное.
Автор: Михаил Шардин
? Моя онлайн-визитка
? Telegram «Умный Дом Инвестора»
7 октября 2025
Комментарии (6)
tuxi
07.10.2025 00:33Когда-то, еще до ковида, SAP Hana анализировала тональность текста (в том числе с оценкой уровня положительности/негатива) в моем пет-проекте практически онлайн, на лету получая комменты из твиттера через его API. А теперь нейросети надо прикручивать)))
empenoso Автор
07.10.2025 00:33Этот мини проект всё таки больше для того чтобы разобраться что это за зверь локальный AI - чем может быть полезным
sic
Задача изначально странно звучит. Вот есть обсуждаемая статья, 100+ комментариев. Пяток хвалит статью, пяток осуждает, а остальные 90+ обсуждение некоторой конкретики, которую, боюсь, что современными LLM (да что там ими, и своим мозгом тоже) сложно отнести к однозначному одобрению/критике.
empenoso Автор
Согласен, но мне надо было выделить именно "хвалебные"
muxa_ru
А как Вы отличали хвалебные комментарии, от "а ты молодец" в стиле "День радио", и от позитивных комментариев к предыдущим оффтопичным комментариям?
empenoso Автор
Первые два типа для меня одно и тоже.
В модели параметр настраивается.