AI-песочница · Демо 01

Анализ тональности
текста онлайн.

Вставьте отзыв или комментарий — модель определит тональность и покажет вклад каждого слова. Всё считает ваш браузер: текст никуда не отправляется, поэтому сюда можно вставлять и рабочие данные.

текст не покидает браузер без регистрации до 1000 отзывов пакетно
analiz-tonalnosti модель загрузится при первом вводе
// обрабатывается локально, за миллисекунды
Блок честности

Чего модель не умеет

Это линейная модель на мешке слов — сильная там, где тональность лежит на поверхности, и слепая там, где нужен контекст. Мы знаем её слабости, измерили их и показываем.

Противопоставление через «но»

Модель складывает вклады слов и не знает, что после «но» смысл важнее. На нашем контрольном наборе из 10 таких фраз она угадывает только 4.

«Курс сложный, но полезный» → нейтрально, хотя человек читает похвалу

Сарказм и ирония

«Ну спасибо, теперь всё окончательно сломалось» — для модели здесь есть «спасибо», и оно тянет вверх. Сарказм требует понимания ситуации, а не отдельных слов.

проверьте сами — кнопка справа подставит пример

Контекст и словоформы

Модель не помнит предыдущее предложение и видит «понравился» и «понравилась» как разные слова: мы сознательно отказались от лемматизации, чтобы токенизация в браузере совпадала с обучением символ в символ.

качество на отложенной выборке из 9000 отзывов: точность 74% · F1 = 0.74

Как это устроено

Никакой магии: TF-IDF и логистическая регрессия

  • Обучена на 90 000 русских отзывов о товарах с разметкой по тональности — датасет RuReviews, лицензия Apache-2.0.
  • Признаки — слова и биграммы: 19 000 термов, веса экспортированы в JSON и сжаты до 245 КБ.
  • Прямой проход — 60 строк JavaScript в вашем браузере, без серверов и очередей.
  • 200 golden-тестов сверяют Python и JS: расхождение вероятностей больше 10⁻⁶ роняет сборку.
train_sentiment.py
from sklearn.linear_model import LogisticRegression

vec = TfidfVectorizer(tokenizer=tokenize,
                      ngram_range=(1, 2))
# без лемм: токены совпадают с JS 1:1
clf = LogisticRegression(C=1.0).fit(X, y)

export_json(vec, clf, top_k=19000)
# → sentiment-weights.json · 245 КБ gzip
Для тех, кто хочет разобраться

Понять, почему так — и научиться делать лучше

На курсе строим такой же классификатор с нуля: от TF-IDF до production. И чиним всё, обо что он спотыкается выше.

Смотреть программу
Для бизнеса

То же самое на ваших данных — с сарказмом и историей

Прогнали свои отзывы и хотите точнее? Модель под вашу лексику, дообучение и интеграция — опишите задачу в брифе.