Закажи экспресс-аудит своего дела онлайн всего за 199 ₽
и получи рекомендации по улучшению - Жми сюда !

Изучение векторных представлений слов для анализа настроения: воспроизведение на Python.

Как создать представления слов с учетом эмоциональной окраски отзывов на IMDb, используя семантическое обучение, звездные рейтинги и линейную классификацию SVM.

Делиться

8d5f1bdd9fab09f5827d606cf2c66d2e
Изображение сгенерировано с помощью ChatGPT

Мы автоматизировали анализ и разместили код на GitHub.

Идея для этой статьи пришла ко мне, когда я попытался воспроизвести работу Мааса и др. (2011) «Изучение векторных представлений слов для анализа настроений».

В то время я ещё учился на последнем курсе инженерного факультета. Цель заключалась в том, чтобы воспроизвести статью, подвергнуть сомнению методы авторов и, если возможно, сравнить их с другими способами представления слов, включая подходы, основанные на LLM.

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

Мне так понравилось читать эту статью, что я решил поделиться тем, что узнал из неё.

Настоятельно рекомендую прочитать оригинальную статью. Она поможет вам понять, что поставлено на карту в представлении слов, особенно как анализировать близость между двумя словами как с семантической точки зрения, так и с точки зрения эмоциональной полярности, учитывая конкретные контексты, в которых эти слова используются.

На первый взгляд, модель кажется простой: создать словарь, изучить векторные представления слов, учесть информацию об эмоциональной окраске текста и оценить результаты на основе отзывов IMDb.

Но когда я начал внедрять это, я понял, что несколько деталей имеют огромное значение: как строится словарь, как представляются векторные представления документов, как оптимизируется семантическая цель и как сигнал настроения вводится в векторные представления слов.

В этой статье мы воспроизведем основные идеи работы, используя Python.

Сначала мы объясним основную идею модели. Затем представим структуру данных, использованных в статье, построим словарь, реализуем семантический компонент, добавим целевую функцию для анализа тональности и, наконец, оценим полученные представления с помощью линейного SVM-классификатора.

Метод опорных векторов (SVM) позволит нам измерить точность классификации и сравнить наши результаты с результатами, представленными в статье.

Какую проблему решает эта статья?

Традиционные модели «мешка слов» полезны для классификации, но они не изучают осмысленные связи между словами. Например, слова «замечательный» и «удивительный» должны быть близки, потому что они выражают схожее значение и схожие чувства. С другой стороны, слова «замечательный» и «ужасный» могут встречаться в схожих контекстах рецензий на фильмы, но выражать противоположные чувства.

Цель данной работы — построить векторные представления слов, отражающие как семантическое сходство, так и эмоциональную окраску.

Структура данных

Набор данных содержит:

  • 25 000 помеченных обзоров или документов по обучению
  • 50 000 немаркированных отзывов об обучении
  • 25 000 размеченных обзоров тестов

Отзывы, помеченные как содержащие противоречивые мнения, отличаются поляризацией:

  • Отрицательные отзывы имеют оценки от 1 до 4.
  • Положительные отзывы имеют оценки от 7 до 10.

Рейтинги линейно отображаются в интервал [0, 1], что позволяет модели рассматривать настроение как непрерывную вероятность положительной полярности.

 aclImdb/ ├── train/ │ ├── pos/ "0_10.txt" -> review #0, 10 stars, very positive │ │ "1_7.txt" -> review #1, 7 stars, positive │ ├── neg/ "10_2.txt" -> review #10, 2 stars, very negative │ │ "25_4.txt" -> review #25, 4 stars, negative │ └── unsup/ "938_0.txt" -> review #938, 0 stars, unlabeled └── test/ ├── pos/ positive reviews, never seen during training └── neg/ negative reviews, never seen during training

Таким образом, мы можем хранить каждый документ в классе Review со следующими атрибутами: text , stars , label и bucket .

Конечно, это не обязательно должен быть класс с конкретным названием Review . Можно использовать любой объект, если он предоставляет хотя бы эти атрибуты.

 from dataclasses import dataclass from typing import Optional @dataclass class Review: text: str stars: int label: str bucket: str

построение словарного запаса

В данной работе фиксированный словарь формируется путем первоначального исключения 50 наиболее часто встречающихся терминов, а затем сохранения следующих 5000 наиболее часто встречающихся элементов.

