-
Notifications
You must be signed in to change notification settings - Fork 0
SentiWordNet
SentiWordNet — это автоматическая система для присвоения словам из WordNet трех числовых оценок: Pos (позитивность), Neg (негативность) и Obj (нейтральность). Алгоритм состоит из двух основных этапов:
-
Полуавтоматическое обучение (semi-supervised learning) — создание начальных оценок на основе глосс (определений) WordNet.
-
Random-Walk — уточнение оценок через анализ семантических связей между словами.
Алгоритм начинается с небольшого набора "эталонных" слов (seed terms):
-
Положительные: nice, good, great (14 слов).
-
Отрицательные: nasty, bad, terrible (14 слов).
Эти слова вручную размечаются в WordNet, учитывая их разные значения (synsets). Например:
-
estimable (значение 1) = "заслуживающий уважения" → Pos = 0.75, Obj = 0.25.
-
estimable (значение 3) = "может быть вычислен" → Obj = 1.0.
Чтобы охватить больше слов, алгоритм автоматически расширяет начальный набор, используя семантические связи WordNet:
-
Синонимы, антонимы, also-see, pertains-to и др.
-
Если слово связано с положительным синонимом → оно тоже считается положительным.
-
Если связано с антонимом (например, good ↔ bad) → его оценка инвертируется.
Этот процесс повторяется итеративно (K = 0, 2, 4, 6 шагов), чтобы получить разные варианты обучающих данных.
Каждый synset в WordNet имеет глоссу (определение), например:
"estimable (3): may be computed or estimated"
Алгоритм преобразует глоссу в числовой вектор (TF-IDF + удаление стоп-слов), чтобы классифицировать её тональность.
Используются два алгоритма машинного обучения:
-
Rocchio (ближайшие соседи).
-
SVM (Support Vector Machines).
Каждый алгоритм обучается на разных вариантах обучающих данных (из шага 1.2), создавая 8 классификаторов.
Каждый synset проходит через все 8 классификаторов, и итоговые оценки усредняются:
-
Если все классификаторы согласны, что слово Pos → оно получает Pos = 1.0.
-
Если мнения разделились (например, 4 говорят Pos, 4 — Obj) → Pos = 0.5, Obj = 0.5.
После полуавтоматического обучения оценки могут быть неточными, поэтому применяется графовый алгоритм Random-Walk.
-
Узлы = synset.
-
Рёбра = связи между словами (например, если слово A используется в определении слова B, проводится ребро A → B).
Идея: Если слово определяется через позитивные термины → оно тоже позитивное.
Алгоритм работает так:
-
Каждому synset присваиваются начальные оценки из полуавтоматического этапа.
-
На каждом шаге Pos/Neg "перетекают" по рёбрам графа:
Если слово B определяется через A, и A имеет Pos = 0.8 → B получает часть этой оценки.
- Процесс повторяется до сходимости (оценки перестают сильно меняться).
После Random-Walk значения могут быть слишком малы, поэтому применяется коррекция:
-
Используется степенная функция: F(x) = a * x^b.
-
Пример: Synset с изначальным Pos = 0.001 после коррекции может стать Pos = 0.3.
-
Obj = 1.0 - (Pos + Neg).
-
Если Pos + Neg > 1.0 (редко), значения нормализуются.