История о том, как я хотел провести анализ комментариев, а в итоге получил неожиданный, но полезный опыт с локальным AI.

LynxReport: учёт публикаций ? [Node.js] ✅

Недавно передо мной встала задача собрать все положительные комментарии к моим статьям. Веду их учёт в таблице, и там уже вполне серьёзные цифры — больше 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

https://github.com/empenoso/comment-sentiment-analyzer/

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

JSON Хабр
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-скрипта:

  1. sentiment_analysis_setup.sh: этот скрипт — для первоначальной настройки. Он проверяет систему, устанавливает Docker и NVIDIA Container Toolkit, создаёт необходимые папки и конфигурационный файл. Запустив его один раз, вы подготавливаете окружение для дальнейшей работы.

  2. 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)


  1. sic
    07.10.2025 00:33

    Задача изначально странно звучит. Вот есть обсуждаемая статья, 100+ комментариев. Пяток хвалит статью, пяток осуждает, а остальные 90+ обсуждение некоторой конкретики, которую, боюсь, что современными LLM (да что там ими, и своим мозгом тоже) сложно отнести к однозначному одобрению/критике.


    1. empenoso Автор
      07.10.2025 00:33

      Согласен, но мне надо было выделить именно "хвалебные"


      1. muxa_ru
        07.10.2025 00:33

        А как Вы отличали хвалебные комментарии, от "а ты молодец" в стиле "День радио", и от позитивных комментариев к предыдущим оффтопичным комментариям?


        1. empenoso Автор
          07.10.2025 00:33

          Первые два типа для меня одно и тоже.

          В модели параметр настраивается.


  1. tuxi
    07.10.2025 00:33

    Когда-то, еще до ковида, SAP Hana анализировала тональность текста (в том числе с оценкой уровня положительности/негатива) в моем пет-проекте практически онлайн, на лету получая комменты из твиттера через его API. А теперь нейросети надо прикручивать)))


    1. empenoso Автор
      07.10.2025 00:33

      Этот мини проект всё таки больше для того чтобы разобраться что это за зверь локальный AI - чем может быть полезным