Стемминг не применяется. Стандартное удаление стоп-слов не используется. Это важно, поскольку некоторые стоп-слова, особенно отрицания, могут нести в себе информацию о настроении.

Прежде чем формировать этот словарь, нам сначала нужно взглянуть на исходные данные.

Мы заметили, что отзывы не полностью очищены. Некоторые документы содержат HTML-теги, поэтому мы удаляем их на этапе загрузки данных. Мы также удаляем знаки препинания, прикрепленные к словам, такие как "." , "," , "!" или "?" .

Это небольшое отличие от оригинальной статьи. Авторы сохраняют некоторые несловесные токены, поскольку они могут помочь уловить эмоциональную окраску. Например, "!" или ":-)" могут передавать эмоциональную информацию. В нашей реализации мы решили удалить эти знаки препинания и позже оценим, насколько это решение влияет на итоговую производительность модели.

При работе с текстовыми данными следующий вопрос всегда один и тот же:

Как следует представлять документы и слова в числовом виде?

Авторы начинают с того, что собирают все токены из обучающего набора, включая как размеченные, так и неразмеченные отзывы. Можно представить это как сбор всех слов из обучающих документов в одну большую корзину.

Затем, чтобы представить слова в пространстве, где мы можем обучить модель, они создают набор слов, называемый словарем.

Авторы создают словарь, который сопоставляет каждый токен (который мы будем условно называть словом) с его частотой. Эта частота — просто количество раз, когда токен встречается в полном обучающем наборе данных, включая как размеченные, так и неразмеченные отзывы.

Затем они отбирают 5000 наиболее часто встречающихся слов, предварительно удалив 50 наиболее часто встречающихся терминов.

Эти 5000 слов образуют словарный запас V.

Каждое слово в V будет соответствовать одному столбцу матрицы представления R. Авторы решили представлять каждое слово в 50-мерном пространстве. Следовательно, матрица R имеет следующую форму:

R∈ℝβ=50×|V|=5000R in mathbb{R}^{beta = 50times |V| = 5000}

Каждый столбец матрицы R представляет собой векторное представление одного слова: ϕw = Rw phi_w = Rw

Цель модели — обучить матрицу R таким образом, чтобы векторные представления слов одновременно отражали две вещи:

  • Семантическая информация, то есть слова, используемые в схожих контекстах, должны быть близки по значению;
  • Информация об эмоциональном состоянии, то есть слова со схожей полярностью, также должны быть близки по смыслу.

Это главная идея данной работы.

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

Первая часть модели является неконтролируемой. Она обучается семантическим представлениям слов как на основе размеченных, так и неразмеченных отзывов.

Затем, во второй части добавляется контроль, используя звездные рейтинги для внесения эмоциональной окраски в то же векторное пространство.

Семантический компонент

Семантический компонент определяет вероятностную модель документа.

Каждому документу соответствует скрытый вектор тета. Этот вектор представляет собой семантическое направление документа.

Каждое слово имеет векторное представление ϕw phi_w, хранящееся в виде столбца матрицы R.

Вероятность обнаружения слова w в документе определяется моделью softmax:

p(w|θ;R,b)=exp⁡(θ⊤ϕw+bw)∑w′∈Vexp⁡(θ⊤ϕw′+bw′)p(w mid theta; R, b) = frac{exp(theta^top phi_w + b_w)}{sum_{w' in V} exp(theta^top phi_{w'} + b_{w'})}

Интуитивно понятно, что слово становится вероятным, когда его вектор ϕwphi_w хорошо совпадает с вектором theta документа.

Оценка MAP тета

Модель чередует два этапа.

Во-первых, он фиксирует R и b и оценивает один вектор тета для каждого документа.

Затем программа исправляет значение тета и обновляет значения R и b.

Векторы тета не сохраняются в качестве конечных параметров. Это временные переменные, специфичные для документа, используемые для обновления представлений слов.

Для оценки параметров модели авторы используют метод максимального правдоподобия.

Идея проста: мы хотим найти параметры R и b, которые делают наблюдаемые документы максимально вероятными в рамках модели.

Исходя из вероятностной формулировки документа, они вводят оценку MAP θ̂ₖ для каждого документа dₖ. Затем, взяв логарифм функции правдоподобия и добавив члены регуляризации, они получают целевую функцию, используемую для обучения матрицы представления слов R и вектора смещения b:

? sum_{i=1}^{N_k} log p(w_i mid hat{theta}_k; R, b)

который максимизируется относительно R и b. Гиперпараметрами модели являются веса регуляризации (λ и ν) и размерность векторного представления слова β.

На этом этапе мы изучаем матрицу семантического представления. Эта матрица отражает взаимосвязь слов в зависимости от контекста, в котором они встречаются.

Компонент настроения

Семантическая модель сама по себе может научиться распознавать слова в схожих контекстах. Но этого недостаточно для определения эмоциональной окраски слов.

Например, в кинорецензиях могут встречаться как слова «прекрасно», так и слова «ужасно», но они выражают противоположные мнения.

Для решения этой проблемы в статье добавлена ​​функция оценки тональности текста с обучением под наблюдением:

p(s=1|w;R,ψ)=σ(ψ⊤ϕw+bc)p(s = 1 mid w; R, psi) = sigma(psi^top phi_w + b_c)

Вектор ψ определяет направление эмоциональной окраски слов в векторном пространстве слов. Здесь используются только размеченные данные.

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

Они объединили целевую задачу, связанную с анализом настроений, и часть, касающуюся анализа настроений, чтобы сформировать итоговую и полную целевую модель обучения:

ν‖R‖F2+∑k=1|D|λ‖θ^k‖22+∑i=1Nklog⁡P(wi|θ^k;R,b)+∑k=1|D|1|Sk|∑i=1Nklog⁡P(sk|wi;R,ψ,bc)begin{aligned} nu |R|_F^2 &+ sum_{k=1}^{|D|} lambda |hat{theta}_k|_2^2 + sum_{i=1}^{N_k} log P(w_i mid hat{theta}_k; R, b) \ &+ sum_{k=1}^{|D|} frac{1}{|S_k|} sum_{i=1}^{N_k} log P(s_k mid w_i; R, psi, b_c) end{aligned}

Первая часть обучается семантическому сходству. Вторая часть добавляет информацию о настроении. Регуляризационные члены предотвращают чрезмерное увеличение векторов.

|SkS_k| обозначает количество документов в наборе данных с одинаковым округленным значением sks_k. Весовой коэффициент 1|Sk|frac{1}{|S_k|} введен для борьбы с известным дисбалансом оценок, присутствующим в коллекциях отзывов.

Классификация и результаты

После того как матрица представления слов R будет обучена, мы можем использовать ее для построения признаков на уровне документа.

Теперь задача состоит в том, чтобы классифицировать каждый отзыв о фильме как положительный или отрицательный.

Для этого авторы обучают линейный SVM на 25 000 размеченных обучающих отзывах и оценивают его на 25 000 размеченных тестовых отзывах.

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

Чтобы ответить на этот вопрос, мы оцениваем несколько вариантов представления документов и сравниваем их с результатами, представленными в таблице 2 статьи.

Единственное отличие между различными конфигурациями заключается в способе представления каждого отзыва перед передачей его классификатору.

1. Базовый уровень модели «мешок слов»

Первое представление — это стандартный «мешок слов». В статье этот базовый вариант обозначается как «мешок слов» (bnc) . Обозначение означает:

  • b = бинарное взвешивание
  • n = без взвешивания IDF
  • c = нормализация косинуса

Обзор или документ представляется вектором v размером 5000, поскольку словарь содержит 5000 слов.

Для каждого слова j в словаре:

νj={1, если слово j встречается в обзоре; 0, в противном случаеnu_j = begin{cases} 1 & text{если слово } j text{ встречается в обзоре} \ 0 & text{в противном случае} end{cases}

Таким образом, это представление фиксирует только то, встречается ли слово хотя бы один раз. Оно не подсчитывает, сколько раз оно встречается.

Затем вектор нормализуется с помощью своей евклидовой нормы:

νbnc=ν‖ν‖2nu_{bnc} = frac{nu}{|nu|_2}

Это дает базовый уровень модели «мешок слов», используемый для обучения SVM.

Этот базовый уровень является надежным, поскольку классификация настроений часто опирается на прямые лексические подсказки. Такие слова, как excellent , boring , awful или great , уже несут в себе полезную информацию о настроении.

2. Семантическое векторное представление слов

Во втором представлении используются векторные представления слов, полученные с помощью модели, учитывающей только семантику.

Сначала авторы представляют документ в виде вектора v, полученного с помощью алгоритма «мешка слов». Затем они вычисляют плотное представление документа, умножая этот вектор на полученную матрицу:

zsemantic=Rsemantic×νz_{text{semantic}} = R_{text{semantic}} times nu

Где Rsemantic∈ℝ50×5000, ν∈ℝ5000⟹zsemantic∈ℝ50R_{text{semantic}} in mathbb{R}^{50 times 5000}, nu in mathbb{R}^{5000} quadimpliesquad z_{text{semantic}} in mathbb{R}^{50}

Этот вектор можно интерпретировать как взвешенную комбинацию векторных представлений слов, встречающихся в обзоре.

В статье при генерации признаков документа с помощью произведения Rv авторы используют взвешивание bnn для v. Это означает:

  • b = бинарное взвешивание
  • n = без взвешивания IDF
  • n = отсутствие нормализации косинуса перед проекцией

Затем, после вычисления Rv, они применяют косинусную нормализацию к итоговому плотному вектору.

Таким образом, окончательное представление выглядит следующим образом:

z‾semantic=Rsemanticν‖Rsemanticν‖2bar{z}_{text{semantic}} = frac{R_{text{semantic}} nu}{| R_{text{semantic}} nu |_2}

В данном представлении используется семантическая информация, полученная в ходе обучающих исследований, включая как размеченные, так и неразмеченные документы.

3. Полное семантическое и эмоциональное представление

Третье представление построено по тому же принципу, но использует полную матрицу Rfull.

Эта матрица обучается с использованием обоих компонентов модели:

  • семантическая цель, которая изучает контекстное сходство между словами;
  • Объективный показатель настроения, который учитывает информацию о полярности, полученную из звездных рейтингов.

Для каждого документа мы вычисляем:

zfull=Rfullνz_{text{full}} = R_{text{full}} nu

Затем мы проводим нормализацию:

z‾full=Rfullν‖Rfullν‖2bar{z}_{text{full}} = frac{R_{text{full}} nu}{| R_{text{full}} nu |_2}

Интуитивно понятно, что RfullR_{full} должен создавать характеристики документа, которые отражают как суть отзыва, так и то, является ли формулировка положительной или отрицательной.

Основной вклад данной работы заключается в следующем: обучение векторным представлениям слов, сочетающим семантическое сходство и эмоциональную окраску.

4. Полное представление + Мешок слов

Итоговая конфигурация объединяет полученное плотное представление с исходным представлением «мешка слов».

Мы объединяем два представления, чтобы получить:

x=[z‾full‖νbnc]x = left[ bar{z}_{text{full}} ;middle|; nu_{bnc} right]

Это дает классификатору два взаимодополняющих источника информации:

  • плотное 50-мерное представление, усвоенное моделью;
  • Разреженное лексическое представление, сохраняющее точную информацию о наличии слова.

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

Например, плотное представление может научиться различать слова wonderful и amazing , в то время как представление в виде мешка слов сохраняет точное наличие каждого слова.

Затем мы обучаем линейный SVM на размеченном обучающем наборе данных и оцениваем его на тестовом наборе данных.

Это позволяет нам ответить на два вопроса.

Во-первых, улучшают ли полученные векторные представления слов классификацию тональности?

Во-вторых, помогает ли добавление информации о настроении к векторным представлениям слов помимо одной лишь семантической информации?

Реализация на Python

Мы реализуем модель в пять этапов:

  1. Загрузите и очистите набор данных IMDb.
  2. Расширьте словарный запас.
  3. Обучите семантический компонент
  4. Обучите полную семантическую модель + модель анализа настроения.
  5. Оцените полученные представления с помощью SVM.

В таблице ниже показаны ближайшие соседи выбранных целевых слов в обученном векторном пространстве.

8a5e9a8af9e02d5070946fb34c59f159

Для каждого целевого слова мы указываем пять наиболее похожих слов согласно косинусному сходству. Полная модель, которая объединяет семантическую и эмоциональную цели, как правило, находит слова, близкие как по значению, так и по эмоциональной окраске. Модель, учитывающая только семантику, фиксирует контекстное и лексическое сходство, но не использует явно эмоциональные метки во время обучения.

В таблице ниже сравниваются наши результаты с результатами, представленными в статье. Для каждого представления мы обучаем линейный SVM на размеченных обучающих отзывах и сообщаем точность классификации на тестовом наборе. Это позволяет нам оценить, насколько хорошо каждое представление документа справляется с задачей классификации тональности IMDb.

f1c461cd0d547dc80e29c59bb3ad3e27
Наш сравнительный анализ результатов.

Полная модель очень близка к результату, представленному в статье. Это говорит о том, что целевая функция анализа настроений реализована корректно.

Наибольший разрыв наблюдается в модели, основанной исключительно на семантике. Это может быть связано с деталями оптимизации, предварительной обработкой или способом построения признаков на уровне документа для классификации.

Заключение

В данной статье мы воспроизвели основные компоненты модели, предложенной Маасом и др. (2011).

Мы реализовали семантическую целевую функцию, добавили целевую функцию анализа тональности и оценили полученные векторные представления слов на примере классификации тональности по данным IMDb.

Модель демонстрирует, как неразмеченные данные могут помочь в изучении семантической структуры, в то время как размеченные данные могут вносить информацию об эмоциональном состоянии в то же векторное пространство.

Это простая, но мощная идея: векторные представления слов должны не только отражать их значение, но и эмоциональную окраску.

Хотя в этом посте не рассматриваются все детали статьи, мы настоятельно рекомендуем ознакомиться с оригинальной работой авторов. Наша цель заключалась в том, чтобы поделиться идеями, которые нас вдохновили, и тем удовольствием, которое мы получили как от чтения статьи, так и от написания этого поста.

Мы надеемся, что вам это понравится так же, как и нам.

Источник изображений

Все изображения и визуализации в этой статье были созданы автором с использованием Python (pandas, matplotlib, seaborn и plotly) и Excel, если не указано иное.

Ссылки

[1] 𝗔𝗻𝗱𝗿𝗲𝘄 𝗟. 𝗠𝗮𝗮𝘀, 𝗥𝗮𝘆𝗺𝗼𝗻𝗱 𝗘. 𝗗𝗮𝗹𝘆, 𝗣𝗲𝘁𝗲𝗿 𝗧. 𝗣𝗵𝗮𝗺, 𝗗𝗮𝗻 𝗛𝘂𝗮𝗻𝗴, ​​𝗔𝗻𝗱𝗿𝗲𝘄 𝗬. 𝗡𝗴, 𝗮𝗻𝗱 𝗖𝗵𝗿𝗶𝘀𝘁𝗼𝗽𝗵𝗲𝗿 𝗣𝗼𝘁𝘁𝘀. 2011. Learning Word Vectors for Sentiment Analysis. In Proceedings of the 49th Annual Meeting of the Association for Computational Linguistics: Human Language Technologies, pages 142–150, Portland, Oregon, USA. Association for Computational Linguistics.

Набор данных: Большой набор данных отзывов о фильмах IMDb (CC BY 4.0).

JUNIOR JUMBONG Посмотреть все товары от JUNIOR JUMBONG

Источник: towardsdatascience.com

✅ Найденные теги: Анализа, Векторных, изучение, новости, Представлений, Слов

Добавить комментарий

Нет других записей в этой рубрике.

Новости других рубрик

Архив рубрики ~Обо всем~: Это мои любимые гаджеты для создания уютной атмосферы в доме, и все они сейчас продаются со скидкой. Архив рубрики ~Обо всем~: Лучшие телевизоры 2026 года: тестирование и обзоры экспертов. Архив рубрики ~Обо всем~: Переход к эффективным токенам: решение проблемы агентского сжигания токенов Архив рубрики ~Обо всем~: Обзор Ultrahuman Ring Pro: будущее умных колец очень похоже на настоящее. Архив рубрики ~Обо всем~: 5 аксессуаров для iPad, о покупке которых я никогда не пожалею (включая альтернативу Apple Pencil за 35 долларов) Архив рубрики ~Обо всем~: Sony выплатит 7,85 млн долларов в виде подарочных сертификатов для PlayStation Store в рамках урегулирования спора по поводу игровых ваучеров. Архив рубрики ~Обо всем~: Гибридный ИИ: сочетание детерминированного анализа с логическим мышлением на основе логики LLM. Архив рубрики ~Обо всем~: Компания Ayaneo анонсировала очередной ремейк для Game Boy, но на этот раз с искусственным интеллектом.